summaryrefslogtreecommitdiff
path: root/framebuffer
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2009-11-23 22:56:29 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2009-11-23 22:56:29 +0000
commit0b4d623205b81b4547cd40a46e8b3d8e7815dba0 (patch)
tree6701ba35f98b53b6e238ebec05e6f7afcf097621 /framebuffer
parentd591d8df94f7e7ff73f6367e79c912b8f9ed75f9 (diff)
downloadnetsurf-0b4d623205b81b4547cd40a46e8b3d8e7815dba0.tar.gz
netsurf-0b4d623205b81b4547cd40a46e8b3d8e7815dba0.tar.bz2
Make the gui click handlers responsible for deciding whether to act on DOWN or UP (or both), rather than having the fbtk forcibly prevent UP events being generated.
This fixes the inability to have clicks in the viewport acted upon, and also allows for useful future extensions such as drag scrolling and text selection. svn path=/trunk/netsurf/; revision=9704
Diffstat (limited to 'framebuffer')
-rw-r--r--framebuffer/fbtk.c4
-rw-r--r--framebuffer/gui.c33
2 files changed, 32 insertions, 5 deletions
diff --git a/framebuffer/fbtk.c b/framebuffer/fbtk.c
index 87d5d3650..154dac506 100644
--- a/framebuffer/fbtk.c
+++ b/framebuffer/fbtk.c
@@ -919,10 +919,6 @@ fbtk_click(fbtk_widget_t *widget, nsfb_event_t *event)
fbtk_widget_t *window;
nsfb_bbox_t cloc;
- /* Don't act on press and release, or everything happens twice */
- if (event->type == NSFB_EVENT_KEY_UP)
- return;
-
/* ensure we have the root widget */
root = get_root_widget(widget);
diff --git a/framebuffer/gui.c b/framebuffer/gui.c
index 1621b801a..264b9d6fc 100644
--- a/framebuffer/gui.c
+++ b/framebuffer/gui.c
@@ -450,7 +450,8 @@ fb_browser_window_click(fbtk_widget_t *widget,
struct browser_window *bw = pw;
struct browser_widget_s *bwidget = fbtk_get_userpw(widget);
- if (event->type != NSFB_EVENT_KEY_DOWN)
+ if (event->type != NSFB_EVENT_KEY_DOWN &&
+ event->type != NSFB_EVENT_KEY_UP)
return 0;
LOG(("browser window clicked at %d,%d",x,y));
@@ -641,6 +642,9 @@ fb_leftarrow_click(fbtk_widget_t *widget,
struct gui_window *gw = pw;
struct browser_window *bw = gw->bw;
+ if (event->type != NSFB_EVENT_KEY_DOWN)
+ return 0;
+
if (history_back_available(bw->history))
history_back(bw, bw->history);
@@ -659,6 +663,9 @@ fb_rightarrow_click(fbtk_widget_t *widget,
struct gui_window *gw =pw;
struct browser_window *bw = gw->bw;
+ if (event->type != NSFB_EVENT_KEY_DOWN)
+ return 0;
+
if (history_forward_available(bw->history))
history_forward(bw, bw->history);
@@ -675,6 +682,10 @@ fb_reload_click(fbtk_widget_t *widget,
void *pw)
{
struct browser_window *bw = pw;
+
+ if (event->type != NSFB_EVENT_KEY_DOWN)
+ return 0;
+
browser_window_reload(bw, true);
return 0;
}
@@ -687,6 +698,10 @@ fb_stop_click(fbtk_widget_t *widget,
void *pw)
{
struct browser_window *bw = pw;
+
+ if (event->type != NSFB_EVENT_KEY_DOWN)
+ return 0;
+
browser_window_stop(bw);
return 0;
}
@@ -698,6 +713,10 @@ fb_scrolll_click(fbtk_widget_t *widget,
int x, int y, void *pw)
{
struct gui_window *gw = pw;
+
+ if (event->type != NSFB_EVENT_KEY_DOWN)
+ return 0;
+
fb_window_scroll(gw->browser, -100, 0);
return 0;
}
@@ -708,6 +727,10 @@ fb_scrollr_click(fbtk_widget_t *widget,
int x, int y, void *pw)
{
struct gui_window *gw = pw;
+
+ if (event->type != NSFB_EVENT_KEY_DOWN)
+ return 0;
+
fb_window_scroll(gw->browser, 100, 0);
return 0;
@@ -719,6 +742,10 @@ fb_scrollu_click(fbtk_widget_t *widget,
int x, int y, void *pw)
{
struct gui_window *gw = pw;
+
+ if (event->type != NSFB_EVENT_KEY_DOWN)
+ return 0;
+
fb_window_scroll(gw->browser, 0, -100);
return 0;
@@ -730,6 +757,10 @@ fb_scrolld_click(fbtk_widget_t *widget,
int x, int y, void *pw)
{
struct gui_window *gw = pw;
+
+ if (event->type != NSFB_EVENT_KEY_DOWN)
+ return 0;
+
fb_window_scroll(gw->browser, 0, 100);
return 0;