Merge lp:~cimi/overlay-scrollbar/g-source-remove-for-timeout into lp:overlay-scrollbar
- g-source-remove-for-timeout
- Merge into trunk
Proposed by
Andrea Cimitan
Status: | Merged |
---|---|
Merged at revision: | 195 |
Proposed branch: | lp:~cimi/overlay-scrollbar/g-source-remove-for-timeout |
Merge into: | lp:overlay-scrollbar |
Diff against target: |
278 lines (+122/-22) 1 file modified
os/os-scrollbar.c (+122/-22) |
To merge this branch: | bzr merge lp:~cimi/overlay-scrollbar/g-source-remove-for-timeout |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Loïc Molinari (community) | Approve | ||
Kalle Valo (community) | Approve | ||
Review via email: mp+56370@code.launchpad.net |
Commit message
Description of the change
As the bugreport... seems cleaner and safer
To post a comment you must log in.
Revision history for this message
Andrea Cimitan (cimi) wrote : | # |
- 195. By Andrea Cimitan
-
Don't set source_ids to 0 if I'm later assigning them the value returned from g_timeout_add
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-04 21:29:28 +0000 | |||
3 | +++ os/os-scrollbar.c 2011-04-05 15:24:51 +0000 | |||
4 | @@ -55,17 +55,22 @@ | |||
5 | 55 | gboolean enter_notify_event; | 55 | gboolean enter_notify_event; |
6 | 56 | gboolean motion_notify_event; | 56 | gboolean motion_notify_event; |
7 | 57 | gboolean value_changed_event; | 57 | gboolean value_changed_event; |
8 | 58 | gboolean can_deactivate_pager; | ||
9 | 59 | gboolean can_hide; | ||
10 | 60 | gboolean filter; | ||
11 | 58 | gboolean fullsize; | 61 | gboolean fullsize; |
12 | 62 | gboolean internal; | ||
13 | 63 | gboolean lock_position; | ||
14 | 59 | gboolean proximity; | 64 | gboolean proximity; |
15 | 60 | gboolean filter; | ||
16 | 61 | gboolean can_deactivate_pager; | ||
17 | 62 | gboolean can_hide; | ||
18 | 63 | gint win_x; | 65 | gint win_x; |
19 | 64 | gint win_y; | 66 | gint win_y; |
20 | 65 | gint slide_initial_slider_position; | 67 | gint slide_initial_slider_position; |
21 | 66 | gint slide_initial_coordinate; | 68 | gint slide_initial_coordinate; |
22 | 67 | gint pointer_x; | 69 | gint pointer_x; |
23 | 68 | gint pointer_y; | 70 | gint pointer_y; |
24 | 71 | guint32 source_deactivate_pager_id; | ||
25 | 72 | guint32 source_hide_thumb_id; | ||
26 | 73 | guint32 source_unlock_thumb_id; | ||
27 | 69 | }; | 74 | }; |
28 | 70 | 75 | ||
29 | 71 | static gboolean os_scrollbar_expose_event (GtkWidget *widget, GdkEventExpose *event); | 76 | static gboolean os_scrollbar_expose_event (GtkWidget *widget, GdkEventExpose *event); |
30 | @@ -86,6 +91,7 @@ | |||
31 | 86 | static gboolean os_scrollbar_deactivate_pager_cb (gpointer user_data); | 91 | static gboolean os_scrollbar_deactivate_pager_cb (gpointer user_data); |
32 | 87 | static void os_scrollbar_hide_thumb (OsScrollbar *scrollbar); | 92 | static void os_scrollbar_hide_thumb (OsScrollbar *scrollbar); |
33 | 88 | static gboolean os_scrollbar_hide_thumb_cb (gpointer user_data); | 93 | static gboolean os_scrollbar_hide_thumb_cb (gpointer user_data); |
34 | 94 | static gboolean os_scrollbar_unlock_thumb_cb (gpointer user_data); | ||
35 | 89 | static void os_scrollbar_move (OsScrollbar *scrollbar, gint mouse_x, gint mouse_y); | 95 | static void os_scrollbar_move (OsScrollbar *scrollbar, gint mouse_x, gint mouse_y); |
36 | 90 | static void os_scrollbar_move_thumb (OsScrollbar *scrollbar, gint x, gint y); | 96 | static void os_scrollbar_move_thumb (OsScrollbar *scrollbar, gint x, gint y); |
37 | 91 | static void os_scrollbar_notify_adjustment_cb (GObject *object, gpointer user_data); | 97 | static void os_scrollbar_notify_adjustment_cb (GObject *object, gpointer user_data); |
38 | @@ -350,10 +356,14 @@ | |||
39 | 350 | static gboolean | 356 | static gboolean |
40 | 351 | os_scrollbar_deactivate_pager_cb (gpointer user_data) | 357 | os_scrollbar_deactivate_pager_cb (gpointer user_data) |
41 | 352 | { | 358 | { |
43 | 353 | OsScrollbar *scrollbar = OS_SCROLLBAR (user_data); | 359 | OsScrollbar *scrollbar; |
44 | 360 | OsScrollbarPrivate *priv; | ||
45 | 361 | |||
46 | 362 | scrollbar = OS_SCROLLBAR (user_data); | ||
47 | 363 | priv = scrollbar->priv; | ||
48 | 354 | 364 | ||
49 | 355 | os_scrollbar_deactivate_pager (scrollbar); | 365 | os_scrollbar_deactivate_pager (scrollbar); |
51 | 356 | g_object_unref (scrollbar); | 366 | priv->source_deactivate_pager_id = 0; |
52 | 357 | 367 | ||
53 | 358 | return FALSE; | 368 | return FALSE; |
54 | 359 | } | 369 | } |
55 | @@ -376,10 +386,31 @@ | |||
56 | 376 | static gboolean | 386 | static gboolean |
57 | 377 | os_scrollbar_hide_thumb_cb (gpointer user_data) | 387 | os_scrollbar_hide_thumb_cb (gpointer user_data) |
58 | 378 | { | 388 | { |
60 | 379 | OsScrollbar *scrollbar = OS_SCROLLBAR (user_data); | 389 | OsScrollbar *scrollbar; |
61 | 390 | OsScrollbarPrivate *priv; | ||
62 | 391 | |||
63 | 392 | scrollbar = OS_SCROLLBAR (user_data); | ||
64 | 393 | priv = scrollbar->priv; | ||
65 | 380 | 394 | ||
66 | 381 | os_scrollbar_hide_thumb (scrollbar); | 395 | os_scrollbar_hide_thumb (scrollbar); |
68 | 382 | g_object_unref (scrollbar); | 396 | priv->source_hide_thumb_id = 0; |
69 | 397 | |||
70 | 398 | return FALSE; | ||
71 | 399 | } | ||
72 | 400 | |||
73 | 401 | static gboolean | ||
74 | 402 | os_scrollbar_unlock_thumb_cb (gpointer user_data) | ||
75 | 403 | { | ||
76 | 404 | OsScrollbar *scrollbar; | ||
77 | 405 | OsScrollbarPrivate *priv; | ||
78 | 406 | |||
79 | 407 | scrollbar = OS_SCROLLBAR (user_data); | ||
80 | 408 | priv = scrollbar->priv; | ||
81 | 409 | |||
82 | 410 | if (priv->can_hide) | ||
83 | 411 | priv->lock_position = FALSE; | ||
84 | 412 | |||
85 | 413 | priv->source_unlock_thumb_id = 0; | ||
86 | 383 | 414 | ||
87 | 384 | return FALSE; | 415 | return FALSE; |
88 | 385 | } | 416 | } |
89 | @@ -473,7 +504,13 @@ | |||
90 | 473 | if (priv->orientation == GTK_ORIENTATION_VERTICAL && | 504 | if (priv->orientation == GTK_ORIENTATION_VERTICAL && |
91 | 474 | (n_monitor != gdk_screen_get_monitor_at_point (screen, x - 1 + priv->slider.width, y) || | 505 | (n_monitor != gdk_screen_get_monitor_at_point (screen, x - 1 + priv->slider.width, y) || |
92 | 475 | (x - 1 + priv->slider.width) >= screen_width)) | 506 | (x - 1 + priv->slider.width) >= screen_width)) |
94 | 476 | return x - DEFAULT_PAGER_WIDTH - priv->slider.width; | 507 | { |
95 | 508 | priv->internal = TRUE; | ||
96 | 509 | return x - DEFAULT_PAGER_WIDTH - priv->slider.width; | ||
97 | 510 | } | ||
98 | 511 | |||
99 | 512 | if (priv->orientation == GTK_ORIENTATION_VERTICAL) | ||
100 | 513 | priv->internal = FALSE; | ||
101 | 477 | 514 | ||
102 | 478 | return x; | 515 | return x; |
103 | 479 | } | 516 | } |
104 | @@ -501,7 +538,13 @@ | |||
105 | 501 | if (priv->orientation == GTK_ORIENTATION_HORIZONTAL && | 538 | if (priv->orientation == GTK_ORIENTATION_HORIZONTAL && |
106 | 502 | (n_monitor != gdk_screen_get_monitor_at_point (screen, x, y - 1 + priv->slider.height) || | 539 | (n_monitor != gdk_screen_get_monitor_at_point (screen, x, y - 1 + priv->slider.height) || |
107 | 503 | (y - 1 + priv->slider.height) >= screen_height)) | 540 | (y - 1 + priv->slider.height) >= screen_height)) |
109 | 504 | return y - DEFAULT_PAGER_WIDTH - priv->slider.height; | 541 | { |
110 | 542 | priv->internal = TRUE; | ||
111 | 543 | return y - DEFAULT_PAGER_WIDTH - priv->slider.height; | ||
112 | 544 | } | ||
113 | 545 | |||
114 | 546 | if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) | ||
115 | 547 | priv->internal = FALSE; | ||
116 | 505 | 548 | ||
117 | 506 | return y; | 549 | return y; |
118 | 507 | } | 550 | } |
119 | @@ -715,6 +758,9 @@ | |||
120 | 715 | priv->can_deactivate_pager = FALSE; | 758 | priv->can_deactivate_pager = FALSE; |
121 | 716 | priv->can_hide = FALSE; | 759 | priv->can_hide = FALSE; |
122 | 717 | 760 | ||
123 | 761 | if (priv->internal) | ||
124 | 762 | priv->lock_position = TRUE; | ||
125 | 763 | |||
126 | 718 | return FALSE; | 764 | return FALSE; |
127 | 719 | } | 765 | } |
128 | 720 | 766 | ||
129 | @@ -735,10 +781,19 @@ | |||
130 | 735 | priv->can_hide = TRUE; | 781 | priv->can_hide = TRUE; |
131 | 736 | } | 782 | } |
132 | 737 | 783 | ||
137 | 738 | g_timeout_add (TIMEOUT_THUMB_HIDE, os_scrollbar_deactivate_pager_cb, | 784 | if (priv->source_deactivate_pager_id != 0) |
138 | 739 | g_object_ref (scrollbar)); | 785 | g_source_remove (priv->source_deactivate_pager_id); |
139 | 740 | g_timeout_add (TIMEOUT_THUMB_HIDE, os_scrollbar_hide_thumb_cb, | 786 | |
140 | 741 | g_object_ref (scrollbar)); | 787 | priv->source_deactivate_pager_id = g_timeout_add (TIMEOUT_THUMB_HIDE, |
141 | 788 | os_scrollbar_deactivate_pager_cb, | ||
142 | 789 | scrollbar); | ||
143 | 790 | |||
144 | 791 | if (priv->source_hide_thumb_id != 0) | ||
145 | 792 | g_source_remove (priv->source_hide_thumb_id); | ||
146 | 793 | |||
147 | 794 | priv->source_hide_thumb_id = g_timeout_add (TIMEOUT_THUMB_HIDE, | ||
148 | 795 | os_scrollbar_hide_thumb_cb, | ||
149 | 796 | scrollbar); | ||
150 | 742 | 797 | ||
151 | 743 | return FALSE; | 798 | return FALSE; |
152 | 744 | } | 799 | } |
153 | @@ -1057,6 +1112,8 @@ | |||
154 | 1057 | if (!priv->enter_notify_event) | 1112 | if (!priv->enter_notify_event) |
155 | 1058 | gtk_widget_hide (GTK_WIDGET (priv->thumb)); | 1113 | gtk_widget_hide (GTK_WIDGET (priv->thumb)); |
156 | 1059 | 1114 | ||
157 | 1115 | priv->lock_position = FALSE; | ||
158 | 1116 | |||
159 | 1060 | os_scrollbar_calc_layout_pager (scrollbar, priv->adjustment->value); | 1117 | os_scrollbar_calc_layout_pager (scrollbar, priv->adjustment->value); |
160 | 1061 | os_scrollbar_calc_layout_slider (scrollbar, priv->adjustment->value); | 1118 | os_scrollbar_calc_layout_slider (scrollbar, priv->adjustment->value); |
161 | 1062 | 1119 | ||
162 | @@ -1102,6 +1159,9 @@ | |||
163 | 1102 | { | 1159 | { |
164 | 1103 | priv->can_hide = FALSE; | 1160 | priv->can_hide = FALSE; |
165 | 1104 | 1161 | ||
166 | 1162 | if (priv->lock_position) | ||
167 | 1163 | return GDK_FILTER_CONTINUE; | ||
168 | 1164 | |||
169 | 1105 | if (priv->overlay.height > priv->slider.height) | 1165 | if (priv->overlay.height > priv->slider.height) |
170 | 1106 | { | 1166 | { |
171 | 1107 | gint x, y, x_pos, y_pos; | 1167 | gint x, y, x_pos, y_pos; |
172 | @@ -1125,6 +1185,7 @@ | |||
173 | 1125 | else | 1185 | else |
174 | 1126 | { | 1186 | { |
175 | 1127 | priv->can_hide = TRUE; | 1187 | priv->can_hide = TRUE; |
176 | 1188 | priv->lock_position = FALSE; | ||
177 | 1128 | os_scrollbar_hide_thumb (scrollbar); | 1189 | os_scrollbar_hide_thumb (scrollbar); |
178 | 1129 | } | 1190 | } |
179 | 1130 | } | 1191 | } |
180 | @@ -1137,6 +1198,9 @@ | |||
181 | 1137 | { | 1198 | { |
182 | 1138 | priv->can_hide = FALSE; | 1199 | priv->can_hide = FALSE; |
183 | 1139 | 1200 | ||
184 | 1201 | if (priv->lock_position) | ||
185 | 1202 | return GDK_FILTER_CONTINUE; | ||
186 | 1203 | |||
187 | 1140 | if (priv->overlay.width > priv->slider.width) | 1204 | if (priv->overlay.width > priv->slider.width) |
188 | 1141 | { | 1205 | { |
189 | 1142 | gint x, y, x_pos, y_pos; | 1206 | gint x, y, x_pos, y_pos; |
190 | @@ -1160,15 +1224,12 @@ | |||
191 | 1160 | else | 1224 | else |
192 | 1161 | { | 1225 | { |
193 | 1162 | priv->can_hide = TRUE; | 1226 | priv->can_hide = TRUE; |
194 | 1227 | priv->lock_position = FALSE; | ||
195 | 1163 | os_scrollbar_hide_thumb (scrollbar); | 1228 | os_scrollbar_hide_thumb (scrollbar); |
196 | 1164 | } | 1229 | } |
197 | 1165 | } | 1230 | } |
198 | 1166 | } | 1231 | } |
199 | 1167 | } | 1232 | } |
200 | 1168 | else | ||
201 | 1169 | { | ||
202 | 1170 | return GDK_FILTER_CONTINUE; | ||
203 | 1171 | } | ||
204 | 1172 | 1233 | ||
205 | 1173 | return GDK_FILTER_CONTINUE; | 1234 | return GDK_FILTER_CONTINUE; |
206 | 1174 | } | 1235 | } |
207 | @@ -1188,10 +1249,26 @@ | |||
208 | 1188 | priv->can_deactivate_pager = TRUE; | 1249 | priv->can_deactivate_pager = TRUE; |
209 | 1189 | priv->can_hide = TRUE; | 1250 | priv->can_hide = TRUE; |
210 | 1190 | 1251 | ||
215 | 1191 | g_timeout_add (TIMEOUT_TOPLEVEL_HIDE, os_scrollbar_deactivate_pager_cb, | 1252 | if (priv->source_deactivate_pager_id != 0) |
216 | 1192 | g_object_ref (scrollbar)); | 1253 | g_source_remove (priv->source_deactivate_pager_id); |
217 | 1193 | g_timeout_add (TIMEOUT_TOPLEVEL_HIDE, os_scrollbar_hide_thumb_cb, | 1254 | |
218 | 1194 | g_object_ref (scrollbar)); | 1255 | priv->source_deactivate_pager_id = g_timeout_add (TIMEOUT_TOPLEVEL_HIDE, |
219 | 1256 | os_scrollbar_deactivate_pager_cb, | ||
220 | 1257 | scrollbar); | ||
221 | 1258 | |||
222 | 1259 | if (priv->source_hide_thumb_id != 0) | ||
223 | 1260 | g_source_remove (priv->source_hide_thumb_id); | ||
224 | 1261 | |||
225 | 1262 | priv->source_hide_thumb_id = g_timeout_add (TIMEOUT_TOPLEVEL_HIDE, | ||
226 | 1263 | os_scrollbar_hide_thumb_cb, | ||
227 | 1264 | scrollbar); | ||
228 | 1265 | |||
229 | 1266 | if (priv->source_unlock_thumb_id != 0) | ||
230 | 1267 | g_source_remove (priv->source_unlock_thumb_id); | ||
231 | 1268 | |||
232 | 1269 | priv->source_unlock_thumb_id = g_timeout_add (TIMEOUT_TOPLEVEL_HIDE, | ||
233 | 1270 | os_scrollbar_unlock_thumb_cb, | ||
234 | 1271 | scrollbar); | ||
235 | 1195 | 1272 | ||
236 | 1196 | return FALSE; | 1273 | return FALSE; |
237 | 1197 | } | 1274 | } |
238 | @@ -1237,9 +1314,14 @@ | |||
239 | 1237 | 1314 | ||
240 | 1238 | priv->can_deactivate_pager = TRUE; | 1315 | priv->can_deactivate_pager = TRUE; |
241 | 1239 | priv->can_hide = TRUE; | 1316 | priv->can_hide = TRUE; |
242 | 1317 | priv->filter = FALSE; | ||
243 | 1240 | priv->fullsize = FALSE; | 1318 | priv->fullsize = FALSE; |
244 | 1319 | priv->internal = FALSE; | ||
245 | 1320 | priv->lock_position = FALSE; | ||
246 | 1241 | priv->proximity = FALSE; | 1321 | priv->proximity = FALSE; |
248 | 1242 | priv->filter = FALSE; | 1322 | priv->source_deactivate_pager_id = 0; |
249 | 1323 | priv->source_hide_thumb_id = 0; | ||
250 | 1324 | priv->source_unlock_thumb_id = 0; | ||
251 | 1243 | 1325 | ||
252 | 1244 | priv->pager = os_pager_new (); | 1326 | priv->pager = os_pager_new (); |
253 | 1245 | 1327 | ||
254 | @@ -1259,6 +1341,24 @@ | |||
255 | 1259 | scrollbar = OS_SCROLLBAR (object); | 1341 | scrollbar = OS_SCROLLBAR (object); |
256 | 1260 | priv = scrollbar->priv; | 1342 | priv = scrollbar->priv; |
257 | 1261 | 1343 | ||
258 | 1344 | if (priv->source_deactivate_pager_id != 0) | ||
259 | 1345 | { | ||
260 | 1346 | g_source_remove (priv->source_deactivate_pager_id); | ||
261 | 1347 | priv->source_deactivate_pager_id = 0; | ||
262 | 1348 | } | ||
263 | 1349 | |||
264 | 1350 | if (priv->source_hide_thumb_id != 0) | ||
265 | 1351 | { | ||
266 | 1352 | g_source_remove (priv->source_hide_thumb_id); | ||
267 | 1353 | priv->source_hide_thumb_id = 0; | ||
268 | 1354 | } | ||
269 | 1355 | |||
270 | 1356 | if (priv->source_unlock_thumb_id != 0) | ||
271 | 1357 | { | ||
272 | 1358 | g_source_remove (priv->source_unlock_thumb_id); | ||
273 | 1359 | priv->source_unlock_thumb_id = 0; | ||
274 | 1360 | } | ||
275 | 1361 | |||
276 | 1262 | if (priv->pager != NULL) | 1362 | if (priv->pager != NULL) |
277 | 1263 | { | 1363 | { |
278 | 1264 | g_object_unref (priv->pager); | 1364 | g_object_unref (priv->pager); |
this branch follows lp:~cimi/ayatana-scrollbar/lock-internal-thumb