X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fmenu%2Fitem%2Finputcontainer.qc;h=8e7f24f73d55dc128a109bbecc959113e5dad464;hp=8c09d1991be2a474eaa0e331918fce0ff3698307;hb=a8a845350f16ddf8c2b1a71e79abb7066741403c;hpb=244e5081c5c503c307e557c98ac864f6c9731475 diff --git a/qcsrc/menu/item/inputcontainer.qc b/qcsrc/menu/item/inputcontainer.qc index 8c09d1991..8e7f24f73 100644 --- a/qcsrc/menu/item/inputcontainer.qc +++ b/qcsrc/menu/item/inputcontainer.qc @@ -1,14 +1,16 @@ -#ifdef INTERFACE -CLASS(InputContainer) EXTENDS(Container) - METHOD(InputContainer, keyDown, float(entity, float, float, float)) - METHOD(InputContainer, mouseMove, float(entity, vector)) - METHOD(InputContainer, mousePress, float(entity, vector)) - METHOD(InputContainer, mouseRelease, float(entity, vector)) - METHOD(InputContainer, mouseDrag, float(entity, vector)) - METHOD(InputContainer, focusLeave, void(entity)) - METHOD(InputContainer, resizeNotify, void(entity, vector, vector, vector, vector)) +#ifndef ITEM_INPUTCONTAINER_H +#define ITEM_INPUTCONTAINER_H +#include "container.qc" +CLASS(InputContainer, Container) + METHOD(InputContainer, keyDown, float(entity, float, float, float)); + METHOD(InputContainer, mouseMove, float(entity, vector)); + METHOD(InputContainer, mousePress, float(entity, vector)); + METHOD(InputContainer, mouseRelease, float(entity, vector)); + METHOD(InputContainer, mouseDrag, float(entity, vector)); + METHOD(InputContainer, focusLeave, void(entity)); + METHOD(InputContainer, resizeNotify, void(entity, vector, vector, vector, vector)); - METHOD(InputContainer, _changeFocusXY, float(entity, vector)) + METHOD(InputContainer, _changeFocusXY, bool(entity this, vector pos)); ATTRIB(InputContainer, mouseFocusedChild, entity, NULL) ATTRIB(InputContainer, isTabRoot, float, 0) ENDCLASS(InputContainer) @@ -102,26 +104,21 @@ float InputContainer_keyDown(entity me, float scan, float ascii, float shift) return 0; } -float InputContainer__changeFocusXY(entity me, vector pos) +bool InputContainer__changeFocusXY(entity this, vector pos) { - entity e, ne; - e = me.mouseFocusedChild; - ne = me.itemFromPoint(me, pos); - if(ne) - if (!ne.focusable) - ne = NULL; - me.mouseFocusedChild = ne; - if(ne) - if(ne != e) - { - me.setFocus(me, ne); - if(ne.instanceOfInputContainer) - { - ne.focusedChild = NULL; - ne._changeFocusXY(e, globalToBox(pos, ne.Container_origin, ne.Container_size)); - } + entity e = this.itemFromPoint(this, pos); + if (e && !e.focusable) e = NULL; + entity prev = this.mouseFocusedChild; + this.mouseFocusedChild = e; + if (!e) return false; // keep focus when hovering over non-focusable elements + if (e != prev) { + this.setFocus(this, e); + if (e.instanceOfInputContainer) { + e.focusedChild = NULL; + e._changeFocusXY(e, globalToBox(pos, e.Container_origin, e.Container_size)); } - return (ne != NULL); + } + return true; // have focus } float InputContainer_mouseDrag(entity me, vector pos)