summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--shell/ev-properties-dialog.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/shell/ev-properties-dialog.c b/shell/ev-properties-dialog.c
index cbb7b0f7..91d08762 100644
--- a/shell/ev-properties-dialog.c
+++ b/shell/ev-properties-dialog.c
@@ -52,6 +52,64 @@ ev_properties_dialog_class_init (EvPropertiesDialogClass *properties_class)
{
}
+static gboolean
+on_notebook_scroll_event (GtkWidget *widget,
+ GdkEventScroll *event)
+{
+ GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+ GtkWidget *child, *event_widget, *action_widget;
+
+ child = gtk_notebook_get_nth_page (notebook, gtk_notebook_get_current_page (notebook));
+ if (child == NULL)
+ return FALSE;
+
+ event_widget = gtk_get_event_widget ((GdkEvent*) event);
+
+ /* Ignore scroll events from the content of the page */
+ if (event_widget == NULL || event_widget == child || gtk_widget_is_ancestor (event_widget, child))
+ return FALSE;
+
+ /* And also from the action widgets */
+ action_widget = gtk_notebook_get_action_widget (notebook, GTK_PACK_START);
+ if (event_widget == action_widget || (action_widget != NULL && gtk_widget_is_ancestor (event_widget, action_widget)))
+ return FALSE;
+
+ action_widget = gtk_notebook_get_action_widget (notebook, GTK_PACK_END);
+ if (event_widget == action_widget || (action_widget != NULL && gtk_widget_is_ancestor (event_widget, action_widget)))
+ return FALSE;
+
+ switch (event->direction) {
+ case GDK_SCROLL_RIGHT:
+ case GDK_SCROLL_DOWN:
+ gtk_notebook_next_page (notebook);
+ break;
+ case GDK_SCROLL_LEFT:
+ case GDK_SCROLL_UP:
+ gtk_notebook_prev_page (notebook);
+ break;
+ case GDK_SCROLL_SMOOTH:
+ switch (gtk_notebook_get_tab_pos (notebook)) {
+ case GTK_POS_LEFT:
+ case GTK_POS_RIGHT:
+ if (event->delta_y > 0)
+ gtk_notebook_next_page (notebook);
+ else if (event->delta_y < 0)
+ gtk_notebook_prev_page (notebook);
+ break;
+ case GTK_POS_TOP:
+ case GTK_POS_BOTTOM:
+ if (event->delta_x > 0)
+ gtk_notebook_next_page (notebook);
+ else if (event->delta_x < 0)
+ gtk_notebook_prev_page (notebook);
+ break;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
static void
ev_properties_dialog_init (EvPropertiesDialog *properties)
{
@@ -70,6 +128,12 @@ ev_properties_dialog_init (EvPropertiesDialog *properties)
GTK_RESPONSE_CANCEL);
properties->notebook = gtk_notebook_new ();
+ gtk_widget_add_events (properties->notebook, GDK_SCROLL_MASK);
+ g_signal_connect (properties->notebook,
+ "scroll-event",
+ G_CALLBACK (on_notebook_scroll_event),
+ NULL);
+
gtk_container_set_border_width (GTK_CONTAINER (properties->notebook), 5);
gtk_box_pack_start (content_area, properties->notebook, TRUE, TRUE, 0);
gtk_widget_show (properties->notebook);