aboutsummaryrefslogtreecommitdiffstats
path: root/src/gwin
diff options
context:
space:
mode:
authorMatt Brejza <mbrejza@gmail.com>2016-06-25 17:15:57 +0100
committerMatt Brejza <mbrejza@gmail.com>2016-06-25 17:15:57 +0100
commit47e0a0372139486a8e92ca65dce2c94b6230ec9c (patch)
tree145c38018b9c6d6b1baadb0d807834d2fc95f441 /src/gwin
parentbb7f100804f7f2f76fe7579dc952a6fe8fbd3d04 (diff)
downloaduGFX-47e0a0372139486a8e92ca65dce2c94b6230ec9c.tar.gz
uGFX-47e0a0372139486a8e92ca65dce2c94b6230ec9c.tar.bz2
uGFX-47e0a0372139486a8e92ca65dce2c94b6230ec9c.zip
Enhancing toggle support for widgets
Diffstat (limited to 'src/gwin')
-rw-r--r--src/gwin/gwin_widget.c28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/gwin/gwin_widget.c b/src/gwin/gwin_widget.c
index 2c186316..2965e7c6 100644
--- a/src/gwin/gwin_widget.c
+++ b/src/gwin/gwin_widget.c
@@ -365,8 +365,9 @@ void _gwidgetInit(void)
{
geventListenerInit(&gl);
geventRegisterCallback(&gl, gwidgetEvent, 0);
- geventAttachSource(&gl, ginputGetMouse(GMOUSE_ALL_INSTANCES), GLISTEN_MOUSEMETA|GLISTEN_MOUSEDOWNMOVES);
-
+ #if GINPUT_NEED_MOUSE
+ geventAttachSource(&gl, ginputGetMouse(GMOUSE_ALL_INSTANCES), GLISTEN_MOUSEMETA|GLISTEN_MOUSEDOWNMOVES);
+ #endif
#if GINPUT_NEED_KEYBOARD || GWIN_NEED_KEYBOARD
geventAttachSource(&gl, ginputGetKeyboard(GKEYBOARD_ALL_INSTANCES), GLISTEN_KEYUP);
#endif
@@ -616,6 +617,29 @@ bool_t gwinAttachListener(GListener *pl) {
wvmt->ToggleAssign(gw, role, instance);
return geventAttachSource(&gl, gsh, GLISTEN_TOGGLE_ON|GLISTEN_TOGGLE_OFF);
}
+
+ bool_t gwinDetachToggle(GHandle gh, uint16_t role) {
+ uint16_t oi;
+
+ // Is this a widget
+ if (!(gh->flags & GWIN_FLG_WIDGET))
+ return FALSE;
+
+ // Is the role valid
+ if (role >= ((gwidgetVMT *)gh->vmt)->toggleroles)
+ return FALSE;
+
+ oi = ((gwidgetVMT *)gh->vmt)->ToggleGet(gw, role);
+
+ // Remove the instance
+ if (oi != GWIDGET_NO_INSTANCE) {
+ ((gwidgetVMT *)gh->vmt)->ToggleAssign(gw, role, GWIDGET_NO_INSTANCE);
+ if (!FindToggleUser(oi))
+ geventDetachSource(&gl, ginputGetToggle(oi));
+ }
+ return TRUE;
+ }
+
#endif
#if GFX_USE_GINPUT && GINPUT_NEED_DIAL