summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Sanders <vince@netsurf-browser.org>2012-07-31 22:33:38 +0100
committerVincent Sanders <vince@netsurf-browser.org>2012-07-31 22:33:38 +0100
commit4fd5d51765e9ec42626c961277062731942328a6 (patch)
tree7b99ec2d40ac50857aa0c91845a108e3f69082c8
parent5c25b8255a9c3e62bf7ac1264cc5443ea3f14abc (diff)
parent53183b2411f10dbaf1a0b85ded1d2bd8b6df5ea9 (diff)
downloadnetsurf-4fd5d51765e9ec42626c961277062731942328a6.tar.gz
netsurf-4fd5d51765e9ec42626c961277062731942328a6.tar.bz2
Merge branch 'master' of git://git.netsurf-browser.org/netsurf
-rw-r--r--framebuffer/fbtk.h1
-rw-r--r--framebuffer/fbtk/event.c2
-rw-r--r--framebuffer/fbtk/fbtk.c10
-rw-r--r--framebuffer/fbtk/text.c19
-rw-r--r--framebuffer/gui.c15
5 files changed, 44 insertions, 3 deletions
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/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);
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;
}
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;
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);
}