aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJoel Bodenmann <joel@seriouslyembedded.com>2015-08-13 01:13:36 +0200
committerJoel Bodenmann <joel@seriouslyembedded.com>2015-08-13 01:13:36 +0200
commit3ba3be201cddf3c6a4606f49028fc6640da0b28e (patch)
treed1b4e580a0ca258516da026c1d6966561d751dce /src
parent37a088efb73e119a6675241394926cdb47c11ab2 (diff)
downloaduGFX-3ba3be201cddf3c6a4606f49028fc6640da0b28e.tar.gz
uGFX-3ba3be201cddf3c6a4606f49028fc6640da0b28e.tar.bz2
uGFX-3ba3be201cddf3c6a4606f49028fc6640da0b28e.zip
Adding gwinSetFocus() and gwinGetFocus()
Diffstat (limited to 'src')
-rw-r--r--src/gwin/gwin.h25
-rw-r--r--src/gwin/gwin_wm.c23
2 files changed, 47 insertions, 1 deletions
diff --git a/src/gwin/gwin.h b/src/gwin/gwin.h
index 4a7d02bf..329be4c4 100644
--- a/src/gwin/gwin.h
+++ b/src/gwin/gwin.h
@@ -548,6 +548,31 @@ extern "C" {
GHandle gwinGetNextWindow(GHandle gh);
/**
+ * @brief Set the focus to a specific widget
+ *
+ * @details The widget that is currently in focus is the widget that
+ * receives mouse and keyboard events.
+ * Passing NULL will remove the focus from any widget.
+ *
+ * @param[in] gh The widget handle. Non-widget handles will be ignored.
+ *
+ * @api
+ */
+ void gwinSetFocus(GHandle gh);
+
+ /**
+ * @brief Get the widget that is currently in focus
+ *
+ * @details The widget that is currently in focus is the widget that
+ * receives mouse and keyboard events.
+ *
+ * @return The handle of the widget that is currently in focus. May be NULL.
+ *
+ * @api
+ */
+ GHandle gwinGetFocus(void);
+
+ /**
* @brief Set a window or widget to flash
*
* @param[in] gh The window handle
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;