Merge lp:~cimi/overlay-scrollbar/g-source-remove-for-timeout into lp:overlay-scrollbar

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
Reviewer Review Type Date Requested Status
Loïc Molinari (community) Approve
Kalle Valo (community) Approve
Review via email: mp+56370@code.launchpad.net

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 :
Revision history for this message
Kalle Valo (kvalo) wrote :

Looks good to me.

review: Approve
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
Kalle Valo (kvalo) wrote :

Update makes sense.

review: Approve
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
=== modified file 'os/os-scrollbar.c'
--- os/os-scrollbar.c 2011-04-04 21:29:28 +0000
+++ os/os-scrollbar.c 2011-04-05 15:24:51 +0000
@@ -55,17 +55,22 @@
55 gboolean enter_notify_event;55 gboolean enter_notify_event;
56 gboolean motion_notify_event;56 gboolean motion_notify_event;
57 gboolean value_changed_event;57 gboolean value_changed_event;
58 gboolean can_deactivate_pager;
59 gboolean can_hide;
60 gboolean filter;
58 gboolean fullsize;61 gboolean fullsize;
62 gboolean internal;
63 gboolean lock_position;
59 gboolean proximity;64 gboolean proximity;
60 gboolean filter;
61 gboolean can_deactivate_pager;
62 gboolean can_hide;
63 gint win_x;65 gint win_x;
64 gint win_y;66 gint win_y;
65 gint slide_initial_slider_position;67 gint slide_initial_slider_position;
66 gint slide_initial_coordinate;68 gint slide_initial_coordinate;
67 gint pointer_x;69 gint pointer_x;
68 gint pointer_y;70 gint pointer_y;
71 guint32 source_deactivate_pager_id;
72 guint32 source_hide_thumb_id;
73 guint32 source_unlock_thumb_id;
69};74};
7075
71static gboolean os_scrollbar_expose_event (GtkWidget *widget, GdkEventExpose *event);76static gboolean os_scrollbar_expose_event (GtkWidget *widget, GdkEventExpose *event);
@@ -86,6 +91,7 @@
86static gboolean os_scrollbar_deactivate_pager_cb (gpointer user_data);91static gboolean os_scrollbar_deactivate_pager_cb (gpointer user_data);
87static void os_scrollbar_hide_thumb (OsScrollbar *scrollbar);92static void os_scrollbar_hide_thumb (OsScrollbar *scrollbar);
88static gboolean os_scrollbar_hide_thumb_cb (gpointer user_data);93static gboolean os_scrollbar_hide_thumb_cb (gpointer user_data);
94static gboolean os_scrollbar_unlock_thumb_cb (gpointer user_data);
89static void os_scrollbar_move (OsScrollbar *scrollbar, gint mouse_x, gint mouse_y);95static void os_scrollbar_move (OsScrollbar *scrollbar, gint mouse_x, gint mouse_y);
90static void os_scrollbar_move_thumb (OsScrollbar *scrollbar, gint x, gint y);96static void os_scrollbar_move_thumb (OsScrollbar *scrollbar, gint x, gint y);
91static void os_scrollbar_notify_adjustment_cb (GObject *object, gpointer user_data);97static void os_scrollbar_notify_adjustment_cb (GObject *object, gpointer user_data);
@@ -350,10 +356,14 @@
350static gboolean356static gboolean
351os_scrollbar_deactivate_pager_cb (gpointer user_data)357os_scrollbar_deactivate_pager_cb (gpointer user_data)
352{358{
353 OsScrollbar *scrollbar = OS_SCROLLBAR (user_data);359 OsScrollbar *scrollbar;
360 OsScrollbarPrivate *priv;
361
362 scrollbar = OS_SCROLLBAR (user_data);
363 priv = scrollbar->priv;
354364
355 os_scrollbar_deactivate_pager (scrollbar);365 os_scrollbar_deactivate_pager (scrollbar);
356 g_object_unref (scrollbar);366 priv->source_deactivate_pager_id = 0;
357367
358 return FALSE;368 return FALSE;
359}369}
@@ -376,10 +386,31 @@
376static gboolean386static gboolean
377os_scrollbar_hide_thumb_cb (gpointer user_data)387os_scrollbar_hide_thumb_cb (gpointer user_data)
378{388{
379 OsScrollbar *scrollbar = OS_SCROLLBAR (user_data);389 OsScrollbar *scrollbar;
390 OsScrollbarPrivate *priv;
391
392 scrollbar = OS_SCROLLBAR (user_data);
393 priv = scrollbar->priv;
380394
381 os_scrollbar_hide_thumb (scrollbar);395 os_scrollbar_hide_thumb (scrollbar);
382 g_object_unref (scrollbar);396 priv->source_hide_thumb_id = 0;
397
398 return FALSE;
399}
400
401static gboolean
402os_scrollbar_unlock_thumb_cb (gpointer user_data)
403{
404 OsScrollbar *scrollbar;
405 OsScrollbarPrivate *priv;
406
407 scrollbar = OS_SCROLLBAR (user_data);
408 priv = scrollbar->priv;
409
410 if (priv->can_hide)
411 priv->lock_position = FALSE;
412
413 priv->source_unlock_thumb_id = 0;
383414
384 return FALSE;415 return FALSE;
385}416}
@@ -473,7 +504,13 @@
473 if (priv->orientation == GTK_ORIENTATION_VERTICAL &&504 if (priv->orientation == GTK_ORIENTATION_VERTICAL &&
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) ||
475 (x - 1 + priv->slider.width) >= screen_width))506 (x - 1 + priv->slider.width) >= screen_width))
476 return x - DEFAULT_PAGER_WIDTH - priv->slider.width;507 {
508 priv->internal = TRUE;
509 return x - DEFAULT_PAGER_WIDTH - priv->slider.width;
510 }
511
512 if (priv->orientation == GTK_ORIENTATION_VERTICAL)
513 priv->internal = FALSE;
477514
478 return x;515 return x;
479}516}
@@ -501,7 +538,13 @@
501 if (priv->orientation == GTK_ORIENTATION_HORIZONTAL &&538 if (priv->orientation == GTK_ORIENTATION_HORIZONTAL &&
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) ||
503 (y - 1 + priv->slider.height) >= screen_height))540 (y - 1 + priv->slider.height) >= screen_height))
504 return y - DEFAULT_PAGER_WIDTH - priv->slider.height;541 {
542 priv->internal = TRUE;
543 return y - DEFAULT_PAGER_WIDTH - priv->slider.height;
544 }
545
546 if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
547 priv->internal = FALSE;
505548
506 return y;549 return y;
507}550}
@@ -715,6 +758,9 @@
715 priv->can_deactivate_pager = FALSE;758 priv->can_deactivate_pager = FALSE;
716 priv->can_hide = FALSE;759 priv->can_hide = FALSE;
717760
761 if (priv->internal)
762 priv->lock_position = TRUE;
763
718 return FALSE;764 return FALSE;
719}765}
720766
@@ -735,10 +781,19 @@
735 priv->can_hide = TRUE;781 priv->can_hide = TRUE;
736 }782 }
737783
738 g_timeout_add (TIMEOUT_THUMB_HIDE, os_scrollbar_deactivate_pager_cb,784 if (priv->source_deactivate_pager_id != 0)
739 g_object_ref (scrollbar));785 g_source_remove (priv->source_deactivate_pager_id);
740 g_timeout_add (TIMEOUT_THUMB_HIDE, os_scrollbar_hide_thumb_cb,786
741 g_object_ref (scrollbar));787 priv->source_deactivate_pager_id = g_timeout_add (TIMEOUT_THUMB_HIDE,
788 os_scrollbar_deactivate_pager_cb,
789 scrollbar);
790
791 if (priv->source_hide_thumb_id != 0)
792 g_source_remove (priv->source_hide_thumb_id);
793
794 priv->source_hide_thumb_id = g_timeout_add (TIMEOUT_THUMB_HIDE,
795 os_scrollbar_hide_thumb_cb,
796 scrollbar);
742797
743 return FALSE;798 return FALSE;
744}799}
@@ -1057,6 +1112,8 @@
1057 if (!priv->enter_notify_event)1112 if (!priv->enter_notify_event)
1058 gtk_widget_hide (GTK_WIDGET (priv->thumb));1113 gtk_widget_hide (GTK_WIDGET (priv->thumb));
10591114
1115 priv->lock_position = FALSE;
1116
1060 os_scrollbar_calc_layout_pager (scrollbar, priv->adjustment->value);1117 os_scrollbar_calc_layout_pager (scrollbar, priv->adjustment->value);
1061 os_scrollbar_calc_layout_slider (scrollbar, priv->adjustment->value);1118 os_scrollbar_calc_layout_slider (scrollbar, priv->adjustment->value);
10621119
@@ -1102,6 +1159,9 @@
1102 {1159 {
1103 priv->can_hide = FALSE;1160 priv->can_hide = FALSE;
11041161
1162 if (priv->lock_position)
1163 return GDK_FILTER_CONTINUE;
1164
1105 if (priv->overlay.height > priv->slider.height)1165 if (priv->overlay.height > priv->slider.height)
1106 {1166 {
1107 gint x, y, x_pos, y_pos;1167 gint x, y, x_pos, y_pos;
@@ -1125,6 +1185,7 @@
1125 else1185 else
1126 {1186 {
1127 priv->can_hide = TRUE;1187 priv->can_hide = TRUE;
1188 priv->lock_position = FALSE;
1128 os_scrollbar_hide_thumb (scrollbar);1189 os_scrollbar_hide_thumb (scrollbar);
1129 }1190 }
1130 }1191 }
@@ -1137,6 +1198,9 @@
1137 {1198 {
1138 priv->can_hide = FALSE;1199 priv->can_hide = FALSE;
11391200
1201 if (priv->lock_position)
1202 return GDK_FILTER_CONTINUE;
1203
1140 if (priv->overlay.width > priv->slider.width)1204 if (priv->overlay.width > priv->slider.width)
1141 {1205 {
1142 gint x, y, x_pos, y_pos;1206 gint x, y, x_pos, y_pos;
@@ -1160,15 +1224,12 @@
1160 else1224 else
1161 {1225 {
1162 priv->can_hide = TRUE;1226 priv->can_hide = TRUE;
1227 priv->lock_position = FALSE;
1163 os_scrollbar_hide_thumb (scrollbar);1228 os_scrollbar_hide_thumb (scrollbar);
1164 }1229 }
1165 }1230 }
1166 }1231 }
1167 }1232 }
1168 else
1169 {
1170 return GDK_FILTER_CONTINUE;
1171 }
11721233
1173 return GDK_FILTER_CONTINUE;1234 return GDK_FILTER_CONTINUE;
1174}1235}
@@ -1188,10 +1249,26 @@
1188 priv->can_deactivate_pager = TRUE;1249 priv->can_deactivate_pager = TRUE;
1189 priv->can_hide = TRUE;1250 priv->can_hide = TRUE;
11901251
1191 g_timeout_add (TIMEOUT_TOPLEVEL_HIDE, os_scrollbar_deactivate_pager_cb,1252 if (priv->source_deactivate_pager_id != 0)
1192 g_object_ref (scrollbar));1253 g_source_remove (priv->source_deactivate_pager_id);
1193 g_timeout_add (TIMEOUT_TOPLEVEL_HIDE, os_scrollbar_hide_thumb_cb,1254
1194 g_object_ref (scrollbar));1255 priv->source_deactivate_pager_id = g_timeout_add (TIMEOUT_TOPLEVEL_HIDE,
1256 os_scrollbar_deactivate_pager_cb,
1257 scrollbar);
1258
1259 if (priv->source_hide_thumb_id != 0)
1260 g_source_remove (priv->source_hide_thumb_id);
1261
1262 priv->source_hide_thumb_id = g_timeout_add (TIMEOUT_TOPLEVEL_HIDE,
1263 os_scrollbar_hide_thumb_cb,
1264 scrollbar);
1265
1266 if (priv->source_unlock_thumb_id != 0)
1267 g_source_remove (priv->source_unlock_thumb_id);
1268
1269 priv->source_unlock_thumb_id = g_timeout_add (TIMEOUT_TOPLEVEL_HIDE,
1270 os_scrollbar_unlock_thumb_cb,
1271 scrollbar);
11951272
1196 return FALSE;1273 return FALSE;
1197}1274}
@@ -1237,9 +1314,14 @@
12371314
1238 priv->can_deactivate_pager = TRUE;1315 priv->can_deactivate_pager = TRUE;
1239 priv->can_hide = TRUE;1316 priv->can_hide = TRUE;
1317 priv->filter = FALSE;
1240 priv->fullsize = FALSE;1318 priv->fullsize = FALSE;
1319 priv->internal = FALSE;
1320 priv->lock_position = FALSE;
1241 priv->proximity = FALSE;1321 priv->proximity = FALSE;
1242 priv->filter = FALSE;1322 priv->source_deactivate_pager_id = 0;
1323 priv->source_hide_thumb_id = 0;
1324 priv->source_unlock_thumb_id = 0;
12431325
1244 priv->pager = os_pager_new ();1326 priv->pager = os_pager_new ();
12451327
@@ -1259,6 +1341,24 @@
1259 scrollbar = OS_SCROLLBAR (object);1341 scrollbar = OS_SCROLLBAR (object);
1260 priv = scrollbar->priv;1342 priv = scrollbar->priv;
12611343
1344 if (priv->source_deactivate_pager_id != 0)
1345 {
1346 g_source_remove (priv->source_deactivate_pager_id);
1347 priv->source_deactivate_pager_id = 0;
1348 }
1349
1350 if (priv->source_hide_thumb_id != 0)
1351 {
1352 g_source_remove (priv->source_hide_thumb_id);
1353 priv->source_hide_thumb_id = 0;
1354 }
1355
1356 if (priv->source_unlock_thumb_id != 0)
1357 {
1358 g_source_remove (priv->source_unlock_thumb_id);
1359 priv->source_unlock_thumb_id = 0;
1360 }
1361
1262 if (priv->pager != NULL)1362 if (priv->pager != NULL)
1263 {1363 {
1264 g_object_unref (priv->pager);1364 g_object_unref (priv->pager);

Subscribers

People subscribed via source and target branches