Merge lp:~cimi/overlay-scrollbar/insensitive-state into lp:overlay-scrollbar
- insensitive-state
- Merge into trunk
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 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Ted Gould (community) | Approve | ||
Review via email: mp+67927@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
- 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 | 2 | 2 | ||
6 | 3 | # Package | 3 | # Package |
7 | 4 | 4 | ||
9 | 5 | AC_INIT([overlay-scrollbar],[0.2.4],[https://bugs.launchpad.net/ayatana-scrollbar],[overlay-scrollbar]) | 5 | AC_INIT([overlay-scrollbar],[0.2.4.1],[https://bugs.launchpad.net/ayatana-scrollbar],[overlay-scrollbar]) |
10 | 6 | AC_CONFIG_SRCDIR([os/os-scrollbar.h]) | 6 | AC_CONFIG_SRCDIR([os/os-scrollbar.h]) |
11 | 7 | AC_CONFIG_MACRO_DIR([build]) | 7 | AC_CONFIG_MACRO_DIR([build]) |
12 | 8 | AC_CONFIG_AUX_DIR([build]) | 8 | AC_CONFIG_AUX_DIR([build]) |
13 | 9 | 9 | ||
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 | 144 | static void os_scrollbar_realize (GtkWidget *widget); | 144 | static void os_scrollbar_realize (GtkWidget *widget); |
19 | 145 | static void os_scrollbar_show (GtkWidget *widget); | 145 | static void os_scrollbar_show (GtkWidget *widget); |
20 | 146 | static void os_scrollbar_size_allocate (GtkWidget *widget, GdkRectangle *allocation); | 146 | static void os_scrollbar_size_allocate (GtkWidget *widget, GdkRectangle *allocation); |
22 | 147 | #ifndef USE_GTK3 | 147 | #ifdef USE_GTK3 |
23 | 148 | static void os_scrollbar_state_flags_changed (GtkWidget *widget, GtkStateFlags flags); | ||
24 | 149 | #else | ||
25 | 148 | static void os_scrollbar_size_request (GtkWidget *widget, GtkRequisition *requisition); | 150 | static void os_scrollbar_size_request (GtkWidget *widget, GtkRequisition *requisition); |
26 | 151 | static void os_scrollbar_state_changed (GtkWidget *widget, GtkStateType state); | ||
27 | 149 | #endif | 152 | #endif |
28 | 150 | static void os_scrollbar_unmap (GtkWidget *widget); | 153 | static void os_scrollbar_unmap (GtkWidget *widget); |
29 | 151 | static void os_scrollbar_unrealize (GtkWidget *widget); | 154 | static void os_scrollbar_unrealize (GtkWidget *widget); |
30 | @@ -382,6 +385,17 @@ | |||
31 | 382 | return FALSE; | 385 | return FALSE; |
32 | 383 | } | 386 | } |
33 | 384 | 387 | ||
34 | 388 | /* return TRUE if the widget is insensitive */ | ||
35 | 389 | static gboolean | ||
36 | 390 | is_insensitive (OsScrollbar *scrollbar) | ||
37 | 391 | { | ||
38 | 392 | #ifdef USE_GTK3 | ||
39 | 393 | return (gtk_widget_get_state_flags (GTK_WIDGET (scrollbar)) & GTK_STATE_FLAG_INSENSITIVE) != 0; | ||
40 | 394 | #else | ||
41 | 395 | return gtk_widget_get_state (GTK_WIDGET (scrollbar)) == GTK_STATE_INSENSITIVE; | ||
42 | 396 | #endif | ||
43 | 397 | } | ||
44 | 398 | |||
45 | 385 | /* move the pager */ | 399 | /* move the pager */ |
46 | 386 | static void | 400 | static void |
47 | 387 | move_pager (OsScrollbar *scrollbar) | 401 | move_pager (OsScrollbar *scrollbar) |
48 | @@ -1081,6 +1095,10 @@ | |||
49 | 1081 | 1095 | ||
50 | 1082 | OS_DCHECK (scrollbar != NULL); | 1096 | OS_DCHECK (scrollbar != NULL); |
51 | 1083 | 1097 | ||
52 | 1098 | /* return if the scrollbar is insensitive */ | ||
53 | 1099 | if (is_insensitive (scrollbar)) | ||
54 | 1100 | return; | ||
55 | 1101 | |||
56 | 1084 | if (gtk_widget_get_mapped (GTK_WIDGET (scrollbar))) | 1102 | if (gtk_widget_get_mapped (GTK_WIDGET (scrollbar))) |
57 | 1085 | { | 1103 | { |
58 | 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))) == |
59 | @@ -1869,11 +1887,13 @@ | |||
60 | 1869 | const gint64 current_time = g_get_monotonic_time (); | 1887 | const gint64 current_time = g_get_monotonic_time (); |
61 | 1870 | const gint64 end_time = priv->present_time + TIMEOUT_PRESENT_WINDOW * 1000; | 1888 | const gint64 end_time = priv->present_time + TIMEOUT_PRESENT_WINDOW * 1000; |
62 | 1871 | 1889 | ||
65 | 1872 | /* if the widget is mapped and the configure-event happens | 1890 | /* if the widget is mapped, is not insentitive |
66 | 1873 | * after the PropertyNotify _NET_ACTIVE_WINDOW event, | 1891 | * and the configure-event happens after |
67 | 1892 | * the PropertyNotify _NET_ACTIVE_WINDOW event, | ||
68 | 1874 | * see if the mouse pointer is over this window, if TRUE, | 1893 | * see if the mouse pointer is over this window, if TRUE, |
69 | 1875 | * proceed with pager_set_state_from_pointer. */ | 1894 | * proceed with pager_set_state_from_pointer. */ |
71 | 1876 | if ((current_time > end_time) && | 1895 | if (!is_insensitive (scrollbar) && |
72 | 1896 | (current_time > end_time) && | ||
73 | 1877 | gtk_widget_get_mapped (GTK_WIDGET (scrollbar))) | 1897 | gtk_widget_get_mapped (GTK_WIDGET (scrollbar))) |
74 | 1878 | { | 1898 | { |
75 | 1879 | if (!priv->active_window) | 1899 | if (!priv->active_window) |
76 | @@ -1896,7 +1916,7 @@ | |||
77 | 1896 | { | 1916 | { |
78 | 1897 | gint x, y; | 1917 | gint x, y; |
79 | 1898 | 1918 | ||
81 | 1899 | gtk_widget_get_pointer (widget, &x, &y); | 1919 | gdk_window_get_pointer (gtk_widget_get_window (GTK_WIDGET (scrollbar)), &x, &y, NULL); |
82 | 1900 | 1920 | ||
83 | 1901 | /* when the window is resized (maximize/restore), | 1921 | /* when the window is resized (maximize/restore), |
84 | 1902 | * check the position of the pointer | 1922 | * check the position of the pointer |
85 | @@ -2124,7 +2144,7 @@ | |||
86 | 2124 | { | 2144 | { |
87 | 2125 | /* react to motion_notify_event | 2145 | /* react to motion_notify_event |
88 | 2126 | * and set the state accordingly. */ | 2146 | * and set the state accordingly. */ |
90 | 2127 | if (!priv->active_window) | 2147 | if (!is_insensitive (scrollbar) && !priv->active_window) |
91 | 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); |
92 | 2129 | 2149 | ||
93 | 2130 | /* proximity area */ | 2150 | /* proximity area */ |
94 | @@ -2391,7 +2411,7 @@ | |||
95 | 2391 | { | 2411 | { |
96 | 2392 | /* react to motion_notify_event | 2412 | /* react to motion_notify_event |
97 | 2393 | * and set the state accordingly. */ | 2413 | * and set the state accordingly. */ |
99 | 2394 | if (!priv->active_window) | 2414 | if (!is_insensitive (scrollbar) && !priv->active_window) |
100 | 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); |
101 | 2396 | 2416 | ||
102 | 2397 | /* proximity area */ | 2417 | /* proximity area */ |
103 | @@ -2512,8 +2532,11 @@ | |||
104 | 2512 | widget_class->realize = os_scrollbar_realize; | 2532 | widget_class->realize = os_scrollbar_realize; |
105 | 2513 | widget_class->show = os_scrollbar_show; | 2533 | widget_class->show = os_scrollbar_show; |
106 | 2514 | widget_class->size_allocate = os_scrollbar_size_allocate; | 2534 | widget_class->size_allocate = os_scrollbar_size_allocate; |
108 | 2515 | #ifndef USE_GTK3 | 2535 | #ifdef USE_GTK3 |
109 | 2536 | widget_class->state_flags_changed = os_scrollbar_state_flags_changed; | ||
110 | 2537 | #else | ||
111 | 2516 | widget_class->size_request = os_scrollbar_size_request; | 2538 | widget_class->size_request = os_scrollbar_size_request; |
112 | 2539 | widget_class->state_changed = os_scrollbar_state_changed; | ||
113 | 2517 | #endif | 2540 | #endif |
114 | 2518 | widget_class->unmap = os_scrollbar_unmap; | 2541 | widget_class->unmap = os_scrollbar_unmap; |
115 | 2519 | widget_class->unrealize = os_scrollbar_unrealize; | 2542 | widget_class->unrealize = os_scrollbar_unrealize; |
116 | @@ -2753,8 +2776,6 @@ | |||
117 | 2753 | 2776 | ||
118 | 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); |
119 | 2755 | 2778 | ||
120 | 2756 | priv->proximity = TRUE; | ||
121 | 2757 | |||
122 | 2758 | /* on map, check for the active window. */ | 2779 | /* on map, check for the active window. */ |
123 | 2759 | if (gtk_widget_get_window (gtk_widget_get_toplevel (widget)) == | 2780 | if (gtk_widget_get_window (gtk_widget_get_toplevel (widget)) == |
124 | 2760 | gdk_screen_get_active_window (gtk_widget_get_screen (widget))) | 2781 | gdk_screen_get_active_window (gtk_widget_get_screen (widget))) |
125 | @@ -2771,32 +2792,41 @@ | |||
126 | 2771 | else | 2792 | else |
127 | 2772 | priv->active_window = FALSE; | 2793 | priv->active_window = FALSE; |
128 | 2773 | 2794 | ||
146 | 2774 | if (!priv->active_window) | 2795 | if (!is_insensitive (scrollbar)) |
147 | 2775 | { | 2796 | { |
148 | 2776 | gint x, y; | 2797 | if (!priv->active_window) |
149 | 2777 | gtk_widget_get_pointer (gtk_widget_get_toplevel (widget), &x, &y); | 2798 | { |
150 | 2778 | 2799 | gint x, y; | |
151 | 2779 | /* when the scrollbar appears on screen (mapped), | 2800 | |
152 | 2780 | * for example when switching notebook page, | 2801 | gdk_window_get_pointer (gtk_widget_get_window (GTK_WIDGET (scrollbar)), &x, &y, NULL); |
153 | 2781 | * check the position of the pointer | 2802 | |
154 | 2782 | * and set the state accordingly. */ | 2803 | /* when the scrollbar appears on screen (mapped), |
155 | 2783 | pager_set_state_from_pointer (scrollbar, x, y); | 2804 | * for example when switching notebook page, |
156 | 2784 | } | 2805 | * check the position of the pointer |
157 | 2785 | else | 2806 | * and set the state accordingly. */ |
158 | 2786 | { | 2807 | pager_set_state_from_pointer (scrollbar, x, y); |
159 | 2787 | /* on map-event of an active window, | 2808 | } |
160 | 2788 | * the pager should be active. */ | 2809 | else |
161 | 2789 | priv->can_deactivate_pager = FALSE; | 2810 | { |
162 | 2790 | os_pager_set_active (priv->pager, TRUE, FALSE); | 2811 | /* on map-event of an active window, |
163 | 2812 | * the pager should be active. */ | ||
164 | 2813 | priv->can_deactivate_pager = FALSE; | ||
165 | 2814 | os_pager_set_active (priv->pager, TRUE, FALSE); | ||
166 | 2815 | } | ||
167 | 2791 | } | 2816 | } |
168 | 2792 | 2817 | ||
169 | 2793 | if (priv->fullsize == FALSE) | 2818 | if (priv->fullsize == FALSE) |
170 | 2794 | os_pager_show (priv->pager); | 2819 | os_pager_show (priv->pager); |
171 | 2795 | 2820 | ||
173 | 2796 | if (gtk_widget_get_realized (widget) && priv->filter == FALSE) | 2821 | if (!is_insensitive (scrollbar)) |
174 | 2797 | { | 2822 | { |
177 | 2798 | priv->filter = TRUE; | 2823 | priv->proximity = TRUE; |
178 | 2799 | gdk_window_add_filter (gtk_widget_get_window (widget), window_filter_func, scrollbar); | 2824 | |
179 | 2825 | if (gtk_widget_get_realized (widget) && priv->filter == FALSE) | ||
180 | 2826 | { | ||
181 | 2827 | priv->filter = TRUE; | ||
182 | 2828 | gdk_window_add_filter (gtk_widget_get_window (widget), window_filter_func, scrollbar); | ||
183 | 2829 | } | ||
184 | 2800 | } | 2830 | } |
185 | 2801 | } | 2831 | } |
186 | 2802 | 2832 | ||
187 | @@ -2967,7 +2997,73 @@ | |||
188 | 2967 | gtk_widget_set_allocation (widget, allocation); | 2997 | gtk_widget_set_allocation (widget, allocation); |
189 | 2968 | } | 2998 | } |
190 | 2969 | 2999 | ||
192 | 2970 | #ifndef USE_GTK3 | 3000 | /* set the scrollbar to be insensitive */ |
193 | 3001 | static void | ||
194 | 3002 | set_insensitive (OsScrollbar *scrollbar) | ||
195 | 3003 | { | ||
196 | 3004 | OsScrollbarPrivate *priv; | ||
197 | 3005 | |||
198 | 3006 | priv = scrollbar->priv; | ||
199 | 3007 | |||
200 | 3008 | priv->proximity = FALSE; | ||
201 | 3009 | |||
202 | 3010 | if (gtk_widget_get_realized (GTK_WIDGET (scrollbar)) && priv->filter == TRUE) | ||
203 | 3011 | { | ||
204 | 3012 | priv->filter = FALSE; | ||
205 | 3013 | gdk_window_remove_filter (gtk_widget_get_window (GTK_WIDGET (scrollbar)), window_filter_func, scrollbar); | ||
206 | 3014 | } | ||
207 | 3015 | |||
208 | 3016 | os_pager_set_active (priv->pager, FALSE, FALSE); | ||
209 | 3017 | |||
210 | 3018 | gtk_widget_hide (priv->thumb); | ||
211 | 3019 | } | ||
212 | 3020 | |||
213 | 3021 | /* set the scrollbar to be sensitive */ | ||
214 | 3022 | static void | ||
215 | 3023 | set_sensitive (OsScrollbar *scrollbar) | ||
216 | 3024 | { | ||
217 | 3025 | OsScrollbarPrivate *priv; | ||
218 | 3026 | |||
219 | 3027 | priv = scrollbar->priv; | ||
220 | 3028 | |||
221 | 3029 | priv->proximity = TRUE; | ||
222 | 3030 | |||
223 | 3031 | if (gtk_widget_get_realized (GTK_WIDGET (scrollbar)) && priv->filter == FALSE) | ||
224 | 3032 | { | ||
225 | 3033 | priv->filter = TRUE; | ||
226 | 3034 | gdk_window_add_filter (gtk_widget_get_window (GTK_WIDGET (scrollbar)), window_filter_func, scrollbar); | ||
227 | 3035 | } | ||
228 | 3036 | |||
229 | 3037 | if (priv->active_window) | ||
230 | 3038 | os_pager_set_active (priv->pager, TRUE, FALSE); | ||
231 | 3039 | else | ||
232 | 3040 | { | ||
233 | 3041 | gint x, y; | ||
234 | 3042 | |||
235 | 3043 | gdk_window_get_pointer (gtk_widget_get_window (GTK_WIDGET (scrollbar)), &x, &y, NULL); | ||
236 | 3044 | |||
237 | 3045 | /* when the window is unfocused, | ||
238 | 3046 | * check the position of the pointer | ||
239 | 3047 | * and set the state accordingly. */ | ||
240 | 3048 | pager_set_state_from_pointer (scrollbar, x, y); | ||
241 | 3049 | } | ||
242 | 3050 | } | ||
243 | 3051 | |||
244 | 3052 | #ifdef USE_GTK3 | ||
245 | 3053 | static void | ||
246 | 3054 | os_scrollbar_state_flags_changed (GtkWidget *widget, | ||
247 | 3055 | GtkStateFlags flags) | ||
248 | 3056 | { | ||
249 | 3057 | OsScrollbar *scrollbar; | ||
250 | 3058 | |||
251 | 3059 | scrollbar = OS_SCROLLBAR (widget); | ||
252 | 3060 | |||
253 | 3061 | if ((gtk_widget_get_state_flags (widget) & GTK_STATE_FLAG_INSENSITIVE) != 0) | ||
254 | 3062 | set_insensitive (scrollbar); | ||
255 | 3063 | else | ||
256 | 3064 | set_sensitive (scrollbar); | ||
257 | 3065 | } | ||
258 | 3066 | #else | ||
259 | 2971 | static void | 3067 | static void |
260 | 2972 | os_scrollbar_size_request (GtkWidget *widget, | 3068 | os_scrollbar_size_request (GtkWidget *widget, |
261 | 2973 | GtkRequisition *requisition) | 3069 | GtkRequisition *requisition) |
262 | @@ -2985,6 +3081,20 @@ | |||
263 | 2985 | 3081 | ||
264 | 2986 | widget->requisition = *requisition; | 3082 | widget->requisition = *requisition; |
265 | 2987 | } | 3083 | } |
266 | 3084 | |||
267 | 3085 | static void | ||
268 | 3086 | os_scrollbar_state_changed (GtkWidget *widget, | ||
269 | 3087 | GtkStateType state) | ||
270 | 3088 | { | ||
271 | 3089 | OsScrollbar *scrollbar; | ||
272 | 3090 | |||
273 | 3091 | scrollbar = OS_SCROLLBAR (widget); | ||
274 | 3092 | |||
275 | 3093 | if (gtk_widget_get_state (widget) == GTK_STATE_INSENSITIVE) | ||
276 | 3094 | set_insensitive (scrollbar); | ||
277 | 3095 | else | ||
278 | 3096 | set_sensitive (scrollbar); | ||
279 | 3097 | } | ||
280 | 2988 | #endif | 3098 | #endif |
281 | 2989 | 3099 | ||
282 | 2990 | static void | 3100 | static void |
On this line:
return gtk_widget_ get_state_ flags (GTK_WIDGET (scrollbar)) & GTK_STATE_ FLAG_INSENSITIV E;
It would probably be better to do:
return gtk_widget_ get_state_ flags (GTK_WIDGET (scrollbar)) & GTK_STATE_ FLAG_INSENSITIV E != 0;
So that the return value is a boolean proper. Shouldn't be an issue, but it's safer.
That's it, looks good.