17
18
* Boston, MA 02111-1307, USA.
19
20
* Authored by Andrea Cimitan <andrea.cimitan@canonical.com>
25
#endif /* HAVE_CONFIG_H */
27
#include "os-scrollbar.h"
28
#include "os-private.h"
23
29
#include <cairo-xlib.h>
25
30
#include <gdk/gdkx.h>
27
32
#include <X11/Xlib.h>
29
#include "overlay-scrollbar.h"
30
#include "overlay-scrollbar-cairo-support.h"
31
#include "overlay-scrollbar-support.h"
32
#include "overlay-pager.h"
33
#include "overlay-thumb.h"
35
#define OVERLAY_SCROLLBAR_WIDTH 15 /* width/height of the overlay scrollbar, in pixels */
36
#define OVERLAY_SCROLLBAR_HEIGHT 80 /* height/width of the overlay scrollbar, in pixels */
34
#define OS_SCROLLBAR_WIDTH 15 /* width/height of the overlay scrollbar, in pixels */
35
#define OS_SCROLLBAR_HEIGHT 80 /* height/width of the overlay scrollbar, in pixels */
37
36
#define PROXIMITY_WIDTH 40 /* width/height of the proximity effect, in pixels */
38
37
#define TIMEOUT_HIDE 1000 /* timeout before hiding, in milliseconds */
40
#define OVERLAY_SCROLLBAR_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), OS_TYPE_OVERLAY_SCROLLBAR, OverlayScrollbarPrivate))
42
typedef struct _OverlayScrollbarPrivate OverlayScrollbarPrivate;
44
struct _OverlayScrollbarPrivate
39
#define OS_SCROLLBAR_GET_PRIVATE(obj) \
40
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), OS_TYPE_SCROLLBAR, OsScrollbarPrivate))
42
typedef struct _OsScrollbarPrivate OsScrollbarPrivate;
44
struct _OsScrollbarPrivate
46
46
GdkRectangle trough;
47
47
GdkRectangle overlay;
81
G_DEFINE_TYPE (OverlayScrollbar, overlay_scrollbar, GTK_TYPE_SCROLLBAR);
81
G_DEFINE_TYPE (OsScrollbar, os_scrollbar, GTK_TYPE_SCROLLBAR);
83
/* Present a X11 window. */
85
os_present_window_with_timestamp (Display *default_display,
95
g_warning ("Received a timestamp of 0; window activation may not "
96
"function properly.\n");
98
display = DisplayOfScreen (screen);
99
root = RootWindowOfScreen (screen);
101
xev.xclient.type = ClientMessage;
102
xev.xclient.serial = 0;
103
xev.xclient.send_event = True;
104
xev.xclient.display = display;
105
xev.xclient.window = xid;
106
xev.xclient.message_type = gdk_x11_get_xatom_by_name ("_NET_ACTIVE_WINDOW");
107
xev.xclient.format = 32;
108
xev.xclient.data.l[0] = 1;
109
xev.xclient.data.l[1] = timestamp;
110
xev.xclient.data.l[2] = 0;
111
xev.xclient.data.l[3] = 0;
112
xev.xclient.data.l[4] = 0;
114
gdk_error_trap_push ();
118
SubstructureRedirectMask | SubstructureNotifyMask,
120
XSync (default_display, False);
121
gdk_error_trap_pop ();
124
/* Present a GDK window. */
126
os_present_gdk_window_with_timestamp (GtkWidget *widget,
129
os_present_window_with_timestamp (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
130
GDK_SCREEN_XSCREEN (gtk_widget_get_screen (widget)),
131
GDK_WINDOW_XID (gtk_widget_get_window (widget)),
83
135
/* SUBCLASS FUNCTIONS */
84
static gboolean overlay_scrollbar_expose_event (GtkWidget *widget,
136
static gboolean os_scrollbar_expose_event (GtkWidget *widget,
85
137
GdkEventExpose *event);
87
static void overlay_scrollbar_hide (GtkWidget *widget);
89
static void overlay_scrollbar_map (GtkWidget *widget);
91
static void overlay_scrollbar_parent_set (GtkWidget *widget,
139
static void os_scrollbar_hide (GtkWidget *widget);
141
static void os_scrollbar_map (GtkWidget *widget);
143
static void os_scrollbar_parent_set (GtkWidget *widget,
92
144
GtkWidget *old_parent);
94
static void overlay_scrollbar_realize (GtkWidget *widget);
96
static void overlay_scrollbar_show (GtkWidget *widget);
98
static void overlay_scrollbar_unmap (GtkWidget *widget);
100
static void overlay_scrollbar_unrealize (GtkWidget *widget);
146
static void os_scrollbar_realize (GtkWidget *widget);
148
static void os_scrollbar_show (GtkWidget *widget);
150
static void os_scrollbar_unmap (GtkWidget *widget);
152
static void os_scrollbar_unrealize (GtkWidget *widget);
102
154
/* GOBJECT CLASS FUNCTIONS */
103
static void overlay_scrollbar_dispose (GObject *object);
155
static void os_scrollbar_dispose (GObject *object);
105
157
/* HELPER FUNCTIONS */
106
static void overlay_scrollbar_calc_layout_pager (OverlayScrollbar *scrollbar,
158
static void os_scrollbar_calc_layout_pager (OsScrollbar *scrollbar,
107
159
gdouble adjustment_value);
109
static gdouble overlay_scrollbar_coord_to_value (OverlayScrollbar *scrollbar,
161
static gdouble os_scrollbar_coord_to_value (OsScrollbar *scrollbar,
112
static gboolean overlay_scrollbar_hide_thumb (gpointer user_data);
164
static gboolean os_scrollbar_hide_thumb (gpointer user_data);
114
static void overlay_scrollbar_move (OverlayScrollbar *scrollbar,
166
static void os_scrollbar_move (OsScrollbar *scrollbar,
118
static void overlay_scrollbar_notify_adjustment_cb (GObject *object,
170
static void os_scrollbar_notify_adjustment_cb (GObject *object,
119
171
gpointer user_data);
121
static void overlay_scrollbar_notify_orientation_cb (GObject *object,
173
static void os_scrollbar_notify_orientation_cb (GObject *object,
122
174
gpointer user_data);
124
static void overlay_scrollbar_store_window_position (OverlayScrollbar *scrollbar);
176
static void os_scrollbar_store_window_position (OsScrollbar *scrollbar);
126
static void overlay_scrollbar_swap_adjustment (OverlayScrollbar *scrollbar,
178
static void os_scrollbar_swap_adjustment (OsScrollbar *scrollbar,
127
179
GtkAdjustment *adjustment);
129
static void overlay_scrollbar_swap_parent (OverlayScrollbar *scrollbar,
181
static void os_scrollbar_swap_parent (OsScrollbar *scrollbar,
130
182
GtkWidget *parent);
132
static void overlay_scrollbar_swap_thumb (OverlayScrollbar *scrollbar,
184
static void os_scrollbar_swap_thumb (OsScrollbar *scrollbar,
133
185
GtkWidget *thumb);
135
static void overlay_scrollbar_toplevel_connect (OverlayScrollbar *scrollbar);
187
static void os_scrollbar_toplevel_connect (OsScrollbar *scrollbar);
137
189
/* THUMB FUNCTIONS */
138
static gboolean overlay_thumb_button_press_event_cb (GtkWidget *widget,
190
static gboolean os_thumb_button_press_event_cb (GtkWidget *widget,
139
191
GdkEventButton *event,
140
192
gpointer user_data);
142
static gboolean overlay_thumb_button_release_event_cb (GtkWidget *widget,
194
static gboolean os_thumb_button_release_event_cb (GtkWidget *widget,
143
195
GdkEventButton *event,
144
196
gpointer user_data);
146
static gboolean overlay_thumb_enter_notify_event_cb (GtkWidget *widget,
147
GdkEventCrossing *event,
150
static gboolean overlay_thumb_leave_notify_event_cb (GtkWidget *widget,
151
GdkEventCrossing *event,
154
static gboolean overlay_thumb_motion_notify_event_cb (GtkWidget *widget,
198
static gboolean os_thumb_enter_notify_event_cb (GtkWidget *widget,
199
GdkEventCrossing *event,
202
static gboolean os_thumb_leave_notify_event_cb (GtkWidget *widget,
203
GdkEventCrossing *event,
206
static gboolean os_thumb_motion_notify_event_cb (GtkWidget *widget,
155
207
GdkEventMotion *event,
156
208
gpointer user_data);
158
210
/* OVERLAY FUNCTIONS */
159
static void overlay_move (OverlayScrollbar *scrollbar);
211
static void overlay_move (OsScrollbar *scrollbar);
161
static void overlay_resize_window (OverlayScrollbar *scrollbar);
213
static void overlay_resize_window (OsScrollbar *scrollbar);
163
215
/* ADJUSTMENT FUNCTIONS */
164
216
static void adjustment_value_changed_cb (GtkAdjustment *adjustment,
189
241
/* SUBCLASS FUNCTIONS */
191
* overlay_scrollbar_class_init:
243
* os_scrollbar_class_init:
192
244
* class init function
195
overlay_scrollbar_class_init (OverlayScrollbarClass *class)
247
os_scrollbar_class_init (OsScrollbarClass *class)
198
249
GObjectClass *gobject_class;
199
250
GtkWidgetClass *widget_class;
201
252
gobject_class = G_OBJECT_CLASS (class);
202
253
widget_class = GTK_WIDGET_CLASS (class);
204
widget_class->expose_event = overlay_scrollbar_expose_event;
205
widget_class->hide = overlay_scrollbar_hide;
206
widget_class->map = overlay_scrollbar_map;
207
widget_class->realize = overlay_scrollbar_realize;
208
widget_class->parent_set = overlay_scrollbar_parent_set;
209
widget_class->show = overlay_scrollbar_show;
210
widget_class->unmap = overlay_scrollbar_unmap;
211
widget_class->unrealize = overlay_scrollbar_unrealize;
213
gobject_class->dispose = overlay_scrollbar_dispose;
215
g_type_class_add_private (gobject_class, sizeof (OverlayScrollbarPrivate));
255
widget_class->expose_event = os_scrollbar_expose_event;
256
widget_class->hide = os_scrollbar_hide;
257
widget_class->map = os_scrollbar_map;
258
widget_class->realize = os_scrollbar_realize;
259
widget_class->parent_set = os_scrollbar_parent_set;
260
widget_class->show = os_scrollbar_show;
261
widget_class->unmap = os_scrollbar_unmap;
262
widget_class->unrealize = os_scrollbar_unrealize;
264
gobject_class->dispose = os_scrollbar_dispose;
266
g_type_class_add_private (gobject_class, sizeof (OsScrollbarPrivate));
219
* overlay_scrollbar_init:
223
overlay_scrollbar_init (OverlayScrollbar *scrollbar)
274
os_scrollbar_init (OsScrollbar *scrollbar)
226
OverlayScrollbarPrivate *priv;
276
OsScrollbarPrivate *priv;
228
priv = OVERLAY_SCROLLBAR_GET_PRIVATE (scrollbar);
278
priv = OS_SCROLLBAR_GET_PRIVATE (scrollbar);
230
280
priv->can_hide = TRUE;
231
281
priv->can_rgba = FALSE;
232
282
priv->proximity = FALSE;
234
284
g_signal_connect (G_OBJECT (scrollbar), "notify::adjustment",
235
G_CALLBACK (overlay_scrollbar_notify_adjustment_cb), NULL);
285
G_CALLBACK (os_scrollbar_notify_adjustment_cb), NULL);
237
287
g_signal_connect (G_OBJECT (scrollbar), "notify::orientation",
238
G_CALLBACK (overlay_scrollbar_notify_orientation_cb), NULL);
288
G_CALLBACK (os_scrollbar_notify_orientation_cb), NULL);
242
* overlay_scrollbar_expose_event:
292
* os_scrollbar_expose_event:
243
293
* override class function
246
overlay_scrollbar_expose_event (GtkWidget *widget,
296
os_scrollbar_expose_event (GtkWidget *widget,
247
297
GdkEventExpose *event)
254
* overlay_scrollbar_hide:
255
304
* override class function
258
overlay_scrollbar_hide (GtkWidget *widget)
307
os_scrollbar_hide (GtkWidget *widget)
261
OverlayScrollbarPrivate *priv;
309
OsScrollbarPrivate *priv;
263
priv = OVERLAY_SCROLLBAR_GET_PRIVATE (OVERLAY_SCROLLBAR (widget));
311
priv = OS_SCROLLBAR_GET_PRIVATE (OS_SCROLLBAR (widget));
265
313
priv->proximity = FALSE;
267
GTK_WIDGET_CLASS (overlay_scrollbar_parent_class)->hide (widget);
315
GTK_WIDGET_CLASS (os_scrollbar_parent_class)->hide (widget);
269
317
if (priv->pager != NULL)
271
overlay_pager_hide (OVERLAY_PAGER (priv->pager));
319
os_pager_hide (OS_PAGER (priv->pager));
276
* overlay_scrollbar_map:
277
325
* override class function
280
overlay_scrollbar_map (GtkWidget *widget)
328
os_scrollbar_map (GtkWidget *widget)
283
OverlayScrollbarPrivate *priv;
330
OsScrollbarPrivate *priv;
285
priv = OVERLAY_SCROLLBAR_GET_PRIVATE (OVERLAY_SCROLLBAR (widget));
332
priv = OS_SCROLLBAR_GET_PRIVATE (OS_SCROLLBAR (widget));
287
334
priv->proximity = TRUE;
289
GTK_WIDGET_CLASS (overlay_scrollbar_parent_class)->map (widget);
336
GTK_WIDGET_CLASS (os_scrollbar_parent_class)->map (widget);
291
338
if (priv->pager != NULL)
293
overlay_pager_show (OVERLAY_PAGER (priv->pager));
340
os_pager_show (OS_PAGER (priv->pager));
296
343
Display *display;
346
* overlay_scrollbar_parent_set:
393
* os_scrollbar_parent_set:
347
394
* override class function
350
overlay_scrollbar_parent_set (GtkWidget *widget,
397
os_scrollbar_parent_set (GtkWidget *widget,
351
398
GtkWidget *old_parent)
354
overlay_scrollbar_swap_parent (OVERLAY_SCROLLBAR (widget), gtk_widget_get_parent (widget));
358
* overlay_scrollbar_realize:
359
* override class function
362
overlay_scrollbar_realize (GtkWidget *widget)
365
GTK_WIDGET_CLASS (overlay_scrollbar_parent_class)->realize (widget);
369
* overlay_scrollbar_show:
370
* override class function
373
overlay_scrollbar_show (GtkWidget *widget)
376
OverlayScrollbarPrivate *priv;
378
priv = OVERLAY_SCROLLBAR_GET_PRIVATE (OVERLAY_SCROLLBAR (widget));
400
os_scrollbar_swap_parent (OS_SCROLLBAR (widget), gtk_widget_get_parent (widget));
404
* os_scrollbar_realize:
405
* override class function
408
os_scrollbar_realize (GtkWidget *widget)
410
GTK_WIDGET_CLASS (os_scrollbar_parent_class)->realize (widget);
415
* override class function
418
os_scrollbar_show (GtkWidget *widget)
420
OsScrollbarPrivate *priv;
422
priv = OS_SCROLLBAR_GET_PRIVATE (OS_SCROLLBAR (widget));
380
424
priv->proximity = TRUE;
382
GTK_WIDGET_CLASS (overlay_scrollbar_parent_class)->show (widget);
426
GTK_WIDGET_CLASS (os_scrollbar_parent_class)->show (widget);
384
428
if (priv->pager != NULL)
386
overlay_pager_show (OVERLAY_PAGER (priv->pager));
430
os_pager_show (OS_PAGER (priv->pager));
391
* overlay_scrollbar_unmap:
435
* os_scrollbar_unmap:
392
436
* override class function
395
overlay_scrollbar_unmap (GtkWidget *widget)
439
os_scrollbar_unmap (GtkWidget *widget)
398
OverlayScrollbarPrivate *priv;
441
OsScrollbarPrivate *priv;
400
priv = OVERLAY_SCROLLBAR_GET_PRIVATE (OVERLAY_SCROLLBAR (widget));
443
priv = OS_SCROLLBAR_GET_PRIVATE (OS_SCROLLBAR (widget));
402
445
priv->proximity = FALSE;
404
GTK_WIDGET_CLASS (overlay_scrollbar_parent_class)->unmap (widget);
447
GTK_WIDGET_CLASS (os_scrollbar_parent_class)->unmap (widget);
406
449
if (priv->pager != NULL)
408
overlay_pager_hide (OVERLAY_PAGER (priv->pager));
451
os_pager_hide (OS_PAGER (priv->pager));
413
* overlay_scrollbar_unrealize:
456
* os_scrollbar_unrealize:
414
457
* override class function
417
overlay_scrollbar_unrealize (GtkWidget *widget)
460
os_scrollbar_unrealize (GtkWidget *widget)
420
GTK_WIDGET_CLASS (overlay_scrollbar_parent_class)->unrealize (widget);
462
GTK_WIDGET_CLASS (os_scrollbar_parent_class)->unrealize (widget);
424
466
/* GOBJECT CLASS FUNCTIONS */
426
* overlay_scrollbar_dispose:
468
* os_scrollbar_dispose:
427
469
* override class function
430
overlay_scrollbar_dispose (GObject *object)
472
os_scrollbar_dispose (GObject *object)
433
OverlayScrollbarPrivate *priv = OVERLAY_SCROLLBAR_GET_PRIVATE (object);
474
OsScrollbarPrivate *priv = OS_SCROLLBAR_GET_PRIVATE (object);
435
overlay_scrollbar_swap_adjustment (OVERLAY_SCROLLBAR (object), NULL);
436
overlay_scrollbar_swap_parent (OVERLAY_SCROLLBAR (object), NULL);
437
overlay_scrollbar_swap_thumb (OVERLAY_SCROLLBAR (object), NULL);
476
os_scrollbar_swap_adjustment (OS_SCROLLBAR (object), NULL);
477
os_scrollbar_swap_parent (OS_SCROLLBAR (object), NULL);
478
os_scrollbar_swap_thumb (OS_SCROLLBAR (object), NULL);
439
480
if (priv->pager != NULL)
456
497
* Returns: the new overlay scrollbar as a #GtkWidget
459
overlay_scrollbar_new (GtkOrientation orientation,
460
GtkAdjustment *adjustment)
500
os_scrollbar_new (GtkOrientation orientation,
501
GtkAdjustment *adjustment)
463
return g_object_new (OS_TYPE_OVERLAY_SCROLLBAR,
464
"orientation", orientation,
465
"adjustment", adjustment,
503
return g_object_new (OS_TYPE_SCROLLBAR, "orientation", orientation,
504
"adjustment", adjustment, NULL);
469
507
/* HELPER FUNCTIONS */
471
* overlay_scrollbar_calc_layout_pager:
509
* os_scrollbar_calc_layout_pager:
472
510
* calculate layout and store info
475
overlay_scrollbar_calc_layout_pager (OverlayScrollbar *scrollbar,
513
os_scrollbar_calc_layout_pager (OsScrollbar *scrollbar,
476
514
gdouble adjustment_value)
479
OverlayScrollbarPrivate *priv;
516
OsScrollbarPrivate *priv;
483
priv = OVERLAY_SCROLLBAR_GET_PRIVATE (scrollbar);
520
priv = OS_SCROLLBAR_GET_PRIVATE (scrollbar);
484
521
tmp_height = priv->overlay.height;
486
523
if (priv->orientation == GTK_ORIENTATION_VERTICAL)
711
744
c = priv->slide_initial_slider_position + delta;
713
new_value = overlay_scrollbar_coord_to_value (scrollbar, c);
746
new_value = os_scrollbar_coord_to_value (scrollbar, c);
715
748
gtk_adjustment_set_value (priv->adjustment, new_value);
716
749
gtk_adjustment_value_changed (priv->adjustment);
720
* overlay_scrollbar_notify_adjustment_cb:
753
* os_scrollbar_notify_adjustment_cb:
721
754
* callback to the adjustment notification for the gobject
724
overlay_scrollbar_notify_adjustment_cb (GObject *object,
757
os_scrollbar_notify_adjustment_cb (GObject *object,
725
758
gpointer user_data)
728
OverlayScrollbarPrivate *priv;
730
priv = OVERLAY_SCROLLBAR_GET_PRIVATE (OVERLAY_SCROLLBAR (object));
732
overlay_scrollbar_swap_adjustment (OVERLAY_SCROLLBAR (object), gtk_range_get_adjustment (GTK_RANGE (object)));
760
OsScrollbarPrivate *priv;
762
priv = OS_SCROLLBAR_GET_PRIVATE (OS_SCROLLBAR (object));
764
os_scrollbar_swap_adjustment (OS_SCROLLBAR (object), gtk_range_get_adjustment (GTK_RANGE (object)));
736
* overlay_scrollbar_notify_orientation_cb:
768
* os_scrollbar_notify_orientation_cb:
737
769
* callback to the orientation notification for the gobject
740
overlay_scrollbar_notify_orientation_cb (GObject *object,
772
os_scrollbar_notify_orientation_cb (GObject *object,
741
773
gpointer user_data)
744
OverlayScrollbarPrivate *priv;
775
OsScrollbarPrivate *priv;
746
priv = OVERLAY_SCROLLBAR_GET_PRIVATE (OVERLAY_SCROLLBAR (object));
777
priv = OS_SCROLLBAR_GET_PRIVATE (OS_SCROLLBAR (object));
748
779
priv->orientation = gtk_orientable_get_orientation (GTK_ORIENTABLE (object));
750
overlay_scrollbar_swap_thumb (OVERLAY_SCROLLBAR (object), overlay_thumb_new (priv->orientation));
781
os_scrollbar_swap_thumb (OS_SCROLLBAR (object), os_thumb_new (priv->orientation));
754
* overlay_scrollbar_store_window_position:
785
* os_scrollbar_store_window_position:
755
786
* store scrollbar window position
758
overlay_scrollbar_store_window_position (OverlayScrollbar *scrollbar)
789
os_scrollbar_store_window_position (OsScrollbar *scrollbar)
761
OverlayScrollbarPrivate *priv;
791
OsScrollbarPrivate *priv;
762
792
gint win_x, win_y;
764
priv = OVERLAY_SCROLLBAR_GET_PRIVATE (scrollbar);
794
priv = OS_SCROLLBAR_GET_PRIVATE (scrollbar);
766
796
if (GDK_IS_WINDOW (gtk_widget_get_window (priv->parent)))
767
797
gdk_window_get_position (gtk_widget_get_window (priv->parent), &win_x, &win_y);
846
* overlay_scrollbar_swap_thumb:
874
* os_scrollbar_swap_thumb:
847
875
* swap the thumb pointer
850
overlay_scrollbar_swap_thumb (OverlayScrollbar *scrollbar,
878
os_scrollbar_swap_thumb (OsScrollbar *scrollbar,
851
879
GtkWidget *thumb)
854
OverlayScrollbarPrivate *priv = OVERLAY_SCROLLBAR_GET_PRIVATE (scrollbar);
881
OsScrollbarPrivate *priv = OS_SCROLLBAR_GET_PRIVATE (scrollbar);
856
883
if (priv->thumb != NULL)
858
885
g_signal_handlers_disconnect_by_func (G_OBJECT (priv->thumb),
859
overlay_thumb_button_press_event_cb, scrollbar);
860
g_signal_handlers_disconnect_by_func (G_OBJECT (priv->thumb),
861
overlay_thumb_button_release_event_cb, scrollbar);
862
g_signal_handlers_disconnect_by_func (G_OBJECT (priv->thumb),
863
overlay_thumb_motion_notify_event_cb, scrollbar);
864
g_signal_handlers_disconnect_by_func (G_OBJECT (priv->thumb),
865
overlay_thumb_enter_notify_event_cb, scrollbar);
866
g_signal_handlers_disconnect_by_func (G_OBJECT (priv->thumb),
867
overlay_thumb_leave_notify_event_cb, scrollbar);
886
os_thumb_button_press_event_cb, scrollbar);
887
g_signal_handlers_disconnect_by_func (G_OBJECT (priv->thumb),
888
os_thumb_button_release_event_cb, scrollbar);
889
g_signal_handlers_disconnect_by_func (G_OBJECT (priv->thumb),
890
os_thumb_motion_notify_event_cb, scrollbar);
891
g_signal_handlers_disconnect_by_func (G_OBJECT (priv->thumb),
892
os_thumb_enter_notify_event_cb, scrollbar);
893
g_signal_handlers_disconnect_by_func (G_OBJECT (priv->thumb),
894
os_thumb_leave_notify_event_cb, scrollbar);
869
896
g_object_unref (priv->thumb);
876
903
g_object_ref_sink (priv->thumb);
878
905
g_signal_connect (G_OBJECT (priv->thumb), "button-press-event",
879
G_CALLBACK (overlay_thumb_button_press_event_cb), scrollbar);
906
G_CALLBACK (os_thumb_button_press_event_cb), scrollbar);
880
907
g_signal_connect (G_OBJECT (priv->thumb), "button-release-event",
881
G_CALLBACK (overlay_thumb_button_release_event_cb), scrollbar);
908
G_CALLBACK (os_thumb_button_release_event_cb), scrollbar);
882
909
g_signal_connect (G_OBJECT (priv->thumb), "motion-notify-event",
883
G_CALLBACK (overlay_thumb_motion_notify_event_cb), scrollbar);
910
G_CALLBACK (os_thumb_motion_notify_event_cb), scrollbar);
884
911
g_signal_connect (G_OBJECT (priv->thumb), "enter-notify-event",
885
G_CALLBACK (overlay_thumb_enter_notify_event_cb), scrollbar);
912
G_CALLBACK (os_thumb_enter_notify_event_cb), scrollbar);
886
913
g_signal_connect (G_OBJECT (priv->thumb), "leave-notify-event",
887
G_CALLBACK (overlay_thumb_leave_notify_event_cb), scrollbar);
914
G_CALLBACK (os_thumb_leave_notify_event_cb), scrollbar);
892
* overlay_scrollbar_toplevel_connect:
919
* os_scrollbar_toplevel_connect:
893
920
* create elements, needs to me improved
896
overlay_scrollbar_toplevel_connect (OverlayScrollbar *scrollbar)
923
os_scrollbar_toplevel_connect (OsScrollbar *scrollbar)
899
OverlayScrollbarPrivate *priv;
925
OsScrollbarPrivate *priv;
900
926
gint x_pos, y_pos;
902
priv = OVERLAY_SCROLLBAR_GET_PRIVATE (OVERLAY_SCROLLBAR (scrollbar));
928
priv = OS_SCROLLBAR_GET_PRIVATE (OS_SCROLLBAR (scrollbar));
904
930
g_return_if_fail (priv->parent != NULL);
905
931
g_return_if_fail (GDK_IS_WINDOW (gtk_widget_get_window (priv->parent)));
923
949
priv->pager = NULL;
926
priv->pager = overlay_pager_new (priv->parent);
927
overlay_pager_show (OVERLAY_PAGER (priv->pager));
952
priv->pager = os_pager_new (priv->parent);
953
os_pager_show (OS_PAGER (priv->pager));
929
overlay_scrollbar_store_window_position (scrollbar);
955
os_scrollbar_store_window_position (scrollbar);
931
957
GTK_WIDGET_SET_FLAGS ((scrollbar), GTK_VISIBLE);
934
960
/* THUMB FUNCTIONS */
936
* overlay_thumb_button_press_event_cb:
962
* os_thumb_button_press_event_cb:
937
963
* connect to button-press-event
940
overlay_thumb_button_press_event_cb (GtkWidget *widget,
966
os_thumb_button_press_event_cb (GtkWidget *widget,
941
967
GdkEventButton *event,
942
968
gpointer user_data)
945
970
if (event->type == GDK_BUTTON_PRESS)
947
972
if (event->button == 1)
949
OverlayScrollbar *scrollbar;
950
OverlayScrollbarPrivate *priv;
952
scrollbar = OVERLAY_SCROLLBAR (user_data);
953
priv = OVERLAY_SCROLLBAR_GET_PRIVATE (OVERLAY_SCROLLBAR (scrollbar));
955
/* overlay_scrollbar_map (widget);*/
974
OsScrollbar *scrollbar;
975
OsScrollbarPrivate *priv;
977
scrollbar = OS_SCROLLBAR (user_data);
978
priv = OS_SCROLLBAR_GET_PRIVATE (OS_SCROLLBAR (scrollbar));
980
/* os_scrollbar_map (widget);*/
956
981
gtk_window_set_transient_for (GTK_WINDOW (widget), GTK_WINDOW (gtk_widget_get_toplevel (priv->parent)));
957
982
os_present_gdk_window_with_timestamp (priv->parent, event->time);
1062
* overlay_thumb_leave_notify_event:
1085
* os_thumb_leave_notify_event:
1063
1086
* override class function
1065
1088
static gboolean
1066
overlay_thumb_leave_notify_event_cb (GtkWidget *widget,
1089
os_thumb_leave_notify_event_cb (GtkWidget *widget,
1067
1090
GdkEventCrossing *event,
1068
1091
gpointer user_data)
1071
OverlayScrollbar *scrollbar;
1072
OverlayScrollbarPrivate *priv;
1093
OsScrollbar *scrollbar;
1094
OsScrollbarPrivate *priv;
1074
scrollbar = OVERLAY_SCROLLBAR (user_data);
1075
priv = OVERLAY_SCROLLBAR_GET_PRIVATE (OVERLAY_SCROLLBAR (scrollbar));
1096
scrollbar = OS_SCROLLBAR (user_data);
1097
priv = OS_SCROLLBAR_GET_PRIVATE (OS_SCROLLBAR (scrollbar));
1077
1099
if (!priv->button_press_event)
1078
1100
priv->can_hide = TRUE;
1080
g_timeout_add (TIMEOUT_HIDE, overlay_scrollbar_hide_thumb, scrollbar);
1102
g_timeout_add (TIMEOUT_HIDE, os_scrollbar_hide_thumb, scrollbar);
1086
* overlay_thumb_motion_notify_event:
1108
* os_thumb_motion_notify_event:
1087
1109
* override class function
1089
1111
static gboolean
1090
overlay_thumb_motion_notify_event_cb (GtkWidget *widget,
1112
os_thumb_motion_notify_event_cb (GtkWidget *widget,
1091
1113
GdkEventMotion *event,
1092
1114
gpointer user_data)
1095
OverlayScrollbar *scrollbar;
1096
OverlayScrollbarPrivate *priv;
1116
OsScrollbar *scrollbar;
1117
OsScrollbarPrivate *priv;
1098
scrollbar = OVERLAY_SCROLLBAR (user_data);
1099
priv = OVERLAY_SCROLLBAR_GET_PRIVATE (OVERLAY_SCROLLBAR (scrollbar));
1119
scrollbar = OS_SCROLLBAR (user_data);
1120
priv = OS_SCROLLBAR_GET_PRIVATE (OS_SCROLLBAR (scrollbar));
1101
1122
/* XXX improve speed by not rendering when moving */
1102
1123
if (priv->button_press_event)
1370
1386
GdkEventConfigure *event,
1371
1387
gpointer user_data)
1374
OverlayScrollbar *scrollbar;
1375
OverlayScrollbarPrivate *priv;
1389
OsScrollbar *scrollbar;
1390
OsScrollbarPrivate *priv;
1377
scrollbar = OVERLAY_SCROLLBAR (user_data);
1378
priv = OVERLAY_SCROLLBAR_GET_PRIVATE (scrollbar);
1392
scrollbar = OS_SCROLLBAR (user_data);
1393
priv = OS_SCROLLBAR_GET_PRIVATE (scrollbar);
1380
1395
gtk_widget_hide (GTK_WIDGET (priv->thumb));
1382
overlay_scrollbar_calc_layout_pager (scrollbar, priv->adjustment->value);
1383
overlay_scrollbar_calc_layout_slider (scrollbar, priv->adjustment->value);
1397
os_scrollbar_calc_layout_pager (scrollbar, priv->adjustment->value);
1398
os_scrollbar_calc_layout_slider (scrollbar, priv->adjustment->value);
1384
1399
gtk_window_move (GTK_WINDOW (priv->thumb),
1385
1400
event->x + priv->thumb_all.x + priv->slider.x,
1386
1401
event->y + priv->thumb_all.y + priv->slider.y);
1388
overlay_scrollbar_store_window_position (scrollbar);
1403
os_scrollbar_store_window_position (scrollbar);
1390
1405
overlay_resize_window (scrollbar);
1391
1406
overlay_move (scrollbar);