diff options
author | Matt Brejza <mbrejza@gmail.com> | 2016-06-25 17:15:57 +0100 |
---|---|---|
committer | Matt Brejza <mbrejza@gmail.com> | 2016-06-25 17:15:57 +0100 |
commit | 47e0a0372139486a8e92ca65dce2c94b6230ec9c (patch) | |
tree | 145c38018b9c6d6b1baadb0d807834d2fc95f441 | |
parent | bb7f100804f7f2f76fe7579dc952a6fe8fbd3d04 (diff) | |
download | uGFX-47e0a0372139486a8e92ca65dce2c94b6230ec9c.tar.gz uGFX-47e0a0372139486a8e92ca65dce2c94b6230ec9c.tar.bz2 uGFX-47e0a0372139486a8e92ca65dce2c94b6230ec9c.zip |
Enhancing toggle support for widgets
-rw-r--r-- | src/gwin/gwin_widget.c | 28 |
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 |