From daa47fce528aa2dc5eb2c089ac106c744c91a8bb Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Tue, 31 Jul 2012 21:49:01 +0100 Subject: Use setter when giving clicked input focus. --- framebuffer/fbtk/event.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framebuffer/fbtk/event.c b/framebuffer/fbtk/event.c index 0c68912c7..570c82929 100644 --- a/framebuffer/fbtk/event.c +++ b/framebuffer/fbtk/event.c @@ -79,7 +79,7 @@ fbtk_click(fbtk_widget_t *widget, nsfb_event_t *event) return; if (fbtk_get_handler(clicked, FBTK_CBT_INPUT) != NULL) { - root->u.root.input = clicked; + fbtk_set_focus(clicked); } x = fbtk_get_absx(clicked); -- cgit v1.2.3 From 72cb5b6ea47986acab5ec2bc0463db31b9330237 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Tue, 31 Jul 2012 22:14:48 +0100 Subject: Add widget callback for getting stripped of focus. Call it in the input setter, on previous input holder. --- framebuffer/fbtk.h | 1 + framebuffer/fbtk/fbtk.c | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/framebuffer/fbtk.h b/framebuffer/fbtk.h index a3f01557a..f2b09e51f 100644 --- a/framebuffer/fbtk.h +++ b/framebuffer/fbtk.h @@ -48,6 +48,7 @@ typedef enum fbtk_callback_type { FBTK_CBT_REDRAW, FBTK_CBT_DESTROY, FBTK_CBT_USER, + FBTK_CBT_STRIP_FOCUS, FBTK_CBT_END, } fbtk_callback_type; diff --git a/framebuffer/fbtk/fbtk.c b/framebuffer/fbtk/fbtk.c index d333d20ff..b29fe9fb1 100644 --- a/framebuffer/fbtk/fbtk.c +++ b/framebuffer/fbtk/fbtk.c @@ -729,6 +729,9 @@ fbtk_post_callback(fbtk_widget_t *widget, fbtk_callback_type cbt, ...) case FBTK_CBT_USER: break; + case FBTK_CBT_STRIP_FOCUS: + break; + default: break; } @@ -749,6 +752,13 @@ fbtk_set_focus(fbtk_widget_t *widget) /* ensure we have the root widget */ root = fbtk_get_root_widget(widget); + if (root->u.root.input != NULL && + root->u.root.input != widget) { + /* inform previous holder of focus that it's being stripped + * of focus */ + fbtk_post_callback(root->u.root.input, FBTK_CBT_STRIP_FOCUS); + } + root->u.root.input = widget; } -- cgit v1.2.3 From 9505fdcf849433d4cb08b4e9a340c3ab73f53e6a Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Tue, 31 Jul 2012 22:16:06 +0100 Subject: Make browser window widget remove caret on "strip focus" event. --- framebuffer/gui.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/framebuffer/gui.c b/framebuffer/gui.c index 52d2f2532..286f26357 100644 --- a/framebuffer/gui.c +++ b/framebuffer/gui.c @@ -1153,6 +1153,20 @@ create_toolbar(struct gui_window *gw, return toolbar; } +/** Routine called when "stripped of focus" event occours for browser widget. + * + * @param widget The widget reciving "stripped of focus" event. + * @param cbi The callback parameters. + * @return The callback result. + */ +static int +fb_browser_window_strip_focus(fbtk_widget_t *widget, fbtk_callback_info *cbi) +{ + fbtk_set_caret(widget, false, 0, 0, 0, NULL); + + return 0; +} + static void create_browser_widget(struct gui_window *gw, int toolbar_height, int furniture_width) { @@ -1169,6 +1183,7 @@ create_browser_widget(struct gui_window *gw, int toolbar_height, int furniture_w fbtk_set_handler(gw->browser, FBTK_CBT_REDRAW, fb_browser_window_redraw, gw); fbtk_set_handler(gw->browser, FBTK_CBT_INPUT, fb_browser_window_input, gw); fbtk_set_handler(gw->browser, FBTK_CBT_CLICK, fb_browser_window_click, gw); + fbtk_set_handler(gw->browser, FBTK_CBT_STRIP_FOCUS, fb_browser_window_strip_focus, gw); fbtk_set_handler(gw->browser, FBTK_CBT_POINTERMOVE, fb_browser_window_move, gw); } -- cgit v1.2.3 From 53183b2411f10dbaf1a0b85ded1d2bd8b6df5ea9 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Tue, 31 Jul 2012 22:18:44 +0100 Subject: Make text input widget remove caret on "strip focus" event. --- framebuffer/fbtk/text.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/framebuffer/fbtk/text.c b/framebuffer/fbtk/text.c index 69e82153d..879d88888 100644 --- a/framebuffer/fbtk/text.c +++ b/framebuffer/fbtk/text.c @@ -413,9 +413,9 @@ text_input(fbtk_widget_t *widget, fbtk_callback_info *cbi) return 0; } -/** Routine called when text events occour in writeable widget. +/** Routine called when click events occour in writeable widget. * - * @param widget The widget reciving input events. + * @param widget The widget reciving click events. * @param cbi The callback parameters. * @return The callback result. */ @@ -447,6 +447,20 @@ text_input_click(fbtk_widget_t *widget, fbtk_callback_info *cbi) return 0; } +/** Routine called when "stripped of focus" event occours for writeable widget. + * + * @param widget The widget reciving "stripped of focus" event. + * @param cbi The callback parameters. + * @return The callback result. + */ +static int +text_input_strip_focus(fbtk_widget_t *widget, fbtk_callback_info *cbi) +{ + fbtk_set_caret(widget, false, 0, 0, 0, NULL); + + return 0; +} + /* exported function documented in fbtk.h */ void fbtk_writable_text(fbtk_widget_t *widget, fbtk_enter_t enter, void *pw) @@ -546,6 +560,7 @@ fbtk_create_writable_text(fbtk_widget_t *parent, fbtk_set_handler(neww, FBTK_CBT_REDRAW, fb_redraw_text, NULL); fbtk_set_handler(neww, FBTK_CBT_CLICK, text_input_click, pw); + fbtk_set_handler(neww, FBTK_CBT_STRIP_FOCUS, text_input_strip_focus, NULL); fbtk_set_handler(neww, FBTK_CBT_INPUT, text_input, neww); return neww; -- cgit v1.2.3