summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2016-10-29 18:23:08 +0900
committerTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2016-10-29 18:23:08 +0900
commit7f67005a6000a3fd5acf5bfc27074fc23e3623e6 (patch)
tree908030f8b0252807922b2f537c33d1e07fa49ca4
parent374881b949007967ec05932bca024c80b4e09530 (diff)
downloadglade-7f67005a6000a3fd5acf5bfc27074fc23e3623e6.tar.gz
Bug 351645 - glade-utils.[ch]: Add glade_util_remove_scroll_events()
Allow plugins to use the event propagation hack we use to avoid scroll events in a scrolled window being eaten up by child widgets. From patch contributed by Lukas K <lu@0x83.eu>
-rw-r--r--gladeui/glade-utils.c34
-rw-r--r--gladeui/glade-utils.h2
2 files changed, 36 insertions, 0 deletions
diff --git a/gladeui/glade-utils.c b/gladeui/glade-utils.c
index 6fbc5d2d..dcfd9d60 100644
--- a/gladeui/glade-utils.c
+++ b/gladeui/glade-utils.c
@@ -2023,3 +2023,37 @@ glade_utils_get_pointer (GtkWidget *widget,
if (y)
*y = final_y;
}
+
+/* Use this to disable scroll events on property editors,
+ * we dont want them handling scroll because they are inside
+ * a scrolled window and interrupt workflow causing unexpected
+ * results when scrolled.
+ */
+static gint
+abort_scroll_events (GtkWidget *widget,
+ GdkEvent *event,
+ gpointer user_data)
+{
+ GtkWidget *parent = gtk_widget_get_parent (widget);
+
+ /* Removing the events from the mask doesnt work for
+ * stubborn combo boxes which call gtk_widget_add_events()
+ * in it's gtk_combo_box_init() - so handle the event and propagate
+ * it up the tree so the scrollwindow still handles the scroll event.
+ */
+ gtk_propagate_event (parent, event);
+
+ return TRUE;
+}
+
+void
+glade_util_remove_scroll_events (GtkWidget *widget)
+{
+ gint events = gtk_widget_get_events (widget);
+
+ events &= ~(GDK_SCROLL_MASK | GDK_SMOOTH_SCROLL_MASK);
+ gtk_widget_set_events (widget, events);
+
+ g_signal_connect (G_OBJECT (widget), "scroll-event",
+ G_CALLBACK (abort_scroll_events), NULL);
+}
diff --git a/gladeui/glade-utils.h b/gladeui/glade-utils.h
index ca02a5ba..9c8839c7 100644
--- a/gladeui/glade-utils.h
+++ b/gladeui/glade-utils.h
@@ -132,6 +132,8 @@ void glade_utils_get_pointer (GtkWidget *widget,
gint *y);
+void glade_util_remove_scroll_events (GtkWidget *widget);
+
G_END_DECLS
#endif /* __GLADE_UTILS_H__ */