Merge lp:~cimi/overlay-scrollbar/scroll-event-on-thumb into lp:overlay-scrollbar

Proposed by Andrea Cimitan
Status: Merged
Merged at revision: 198
Proposed branch: lp:~cimi/overlay-scrollbar/scroll-event-on-thumb
Merge into: lp:overlay-scrollbar
Diff against target: 150 lines (+73/-0)
2 files modified
os/os-scrollbar.c (+44/-0)
os/os-thumb.c (+29/-0)
To merge this branch: bzr merge lp:~cimi/overlay-scrollbar/scroll-event-on-thumb
Reviewer Review Type Date Requested Status
Loïc Molinari (community) Approve
Review via email: mp+56544@code.launchpad.net

Description of the change

Handle scroll-wheel event

To post a comment you must log in.
Revision history for this message
Loïc Molinari (loic.molinari) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'os/os-scrollbar.c'
2--- os/os-scrollbar.c 2011-04-05 15:23:15 +0000
3+++ os/os-scrollbar.c 2011-04-06 10:57:24 +0000
4@@ -27,6 +27,7 @@
5 #include "os-scrollbar.h"
6 #include "os-private.h"
7 #include <gdk/gdkx.h>
8+#include "math.h"
9
10 /* Default size of the pager in pixels. */
11 #define DEFAULT_PAGER_WIDTH 3
12@@ -89,6 +90,7 @@
13 static gdouble os_scrollbar_coord_to_value (OsScrollbar *scrollbar, gint coord);
14 static void os_scrollbar_deactivate_pager (OsScrollbar *scrollbar);
15 static gboolean os_scrollbar_deactivate_pager_cb (gpointer user_data);
16+static gdouble os_scrollbar_get_wheel_delta (OsScrollbar *scrollbar, GdkScrollDirection direction);
17 static void os_scrollbar_hide_thumb (OsScrollbar *scrollbar);
18 static gboolean os_scrollbar_hide_thumb_cb (gpointer user_data);
19 static gboolean os_scrollbar_unlock_thumb_cb (gpointer user_data);
20@@ -107,6 +109,7 @@
21 static gboolean thumb_leave_notify_event_cb (GtkWidget *widget, GdkEventCrossing *event, gpointer user_data);
22 static void thumb_map_cb (GtkWidget *widget, gpointer user_data);
23 static gboolean thumb_motion_notify_event_cb (GtkWidget *widget, GdkEventMotion *event, gpointer user_data);
24+static gboolean thumb_scroll_event_cb (GtkWidget *widget, GdkEventScroll *event, gpointer user_data);
25 static void thumb_unmap_cb (GtkWidget *widget, gpointer user_data);
26 static void pager_move (OsScrollbar *scrollbar);
27 static void pager_set_state_from_pointer (OsScrollbar *scrollbar, gint x, gint y);
28@@ -368,6 +371,24 @@
29 return FALSE;
30 }
31
32+static gdouble
33+os_scrollbar_get_wheel_delta (OsScrollbar *scrollbar,
34+ GdkScrollDirection direction)
35+{
36+ OsScrollbarPrivate *priv;
37+ gdouble delta;
38+
39+ priv = scrollbar->priv;
40+
41+ delta = pow (priv->adjustment->page_size, 2.0 / 3.0);
42+
43+ if (direction == GDK_SCROLL_UP ||
44+ direction == GDK_SCROLL_LEFT)
45+ delta = - delta;
46+
47+ return delta;
48+}
49+
50 /* Hide if it's ok to hide. */
51 static void
52 os_scrollbar_hide_thumb (OsScrollbar *scrollbar)
53@@ -628,6 +649,8 @@
54 g_signal_handlers_disconnect_by_func (G_OBJECT (priv->thumb),
55 thumb_motion_notify_event_cb, scrollbar);
56 g_signal_handlers_disconnect_by_func (G_OBJECT (priv->thumb),
57+ thumb_scroll_event_cb, scrollbar);
58+ g_signal_handlers_disconnect_by_func (G_OBJECT (priv->thumb),
59 thumb_unmap_cb, scrollbar);
60
61 gtk_widget_destroy (priv->thumb);
62@@ -653,6 +676,8 @@
63 G_CALLBACK (thumb_map_cb), scrollbar);
64 g_signal_connect (G_OBJECT (priv->thumb), "motion-notify-event",
65 G_CALLBACK (thumb_motion_notify_event_cb), scrollbar);
66+ g_signal_connect (G_OBJECT (priv->thumb), "scroll-event",
67+ G_CALLBACK (thumb_scroll_event_cb), scrollbar);
68 g_signal_connect (G_OBJECT (priv->thumb), "unmap",
69 G_CALLBACK (thumb_unmap_cb), scrollbar);
70 }
71@@ -965,6 +990,25 @@
72 return FALSE;
73 }
74
75+static gboolean
76+thumb_scroll_event_cb (GtkWidget *widget,
77+ GdkEventScroll *event,
78+ gpointer user_data)
79+{
80+ OsScrollbar *scrollbar;
81+ OsScrollbarPrivate *priv;
82+ gdouble delta;
83+
84+ scrollbar = OS_SCROLLBAR (user_data);
85+ priv = scrollbar->priv;
86+
87+ delta = os_scrollbar_get_wheel_delta (scrollbar, event->direction);
88+
89+ gtk_adjustment_set_value (priv->adjustment, priv->adjustment->value + delta);
90+
91+ return FALSE;
92+}
93+
94 static void
95 thumb_unmap_cb (GtkWidget *widget,
96 gpointer user_data)
97
98=== modified file 'os/os-thumb.c'
99--- os/os-thumb.c 2011-04-06 09:40:48 +0000
100+++ os/os-thumb.c 2011-04-06 10:57:24 +0000
101@@ -64,6 +64,7 @@
102 static gboolean os_thumb_motion_notify_event (GtkWidget *widget, GdkEventMotion *event);
103 static void os_thumb_map (GtkWidget *widget);
104 static void os_thumb_screen_changed (GtkWidget *widget, GdkScreen *old_screen);
105+static gboolean os_thumb_scroll_event (GtkWidget *widget, GdkEventScroll *event);
106 static void os_thumb_unmap (GtkWidget *widget);
107 static GObject* os_thumb_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties);
108 static void os_thumb_dispose (GObject *object);
109@@ -156,6 +157,7 @@
110 widget_class->map = os_thumb_map;
111 widget_class->motion_notify_event = os_thumb_motion_notify_event;
112 widget_class->screen_changed = os_thumb_screen_changed;
113+ widget_class->scroll_event = os_thumb_scroll_event;
114 widget_class->unmap = os_thumb_unmap;
115
116 gobject_class->constructor = os_thumb_constructor;
117@@ -654,6 +656,33 @@
118 gtk_widget_set_colormap (widget, colormap);
119 }
120
121+static gboolean
122+os_thumb_scroll_event (GtkWidget *widget,
123+ GdkEventScroll *event)
124+{
125+ OsThumb *thumb;
126+ OsThumbPrivate *priv;
127+
128+ thumb = OS_THUMB (widget);
129+ priv = thumb->priv;
130+
131+ /* if started, stop the fade-out. */
132+ if (priv->source_id != 0)
133+ {
134+ g_source_remove (priv->source_id);
135+ priv->source_id = 0;
136+
137+ os_animation_stop (priv->animation);
138+ gtk_window_set_opacity (GTK_WINDOW (widget), 1.0f);
139+ }
140+
141+ priv->source_id = g_timeout_add (TIMEOUT_FADE_OUT,
142+ os_thumb_timeout_fade_out_cb,
143+ thumb);
144+
145+ return FALSE;
146+}
147+
148 static void
149 os_thumb_unmap (GtkWidget *widget)
150 {

Subscribers

People subscribed via source and target branches