summaryrefslogtreecommitdiff
path: root/frontends/gtk/corewindow.c
diff options
context:
space:
mode:
Diffstat (limited to 'frontends/gtk/corewindow.c')
-rw-r--r--frontends/gtk/corewindow.c90
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;