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
=== modified file 'configure.ac'
--- configure.ac 2011-07-08 14:31:22 +0000
+++ configure.ac 2011-07-14 14:36:37 +0000
@@ -2,7 +2,7 @@
22
3# Package3# Package
44
5AC_INIT([overlay-scrollbar],[0.2.4],[https://bugs.launchpad.net/ayatana-scrollbar],[overlay-scrollbar])5AC_INIT([overlay-scrollbar],[0.2.4.1],[https://bugs.launchpad.net/ayatana-scrollbar],[overlay-scrollbar])
6AC_CONFIG_SRCDIR([os/os-scrollbar.h])6AC_CONFIG_SRCDIR([os/os-scrollbar.h])
7AC_CONFIG_MACRO_DIR([build])7AC_CONFIG_MACRO_DIR([build])
8AC_CONFIG_AUX_DIR([build])8AC_CONFIG_AUX_DIR([build])
99
=== modified file 'os/os-scrollbar.c'
--- os/os-scrollbar.c 2011-07-08 11:50:38 +0000
+++ os/os-scrollbar.c 2011-07-14 14:36:37 +0000
@@ -144,8 +144,11 @@
144static void os_scrollbar_realize (GtkWidget *widget);144static void os_scrollbar_realize (GtkWidget *widget);
145static void os_scrollbar_show (GtkWidget *widget);145static void os_scrollbar_show (GtkWidget *widget);
146static void os_scrollbar_size_allocate (GtkWidget *widget, GdkRectangle *allocation);146static void os_scrollbar_size_allocate (GtkWidget *widget, GdkRectangle *allocation);
147#ifndef USE_GTK3147#ifdef USE_GTK3
148static void os_scrollbar_state_flags_changed (GtkWidget *widget, GtkStateFlags flags);
149#else
148static void os_scrollbar_size_request (GtkWidget *widget, GtkRequisition *requisition);150static void os_scrollbar_size_request (GtkWidget *widget, GtkRequisition *requisition);
151static void os_scrollbar_state_changed (GtkWidget *widget, GtkStateType state);
149#endif152#endif
150static void os_scrollbar_unmap (GtkWidget *widget);153static void os_scrollbar_unmap (GtkWidget *widget);
151static void os_scrollbar_unrealize (GtkWidget *widget);154static void os_scrollbar_unrealize (GtkWidget *widget);
@@ -382,6 +385,17 @@
382 return FALSE;385 return FALSE;
383}386}
384387
388/* return TRUE if the widget is insensitive */
389static gboolean
390is_insensitive (OsScrollbar *scrollbar)
391{
392#ifdef USE_GTK3
393 return (gtk_widget_get_state_flags (GTK_WIDGET (scrollbar)) & GTK_STATE_FLAG_INSENSITIVE) != 0;
394#else
395 return gtk_widget_get_state (GTK_WIDGET (scrollbar)) == GTK_STATE_INSENSITIVE;
396#endif
397}
398
385/* move the pager */399/* move the pager */
386static void400static void
387move_pager (OsScrollbar *scrollbar)401move_pager (OsScrollbar *scrollbar)
@@ -1081,6 +1095,10 @@
10811095
1082 OS_DCHECK (scrollbar != NULL);1096 OS_DCHECK (scrollbar != NULL);
10831097
1098 /* return if the scrollbar is insensitive */
1099 if (is_insensitive (scrollbar))
1100 return;
1101
1084 if (gtk_widget_get_mapped (GTK_WIDGET (scrollbar)))1102 if (gtk_widget_get_mapped (GTK_WIDGET (scrollbar)))
1085 {1103 {
1086 if (gtk_widget_get_window (gtk_widget_get_toplevel (GTK_WIDGET (scrollbar))) ==1104 if (gtk_widget_get_window (gtk_widget_get_toplevel (GTK_WIDGET (scrollbar))) ==
@@ -1869,11 +1887,13 @@
1869 const gint64 current_time = g_get_monotonic_time ();1887 const gint64 current_time = g_get_monotonic_time ();
1870 const gint64 end_time = priv->present_time + TIMEOUT_PRESENT_WINDOW * 1000;1888 const gint64 end_time = priv->present_time + TIMEOUT_PRESENT_WINDOW * 1000;
18711889
1872 /* if the widget is mapped and the configure-event happens1890 /* if the widget is mapped, is not insentitive
1873 * after the PropertyNotify _NET_ACTIVE_WINDOW event,1891 * and the configure-event happens after
1892 * the PropertyNotify _NET_ACTIVE_WINDOW event,
1874 * see if the mouse pointer is over this window, if TRUE,1893 * see if the mouse pointer is over this window, if TRUE,
1875 * proceed with pager_set_state_from_pointer. */1894 * proceed with pager_set_state_from_pointer. */
1876 if ((current_time > end_time) &&1895 if (!is_insensitive (scrollbar) &&
1896 (current_time > end_time) &&
1877 gtk_widget_get_mapped (GTK_WIDGET (scrollbar)))1897 gtk_widget_get_mapped (GTK_WIDGET (scrollbar)))
1878 {1898 {
1879 if (!priv->active_window)1899 if (!priv->active_window)
@@ -1896,7 +1916,7 @@
1896 {1916 {
1897 gint x, y;1917 gint x, y;
18981918
1899 gtk_widget_get_pointer (widget, &x, &y);1919 gdk_window_get_pointer (gtk_widget_get_window (GTK_WIDGET (scrollbar)), &x, &y, NULL);
19001920
1901 /* when the window is resized (maximize/restore),1921 /* when the window is resized (maximize/restore),
1902 * check the position of the pointer1922 * check the position of the pointer
@@ -2124,7 +2144,7 @@
2124 {2144 {
2125 /* react to motion_notify_event2145 /* react to motion_notify_event
2126 * and set the state accordingly. */2146 * and set the state accordingly. */
2127 if (!priv->active_window)2147 if (!is_insensitive (scrollbar) && !priv->active_window)
2128 pager_set_state_from_pointer (scrollbar, xiev->event_x, xiev->event_y);2148 pager_set_state_from_pointer (scrollbar, xiev->event_x, xiev->event_y);
21292149
2130 /* proximity area */2150 /* proximity area */
@@ -2391,7 +2411,7 @@
2391 {2411 {
2392 /* react to motion_notify_event2412 /* react to motion_notify_event
2393 * and set the state accordingly. */2413 * and set the state accordingly. */
2394 if (!priv->active_window)2414 if (!is_insensitive (scrollbar) && !priv->active_window)
2395 pager_set_state_from_pointer (scrollbar, xev->xmotion.x, xev->xmotion.y);2415 pager_set_state_from_pointer (scrollbar, xev->xmotion.x, xev->xmotion.y);
23962416
2397 /* proximity area */2417 /* proximity area */
@@ -2512,8 +2532,11 @@
2512 widget_class->realize = os_scrollbar_realize;2532 widget_class->realize = os_scrollbar_realize;
2513 widget_class->show = os_scrollbar_show;2533 widget_class->show = os_scrollbar_show;
2514 widget_class->size_allocate = os_scrollbar_size_allocate;2534 widget_class->size_allocate = os_scrollbar_size_allocate;
2515#ifndef USE_GTK32535#ifdef USE_GTK3
2536 widget_class->state_flags_changed = os_scrollbar_state_flags_changed;
2537#else
2516 widget_class->size_request = os_scrollbar_size_request;2538 widget_class->size_request = os_scrollbar_size_request;
2539 widget_class->state_changed = os_scrollbar_state_changed;
2517#endif2540#endif
2518 widget_class->unmap = os_scrollbar_unmap;2541 widget_class->unmap = os_scrollbar_unmap;
2519 widget_class->unrealize = os_scrollbar_unrealize;2542 widget_class->unrealize = os_scrollbar_unrealize;
@@ -2753,8 +2776,6 @@
27532776
2754 GTK_WIDGET_CLASS (g_type_class_peek (GTK_TYPE_WIDGET))->map (widget);2777 GTK_WIDGET_CLASS (g_type_class_peek (GTK_TYPE_WIDGET))->map (widget);
27552778
2756 priv->proximity = TRUE;
2757
2758 /* on map, check for the active window. */2779 /* on map, check for the active window. */
2759 if (gtk_widget_get_window (gtk_widget_get_toplevel (widget)) ==2780 if (gtk_widget_get_window (gtk_widget_get_toplevel (widget)) ==
2760 gdk_screen_get_active_window (gtk_widget_get_screen (widget)))2781 gdk_screen_get_active_window (gtk_widget_get_screen (widget)))
@@ -2771,32 +2792,41 @@
2771 else2792 else
2772 priv->active_window = FALSE;2793 priv->active_window = FALSE;
27732794
2774 if (!priv->active_window)2795 if (!is_insensitive (scrollbar))
2775 {2796 {
2776 gint x, y;2797 if (!priv->active_window)
2777 gtk_widget_get_pointer (gtk_widget_get_toplevel (widget), &x, &y);2798 {
27782799 gint x, y;
2779 /* when the scrollbar appears on screen (mapped),2800
2780 * for example when switching notebook page,2801 gdk_window_get_pointer (gtk_widget_get_window (GTK_WIDGET (scrollbar)), &x, &y, NULL);
2781 * check the position of the pointer2802
2782 * and set the state accordingly. */2803 /* when the scrollbar appears on screen (mapped),
2783 pager_set_state_from_pointer (scrollbar, x, y);2804 * for example when switching notebook page,
2784 }2805 * check the position of the pointer
2785 else2806 * and set the state accordingly. */
2786 {2807 pager_set_state_from_pointer (scrollbar, x, y);
2787 /* on map-event of an active window,2808 }
2788 * the pager should be active. */2809 else
2789 priv->can_deactivate_pager = FALSE;2810 {
2790 os_pager_set_active (priv->pager, TRUE, FALSE);2811 /* on map-event of an active window,
2812 * the pager should be active. */
2813 priv->can_deactivate_pager = FALSE;
2814 os_pager_set_active (priv->pager, TRUE, FALSE);
2815 }
2791 }2816 }
27922817
2793 if (priv->fullsize == FALSE)2818 if (priv->fullsize == FALSE)
2794 os_pager_show (priv->pager);2819 os_pager_show (priv->pager);
27952820
2796 if (gtk_widget_get_realized (widget) && priv->filter == FALSE)2821 if (!is_insensitive (scrollbar))
2797 {2822 {
2798 priv->filter = TRUE;2823 priv->proximity = TRUE;
2799 gdk_window_add_filter (gtk_widget_get_window (widget), window_filter_func, scrollbar);2824
2825 if (gtk_widget_get_realized (widget) && priv->filter == FALSE)
2826 {
2827 priv->filter = TRUE;
2828 gdk_window_add_filter (gtk_widget_get_window (widget), window_filter_func, scrollbar);
2829 }
2800 }2830 }
2801}2831}
28022832
@@ -2967,7 +2997,73 @@
2967 gtk_widget_set_allocation (widget, allocation);2997 gtk_widget_set_allocation (widget, allocation);
2968}2998}
29692999
2970#ifndef USE_GTK33000/* set the scrollbar to be insensitive */
3001static void
3002set_insensitive (OsScrollbar *scrollbar)
3003{
3004 OsScrollbarPrivate *priv;
3005
3006 priv = scrollbar->priv;
3007
3008 priv->proximity = FALSE;
3009
3010 if (gtk_widget_get_realized (GTK_WIDGET (scrollbar)) && priv->filter == TRUE)
3011 {
3012 priv->filter = FALSE;
3013 gdk_window_remove_filter (gtk_widget_get_window (GTK_WIDGET (scrollbar)), window_filter_func, scrollbar);
3014 }
3015
3016 os_pager_set_active (priv->pager, FALSE, FALSE);
3017
3018 gtk_widget_hide (priv->thumb);
3019}
3020
3021/* set the scrollbar to be sensitive */
3022static void
3023set_sensitive (OsScrollbar *scrollbar)
3024{
3025 OsScrollbarPrivate *priv;
3026
3027 priv = scrollbar->priv;
3028
3029 priv->proximity = TRUE;
3030
3031 if (gtk_widget_get_realized (GTK_WIDGET (scrollbar)) && priv->filter == FALSE)
3032 {
3033 priv->filter = TRUE;
3034 gdk_window_add_filter (gtk_widget_get_window (GTK_WIDGET (scrollbar)), window_filter_func, scrollbar);
3035 }
3036
3037 if (priv->active_window)
3038 os_pager_set_active (priv->pager, TRUE, FALSE);
3039 else
3040 {
3041 gint x, y;
3042
3043 gdk_window_get_pointer (gtk_widget_get_window (GTK_WIDGET (scrollbar)), &x, &y, NULL);
3044
3045 /* when the window is unfocused,
3046 * check the position of the pointer
3047 * and set the state accordingly. */
3048 pager_set_state_from_pointer (scrollbar, x, y);
3049 }
3050}
3051
3052#ifdef USE_GTK3
3053static void
3054os_scrollbar_state_flags_changed (GtkWidget *widget,
3055 GtkStateFlags flags)
3056{
3057 OsScrollbar *scrollbar;
3058
3059 scrollbar = OS_SCROLLBAR (widget);
3060
3061 if ((gtk_widget_get_state_flags (widget) & GTK_STATE_FLAG_INSENSITIVE) != 0)
3062 set_insensitive (scrollbar);
3063 else
3064 set_sensitive (scrollbar);
3065}
3066#else
2971static void3067static void
2972os_scrollbar_size_request (GtkWidget *widget,3068os_scrollbar_size_request (GtkWidget *widget,
2973 GtkRequisition *requisition)3069 GtkRequisition *requisition)
@@ -2985,6 +3081,20 @@
29853081
2986 widget->requisition = *requisition;3082 widget->requisition = *requisition;
2987}3083}
3084
3085static void
3086os_scrollbar_state_changed (GtkWidget *widget,
3087 GtkStateType state)
3088{
3089 OsScrollbar *scrollbar;
3090
3091 scrollbar = OS_SCROLLBAR (widget);
3092
3093 if (gtk_widget_get_state (widget) == GTK_STATE_INSENSITIVE)
3094 set_insensitive (scrollbar);
3095 else
3096 set_sensitive (scrollbar);
3097}
2988#endif3098#endif
29893099
2990static void3100static void

Subscribers

People subscribed via source and target branches