]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/menu/item/inputcontainer.qc
Use a list for switching between game settings
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / item / inputcontainer.qc
index 90ca719dce9e25326e54a700df5799f7a5a83189..8e7f24f73d55dc128a109bbecc959113e5dad464 100644 (file)
@@ -2,15 +2,15 @@
 #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, 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)
@@ -104,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)