bool_t gwinAttachDial(GHandle gh, uint16_t role, uint16_t instance) { GSourceHandle gsh; uint16_t oi; if (!(gh->flags & GWIN_FLG_WIDGET)) return FALSE; // Is the role valid if (role >= wvmt->dialroles) return FALSE; // Is this a valid device if (!(gsh = ginputGetDial(instance))) return FALSE; // Is this already done? oi = wvmt->DialGet(gw, role); if (instance == oi) return TRUE; // Remove the old instance if (oi != GWIDGET_NO_INSTANCE) { wvmt->DialAssign(gw, role, GWIDGET_NO_INSTANCE); if (!FindDialUser(oi)) geventDetachSource(&gl, ginputGetDial(oi)); } // Assign the new wvmt->DialAssign(gw, role, instance); return geventAttachSource(&gl, gsh, 0); }
bool_t gwinAttachToggle(GHandle gh, uint16_t role, uint16_t instance) { GSourceHandle gsh; uint16_t oi; // Is this a widget if (!(gh->flags & GWIN_FLG_WIDGET)) return FALSE; // Is the role valid if (role >= wvmt->toggleroles) return FALSE; // Is this a valid device if (!(gsh = ginputGetToggle(instance))) return FALSE; // Is this already done? oi = wvmt->ToggleGet(gw, role); if (instance == oi) return TRUE; // Remove the old instance if (oi != GWIDGET_NO_INSTANCE) { wvmt->ToggleAssign(gw, role, GWIDGET_NO_INSTANCE); if (!FindToggleUser(oi)) geventDetachSource(&gl, ginputGetToggle(oi)); } // Assign the new wvmt->ToggleAssign(gw, role, instance); return geventAttachSource(&gl, gsh, GLISTEN_TOGGLE_ON|GLISTEN_TOGGLE_OFF); }
static void _frameDestroy(GHandle gh) { /* Deregister the button callback */ geventRegisterCallback(&gh2obj->gl, NULL, NULL); geventDetachSource(&gh2obj->gl, NULL); /* call the gcontainer standard destroy routine */ _gcontainerDestroy(gh); }
void _gwidgetDestroy(GHandle gh) { #if GFX_USE_GINPUT && (GINPUT_NEED_TOGGLE || GINPUT_NEED_DIAL) uint16_t role, instance; #endif // Make the window is invisible so it is not eligible for focus gh->flags &= ~GWIN_FLG_VISIBLE; _gwinFixFocus(gh); // Deallocate the text (if necessary) if ((gh->flags & GWIN_FLG_ALLOCTXT)) { gh->flags &= ~GWIN_FLG_ALLOCTXT; gfxFree((void *)gw->text); } #if GFX_USE_GINPUT && GINPUT_NEED_TOGGLE // Detach any toggles from this object for(role = 0; role < wvmt->toggleroles; role++) { instance = wvmt->ToggleGet(gw, role); if (instance != GWIDGET_NO_INSTANCE) { wvmt->ToggleAssign(gw, role, GWIDGET_NO_INSTANCE); if (!FindToggleUser(instance)) geventDetachSource(&gl, ginputGetToggle(instance)); } } #endif #if GFX_USE_GINPUT && GINPUT_NEED_DIAL // Detach any dials from this object for(role = 0; role < wvmt->dialroles; role++) { instance = wvmt->DialGet(gw, role); if (instance != GWIDGET_NO_INSTANCE) { wvmt->DialAssign(gw, role, GWIDGET_NO_INSTANCE); if (!FindDialUser(instance)) geventDetachSource(&gl, ginputGetDial(instance)); } } #endif // Remove any listeners on this object. geventDetachSourceListeners((GSourceHandle)gh); }