summaryrefslogtreecommitdiff
path: root/framebuffer/fb_rootwindow.c
diff options
context:
space:
mode:
Diffstat (limited to 'framebuffer/fb_rootwindow.c')
-rw-r--r--framebuffer/fb_rootwindow.c42
1 files changed, 32 insertions, 10 deletions
diff --git a/framebuffer/fb_rootwindow.c b/framebuffer/fb_rootwindow.c
index 0752e6132..bff5c05c8 100644
--- a/framebuffer/fb_rootwindow.c
+++ b/framebuffer/fb_rootwindow.c
@@ -355,7 +355,6 @@ static const fb_widget_image_t reload = {
};
-typedef int (*fb_widget_mouseclick_t)(framebuffer_t *fb, struct gui_window *g);
struct fb_widget {
struct fb_widget *next;
@@ -365,11 +364,11 @@ struct fb_widget {
int height;
fb_widget_mouseclick_t click;
struct bitmap *bitmap;
+ struct gui_window *g;
};
static struct fb_widget *widget_list;
-
static struct fb_widget *
fb_add_button_widget(int x,
int y,
@@ -411,9 +410,33 @@ fb_add_button_widget(int x,
return new_widget;
}
+struct fb_widget *
+fb_add_window_widget(struct gui_window *g,
+ fb_widget_mouseclick_t click_rtn)
+{
+ struct fb_widget *new_widget;
+ new_widget = malloc(sizeof(struct fb_widget));
+ if (new_widget == NULL)
+ return NULL;
+
+ new_widget->x = g->x;
+ new_widget->y = g->y;
+ new_widget->width = g->width;
+ new_widget->height = g->height;
+ new_widget->click = click_rtn;
+
+ new_widget->bitmap = NULL;
+ new_widget->g = g;
+
+ new_widget->next = widget_list;
+ widget_list = new_widget;
+
+ return new_widget;
+}
+
/* left icon click routine */
static int
-fb_widget_leftarrow_click(framebuffer_t *fb, struct gui_window *g)
+fb_widget_leftarrow_click(struct gui_window *g, browser_mouse_state st, int x, int y)
{
if (history_back_available(g->bw->history))
history_back(g->bw, g->bw->history);
@@ -423,7 +446,7 @@ fb_widget_leftarrow_click(framebuffer_t *fb, struct gui_window *g)
/* right arrow icon click routine */
static int
-fb_widget_rightarrow_click(framebuffer_t *fb, struct gui_window *g)
+fb_widget_rightarrow_click(struct gui_window *g, browser_mouse_state st, int x, int y)
{
if (history_forward_available(g->bw->history))
history_forward(g->bw, g->bw->history);
@@ -466,21 +489,20 @@ void fb_rootwindow_create(framebuffer_t *fb)
fb_plot_ctx = saved_plot_ctx;
}
-void fb_rootwindow_click(framebuffer_t *fb,
- struct gui_window *g,
- browser_mouse_state st ,
- int x, int y)
+void
+fb_rootwindow_click(struct gui_window *g, browser_mouse_state st, int x, int y)
{
struct fb_widget *widget;
LOG(("Click in root window"));
widget = widget_list;
while (widget != NULL) {
- if ((x > widget->x) &&
+ if ((widget->click != NULL) &&
+ (x > widget->x) &&
(y > widget->y) &&
(x < widget->x + widget->width) &&
(y < widget->y + widget->height)) {
- widget->click(fb, g);
+ widget->click(g, st, x, y);
break;
}
widget = widget->next;