diff options
Diffstat (limited to 'frontends/gtk/corewindow.c')
-rw-r--r-- | frontends/gtk/corewindow.c | 90 |
1 files changed, 55 insertions, 35 deletions
diff --git a/frontends/gtk/corewindow.c b/frontends/gtk/corewindow.c index cb78212dd..fe2ffd087 100644 --- a/frontends/gtk/corewindow.c +++ b/frontends/gtk/corewindow.c @@ -87,6 +87,7 @@ static browser_mouse_state nsgtk_cw_gdkbutton_to_nsstate(GdkEventButton *event) } if (event->state & GDK_MOD1_MASK) { + /* usually alt */ ms |= BROWSER_MOUSE_MOD_3; } @@ -224,6 +225,10 @@ nsgtk_cw_motion_notify_event(GtkWidget *widget, struct nsgtk_corewindow_mouse *mouse = &nsgtk_cw->mouse_state; if (mouse->pressed == false) { + nsgtk_cw->mouse(nsgtk_cw, + BROWSER_MOUSE_HOVER, + event->x, + event->y); return TRUE; } @@ -610,18 +615,20 @@ static nserror nsgtk_cw_set_scroll(struct core_window *cw, int x, int y) { struct nsgtk_corewindow *nsgtk_cw = (struct nsgtk_corewindow *)cw; - GtkAdjustment *vadj; - GtkAdjustment *hadj; - vadj = gtk_scrolled_window_get_vadjustment(nsgtk_cw->scrolled); - hadj = gtk_scrolled_window_get_hadjustment(nsgtk_cw->scrolled); + if (nsgtk_cw->scrolled != NULL) { + GtkAdjustment *vadj; + GtkAdjustment *hadj; - assert(vadj != NULL); - assert(hadj != NULL); + vadj = gtk_scrolled_window_get_vadjustment(nsgtk_cw->scrolled); + hadj = gtk_scrolled_window_get_hadjustment(nsgtk_cw->scrolled); - gtk_adjustment_set_value(vadj, y); - gtk_adjustment_set_value(hadj, x); + assert(vadj != NULL); + assert(hadj != NULL); + gtk_adjustment_set_value(vadj, y); + gtk_adjustment_set_value(hadj, x); + } return NSERROR_OK; } @@ -633,21 +640,26 @@ nsgtk_cw_set_scroll(struct core_window *cw, int x, int y) * \param r rectangle that needs scrolling. */ static nserror -nsgtk_cw_get_scroll(struct core_window *cw, int *x, int *y) +nsgtk_cw_get_scroll(const struct core_window *cw, int *x, int *y) { struct nsgtk_corewindow *nsgtk_cw = (struct nsgtk_corewindow *)cw; - GtkAdjustment *vadj; - GtkAdjustment *hadj; - vadj = gtk_scrolled_window_get_vadjustment(nsgtk_cw->scrolled); - hadj = gtk_scrolled_window_get_hadjustment(nsgtk_cw->scrolled); + if (nsgtk_cw->scrolled != NULL) { + GtkAdjustment *vadj; + GtkAdjustment *hadj; - assert(vadj != NULL); - assert(hadj != NULL); + vadj = gtk_scrolled_window_get_vadjustment(nsgtk_cw->scrolled); + hadj = gtk_scrolled_window_get_hadjustment(nsgtk_cw->scrolled); - *y = (int)(gtk_adjustment_get_value(vadj)); - *x = (int)(gtk_adjustment_get_value(hadj)); + assert(vadj != NULL); + assert(hadj != NULL); + *y = (int)(gtk_adjustment_get_value(vadj)); + *x = (int)(gtk_adjustment_get_value(hadj)); + } else { + *x = 0; + *y = 0; + } return NSERROR_OK; } @@ -660,21 +672,29 @@ nsgtk_cw_get_scroll(struct core_window *cw, int *x, int *y) * \param[out] height to be set to viewport height in px */ static nserror -nsgtk_cw_get_window_dimensions(struct core_window *cw, int *width, int *height) +nsgtk_cw_get_window_dimensions(const struct core_window *cw, + int *width, int *height) { struct nsgtk_corewindow *nsgtk_cw = (struct nsgtk_corewindow *)cw; - GtkAdjustment *vadj; - GtkAdjustment *hadj; - gdouble page; - - hadj = gtk_scrolled_window_get_hadjustment(nsgtk_cw->scrolled); - g_object_get(hadj, "page-size", &page, NULL); - *width = page; - - vadj = gtk_scrolled_window_get_vadjustment(nsgtk_cw->scrolled); - g_object_get(vadj, "page-size", &page, NULL); - *height = page; - + if (nsgtk_cw->scrolled != NULL) { + GtkAdjustment *vadj; + GtkAdjustment *hadj; + gdouble page; + + hadj = gtk_scrolled_window_get_hadjustment(nsgtk_cw->scrolled); + g_object_get(hadj, "page-size", &page, NULL); + *width = page; + + vadj = gtk_scrolled_window_get_vadjustment(nsgtk_cw->scrolled); + g_object_get(vadj, "page-size", &page, NULL); + *height = page; + } else { + GtkAllocation allocation; + gtk_widget_get_allocation(GTK_WIDGET(nsgtk_cw->drawing_area), + &allocation); + *width = allocation.width; + *height = allocation.height; + } return NSERROR_OK; } @@ -698,20 +718,20 @@ nsgtk_cw_drag_status(struct core_window *cw, core_window_drag_status ds) /** * core window callback table for nsgtk */ -static struct core_window_callback_table nsgtk_cw_cb_table = { +static struct core_window_table nsgtk_cw_cb_table = { .invalidate = nsgtk_cw_invalidate_area, - .update_size = nsgtk_cw_update_size, + .set_extent = nsgtk_cw_update_size, .set_scroll = nsgtk_cw_set_scroll, .get_scroll = nsgtk_cw_get_scroll, - .get_window_dimensions = nsgtk_cw_get_window_dimensions, + .get_dimensions = nsgtk_cw_get_window_dimensions, .drag_status = nsgtk_cw_drag_status }; +struct core_window_table *nsgtk_core_window_table = &nsgtk_cw_cb_table; /* exported function documented gtk/corewindow.h */ nserror nsgtk_corewindow_init(struct nsgtk_corewindow *nsgtk_cw) { - nsgtk_cw->cb_table = &nsgtk_cw_cb_table; nsgtk_cw->drag_status = CORE_WINDOW_DRAG_NONE; /* input method setup */ @@ -756,7 +776,7 @@ nserror nsgtk_corewindow_init(struct nsgtk_corewindow *nsgtk_cw) nsgtk_widget_override_background_color( GTK_WIDGET(nsgtk_cw->drawing_area), - GTK_STATE_NORMAL, + GTK_STATE_FLAG_NORMAL, 0, 0xffff, 0xffff, 0xffff); return NSERROR_OK; |