Merge lp:~cimi/overlay-scrollbar/insensitive-state into lp:overlay-scrollbar

Proposed by Andrea Cimitan
Status: Merged
Approved by: Ted Gould
Approved revision: 295
Merged at revision: 295
Proposed branch: lp:~cimi/overlay-scrollbar/insensitive-state
Merge into: lp:overlay-scrollbar
Diff against target: 282 lines (+142/-32)
2 files modified
configure.ac (+1/-1)
os/os-scrollbar.c (+141/-31)
To merge this branch: bzr merge lp:~cimi/overlay-scrollbar/insensitive-state
Reviewer Review Type Date Requested Status
Ted Gould (community) Approve
Review via email: mp+67927@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Ted Gould (ted) wrote :

On this line:

return gtk_widget_get_state_flags (GTK_WIDGET (scrollbar)) & GTK_STATE_FLAG_INSENSITIVE;

It would probably be better to do:

return gtk_widget_get_state_flags (GTK_WIDGET (scrollbar)) & GTK_STATE_FLAG_INSENSITIVE != 0;

So that the return value is a boolean proper. Shouldn't be an issue, but it's safer.

That's it, looks good.

review: Approve
296. By Andrea Cimitan

Fixes to is_insensitive and set_state_flags

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'configure.ac'
2--- configure.ac 2011-07-08 14:31:22 +0000
3+++ configure.ac 2011-07-14 14:36:37 +0000
4@@ -2,7 +2,7 @@
5
6 # Package
7
8-AC_INIT([overlay-scrollbar],[0.2.4],[https://bugs.launchpad.net/ayatana-scrollbar],[overlay-scrollbar])
9+AC_INIT([overlay-scrollbar],[0.2.4.1],[https://bugs.launchpad.net/ayatana-scrollbar],[overlay-scrollbar])
10 AC_CONFIG_SRCDIR([os/os-scrollbar.h])
11 AC_CONFIG_MACRO_DIR([build])
12 AC_CONFIG_AUX_DIR([build])
13
14=== modified file 'os/os-scrollbar.c'
15--- os/os-scrollbar.c 2011-07-08 11:50:38 +0000
16+++ os/os-scrollbar.c 2011-07-14 14:36:37 +0000
17@@ -144,8 +144,11 @@
18 static void os_scrollbar_realize (GtkWidget *widget);
19 static void os_scrollbar_show (GtkWidget *widget);
20 static void os_scrollbar_size_allocate (GtkWidget *widget, GdkRectangle *allocation);
21-#ifndef USE_GTK3
22+#ifdef USE_GTK3
23+static void os_scrollbar_state_flags_changed (GtkWidget *widget, GtkStateFlags flags);
24+#else
25 static void os_scrollbar_size_request (GtkWidget *widget, GtkRequisition *requisition);
26+static void os_scrollbar_state_changed (GtkWidget *widget, GtkStateType state);
27 #endif
28 static void os_scrollbar_unmap (GtkWidget *widget);
29 static void os_scrollbar_unrealize (GtkWidget *widget);
30@@ -382,6 +385,17 @@
31 return FALSE;
32 }
33
34+/* return TRUE if the widget is insensitive */
35+static gboolean
36+is_insensitive (OsScrollbar *scrollbar)
37+{
38+#ifdef USE_GTK3
39+ return (gtk_widget_get_state_flags (GTK_WIDGET (scrollbar)) & GTK_STATE_FLAG_INSENSITIVE) != 0;
40+#else
41+ return gtk_widget_get_state (GTK_WIDGET (scrollbar)) == GTK_STATE_INSENSITIVE;
42+#endif
43+}
44+
45 /* move the pager */
46 static void
47 move_pager (OsScrollbar *scrollbar)
48@@ -1081,6 +1095,10 @@
49
50 OS_DCHECK (scrollbar != NULL);
51
52+ /* return if the scrollbar is insensitive */
53+ if (is_insensitive (scrollbar))
54+ return;
55+
56 if (gtk_widget_get_mapped (GTK_WIDGET (scrollbar)))
57 {
58 if (gtk_widget_get_window (gtk_widget_get_toplevel (GTK_WIDGET (scrollbar))) ==
59@@ -1869,11 +1887,13 @@
60 const gint64 current_time = g_get_monotonic_time ();
61 const gint64 end_time = priv->present_time + TIMEOUT_PRESENT_WINDOW * 1000;
62
63- /* if the widget is mapped and the configure-event happens
64- * after the PropertyNotify _NET_ACTIVE_WINDOW event,
65+ /* if the widget is mapped, is not insentitive
66+ * and the configure-event happens after
67+ * the PropertyNotify _NET_ACTIVE_WINDOW event,
68 * see if the mouse pointer is over this window, if TRUE,
69 * proceed with pager_set_state_from_pointer. */
70- if ((current_time > end_time) &&
71+ if (!is_insensitive (scrollbar) &&
72+ (current_time > end_time) &&
73 gtk_widget_get_mapped (GTK_WIDGET (scrollbar)))
74 {
75 if (!priv->active_window)
76@@ -1896,7 +1916,7 @@
77 {
78 gint x, y;
79
80- gtk_widget_get_pointer (widget, &x, &y);
81+ gdk_window_get_pointer (gtk_widget_get_window (GTK_WIDGET (scrollbar)), &x, &y, NULL);
82
83 /* when the window is resized (maximize/restore),
84 * check the position of the pointer
85@@ -2124,7 +2144,7 @@
86 {
87 /* react to motion_notify_event
88 * and set the state accordingly. */
89- if (!priv->active_window)
90+ if (!is_insensitive (scrollbar) && !priv->active_window)
91 pager_set_state_from_pointer (scrollbar, xiev->event_x, xiev->event_y);
92
93 /* proximity area */
94@@ -2391,7 +2411,7 @@
95 {
96 /* react to motion_notify_event
97 * and set the state accordingly. */
98- if (!priv->active_window)
99+ if (!is_insensitive (scrollbar) && !priv->active_window)
100 pager_set_state_from_pointer (scrollbar, xev->xmotion.x, xev->xmotion.y);
101
102 /* proximity area */
103@@ -2512,8 +2532,11 @@
104 widget_class->realize = os_scrollbar_realize;
105 widget_class->show = os_scrollbar_show;
106 widget_class->size_allocate = os_scrollbar_size_allocate;
107-#ifndef USE_GTK3
108+#ifdef USE_GTK3
109+ widget_class->state_flags_changed = os_scrollbar_state_flags_changed;
110+#else
111 widget_class->size_request = os_scrollbar_size_request;
112+ widget_class->state_changed = os_scrollbar_state_changed;
113 #endif
114 widget_class->unmap = os_scrollbar_unmap;
115 widget_class->unrealize = os_scrollbar_unrealize;
116@@ -2753,8 +2776,6 @@
117
118 GTK_WIDGET_CLASS (g_type_class_peek (GTK_TYPE_WIDGET))->map (widget);
119
120- priv->proximity = TRUE;
121-
122 /* on map, check for the active window. */
123 if (gtk_widget_get_window (gtk_widget_get_toplevel (widget)) ==
124 gdk_screen_get_active_window (gtk_widget_get_screen (widget)))
125@@ -2771,32 +2792,41 @@
126 else
127 priv->active_window = FALSE;
128
129- if (!priv->active_window)
130- {
131- gint x, y;
132- gtk_widget_get_pointer (gtk_widget_get_toplevel (widget), &x, &y);
133-
134- /* when the scrollbar appears on screen (mapped),
135- * for example when switching notebook page,
136- * check the position of the pointer
137- * and set the state accordingly. */
138- pager_set_state_from_pointer (scrollbar, x, y);
139- }
140- else
141- {
142- /* on map-event of an active window,
143- * the pager should be active. */
144- priv->can_deactivate_pager = FALSE;
145- os_pager_set_active (priv->pager, TRUE, FALSE);
146+ if (!is_insensitive (scrollbar))
147+ {
148+ if (!priv->active_window)
149+ {
150+ gint x, y;
151+
152+ gdk_window_get_pointer (gtk_widget_get_window (GTK_WIDGET (scrollbar)), &x, &y, NULL);
153+
154+ /* when the scrollbar appears on screen (mapped),
155+ * for example when switching notebook page,
156+ * check the position of the pointer
157+ * and set the state accordingly. */
158+ pager_set_state_from_pointer (scrollbar, x, y);
159+ }
160+ else
161+ {
162+ /* on map-event of an active window,
163+ * the pager should be active. */
164+ priv->can_deactivate_pager = FALSE;
165+ os_pager_set_active (priv->pager, TRUE, FALSE);
166+ }
167 }
168
169 if (priv->fullsize == FALSE)
170 os_pager_show (priv->pager);
171
172- if (gtk_widget_get_realized (widget) && priv->filter == FALSE)
173+ if (!is_insensitive (scrollbar))
174 {
175- priv->filter = TRUE;
176- gdk_window_add_filter (gtk_widget_get_window (widget), window_filter_func, scrollbar);
177+ priv->proximity = TRUE;
178+
179+ if (gtk_widget_get_realized (widget) && priv->filter == FALSE)
180+ {
181+ priv->filter = TRUE;
182+ gdk_window_add_filter (gtk_widget_get_window (widget), window_filter_func, scrollbar);
183+ }
184 }
185 }
186
187@@ -2967,7 +2997,73 @@
188 gtk_widget_set_allocation (widget, allocation);
189 }
190
191-#ifndef USE_GTK3
192+/* set the scrollbar to be insensitive */
193+static void
194+set_insensitive (OsScrollbar *scrollbar)
195+{
196+ OsScrollbarPrivate *priv;
197+
198+ priv = scrollbar->priv;
199+
200+ priv->proximity = FALSE;
201+
202+ if (gtk_widget_get_realized (GTK_WIDGET (scrollbar)) && priv->filter == TRUE)
203+ {
204+ priv->filter = FALSE;
205+ gdk_window_remove_filter (gtk_widget_get_window (GTK_WIDGET (scrollbar)), window_filter_func, scrollbar);
206+ }
207+
208+ os_pager_set_active (priv->pager, FALSE, FALSE);
209+
210+ gtk_widget_hide (priv->thumb);
211+}
212+
213+/* set the scrollbar to be sensitive */
214+static void
215+set_sensitive (OsScrollbar *scrollbar)
216+{
217+ OsScrollbarPrivate *priv;
218+
219+ priv = scrollbar->priv;
220+
221+ priv->proximity = TRUE;
222+
223+ if (gtk_widget_get_realized (GTK_WIDGET (scrollbar)) && priv->filter == FALSE)
224+ {
225+ priv->filter = TRUE;
226+ gdk_window_add_filter (gtk_widget_get_window (GTK_WIDGET (scrollbar)), window_filter_func, scrollbar);
227+ }
228+
229+ if (priv->active_window)
230+ os_pager_set_active (priv->pager, TRUE, FALSE);
231+ else
232+ {
233+ gint x, y;
234+
235+ gdk_window_get_pointer (gtk_widget_get_window (GTK_WIDGET (scrollbar)), &x, &y, NULL);
236+
237+ /* when the window is unfocused,
238+ * check the position of the pointer
239+ * and set the state accordingly. */
240+ pager_set_state_from_pointer (scrollbar, x, y);
241+ }
242+}
243+
244+#ifdef USE_GTK3
245+static void
246+os_scrollbar_state_flags_changed (GtkWidget *widget,
247+ GtkStateFlags flags)
248+{
249+ OsScrollbar *scrollbar;
250+
251+ scrollbar = OS_SCROLLBAR (widget);
252+
253+ if ((gtk_widget_get_state_flags (widget) & GTK_STATE_FLAG_INSENSITIVE) != 0)
254+ set_insensitive (scrollbar);
255+ else
256+ set_sensitive (scrollbar);
257+}
258+#else
259 static void
260 os_scrollbar_size_request (GtkWidget *widget,
261 GtkRequisition *requisition)
262@@ -2985,6 +3081,20 @@
263
264 widget->requisition = *requisition;
265 }
266+
267+static void
268+os_scrollbar_state_changed (GtkWidget *widget,
269+ GtkStateType state)
270+{
271+ OsScrollbar *scrollbar;
272+
273+ scrollbar = OS_SCROLLBAR (widget);
274+
275+ if (gtk_widget_get_state (widget) == GTK_STATE_INSENSITIVE)
276+ set_insensitive (scrollbar);
277+ else
278+ set_sensitive (scrollbar);
279+}
280 #endif
281
282 static void

Subscribers

People subscribed via source and target branches