diff options
Diffstat (limited to 'src/gwin/gwin_wm.c')
| -rw-r--r-- | src/gwin/gwin_wm.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/gwin/gwin_wm.c b/src/gwin/gwin_wm.c index 00365c36..52f7a1aa 100644 --- a/src/gwin/gwin_wm.c +++ b/src/gwin/gwin_wm.c @@ -162,7 +162,7 @@ extern const GWindowManager GNullWindowManager; GWindowManager * _GWINwm; bool_t _gwinFlashState; - +static GHandle _widgetInFocus; static gfxSem gwinsem; static gfxQueueASync _GWINList; #if GWIN_NEED_FLASHING @@ -184,6 +184,8 @@ static volatile uint8_t RedrawPending; void _gwmInit(void) { + _widgetInFocus = 0; + gfxSemInit(&gwinsem, 1, 1); gfxQueueASyncInit(&_GWINList); #if GWIN_NEED_FLASHING @@ -571,6 +573,25 @@ GHandle gwinGetNextWindow(GHandle gh) { return gh ? (GHandle)gfxQueueASyncNext(&gh->wmq) : (GHandle)gfxQueueASyncPeek(&_GWINList); } +void gwinSetFocus(GHandle gh) { + // Passing NULL removes the focus from any widget + if (gh == 0) { + _widgetInFocus = 0; + return; + } + + // Only accept widgets + if (!gwinIsWidget(gh)) { + return; + } + + _widgetInFocus = gh; +} + +GHandle gwinGetFocus(void) { + return _widgetInFocus; +} + #if GWIN_NEED_FLASHING static void FlashTimerFn(void *param) { GHandle gh; |
