aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/misc/e-scroll-frame.c
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/misc/e-scroll-frame.c')
-rw-r--r--widgets/misc/e-scroll-frame.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/widgets/misc/e-scroll-frame.c b/widgets/misc/e-scroll-frame.c
index f36e5a1fbe..f4317d51d7 100644
--- a/widgets/misc/e-scroll-frame.c
+++ b/widgets/misc/e-scroll-frame.c
@@ -128,7 +128,7 @@ static void e_scroll_frame_draw (GtkWidget *widget, GdkRectangle *area);
static void e_scroll_frame_size_request (GtkWidget *widget, GtkRequisition *requisition);
static void e_scroll_frame_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
static gint e_scroll_frame_expose (GtkWidget *widget, GdkEventExpose *event);
-
+static gint e_scroll_frame_button_press (GtkWidget *widget, GdkEventButton *event);
static void e_scroll_frame_add (GtkContainer *container, GtkWidget *widget);
static void e_scroll_frame_remove (GtkContainer *container, GtkWidget *widget);
static void e_scroll_frame_forall (GtkContainer *container, gboolean include_internals,
@@ -223,7 +223,8 @@ e_scroll_frame_class_init (EScrollFrameClass *class)
widget_class->size_request = e_scroll_frame_size_request;
widget_class->size_allocate = e_scroll_frame_size_allocate;
widget_class->expose_event = e_scroll_frame_expose;
-
+ widget_class->button_press_event = e_scroll_frame_button_press;
+
container_class->add = e_scroll_frame_add;
container_class->remove = e_scroll_frame_remove;
container_class->forall = e_scroll_frame_forall;
@@ -778,6 +779,34 @@ e_scroll_frame_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
gtk_widget_hide (priv->vsb);
}
+/* Button press handler for the scroll framw diget */
+static gint
+e_scroll_frame_button_press (GtkWidget *widget, GdkEventButton *event)
+{
+ g_return_val_if_fail (widget != NULL, FALSE);
+ g_return_val_if_fail (E_IS_SCROLL_FRAME (widget), FALSE);
+ g_return_val_if_fail (event != NULL, FALSE);
+
+ /* This is to handle mouse wheel scrolling */
+ if (event->button == 4 || event->button == 5) {
+ GtkAdjustment *adj;
+ gfloat new_value;
+
+ gtk_object_get (GTK_OBJECT (widget),
+ "vadjustment", &adj,
+ NULL);
+ new_value = adj->value + ((event->button == 4) ?
+ -adj->page_increment / 2:
+ adj->page_increment / 2);
+ new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
+ gtk_adjustment_set_value (adj, new_value);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
/* Expose handler for the scroll frame widget */
static gint
e_scroll_frame_expose (GtkWidget *widget, GdkEventExpose *event)