Merge lp:~laney/overlay-scrollbar/drop-gtk3 into lp:overlay-scrollbar

Proposed by Iain Lane
Status: Merged
Merged at revision: 392
Proposed branch: lp:~laney/overlay-scrollbar/drop-gtk3
Merge into: lp:overlay-scrollbar
Diff against target: 1916 lines (+164/-1067)
15 files modified
configure.ac (+5/-19)
data/81overlay-scrollbar (+4/-4)
debian/changelog (+9/-0)
debian/control (+5/-20)
debian/overlay-scrollbar-gtk2.install (+1/-1)
debian/overlay-scrollbar-gtk3.install (+0/-1)
debian/overlay-scrollbar.install (+2/-2)
debian/rules (+7/-24)
os/Makefile.am (+1/-9)
os/os-bar.c (+0/-134)
os/os-private.h (+0/-4)
os/os-scrollbar.c (+130/-787)
os/os-thumb.c (+0/-46)
tests/Makefile.am (+0/-8)
tests/test-os.c (+0/-8)
To merge this branch: bzr merge lp:~laney/overlay-scrollbar/drop-gtk3
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Approve
Lars Karlitski Approve
Ayatana Scrollbar Team Pending
Review via email: mp+260932@code.launchpad.net

Commit message

Drop overlay-scrollbar-gtk3 - gtk 3.16 has a replacement

Description of the change

We are going to use gtk 3.16's overlay scrollbars. Drop overlay-scrollbar-gtk3.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:402
No commit message was specified in the merge proposal. Click on the following link and set the commit message (if you want a jenkins rebuild you need to trigger it yourself):
https://code.launchpad.net/~laney/overlay-scrollbar/drop-gtk3/+merge/260932/+edit-commit-message

http://jenkins.qa.ubuntu.com/job/overlay-scrollbar-ci/20/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/overlay-scrollbar-wily-amd64-ci/1
    SUCCESS: http://jenkins.qa.ubuntu.com/job/overlay-scrollbar-wily-armhf-ci/1
    SUCCESS: http://jenkins.qa.ubuntu.com/job/overlay-scrollbar-wily-i386-ci/1

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/overlay-scrollbar-ci/20/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Lars Karlitski (larsu) wrote :

Coding style is changed in some areas and the wrong branch is removed on line 613 in the diff (all this switching between ifdef and ifndef is confusing).

I have commits for those in lp:~larsu/overlay-scrollbar/drop-gtk3

review: Needs Fixing
403. By Iain Lane

merge lp:~larsu/overlay-scrollbar/drop-gtk3

Revision history for this message
Iain Lane (laney) wrote :

On Wed, Jun 03, 2015 at 01:12:38PM -0000, Lars Uebernickel wrote:
> Review: Needs Fixing
>
> Coding style is changed in some areas and the wrong branch is removed on line 613 in the diff (all this switching between ifdef and ifndef is confusing).
>
> I have commits for those in lp:~larsu/overlay-scrollbar/drop-gtk3

Thanks, merged, please re-review.

--
Iain Lane [ <email address hidden> ]
Debian Developer [ <email address hidden> ]
Ubuntu Developer [ <email address hidden> ]

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:403
No commit message was specified in the merge proposal. Click on the following link and set the commit message (if you want a jenkins rebuild you need to trigger it yourself):
https://code.launchpad.net/~laney/overlay-scrollbar/drop-gtk3/+merge/260932/+edit-commit-message

http://jenkins.qa.ubuntu.com/job/overlay-scrollbar-ci/21/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/overlay-scrollbar-wily-amd64-ci/2
    SUCCESS: http://jenkins.qa.ubuntu.com/job/overlay-scrollbar-wily-armhf-ci/2
    SUCCESS: http://jenkins.qa.ubuntu.com/job/overlay-scrollbar-wily-i386-ci/2

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/overlay-scrollbar-ci/21/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Lars Karlitski (larsu) wrote :

Looks good to me now.

Thanks! This is awesome.

review: Approve
404. By Iain Lane

C/R o-s-gtk3 so that it gets removed on upgrade

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
405. By Iain Lane

Bump version so we can drop the weird +r...

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== removed symlink 'INSTALL'
=== target was u'/usr/share/automake-1.11/INSTALL'
=== modified file 'configure.ac'
--- configure.ac 2012-08-09 13:56:26 +0000
+++ configure.ac 2015-06-04 09:25:27 +0000
@@ -37,27 +37,14 @@
37GLIB_GSETTINGS37GLIB_GSETTINGS
3838
39AC_SUBST(glib_req, 2.26.0)39AC_SUBST(glib_req, 2.26.0)
40AC_SUBST(gtk_req, 2.22.0)40AC_SUBST(gtk_req, 2.24.26)
41AC_SUBST(gtk3_req, 3.4.0)
42AC_SUBST(cairo_req, 1.10)41AC_SUBST(cairo_req, 1.10)
4342
44AC_ARG_WITH([gtk],43PKG_CHECK_MODULES(DEPS, [glib-2.0 >= $glib_req gtk+-2.0 >= $gtk_req cairo >= $cairo_req gmodule-2.0 >= $glib_req x11],
45 [AS_HELP_STRING([--with-gtk], [Which version of gtk to use @<:@default=3@:>@])],44 [AC_SUBST(DEPS_CFLAGS)
46 [],45 AC_SUBST(DEPS_LIBS)])
47 [with_gtk=3])
48AS_IF([test "x$with_gtk" = x3],
49 [PKG_CHECK_MODULES(DEPS, glib-2.0 >= $glib_req gtk+-3.0 >= $gtk3_req cairo >= $cairo_req)
50 AC_SUBST(DEPS_CFLAGS)
51 AC_SUBST(DEPS_LIBS)],
52 [test "x$with_gtk" = x2],
53 [PKG_CHECK_MODULES(DEPS, glib-2.0 >= $glib_req gtk+-2.0 >= $gtk_req cairo >= $cairo_req)
54 AC_SUBST(DEPS_CFLAGS)
55 AC_SUBST(DEPS_LIBS)],
56 [AC_MSG_FAILURE([Value for --with-gtk was neither 2 nor 3])]
57)
58AM_CONDITIONAL(USE_GTK3, [test "x$with_gtk" = x3])
5946
60GTK_MODULES_DIR="${libdir}/gtk-"$with_gtk".0/modules"47GTK_MODULES_DIR="${libdir}/gtk-2.0/modules"
61AC_SUBST(GTK_MODULES_DIR)48AC_SUBST(GTK_MODULES_DIR)
6249
63# Check if build tests50# Check if build tests
@@ -146,7 +133,6 @@
146echo " overlay-scrollbar $PACKAGE_VERSION"133echo " overlay-scrollbar $PACKAGE_VERSION"
147echo " ======================="134echo " ======================="
148echo ""135echo ""
149echo " Gtk+: ${with_gtk}"
150echo " Tests: ${enable_tests}"136echo " Tests: ${enable_tests}"
151echo " Debug: ${enable_debug}"137echo " Debug: ${enable_debug}"
152echo " Prefix: ${prefix}"138echo " Prefix: ${prefix}"
153139
=== modified file 'data/81overlay-scrollbar'
--- data/81overlay-scrollbar 2012-05-15 16:42:07 +0000
+++ data/81overlay-scrollbar 2015-06-04 09:25:27 +0000
@@ -1,9 +1,9 @@
1# This file is sourced by Xsession(5), not executed.1# This file is sourced by Xsession(5), not executed.
22
3if [ -z "$GTK_MODULES" ] ; then3if [ -z "$GTK2_MODULES" ] ; then
4 GTK_MODULES="overlay-scrollbar"4 GTK2_MODULES="overlay-scrollbar"
5else5else
6 GTK_MODULES="$GTK_MODULES:overlay-scrollbar"6 GTK2_MODULES="$GTK2_MODULES:overlay-scrollbar"
7fi7fi
88
9export GTK_MODULES9export GTK2_MODULES
1010
=== modified file 'debian/changelog'
--- debian/changelog 2015-03-19 09:00:11 +0000
+++ debian/changelog 2015-06-04 09:25:27 +0000
@@ -1,3 +1,12 @@
1overlay-scrollbar (0.2.17.1+15.10.20150604-0ubuntu1) UNRELEASED; urgency=medium
2
3 * Drop overlay-scrollbar-gtk3 - this is no longer needed with GTK 3.16.
4 Force it to be removed, since loading it with GTK 3.16 causes visual
5 problems.
6 * Bump Standards-Verison to 3.9.6
7
8 -- Iain Lane <iain.lane@canonical.com> Wed, 03 Jun 2015 12:52:13 +0100
9
1overlay-scrollbar (0.2.16+r359+15.04.20150319-0ubuntu1) vivid; urgency=medium10overlay-scrollbar (0.2.16+r359+15.04.20150319-0ubuntu1) vivid; urgency=medium
211
3 [ Lars Uebernickel ]12 [ Lars Uebernickel ]
413
=== modified file 'debian/control'
--- debian/control 2013-05-01 19:11:34 +0000
+++ debian/control 2015-06-04 09:25:27 +0000
@@ -6,9 +6,8 @@
6 dh-autoreconf,6 dh-autoreconf,
7 libcairo2-dev (>= 1.10),7 libcairo2-dev (>= 1.10),
8 libglib2.0-dev (>= 2.26.0),8 libglib2.0-dev (>= 2.26.0),
9 libgtk-3-dev,9 libgtk2.0-dev (>= 2.24.26),
10 libgtk2.0-dev,10Standards-Version: 3.9.6
11Standards-Version: 3.9.3
12Section: libs11Section: libs
13Homepage: http://launchpad.net/ayatana-scrollbar12Homepage: http://launchpad.net/ayatana-scrollbar
14# If you aren't a member of ~ayatana-scrollbar-team but need to upload13# If you aren't a member of ~ayatana-scrollbar-team but need to upload
@@ -17,26 +16,11 @@
17Vcs-Bzr: https://code.launchpad.net/~ayatana-scrollbar-team/overlay-scrollbar/trunk16Vcs-Bzr: https://code.launchpad.net/~ayatana-scrollbar-team/overlay-scrollbar/trunk
18Vcs-Browser: https://bazaar.launchpad.net/~ayatana-scrollbar-team/overlay-scrollbar/trunk/files17Vcs-Browser: https://bazaar.launchpad.net/~ayatana-scrollbar-team/overlay-scrollbar/trunk/files
1918
20Package: overlay-scrollbar-gtk3
21Section: libs
22Architecture: any
23Multi-Arch: same
24Depends: overlay-scrollbar,
25 ${misc:Depends},
26 ${shlibs:Depends},
27Replaces: liboverlay-scrollbar3-0.2-0 (<< 0.2.16+r348),
28 liboverlay-scrollbar3-0.2-dev (<< 0.2.16+r348),
29Conflicts: liboverlay-scrollbar3-0.2-0 (<< 0.2.16+r348),
30 liboverlay-scrollbar3-0.2-dev (<< 0.2.16+r348),
31Description: GTK 3 module for overlay scrollbars
32 Overlay scrollbar is a GtkModule enabling a dynamic overlay behavior.
33
34Package: overlay-scrollbar-gtk219Package: overlay-scrollbar-gtk2
35Section: libs20Section: libs
36Architecture: any21Architecture: any
37Multi-Arch: same22Multi-Arch: same
38Depends: overlay-scrollbar,23Depends: ${misc:Depends},
39 ${misc:Depends},
40 ${shlibs:Depends},24 ${shlibs:Depends},
41Replaces: liboverlay-scrollbar-0.2-0 (<< 0.2.16+r348),25Replaces: liboverlay-scrollbar-0.2-0 (<< 0.2.16+r348),
42 liboverlay-scrollbar-0.2-dev (<< 0.2.16+r348),26 liboverlay-scrollbar-0.2-dev (<< 0.2.16+r348),
@@ -49,7 +33,8 @@
49Section: libs33Section: libs
50Architecture: all34Architecture: all
51Depends: overlay-scrollbar-gtk2,35Depends: overlay-scrollbar-gtk2,
52 overlay-scrollbar-gtk3,
53 ${misc:Depends},36 ${misc:Depends},
37Conflicts: overlay-scrollbar-gtk3
38Replaces: overlay-scrollbar-gtk3
54Description: Scrollbar overlay39Description: Scrollbar overlay
55 Overlay scrollbar is a GtkModule enabling a dynamic overlay behavior.40 Overlay scrollbar is a GtkModule enabling a dynamic overlay behavior.
5641
=== modified file 'debian/overlay-scrollbar-gtk2.install'
--- debian/overlay-scrollbar-gtk2.install 2012-09-24 14:25:40 +0000
+++ debian/overlay-scrollbar-gtk2.install 2015-06-04 09:25:27 +0000
@@ -1,1 +1,1 @@
1debian/tmp/gtk2/usr/lib/* /usr/lib/1usr/lib
22
=== removed file 'debian/overlay-scrollbar-gtk3.install'
--- debian/overlay-scrollbar-gtk3.install 2012-09-24 14:25:40 +0000
+++ debian/overlay-scrollbar-gtk3.install 1970-01-01 00:00:00 +0000
@@ -1,1 +0,0 @@
1debian/tmp/gtk3/usr/lib/* /usr/lib/
20
=== modified file 'debian/overlay-scrollbar.install'
--- debian/overlay-scrollbar.install 2013-05-01 19:11:34 +0000
+++ debian/overlay-scrollbar.install 2015-06-04 09:25:27 +0000
@@ -1,2 +1,2 @@
1debian/tmp/gtk3/etc/X11 /etc/1etc
2debian/tmp/gtk3/usr/share/glib-2.0 /usr/share/2usr/share
33
=== modified file 'debian/rules'
--- debian/rules 2012-11-26 13:59:47 +0000
+++ debian/rules 2015-06-04 09:25:27 +0000
@@ -1,10 +1,8 @@
1#!/usr/bin/make -f1#!/usr/bin/make -f
22
3FLAVORS = gtk2 gtk33CONFIGURE_COMMON_FLAGS = --disable-static \
44 --libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH) \
5CONFIGURE_FLAGS_gtk2 = --with-gtk=25 --disable-silent-rules
6CONFIGURE_FLAGS_gtk3 = --with-gtk=3
7CONFIGURE_COMMON_FLAGS = --disable-static --libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH)
86
9export DPKG_GENSYMBOLS_CHECK_LEVEL = 47export DPKG_GENSYMBOLS_CHECK_LEVEL = 4
108
@@ -14,26 +12,11 @@
14override_dh_autoreconf:12override_dh_autoreconf:
15 NOCONFIGURE=1 dh_autoreconf ./autogen.sh13 NOCONFIGURE=1 dh_autoreconf ./autogen.sh
1614
17override_dh_auto_configure: $(FLAVORS:%=doconfigure-%)15override_dh_auto_configure:
1816 dh_auto_configure -- $(CONFIGURE_COMMON_FLAGS)
19doconfigure-%:
20 dh_auto_configure --builddirectory=build/$* -- \
21 $(CONFIGURE_FLAGS_$*) \
22 $(CONFIGURE_COMMON_FLAGS)
23
24override_dh_auto_build: $(FLAVORS:%=dobuild-%)
25
26dobuild-%:
27 dh_auto_build --builddirectory=build/$*
28
29override_dh_auto_install: $(FLAVORS:%=doinstall-%)
30
31doinstall-%:
32 dh_auto_install --sourcedir=build/$* --destdir=debian/tmp/$*
3317
34override_dh_install:18override_dh_install:
35 find debian/tmp -name \*.la -delete
36 rm -rf debian/tmp/gtk2/usr/share/glib-2.0/schemas
37 rm -f debian/tmp/gtk2/etc/X11/Xsession.d/81overlay-scrollbar
38 dh_install --fail-missing19 dh_install --fail-missing
20 find debian/overlay-scrollbar-gtk2 -name \*.la -delete
3921
22override_dh_makeshlibs:
4023
=== modified file 'os/Makefile.am'
--- os/Makefile.am 2012-04-26 14:44:19 +0000
+++ os/Makefile.am 2015-06-04 09:25:27 +0000
@@ -1,8 +1,4 @@
1if USE_GTK3
2VER=3
3else
4VER=1VER=
5endif
62
7source_h = \3source_h = \
8 $(srcdir)/os-private.h \4 $(srcdir)/os-private.h \
@@ -21,12 +17,8 @@
2117
22liboverlay_scrollbar_la_SOURCES = $(source_h) $(source_c)18liboverlay_scrollbar_la_SOURCES = $(source_h) $(source_c)
2319
24if USE_GTK3
25liboverlay_scrollbar_la_CFLAGS = $(OS_CFLAGS) -DUSE_GTK3
26else
27liboverlay_scrollbar_la_CFLAGS = $(OS_CFLAGS)20liboverlay_scrollbar_la_CFLAGS = $(OS_CFLAGS)
28endif
2921
30liboverlay_scrollbar_la_LIBADD = $(OS_LIBADD)22liboverlay_scrollbar_la_LIBADD = $(OS_LIBADD) -lm
3123
32liboverlay_scrollbar_la_LDFLAGS = $(OS_LDFLAGS)24liboverlay_scrollbar_la_LDFLAGS = $(OS_LDFLAGS)
3325
=== modified file 'os/os-bar.c'
--- os/os-bar.c 2013-11-29 13:45:59 +0000
+++ os/os-bar.c 2015-06-04 09:25:27 +0000
@@ -62,13 +62,8 @@
62static void62static void
63draw_bar (OsBar *bar)63draw_bar (OsBar *bar)
64{64{
65#ifdef USE_GTK3
66 GdkRGBA c1, c2, color;
67 GtkStyleContext *style_context;
68#else
69 GdkColor color;65 GdkColor color;
70 GtkStyle *style;66 GtkStyle *style;
71#endif
72 OsBarPrivate *priv;67 OsBarPrivate *priv;
73 gfloat weight;68 gfloat weight;
7469
@@ -76,27 +71,6 @@
7671
77 weight = priv->weight;72 weight = priv->weight;
7873
79#ifdef USE_GTK3
80 style_context = gtk_widget_get_style_context (priv->parent);
81
82 if (priv->active == FALSE)
83 {
84 gtk_style_context_get_background_color (style_context, GTK_STATE_FLAG_INSENSITIVE, &c1);
85 gtk_style_context_get_background_color (style_context, GTK_STATE_FLAG_SELECTED, &c2);
86 }
87 else
88 {
89 gtk_style_context_get_background_color (style_context, GTK_STATE_FLAG_SELECTED, &c1);
90 gtk_style_context_get_background_color (style_context, GTK_STATE_FLAG_INSENSITIVE, &c2);
91 }
92
93 color.red = weight * c1.red + (1.0 - weight) * c2.red;
94 color.green = weight * c1.green + (1.0 - weight) * c2.green;
95 color.blue = weight * c1.blue + (1.0 - weight) * c2.blue;
96 color.alpha = 1.0;
97
98 gdk_window_set_background_rgba (priv->bar_window, &color);
99#else
100 style = gtk_widget_get_style (priv->parent);74 style = gtk_widget_get_style (priv->parent);
10175
102 color = style->bg[GTK_STATE_SELECTED];76 color = style->bg[GTK_STATE_SELECTED];
@@ -104,7 +78,6 @@
104 gdk_colormap_alloc_color (gdk_drawable_get_colormap (priv->bar_window), &color, FALSE, TRUE);78 gdk_colormap_alloc_color (gdk_drawable_get_colormap (priv->bar_window), &color, FALSE, TRUE);
10579
106 gdk_window_set_background (priv->bar_window, &color);80 gdk_window_set_background (priv->bar_window, &color);
107#endif
10881
109 gdk_window_invalidate_rect (gtk_widget_get_window (priv->parent), &priv->allocation, TRUE);82 gdk_window_invalidate_rect (gtk_widget_get_window (priv->parent), &priv->allocation, TRUE);
110}83}
@@ -113,26 +86,12 @@
113static void86static void
114draw_tail (OsBar *bar)87draw_tail (OsBar *bar)
115{88{
116#ifdef USE_GTK3
117 GdkRGBA color;
118 GtkStyleContext *style_context;
119#else
120 GdkColor color;89 GdkColor color;
121 GtkStyle *style;90 GtkStyle *style;
122#endif
123 OsBarPrivate *priv;91 OsBarPrivate *priv;
12492
125 priv = bar->priv;93 priv = bar->priv;
12694
127#ifdef USE_GTK3
128 style_context = gtk_widget_get_style_context (priv->parent);
129
130 gtk_style_context_get_background_color (style_context, GTK_STATE_FLAG_ACTIVE, &color);
131
132 color.alpha = 1.0;
133
134 gdk_window_set_background_rgba (priv->tail_window, &color);
135#else
136 style = gtk_widget_get_style (priv->parent);95 style = gtk_widget_get_style (priv->parent);
13796
138 color = style->bg[GTK_STATE_ACTIVE];97 color = style->bg[GTK_STATE_ACTIVE];
@@ -140,7 +99,6 @@
140 gdk_colormap_alloc_color (gdk_drawable_get_colormap (priv->tail_window), &color, FALSE, TRUE);99 gdk_colormap_alloc_color (gdk_drawable_get_colormap (priv->tail_window), &color, FALSE, TRUE);
141100
142 gdk_window_set_background (priv->tail_window, &color);101 gdk_window_set_background (priv->tail_window, &color);
143#endif
144102
145 gdk_window_invalidate_rect (gtk_widget_get_window (priv->parent), &priv->allocation, TRUE);103 gdk_window_invalidate_rect (gtk_widget_get_window (priv->parent), &priv->allocation, TRUE);
146}104}
@@ -222,19 +180,9 @@
222 gint offset_x,180 gint offset_x,
223 gint offset_y)181 gint offset_y)
224{182{
225#ifdef USE_GTK3
226
227 cairo_region_t * shape_region = cairo_region_create_rectangle (shape_rect);
228 gdk_window_shape_combine_region (window, shape_region, offset_x, offset_y);
229 cairo_region_destroy (shape_region);
230
231#else
232
233 GdkRegion * shape_region = gdk_region_rectangle (shape_rect);183 GdkRegion * shape_region = gdk_region_rectangle (shape_rect);
234 gdk_window_shape_combine_region (window, shape_region, offset_x, offset_y);184 gdk_window_shape_combine_region (window, shape_region, offset_x, offset_y);
235 gdk_region_destroy (shape_region);185 gdk_region_destroy (shape_region);
236
237#endif
238}186}
239187
240/* Callback called by the retract-tail animation. */188/* Callback called by the retract-tail animation. */
@@ -545,60 +493,6 @@
545}493}
546494
547/**495/**
548 * os_bar_set_active:
549 * @bar: a #OsBar
550 * @active: whether is active or not
551 * @animate: whether animate it or not
552 *
553 * Changes the activity state of @bar.
554 **/
555void
556os_bar_set_active (OsBar *bar,
557 gboolean active,
558 gboolean animate)
559{
560#ifdef USE_GTK3
561 OsBarPrivate *priv;
562
563 g_return_if_fail (OS_IS_BAR (bar));
564
565 priv = bar->priv;
566
567 /* Set the state and draw even if there's a state_animation running, that is
568 * (!animate && os_animation_is_running (priv->state_animation)). */
569 if ((priv->active != active) ||
570 (!animate && os_animation_is_running (priv->state_animation)))
571 {
572 gboolean visible;
573
574 priv->active = active;
575
576 if (priv->parent == NULL)
577 return;
578
579 visible = gdk_window_is_visible (priv->bar_window);
580
581 if (visible)
582 os_animation_stop (priv->state_animation, NULL);
583
584 if (visible && animate)
585 {
586 os_animation_set_duration (priv->state_animation, priv->active ? DURATION_FADE_IN :
587 DURATION_FADE_OUT);
588 os_animation_start (priv->state_animation);
589 }
590
591 if (!visible || !animate)
592 {
593 priv->weight = 1.0f;
594
595 draw_bar (bar);
596 }
597 }
598#endif
599}
600
601/**
602 * os_bar_set_detached:496 * os_bar_set_detached:
603 * @bar: a #OsBar497 * @bar: a #OsBar
604 * @detached: whether the bar is detached or not498 * @detached: whether the bar is detached or not
@@ -702,23 +596,12 @@
702 attributes.wclass = GDK_INPUT_OUTPUT;596 attributes.wclass = GDK_INPUT_OUTPUT;
703 attributes.window_type = GDK_WINDOW_CHILD;597 attributes.window_type = GDK_WINDOW_CHILD;
704 attributes.visual = gtk_widget_get_visual (priv->parent);598 attributes.visual = gtk_widget_get_visual (priv->parent);
705#ifndef USE_GTK3
706 attributes.colormap = gtk_widget_get_colormap (priv->parent);599 attributes.colormap = gtk_widget_get_colormap (priv->parent);
707#endif
708600
709 /* tail_window. */601 /* tail_window. */
710 priv->tail_window = gdk_window_new (gtk_widget_get_window (priv->parent),602 priv->tail_window = gdk_window_new (gtk_widget_get_window (priv->parent),
711 &attributes,603 &attributes,
712#ifdef USE_GTK3
713 GDK_WA_VISUAL);
714#else
715 GDK_WA_VISUAL | GDK_WA_COLORMAP);604 GDK_WA_VISUAL | GDK_WA_COLORMAP);
716#endif
717
718#ifdef USE_GTK3
719 gdk_window_ensure_native (priv->tail_window);
720 gtk_widget_register_window (priv->parent, priv->tail_window);
721#endif
722605
723 g_object_ref_sink (priv->tail_window);606 g_object_ref_sink (priv->tail_window);
724607
@@ -727,26 +610,13 @@
727610
728 /* FIXME(Cimi) maybe this is not required with 0 as event mask. */611 /* FIXME(Cimi) maybe this is not required with 0 as event mask. */
729 gdk_window_input_shape_combine_region (priv->tail_window,612 gdk_window_input_shape_combine_region (priv->tail_window,
730#ifdef USE_GTK3
731 cairo_region_create (),
732#else
733 gdk_region_new (),613 gdk_region_new (),
734#endif
735 0, 0);614 0, 0);
736615
737 /* bar_window. */616 /* bar_window. */
738 priv->bar_window = gdk_window_new (gtk_widget_get_window (priv->parent),617 priv->bar_window = gdk_window_new (gtk_widget_get_window (priv->parent),
739 &attributes,618 &attributes,
740#ifdef USE_GTK3
741 GDK_WA_VISUAL);
742#else
743 GDK_WA_VISUAL | GDK_WA_COLORMAP);619 GDK_WA_VISUAL | GDK_WA_COLORMAP);
744#endif
745
746#ifdef USE_GTK3
747 gdk_window_ensure_native (priv->bar_window);
748 gtk_widget_register_window (priv->parent, priv->bar_window);
749#endif
750620
751 g_object_ref_sink (priv->bar_window);621 g_object_ref_sink (priv->bar_window);
752622
@@ -755,11 +625,7 @@
755625
756 /* FIXME(Cimi) maybe this is not required with 0 as event mask. */626 /* FIXME(Cimi) maybe this is not required with 0 as event mask. */
757 gdk_window_input_shape_combine_region (priv->bar_window,627 gdk_window_input_shape_combine_region (priv->bar_window,
758#ifdef USE_GTK3
759 cairo_region_create (),
760#else
761 gdk_region_new (),628 gdk_region_new (),
762#endif
763 0, 0);629 0, 0);
764630
765 mask_tail (bar);631 mask_tail (bar);
766632
=== modified file 'os/os-private.h'
--- os/os-private.h 2012-11-26 14:35:24 +0000
+++ os/os-private.h 2015-06-04 09:25:27 +0000
@@ -196,10 +196,6 @@
196void os_bar_move_resize (OsBar *bar,196void os_bar_move_resize (OsBar *bar,
197 GdkRectangle mask);197 GdkRectangle mask);
198198
199void os_bar_set_active (OsBar *bar,
200 gboolean active,
201 gboolean animate);
202
203void os_bar_set_detached (OsBar *bar,199void os_bar_set_detached (OsBar *bar,
204 gboolean detached,200 gboolean detached,
205 gboolean animate);201 gboolean animate);
206202
=== modified file 'os/os-scrollbar.c'
--- os/os-scrollbar.c 2015-03-03 08:57:49 +0000
+++ os/os-scrollbar.c 2015-06-04 09:25:27 +0000
@@ -126,9 +126,6 @@
126 gboolean allow_resize;126 gboolean allow_resize;
127 gboolean allow_resize_paned;127 gboolean allow_resize_paned;
128 gboolean resizing_paned;128 gboolean resizing_paned;
129#ifdef USE_GTK3
130 gboolean deactivable_bar;
131#endif
132 gboolean hidable_thumb;129 gboolean hidable_thumb;
133 gboolean window_button_press; /* FIXME(Cimi) to replace with X11 input events. */130 gboolean window_button_press; /* FIXME(Cimi) to replace with X11 input events. */
134 gdouble value;131 gdouble value;
@@ -142,11 +139,6 @@
142 guint32 source_unlock_thumb_id;139 guint32 source_unlock_thumb_id;
143} OsScrollbarPrivate;140} OsScrollbarPrivate;
144141
145#ifdef USE_GTK3
146static GdkInputSource os_input_source = GDK_SOURCE_MOUSE;
147static gint os_device_id = 0;
148static GtkCssProvider *provider = NULL;
149#endif
150static Atom net_active_window_atom = None;142static Atom net_active_window_atom = None;
151static Atom unity_net_workarea_region_atom = None;143static Atom unity_net_workarea_region_atom = None;
152static GSList *os_root_list = NULL;144static GSList *os_root_list = NULL;
@@ -176,16 +168,9 @@
176static void thumb_unmap_cb (GtkWidget *widget, gpointer user_data);168static void thumb_unmap_cb (GtkWidget *widget, gpointer user_data);
177169
178/* GtkScrollbar vfunc pointers. */170/* GtkScrollbar vfunc pointers. */
179#ifdef USE_GTK3
180static gboolean (* pre_hijacked_scrollbar_draw) (GtkWidget *widget, cairo_t *cr);
181static void (* pre_hijacked_scrollbar_get_preferred_width) (GtkWidget *widget, gint *minimal_width, gint *natural_width);
182static void (* pre_hijacked_scrollbar_get_preferred_height) (GtkWidget *widget, gint *minimal_height, gint *natural_height);
183static void (* pre_hijacked_scrollbar_state_flags_changed) (GtkWidget *widget, GtkStateFlags flags);
184#else
185static gboolean (* pre_hijacked_scrollbar_expose_event) (GtkWidget *widget, GdkEventExpose *event);171static gboolean (* pre_hijacked_scrollbar_expose_event) (GtkWidget *widget, GdkEventExpose *event);
186static void (* pre_hijacked_scrollbar_size_request) (GtkWidget *widget, GtkRequisition *requisition);172static void (* pre_hijacked_scrollbar_size_request) (GtkWidget *widget, GtkRequisition *requisition);
187static void (* pre_hijacked_scrollbar_state_changed) (GtkWidget *widget, GtkStateType state);173static void (* pre_hijacked_scrollbar_state_changed) (GtkWidget *widget, GtkStateType state);
188#endif
189static void (* pre_hijacked_scrollbar_grab_notify) (GtkWidget *widget, gboolean was_grabbed);174static void (* pre_hijacked_scrollbar_grab_notify) (GtkWidget *widget, gboolean was_grabbed);
190static void (* pre_hijacked_scrollbar_hide) (GtkWidget *widget);175static void (* pre_hijacked_scrollbar_hide) (GtkWidget *widget);
191static void (* pre_hijacked_scrollbar_map) (GtkWidget *widget);176static void (* pre_hijacked_scrollbar_map) (GtkWidget *widget);
@@ -197,16 +182,9 @@
197static void (* pre_hijacked_scrollbar_dispose) (GObject *object);182static void (* pre_hijacked_scrollbar_dispose) (GObject *object);
198183
199/* Hijacked GtkScrollbar vfunc pointers. */184/* Hijacked GtkScrollbar vfunc pointers. */
200#ifdef USE_GTK3
201static gboolean hijacked_scrollbar_draw (GtkWidget *widget, cairo_t *cr);
202static void hijacked_scrollbar_get_preferred_width (GtkWidget *widget, gint *minimal_width, gint *natural_width);
203static void hijacked_scrollbar_get_preferred_height (GtkWidget *widget, gint *minimal_height, gint *natural_height);
204static void hijacked_scrollbar_state_flags_changed (GtkWidget *widget, GtkStateFlags flags);
205#else
206static gboolean hijacked_scrollbar_expose_event (GtkWidget *widget, GdkEventExpose *event);185static gboolean hijacked_scrollbar_expose_event (GtkWidget *widget, GdkEventExpose *event);
207static void hijacked_scrollbar_size_request (GtkWidget *widget, GtkRequisition *requisition);186static void hijacked_scrollbar_size_request (GtkWidget *widget, GtkRequisition *requisition);
208static void hijacked_scrollbar_state_changed (GtkWidget *widget, GtkStateType state);187static void hijacked_scrollbar_state_changed (GtkWidget *widget, GtkStateType state);
209#endif
210static void hijacked_scrollbar_grab_notify (GtkWidget *widget, gboolean was_grabbed);188static void hijacked_scrollbar_grab_notify (GtkWidget *widget, gboolean was_grabbed);
211static void hijacked_scrollbar_hide (GtkWidget *widget);189static void hijacked_scrollbar_hide (GtkWidget *widget);
212static void hijacked_scrollbar_map (GtkWidget *widget);190static void hijacked_scrollbar_map (GtkWidget *widget);
@@ -576,38 +554,6 @@
576 return value;554 return value;
577}555}
578556
579#ifdef USE_GTK3
580/* Deactivate the bar if it's the case. */
581static void
582deactivate_bar (GtkScrollbar *scrollbar)
583{
584 OsScrollbarPrivate *priv;
585
586 priv = get_private (GTK_WIDGET (scrollbar));
587
588 if (priv->bar != NULL && priv->deactivable_bar)
589 os_bar_set_active (priv->bar, FALSE, TRUE);
590}
591
592/* Timeout before deactivating the bar. */
593static gboolean
594deactivate_bar_cb (gpointer user_data)
595{
596 GtkScrollbar *scrollbar;
597 OsScrollbarPrivate *priv;
598
599 scrollbar = GTK_SCROLLBAR (user_data);
600 priv = get_private (GTK_WIDGET (scrollbar));
601
602 OS_DCHECK (!priv->active_window);
603
604 deactivate_bar (scrollbar);
605 priv->source_deactivate_bar_id = 0;
606
607 return FALSE;
608}
609#endif
610
611/* destroy the private struct */557/* destroy the private struct */
612static void558static void
613destroy_private (gpointer priv)559destroy_private (gpointer priv)
@@ -669,9 +615,6 @@
669615
670 /* Initialize struct variables. */616 /* Initialize struct variables. */
671 qdata->side = OS_SIDE_RIGHT;617 qdata->side = OS_SIDE_RIGHT;
672#ifdef USE_GTK3
673 qdata->deactivable_bar = TRUE;
674#endif
675 qdata->hidable_thumb = TRUE;618 qdata->hidable_thumb = TRUE;
676 qdata->fine_scroll_multiplier = 1.0;619 qdata->fine_scroll_multiplier = 1.0;
677 qdata->bar = os_bar_new ();620 qdata->bar = os_bar_new ();
@@ -733,11 +676,7 @@
733static gboolean676static gboolean
734is_insensitive (GtkScrollbar *scrollbar)677is_insensitive (GtkScrollbar *scrollbar)
735{678{
736#ifdef USE_GTK3
737 return (gtk_widget_get_state_flags (GTK_WIDGET (scrollbar)) & GTK_STATE_FLAG_INSENSITIVE) != 0;
738#else
739 return gtk_widget_get_state (GTK_WIDGET (scrollbar)) == GTK_STATE_INSENSITIVE;679 return gtk_widget_get_state (GTK_WIDGET (scrollbar)) == GTK_STATE_INSENSITIVE;
740#endif
741}680}
742681
743/* Move the bar. */682/* Move the bar. */
@@ -829,9 +768,7 @@
829 gint x,768 gint x,
830 gint y)769 gint y)
831{770{
832#ifndef USE_GTK3
833 GdkRectangle gdk_rect;771 GdkRectangle gdk_rect;
834#endif
835 GdkScreen *screen;772 GdkScreen *screen;
836 OsScrollbarPrivate *priv;773 OsScrollbarPrivate *priv;
837 cairo_rectangle_int_t rect;774 cairo_rectangle_int_t rect;
@@ -845,16 +782,12 @@
845782
846 screen = gtk_widget_get_screen (GTK_WIDGET (scrollbar));783 screen = gtk_widget_get_screen (GTK_WIDGET (scrollbar));
847 n_monitor = gdk_screen_get_monitor_at_point (screen, monitor_x, y);784 n_monitor = gdk_screen_get_monitor_at_point (screen, monitor_x, y);
848#ifdef USE_GTK3
849 gdk_screen_get_monitor_geometry (screen, n_monitor, &rect);
850#else
851 gdk_screen_get_monitor_geometry (screen, n_monitor, &gdk_rect);785 gdk_screen_get_monitor_geometry (screen, n_monitor, &gdk_rect);
852786
853 rect.x = gdk_rect.x;787 rect.x = gdk_rect.x;
854 rect.y = gdk_rect.y;788 rect.y = gdk_rect.y;
855 rect.width = gdk_rect.width;789 rect.width = gdk_rect.width;
856 rect.height = gdk_rect.height;790 rect.height = gdk_rect.height;
857#endif
858791
859 screen_x = rect.x;792 screen_x = rect.x;
860 screen_width = rect.x + rect.width;793 screen_width = rect.x + rect.width;
@@ -972,9 +905,7 @@
972 gint x,905 gint x,
973 gint y)906 gint y)
974{907{
975#ifndef USE_GTK3
976 GdkRectangle gdk_rect;908 GdkRectangle gdk_rect;
977#endif
978 GdkScreen *screen;909 GdkScreen *screen;
979 OsScrollbarPrivate *priv;910 OsScrollbarPrivate *priv;
980 cairo_rectangle_int_t rect;911 cairo_rectangle_int_t rect;
@@ -988,16 +919,12 @@
988919
989 screen = gtk_widget_get_screen (GTK_WIDGET (scrollbar));920 screen = gtk_widget_get_screen (GTK_WIDGET (scrollbar));
990 n_monitor = gdk_screen_get_monitor_at_point (screen, x, monitor_y);921 n_monitor = gdk_screen_get_monitor_at_point (screen, x, monitor_y);
991#ifdef USE_GTK3
992 gdk_screen_get_monitor_geometry (screen, n_monitor, &rect);
993#else
994 gdk_screen_get_monitor_geometry (screen, n_monitor, &gdk_rect);922 gdk_screen_get_monitor_geometry (screen, n_monitor, &gdk_rect);
995923
996 rect.x = gdk_rect.x;924 rect.x = gdk_rect.x;
997 rect.y = gdk_rect.y;925 rect.y = gdk_rect.y;
998 rect.width = gdk_rect.width;926 rect.width = gdk_rect.width;
999 rect.height = gdk_rect.height;927 rect.height = gdk_rect.height;
1000#endif
1001928
1002 screen_y = rect.y;929 screen_y = rect.y;
1003 screen_height = rect.y + rect.height;930 screen_height = rect.y + rect.height;
@@ -1286,17 +1213,7 @@
1286 gint *x,1213 gint *x,
1287 gint *y)1214 gint *y)
1288{1215{
1289#ifdef USE_GTK3
1290 GdkDeviceManager *device_manager;
1291 GdkDevice *device;
1292
1293 device_manager = gdk_display_get_device_manager (gdk_window_get_display (window));
1294 device = gdk_device_manager_get_client_pointer (device_manager);
1295
1296 return gdk_device_get_window_at_position (device, x, y);
1297#else
1298 return gdk_window_at_pointer (x, y);1216 return gdk_window_at_pointer (x, y);
1299#endif
1300}1217}
13011218
1302/* Get the position of the pointer. */1219/* Get the position of the pointer. */
@@ -1306,17 +1223,7 @@
1306 gint *y,1223 gint *y,
1307 GdkModifierType *mask)1224 GdkModifierType *mask)
1308{1225{
1309#ifdef USE_GTK3
1310 GdkDeviceManager *device_manager;
1311 GdkDevice *device;
1312
1313 device_manager = gdk_display_get_device_manager (gdk_window_get_display (window));
1314 device = gdk_device_manager_get_client_pointer (device_manager);
1315
1316 return gdk_window_get_device_position (window, device, x, y, mask);
1317#else
1318 return gdk_window_get_pointer (window, x, y, mask);1226 return gdk_window_get_pointer (window, x, y, mask);
1319#endif
1320}1227}
13211228
1322/* Adjustment functions. */1229/* Adjustment functions. */
@@ -1506,38 +1413,6 @@
1506 move_bar (scrollbar);1413 move_bar (scrollbar);
1507}1414}
15081415
1509#ifdef USE_GTK3
1510/* Bar functions. */
1511
1512/* Set the state of the bar checking mouse position. */
1513static void
1514bar_set_state_from_pointer (GtkScrollbar *scrollbar,
1515 gint x,
1516 gint y)
1517{
1518 GtkAllocation allocation;
1519 OsScrollbarPrivate *priv;
1520
1521 priv = get_private (GTK_WIDGET (scrollbar));
1522
1523 OS_DCHECK (!priv->active_window);
1524
1525 gtk_widget_get_allocation (gtk_widget_get_parent (GTK_WIDGET (scrollbar)), &allocation);
1526
1527 if ((x > allocation.x && x < allocation.x + allocation.width) &&
1528 (y > allocation.y && y < allocation.y + allocation.height))
1529 {
1530 priv->deactivable_bar = FALSE;
1531 os_bar_set_active (priv->bar, TRUE, TRUE);
1532 }
1533 else
1534 {
1535 priv->deactivable_bar = TRUE;
1536 os_bar_set_active (priv->bar, FALSE, TRUE);
1537 }
1538}
1539#endif
1540
1541/* Root window functions. */1416/* Root window functions. */
15421417
1543/* Filter function applied to the root window. */1418/* Filter function applied to the root window. */
@@ -1600,12 +1475,7 @@
1600 &xev);1475 &xev);
16011476
1602 gdk_flush ();1477 gdk_flush ();
1603
1604#ifdef USE_GTK3
1605 gdk_error_trap_pop_ignored ();
1606#else
1607 gdk_error_trap_pop ();1478 gdk_error_trap_pop ();
1608#endif
1609}1479}
16101480
1611/* Present a Gdk window. */1481/* Present a Gdk window. */
@@ -1858,9 +1728,6 @@
18581728
1859 priv->event |= OS_EVENT_ENTER_NOTIFY;1729 priv->event |= OS_EVENT_ENTER_NOTIFY;
18601730
1861#ifdef USE_GTK3
1862 priv->deactivable_bar = FALSE;
1863#endif
1864 priv->hidable_thumb = FALSE;1731 priv->hidable_thumb = FALSE;
18651732
1866 if (priv->state & OS_STATE_INTERNAL)1733 if (priv->state & OS_STATE_INTERNAL)
@@ -1876,15 +1743,6 @@
18761743
1877 scrollbar = GTK_SCROLLBAR (user_data);1744 scrollbar = GTK_SCROLLBAR (user_data);
18781745
1879#ifdef USE_GTK3
1880 /* Gtk+ 3.3.18 emits more GdkEventCrossing
1881 * with touch devices, skip few events. */
1882 if (event->mode == GDK_CROSSING_TOUCH_BEGIN ||
1883 event->mode == GDK_CROSSING_TOUCH_END ||
1884 event->mode == GDK_CROSSING_DEVICE_SWITCH)
1885 return FALSE;
1886#endif
1887
1888 enter_event (scrollbar);1746 enter_event (scrollbar);
18891747
1890 return FALSE;1748 return FALSE;
@@ -1901,22 +1759,6 @@
1901 scrollbar = GTK_SCROLLBAR (user_data);1759 scrollbar = GTK_SCROLLBAR (user_data);
1902 priv = get_private (GTK_WIDGET (scrollbar));1760 priv = get_private (GTK_WIDGET (scrollbar));
19031761
1904#ifdef USE_GTK3
1905 /* Gtk+ 3.3.18 emits more GdkEventCrossing
1906 * with touch devices, skip few events.
1907 * Last line skips the event if the pointer is still in the window:
1908 * this happens with touch devices because Gtk+ emits
1909 * GDK_CROSSING_UNGRAB to the touch device, thus calling leave-notify,
1910 * and we want to skip those events.
1911 *
1912 * FIXME the logic of this event should be rewritten. */
1913 if (event->mode == GDK_CROSSING_TOUCH_BEGIN ||
1914 event->mode == GDK_CROSSING_TOUCH_END ||
1915 event->mode == GDK_CROSSING_DEVICE_SWITCH ||
1916 window_at_pointer (event->window, NULL, NULL) == event->window)
1917 return FALSE;
1918#endif
1919
1920 /* When exiting the thumb horizontally (or vertically),1762 /* When exiting the thumb horizontally (or vertically),
1921 * in LOCKED state, remove the lock. */1763 * in LOCKED state, remove the lock. */
1922 if ((priv->state & OS_STATE_LOCKED) &&1764 if ((priv->state & OS_STATE_LOCKED) &&
@@ -1930,21 +1772,6 @@
1930 * not interacting with the thumb. */1772 * not interacting with the thumb. */
1931 if (!(priv->event & OS_EVENT_BUTTON_PRESS))1773 if (!(priv->event & OS_EVENT_BUTTON_PRESS))
1932 {1774 {
1933#ifdef USE_GTK3
1934 /* Never deactivate the bar in an active window. */
1935 if (!priv->active_window)
1936 {
1937 priv->deactivable_bar = TRUE;
1938
1939 if (priv->source_deactivate_bar_id != 0)
1940 g_source_remove (priv->source_deactivate_bar_id);
1941
1942 priv->source_deactivate_bar_id = g_timeout_add (TIMEOUT_THUMB_HIDE,
1943 deactivate_bar_cb,
1944 scrollbar);
1945 }
1946#endif
1947
1948 priv->event &= ~(OS_EVENT_ENTER_NOTIFY);1775 priv->event &= ~(OS_EVENT_ENTER_NOTIFY);
19491776
1950 priv->hidable_thumb = TRUE;1777 priv->hidable_thumb = TRUE;
@@ -1973,16 +1800,6 @@
19731800
1974 scrollbar = GTK_SCROLLBAR (user_data);1801 scrollbar = GTK_SCROLLBAR (user_data);
19751802
1976#ifdef USE_GTK3
1977 OsScrollbarPrivate *priv;
1978
1979 /* Immediately set the bar to be active. */
1980 priv = get_private (GTK_WIDGET (scrollbar));
1981
1982 priv->deactivable_bar = FALSE;
1983 os_bar_set_active (priv->bar, TRUE, FALSE);
1984#endif
1985
1986 xid = GDK_WINDOW_XID (gtk_widget_get_window (widget));1803 xid = GDK_WINDOW_XID (gtk_widget_get_window (widget));
1987 xid_parent = GDK_WINDOW_XID (gtk_widget_get_window (gtk_widget_get_toplevel (GTK_WIDGET (scrollbar))));1804 xid_parent = GDK_WINDOW_XID (gtk_widget_get_window (gtk_widget_get_toplevel (GTK_WIDGET (scrollbar))));
1988 display = GDK_WINDOW_XDISPLAY (gtk_widget_get_window (GTK_WIDGET (scrollbar)));1805 display = GDK_WINDOW_XDISPLAY (gtk_widget_get_window (GTK_WIDGET (scrollbar)));
@@ -2031,12 +1848,7 @@
2031 &xev);1848 &xev);
20321849
2033 gdk_flush ();1850 gdk_flush ();
2034
2035#ifdef USE_GTK3
2036 gdk_error_trap_pop_ignored ();
2037#else
2038 gdk_error_trap_pop ();1851 gdk_error_trap_pop ();
2039#endif
2040 }1852 }
2041}1853}
20421854
@@ -2117,17 +1929,6 @@
2117 scrollbar = GTK_SCROLLBAR (user_data);1929 scrollbar = GTK_SCROLLBAR (user_data);
2118 priv = get_private (GTK_WIDGET (scrollbar));1930 priv = get_private (GTK_WIDGET (scrollbar));
21191931
2120#ifdef USE_GTK3
2121 /* On touch devices with XI2 and Gtk+ >= 3.3.18,
2122 * the event enter-notify is not emitted.
2123 * Deal with it in motion-notify. */
2124
2125 /* Should be fixed with:
2126 * https://bugs.launchpad.net/ubuntu/+source/gtk+3.0/+bug/949414 */
2127 // if (!(priv->event & OS_EVENT_ENTER_NOTIFY))
2128 // enter_event (scrollbar);
2129#endif
2130
2131 if (priv->event & OS_EVENT_BUTTON_PRESS)1932 if (priv->event & OS_EVENT_BUTTON_PRESS)
2132 {1933 {
2133 gint x, y;1934 gint x, y;
@@ -2513,14 +2314,6 @@
2513 OsScrollbarPrivate *priv;2314 OsScrollbarPrivate *priv;
2514 gdouble delta;2315 gdouble delta;
25152316
2516#ifdef USE_GTK3
2517 /* Gtk+ 3.3.18 adds a smooth scroll support,
2518 * but at the moment is not ready to be used without various issues.
2519 * Don't use it for thumb scrolling in overlay scrollbar. */
2520 if (event->direction == GDK_SCROLL_SMOOTH)
2521 return FALSE;
2522#endif
2523
2524 scrollbar = GTK_SCROLLBAR (user_data);2317 scrollbar = GTK_SCROLLBAR (user_data);
2525 priv = get_private (GTK_WIDGET (scrollbar));2318 priv = get_private (GTK_WIDGET (scrollbar));
25262319
@@ -2597,52 +2390,6 @@
2597 const gint64 current_time = g_get_monotonic_time ();2390 const gint64 current_time = g_get_monotonic_time ();
2598 const gint64 end_time = priv->present_time + TIMEOUT_PRESENT_WINDOW * 1000;2391 const gint64 end_time = priv->present_time + TIMEOUT_PRESENT_WINDOW * 1000;
25992392
2600#ifdef USE_GTK3
2601 /* If the widget is mapped, is not insentitive
2602 * and the configure-event happens after
2603 * the PropertyNotify _NET_ACTIVE_WINDOW event,
2604 * see if the mouse pointer is over this window, if TRUE,
2605 * proceed with bar_set_state_from_pointer (). */
2606 if (!is_insensitive (scrollbar) &&
2607 (current_time > end_time) &&
2608 gtk_widget_get_mapped (GTK_WIDGET (scrollbar)))
2609 {
2610 if (!priv->active_window)
2611 {
2612 GdkWindow *parent;
2613
2614 /* Loop through parent windows until it reaches
2615 * either an unknown GdkWindow (NULL),
2616 * or the toplevel window. */
2617 parent = window_at_pointer (gtk_widget_get_window (GTK_WIDGET (scrollbar)), NULL, NULL);
2618 while (parent != NULL)
2619 {
2620 if (event->window == parent)
2621 break;
2622
2623 parent = gdk_window_get_parent (parent);
2624 }
2625
2626 if (parent != NULL)
2627 {
2628 gint x, y;
2629
2630 window_get_pointer (gtk_widget_get_window (GTK_WIDGET (scrollbar)), &x, &y, NULL);
2631
2632 /* When the window is resized (maximize/restore),
2633 * check the position of the pointer
2634 * and set the state accordingly. */
2635 bar_set_state_from_pointer (scrollbar, x, y);
2636 }
2637 }
2638 else
2639 {
2640 priv->deactivable_bar = FALSE;
2641 os_bar_set_active (priv->bar, TRUE, TRUE);
2642 }
2643 }
2644#endif
2645
2646 if (current_time > end_time)2393 if (current_time > end_time)
2647 gtk_widget_hide (priv->thumb);2394 gtk_widget_hide (priv->thumb);
26482395
@@ -2877,55 +2624,7 @@
2877is_touch_mode (GtkWidget *widget,2624is_touch_mode (GtkWidget *widget,
2878 gint device_id)2625 gint device_id)
2879{2626{
2880#ifdef USE_GTK3
2881 switch (scrollbar_mode)
2882 {
2883 case SCROLLBAR_MODE_OVERLAY_AUTO:
2884 default:
2885 /* Continue detecting source type. */
2886 break;
2887 case SCROLLBAR_MODE_OVERLAY_POINTER:
2888 /* Touch mode always disabled. */
2889 return FALSE;
2890 break;
2891 case SCROLLBAR_MODE_OVERLAY_TOUCH:
2892 /* Touch mode always enabled. */
2893 return TRUE;
2894 break;
2895 }
2896
2897 /* Use some sort of cache for the device.
2898 * Update the input source only if the device_id
2899 * is different from the previous one. */
2900 if (os_device_id != device_id)
2901 {
2902 GdkDeviceManager *device_manager;
2903 GdkDevice *device;
2904 GdkWindow *window;
2905
2906 /* Update the static os_device_id variable. */
2907 os_device_id = device_id;
2908
2909 window = gtk_widget_get_window (widget);
2910 device_manager = gdk_display_get_device_manager (gdk_window_get_display (window));
2911 device = gdk_x11_device_manager_lookup (device_manager, os_device_id);
2912
2913 /* Return FALSE if we don't recognize the device. */
2914 if (!device)
2915 return FALSE;
2916
2917 /* Update the static os_input_source variable. */
2918 os_input_source = gdk_device_get_source (device);
2919 }
2920
2921 /* Detect touch mode accordingly to the input source type. */
2922 if (os_input_source == GDK_SOURCE_TOUCHSCREEN)
2923 return TRUE;
2924 else
2925 return FALSE;
2926#else
2927 return scrollbar_mode == SCROLLBAR_MODE_OVERLAY_TOUCH;2627 return scrollbar_mode == SCROLLBAR_MODE_OVERLAY_TOUCH;
2928#endif
2929}2628}
29302629
2931/* Callback that shows the thumb if it's the case. */2630/* Callback that shows the thumb if it's the case. */
@@ -3028,192 +2727,134 @@
30282727
3029 sourceid = 0;2728 sourceid = 0;
30302729
3031#ifdef USE_GTK32730 /* Deal with X core events, when apps (like rhythmbox),
3032 if (xev->type == GenericEvent)2731 * are using gdk_disable_miltidevice (). */
3033 {2732 if (xev->type == ButtonPress)
3034 /* Deal with XInput 2 events. */2733 os_xevent = OS_XEVENT_BUTTON_PRESS;
3035 XIDeviceEvent *xiev;2734
30362735 if (xev->type == ButtonRelease)
3037 xiev = xev->xcookie.data;2736 {
30382737 os_xevent = OS_XEVENT_BUTTON_RELEASE;
3039 sourceid = xiev->sourceid;2738 event_x = xev->xbutton.x;
30402739 event_y = xev->xbutton.y;
3041 if (xiev->evtype == XI_ButtonPress)2740 }
3042 os_xevent = OS_XEVENT_BUTTON_PRESS;2741
30432742 if (xev->type == LeaveNotify)
3044 if (xiev->evtype == XI_ButtonRelease)2743 os_xevent = OS_XEVENT_LEAVE;
3045 {2744
3046 os_xevent = OS_XEVENT_BUTTON_RELEASE;2745 if (xev->type == MotionNotify)
3047 event_x = xiev->event_x;2746 {
3048 event_y = xiev->event_y;2747 os_xevent = OS_XEVENT_MOTION;
3049 }2748 event_x = xev->xmotion.x;
30502749 event_y = xev->xmotion.y;
3051 if (xiev->evtype == XI_Leave)2750 }
3052 os_xevent = OS_XEVENT_LEAVE;2751
30532752 if (os_xevent == OS_XEVENT_BUTTON_PRESS)
3054 if (xiev->evtype == XI_Motion)2753 {
3055 {2754 priv->window_button_press = TRUE;
3056 os_xevent = OS_XEVENT_MOTION;2755
3057 event_x = xiev->event_x;2756 if (priv->source_show_thumb_id != 0)
3058 event_y = xiev->event_y;2757 {
3059 }2758 g_source_remove (priv->source_show_thumb_id);
3060 }2759 priv->source_show_thumb_id = 0;
3061 else2760 }
3062 {2761
3063#endif2762 gtk_widget_hide (priv->thumb);
3064 /* Deal with X core events, when apps (like rhythmbox),2763 }
3065 * are using gdk_disable_miltidevice (). */2764
3066 if (xev->type == ButtonPress)2765 if (priv->window_button_press && os_xevent == OS_XEVENT_BUTTON_RELEASE)
3067 os_xevent = OS_XEVENT_BUTTON_PRESS;2766 {
30682767 priv->window_button_press = FALSE;
3069 if (xev->type == ButtonRelease)2768
3070 {2769 /* Proximity area. */
3071 os_xevent = OS_XEVENT_BUTTON_RELEASE;2770 if (check_proximity (scrollbar, event_x, event_y))
3072 event_x = xev->xbutton.x;2771 {
3073 event_y = xev->xbutton.y;2772 priv->hidable_thumb = FALSE;
3074 }2773
30752774 adjust_thumb_position (scrollbar, event_x, event_y);
3076 if (xev->type == LeaveNotify)2775
3077 os_xevent = OS_XEVENT_LEAVE;2776 if (priv->state & OS_STATE_LOCKED)
30782777 return GDK_FILTER_CONTINUE;
3079 if (xev->type == MotionNotify)2778
3080 {2779 if (!is_touch_mode (GTK_WIDGET (scrollbar), sourceid) && !priv->resizing_paned)
3081 os_xevent = OS_XEVENT_MOTION;2780 show_thumb (scrollbar);
3082 event_x = xev->xmotion.x;2781 }
3083 event_y = xev->xmotion.y;2782 }
3084 }2783
3085#ifdef USE_GTK32784 if (os_xevent == OS_XEVENT_LEAVE)
3086 }2785 {
3087#endif2786 priv->window_button_press = FALSE;
30882787
3089 if (os_xevent == OS_XEVENT_BUTTON_PRESS)2788 if (gtk_widget_get_mapped (priv->thumb) &&
3090 {2789 !(priv->event & OS_EVENT_BUTTON_PRESS))
3091 priv->window_button_press = TRUE;2790 {
30922791 priv->hidable_thumb = TRUE;
3093 if (priv->source_show_thumb_id != 0)2792
3094 {2793 if (priv->source_hide_thumb_id != 0)
3095 g_source_remove (priv->source_show_thumb_id);2794 g_source_remove (priv->source_hide_thumb_id);
3096 priv->source_show_thumb_id = 0;2795
3097 }2796 priv->source_hide_thumb_id = g_timeout_add (TIMEOUT_TOPLEVEL_HIDE,
30982797 hide_thumb_cb,
3099 gtk_widget_hide (priv->thumb);2798 scrollbar);
3100 }2799 }
31012800
3102 if (priv->window_button_press && os_xevent == OS_XEVENT_BUTTON_RELEASE)2801 if (priv->source_show_thumb_id != 0)
3103 {2802 {
3104 priv->window_button_press = FALSE;2803 g_source_remove (priv->source_show_thumb_id);
31052804 priv->source_show_thumb_id = 0;
3106 /* Proximity area. */2805 }
3107 if (check_proximity (scrollbar, event_x, event_y))2806
3108 {2807 if (priv->source_unlock_thumb_id != 0)
3109 priv->hidable_thumb = FALSE;2808 g_source_remove (priv->source_unlock_thumb_id);
31102809
3111 adjust_thumb_position (scrollbar, event_x, event_y);2810 priv->source_unlock_thumb_id = g_timeout_add (TIMEOUT_TOPLEVEL_HIDE,
31122811 unlock_thumb_cb,
3113 if (priv->state & OS_STATE_LOCKED)2812 scrollbar);
3114 return GDK_FILTER_CONTINUE;2813 }
31152814
3116 if (!is_touch_mode (GTK_WIDGET (scrollbar), sourceid) && !priv->resizing_paned)2815 /* Get the motion_notify_event trough XEvent. */
3117 show_thumb (scrollbar);2816 if (!priv->window_button_press && os_xevent == OS_XEVENT_MOTION)
3118 }2817 {
3119 }2818 /* Proximity area. */
31202819 if (check_proximity (scrollbar, event_x, event_y))
3121 if (os_xevent == OS_XEVENT_LEAVE)2820 {
3122 {2821 priv->hidable_thumb = FALSE;
3123 priv->window_button_press = FALSE;2822
31242823 if (priv->source_hide_thumb_id != 0)
3125#ifdef USE_GTK32824 {
3126 /* Never deactivate the bar in an active window. */2825 g_source_remove (priv->source_hide_thumb_id);
3127 if (!priv->active_window)2826 priv->source_hide_thumb_id = 0;
3128 {2827 }
3129 priv->deactivable_bar = TRUE;2828
31302829 adjust_thumb_position (scrollbar, event_x, event_y);
3131 if (priv->source_deactivate_bar_id != 0)2830
3132 g_source_remove (priv->source_deactivate_bar_id);2831 if (priv->state & OS_STATE_LOCKED)
31332832 return GDK_FILTER_CONTINUE;
3134 priv->source_deactivate_bar_id = g_timeout_add (TIMEOUT_TOPLEVEL_HIDE,2833
3135 deactivate_bar_cb,2834 if (!is_touch_mode (GTK_WIDGET (scrollbar), sourceid) && !priv->resizing_paned)
2835 show_thumb (scrollbar);
2836 }
2837 else
2838 {
2839 priv->state &= ~(OS_STATE_LOCKED);
2840
2841 if (priv->source_show_thumb_id != 0)
2842 {
2843 g_source_remove (priv->source_show_thumb_id);
2844 priv->source_show_thumb_id = 0;
2845 }
2846
2847 if (gtk_widget_get_mapped (priv->thumb) &&
2848 !(priv->event & OS_EVENT_BUTTON_PRESS))
2849 {
2850 priv->hidable_thumb = TRUE;
2851
2852 if (priv->source_hide_thumb_id == 0)
2853 priv->source_hide_thumb_id = g_timeout_add (TIMEOUT_PROXIMITY_HIDE,
2854 hide_thumb_cb,
3136 scrollbar);2855 scrollbar);
3137 }2856 }
3138#endif2857 }
3139
3140 if (gtk_widget_get_mapped (priv->thumb) &&
3141 !(priv->event & OS_EVENT_BUTTON_PRESS))
3142 {
3143 priv->hidable_thumb = TRUE;
3144
3145 if (priv->source_hide_thumb_id != 0)
3146 g_source_remove (priv->source_hide_thumb_id);
3147
3148 priv->source_hide_thumb_id = g_timeout_add (TIMEOUT_TOPLEVEL_HIDE,
3149 hide_thumb_cb,
3150 scrollbar);
3151 }
3152
3153 if (priv->source_show_thumb_id != 0)
3154 {
3155 g_source_remove (priv->source_show_thumb_id);
3156 priv->source_show_thumb_id = 0;
3157 }
3158
3159 if (priv->source_unlock_thumb_id != 0)
3160 g_source_remove (priv->source_unlock_thumb_id);
3161
3162 priv->source_unlock_thumb_id = g_timeout_add (TIMEOUT_TOPLEVEL_HIDE,
3163 unlock_thumb_cb,
3164 scrollbar);
3165 }
3166
3167 /* Get the motion_notify_event trough XEvent. */
3168 if (!priv->window_button_press && os_xevent == OS_XEVENT_MOTION)
3169 {
3170#ifdef USE_GTK3
3171 /* React to motion_notify_event
3172 * and set the state accordingly. */
3173 if (!is_insensitive (scrollbar) && !priv->active_window)
3174 bar_set_state_from_pointer (scrollbar, event_x, event_y);
3175#endif
3176
3177 /* Proximity area. */
3178 if (check_proximity (scrollbar, event_x, event_y))
3179 {
3180 priv->hidable_thumb = FALSE;
3181
3182 if (priv->source_hide_thumb_id != 0)
3183 {
3184 g_source_remove (priv->source_hide_thumb_id);
3185 priv->source_hide_thumb_id = 0;
3186 }
3187
3188 adjust_thumb_position (scrollbar, event_x, event_y);
3189
3190 if (priv->state & OS_STATE_LOCKED)
3191 return GDK_FILTER_CONTINUE;
3192
3193 if (!is_touch_mode (GTK_WIDGET (scrollbar), sourceid) && !priv->resizing_paned)
3194 show_thumb (scrollbar);
3195 }
3196 else
3197 {
3198 priv->state &= ~(OS_STATE_LOCKED);
3199
3200 if (priv->source_show_thumb_id != 0)
3201 {
3202 g_source_remove (priv->source_show_thumb_id);
3203 priv->source_show_thumb_id = 0;
3204 }
3205
3206 if (gtk_widget_get_mapped (priv->thumb) &&
3207 !(priv->event & OS_EVENT_BUTTON_PRESS))
3208 {
3209 priv->hidable_thumb = TRUE;
3210
3211 if (priv->source_hide_thumb_id == 0)
3212 priv->source_hide_thumb_id = g_timeout_add (TIMEOUT_PROXIMITY_HIDE,
3213 hide_thumb_cb,
3214 scrollbar);
3215 }
3216 }
3217 }2858 }
3218 }2859 }
32192860
@@ -3261,11 +2902,7 @@
3261static gboolean2902static gboolean
3262use_overlay_scrollbar (void)2903use_overlay_scrollbar (void)
3263{2904{
3264#ifdef USE_GTK3
3265 return scrollbar_mode != SCROLLBAR_MODE_NORMAL;
3266#else
3267 return scrollbar_mode != SCROLLBAR_MODE_NORMAL && ubuntu_gtk_get_use_overlay_scrollbar ();2905 return scrollbar_mode != SCROLLBAR_MODE_NORMAL && ubuntu_gtk_get_use_overlay_scrollbar ();
3268#endif
3269}2906}
32702907
3271static void2908static void
@@ -3345,17 +2982,6 @@
3345 (* pre_hijacked_scrollbar_dispose) (object);2982 (* pre_hijacked_scrollbar_dispose) (object);
3346}2983}
33472984
3348#ifdef USE_GTK3
3349static gboolean
3350hijacked_scrollbar_draw (GtkWidget *widget,
3351 cairo_t *cr)
3352{
3353 if (use_overlay_scrollbar ())
3354 return TRUE;
3355
3356 return (* pre_hijacked_scrollbar_draw) (widget, cr);
3357}
3358#else
3359static gboolean2985static gboolean
3360hijacked_scrollbar_expose_event (GtkWidget *widget,2986hijacked_scrollbar_expose_event (GtkWidget *widget,
3361 GdkEventExpose *event)2987 GdkEventExpose *event)
@@ -3365,59 +2991,6 @@
33652991
3366 return (* pre_hijacked_scrollbar_expose_event) (widget, event);2992 return (* pre_hijacked_scrollbar_expose_event) (widget, event);
3367}2993}
3368#endif
3369
3370#ifdef USE_GTK3
3371static void
3372hijacked_scrollbar_get_preferred_width (GtkWidget *widget,
3373 gint *minimal_width,
3374 gint *natural_width)
3375{
3376 if (use_overlay_scrollbar ())
3377 {
3378 OsScrollbarPrivate *priv;
3379
3380 priv = get_private (widget);
3381
3382 if (priv->orientation == GTK_ORIENTATION_VERTICAL)
3383 *minimal_width = *natural_width = 0;
3384 else
3385 {
3386 *minimal_width = MIN_THUMB_HEIGHT;
3387 *natural_width = THUMB_HEIGHT;
3388 }
3389
3390 return;
3391 }
3392
3393 (* pre_hijacked_scrollbar_get_preferred_width) (widget, minimal_width, natural_width);
3394}
3395
3396static void
3397hijacked_scrollbar_get_preferred_height (GtkWidget *widget,
3398 gint *minimal_height,
3399 gint *natural_height)
3400{
3401 if (use_overlay_scrollbar ())
3402 {
3403 OsScrollbarPrivate *priv;
3404
3405 priv = get_private (widget);
3406
3407 if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
3408 *minimal_height = *natural_height = 0;
3409 else
3410 {
3411 *minimal_height = MIN_THUMB_HEIGHT;
3412 *natural_height = THUMB_HEIGHT;
3413 }
3414
3415 return;
3416 }
3417
3418 (* pre_hijacked_scrollbar_get_preferred_height) (widget, minimal_height, natural_height);
3419}
3420#endif
34212994
3422static void2995static void
3423hijacked_scrollbar_grab_notify (GtkWidget *widget,2996hijacked_scrollbar_grab_notify (GtkWidget *widget,
@@ -3442,15 +3015,6 @@
3442 (* pre_hijacked_scrollbar_hide) (widget);3015 (* pre_hijacked_scrollbar_hide) (widget);
3443}3016}
34443017
3445#ifdef USE_GTK3
3446/* Return TRUE if the widget is in backdrop window. */
3447static gboolean
3448is_backdrop_window (GtkWidget *widget)
3449{
3450 return (gtk_widget_get_state_flags (widget) & GTK_STATE_FLAG_BACKDROP) != 0;
3451}
3452#endif
3453
3454static void3018static void
3455hijacked_scrollbar_map (GtkWidget *widget)3019hijacked_scrollbar_map (GtkWidget *widget)
3456{3020{
@@ -3464,46 +3028,6 @@
34643028
3465 (* widget_class_map) (widget);3029 (* widget_class_map) (widget);
34663030
3467#ifdef USE_GTK3
3468 /* On map, check for the active window. */
3469 if (!is_backdrop_window (GTK_WIDGET (scrollbar)))
3470 {
3471 /* Stops potential running timeout. */
3472 if (priv->source_deactivate_bar_id != 0)
3473 {
3474 g_source_remove (priv->source_deactivate_bar_id);
3475 priv->source_deactivate_bar_id = 0;
3476 }
3477
3478 priv->active_window = TRUE;
3479 }
3480 else
3481 priv->active_window = FALSE;
3482
3483 if (!is_insensitive (scrollbar))
3484 {
3485 if (!priv->active_window)
3486 {
3487 gint x, y;
3488
3489 window_get_pointer (gtk_widget_get_window (widget), &x, &y, NULL);
3490
3491 /* When the scrollbar appears on screen (mapped),
3492 * for example when switching notebook page,
3493 * check the position of the pointer
3494 * and set the state accordingly. */
3495 bar_set_state_from_pointer (scrollbar, x, y);
3496 }
3497 else
3498 {
3499 /* On map-event of an active window,
3500 * the bar should be active. */
3501 priv->deactivable_bar = FALSE;
3502 os_bar_set_active (priv->bar, TRUE, FALSE);
3503 }
3504 }
3505#endif
3506
3507 if (!(priv->state & OS_STATE_FULLSIZE))3031 if (!(priv->state & OS_STATE_FULLSIZE))
3508 os_bar_show (priv->bar);3032 os_bar_show (priv->bar);
35093033
@@ -3810,10 +3334,6 @@
3810 priv->filter.proximity = FALSE;3334 priv->filter.proximity = FALSE;
3811 remove_window_filter (scrollbar);3335 remove_window_filter (scrollbar);
38123336
3813#ifdef USE_GTK3
3814 os_bar_set_active (priv->bar, FALSE, FALSE);
3815#endif
3816
3817 gtk_widget_hide (priv->thumb);3337 gtk_widget_hide (priv->thumb);
3818}3338}
38193339
@@ -3833,124 +3353,8 @@
3833 priv->filter.proximity = TRUE;3353 priv->filter.proximity = TRUE;
3834 add_window_filter (scrollbar);3354 add_window_filter (scrollbar);
3835 }3355 }
38363356}
3837#ifdef USE_GTK33357
3838 if (priv->active_window)
3839 os_bar_set_active (priv->bar, TRUE, FALSE);
3840 else if (gtk_widget_get_realized (GTK_WIDGET (scrollbar)))
3841 {
3842 gint x, y;
3843
3844 window_get_pointer (gtk_widget_get_window (GTK_WIDGET (scrollbar)), &x, &y, NULL);
3845
3846 /* When the window is unfocused,
3847 * check the position of the pointer
3848 * and set the state accordingly. */
3849 bar_set_state_from_pointer (scrollbar, x, y);
3850 }
3851#endif
3852}
3853
3854#ifdef USE_GTK3
3855/* React on active window changes. */
3856static void
3857backdrop_state_flag_changed (GtkScrollbar *scrollbar)
3858{
3859 OsScrollbarPrivate *priv;
3860
3861 priv = get_private (GTK_WIDGET (scrollbar));
3862
3863 OS_DCHECK (scrollbar != NULL);
3864
3865 /* Return if the scrollbar is insensitive. */
3866 if (is_insensitive (scrollbar))
3867 return;
3868
3869 if (gtk_widget_get_mapped (GTK_WIDGET (scrollbar)))
3870 {
3871 if (!is_backdrop_window (GTK_WIDGET (scrollbar)))
3872 {
3873 /* Stops potential running timeout. */
3874 if (priv->source_deactivate_bar_id != 0)
3875 {
3876 g_source_remove (priv->source_deactivate_bar_id);
3877 priv->source_deactivate_bar_id = 0;
3878 }
3879
3880 priv->active_window = TRUE;
3881
3882 priv->deactivable_bar = FALSE;
3883 os_bar_set_active (priv->bar, TRUE, TRUE);
3884 }
3885 else if (priv->active_window)
3886 {
3887 GdkWindow *parent;
3888 GdkWindow *window;
3889 const gint64 current_time = g_get_monotonic_time ();
3890 const gint64 end_time = priv->present_time + TIMEOUT_PRESENT_WINDOW * 1000;
3891
3892 priv->active_window = FALSE;
3893
3894 /* Loop through parent windows until it reaches
3895 * either an unknown GdkWindow (NULL),
3896 * or the toplevel window. */
3897 window = gtk_widget_get_window (GTK_WIDGET (scrollbar));
3898 parent = window_at_pointer (window, NULL, NULL);
3899 while (parent != NULL)
3900 {
3901 if (window == parent)
3902 break;
3903
3904 parent = gdk_window_get_parent (parent);
3905 }
3906
3907 if (parent != NULL)
3908 {
3909 gint x, y;
3910
3911 window_get_pointer (window, &x, &y, NULL);
3912
3913 /* When the window is unfocused,
3914 * check the position of the pointer
3915 * and set the state accordingly. */
3916 bar_set_state_from_pointer (scrollbar, x, y);
3917 }
3918 else
3919 {
3920 /* If the pointer is outside of the window, set it inactive. */
3921 priv->deactivable_bar = TRUE;
3922 os_bar_set_active (priv->bar, FALSE, TRUE);
3923 }
3924
3925 if ((current_time > end_time) && priv->thumb != NULL)
3926 gtk_widget_hide (priv->thumb);
3927 }
3928 }
3929}
3930
3931static void
3932hijacked_scrollbar_state_flags_changed (GtkWidget *widget,
3933 GtkStateFlags flags)
3934{
3935 GtkScrollbar *scrollbar;
3936
3937 scrollbar = GTK_SCROLLBAR (widget);
3938
3939 if ((flags & GTK_STATE_FLAG_BACKDROP) !=
3940 (gtk_widget_get_state_flags (widget) & GTK_STATE_FLAG_BACKDROP))
3941 backdrop_state_flag_changed (scrollbar);
3942
3943 /* Only set the new state if the right bit changed. */
3944 if ((flags & GTK_STATE_FLAG_INSENSITIVE) !=
3945 (gtk_widget_get_state_flags (widget) & GTK_STATE_FLAG_INSENSITIVE))
3946 {
3947 if ((gtk_widget_get_state_flags (widget) & GTK_STATE_FLAG_INSENSITIVE) != 0)
3948 set_insensitive (scrollbar);
3949 else
3950 set_sensitive (scrollbar);
3951 }
3952}
3953#else
3954static void3358static void
3955hijacked_scrollbar_size_request (GtkWidget *widget,3359hijacked_scrollbar_size_request (GtkWidget *widget,
3956 GtkRequisition *requisition)3360 GtkRequisition *requisition)
@@ -3994,7 +3398,6 @@
39943398
3995 (* pre_hijacked_scrollbar_state_changed) (widget, state);3399 (* pre_hijacked_scrollbar_state_changed) (widget, state);
3996}3400}
3997#endif
39983401
3999static void3402static void
4000hijacked_scrollbar_unmap (GtkWidget *widget)3403hijacked_scrollbar_unmap (GtkWidget *widget)
@@ -4151,23 +3554,12 @@
4151 if (object_class->dispose == pre_hijacked_scrollbar_dispose)3554 if (object_class->dispose == pre_hijacked_scrollbar_dispose)
4152 object_class->dispose = hijacked_scrollbar_dispose;3555 object_class->dispose = hijacked_scrollbar_dispose;
41533556
4154#ifdef USE_GTK3
4155 if (widget_class->draw == pre_hijacked_scrollbar_draw)
4156 widget_class->draw = hijacked_scrollbar_draw;
4157 if (widget_class->get_preferred_width == pre_hijacked_scrollbar_get_preferred_width)
4158 widget_class->get_preferred_width = hijacked_scrollbar_get_preferred_width;
4159 if (widget_class->get_preferred_height == pre_hijacked_scrollbar_get_preferred_height)
4160 widget_class->get_preferred_height = hijacked_scrollbar_get_preferred_height;
4161 if (widget_class->state_flags_changed == pre_hijacked_scrollbar_state_flags_changed)
4162 widget_class->state_flags_changed = hijacked_scrollbar_state_flags_changed;
4163#else
4164 if (widget_class->expose_event == pre_hijacked_scrollbar_expose_event)3557 if (widget_class->expose_event == pre_hijacked_scrollbar_expose_event)
4165 widget_class->expose_event = hijacked_scrollbar_expose_event;3558 widget_class->expose_event = hijacked_scrollbar_expose_event;
4166 if (widget_class->size_request == pre_hijacked_scrollbar_size_request)3559 if (widget_class->size_request == pre_hijacked_scrollbar_size_request)
4167 widget_class->size_request = hijacked_scrollbar_size_request;3560 widget_class->size_request = hijacked_scrollbar_size_request;
4168 if (widget_class->state_changed == pre_hijacked_scrollbar_state_changed)3561 if (widget_class->state_changed == pre_hijacked_scrollbar_state_changed)
4169 widget_class->state_changed = hijacked_scrollbar_state_changed;3562 widget_class->state_changed = hijacked_scrollbar_state_changed;
4170#endif
4171 if (pre_hijacked_scrollbar_grab_notify &&3563 if (pre_hijacked_scrollbar_grab_notify &&
4172 widget_class->grab_notify == pre_hijacked_scrollbar_grab_notify)3564 widget_class->grab_notify == pre_hijacked_scrollbar_grab_notify)
4173 widget_class->grab_notify = hijacked_scrollbar_grab_notify;3565 widget_class->grab_notify = hijacked_scrollbar_grab_notify;
@@ -4197,29 +3589,13 @@
4197static void3589static void
4198custom_style_load (void)3590custom_style_load (void)
4199{3591{
4200#ifdef USE_GTK3
4201 gtk_style_context_add_provider_for_screen (gdk_display_get_default_screen (gdk_display_get_default ()),
4202 GTK_STYLE_PROVIDER (provider),
4203 GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
4204#else
4205 gtk_rc_parse_string ("style \"overlay-scrollbar\" {\n"3592 gtk_rc_parse_string ("style \"overlay-scrollbar\" {\n"
4206 " GtkScrolledWindow::scrollbar-spacing = 0\n"3593 " GtkScrolledWindow::scrollbar-spacing = 0\n"
4207 " GtkScrolledWindow::scrollbars-within-bevel = 1\n"3594 " GtkScrolledWindow::scrollbars-within-bevel = 1\n"
4208 " }\n"3595 " }\n"
4209 "\n"3596 "\n"
4210 "class \"GtkScrolledWindow\" style \"overlay-scrollbar\"");3597 "class \"GtkScrolledWindow\" style \"overlay-scrollbar\"");
4211#endif3598}
4212}
4213
4214#ifdef USE_GTK3
4215/* Unload custom style for overlay scrollbar. */
4216static void
4217custom_style_unload (void)
4218{
4219 gtk_style_context_remove_provider_for_screen (gdk_display_get_default_screen (gdk_display_get_default ()),
4220 GTK_STYLE_PROVIDER (provider));
4221}
4222#endif
42233599
4224/* Unload all scrollbars. */3600/* Unload all scrollbars. */
4225static void3601static void
@@ -4287,17 +3663,9 @@
4287 /* Update the scrollbar_mode variable. */3663 /* Update the scrollbar_mode variable. */
4288 scrollbar_mode = g_settings_get_enum (settings, "scrollbar-mode");3664 scrollbar_mode = g_settings_get_enum (settings, "scrollbar-mode");
42893665
4290#ifdef USE_GTK3
4291 /* Load or unload custom style for overlay scrollbar. */
4292 if (use_overlay_scrollbar ())
4293 custom_style_load ();
4294 else
4295 custom_style_unload ();
4296#else
4297 /* Gtk+ 2.0 doesn't support dynamic loading of styles.3666 /* Gtk+ 2.0 doesn't support dynamic loading of styles.
4298 * Please contact me in case I'm wrong,3667 * Please contact me in case I'm wrong,
4299 * and I'll add the required bits here. */3668 * and I'll add the required bits here. */
4300#endif
43013669
4302 /* Load all scrollbars, using new scrollbar_mode. */3670 /* Load all scrollbars, using new scrollbar_mode. */
4303 g_slist_foreach (tmp_list, scrollbar_mode_changed_load_gfunc, NULL);3671 g_slist_foreach (tmp_list, scrollbar_mode_changed_load_gfunc, NULL);
@@ -4323,12 +3691,6 @@
4323 if (app_is_blacklisted ())3691 if (app_is_blacklisted ())
4324 return;3692 return;
43253693
4326 /* We only support X11 */
4327#if GTK_MAJOR_VERSION == 3
4328 if (!GDK_IS_X11_DISPLAY (gdk_display_get_default ()))
4329 return;
4330#endif
4331
4332 /* Initialize static variables. */3694 /* Initialize static variables. */
4333 net_active_window_atom = gdk_x11_get_xatom_by_name ("_NET_ACTIVE_WINDOW");3695 net_active_window_atom = gdk_x11_get_xatom_by_name ("_NET_ACTIVE_WINDOW");
4334 unity_net_workarea_region_atom = gdk_x11_get_xatom_by_name ("_UNITY_NET_WORKAREA_REGION");3696 unity_net_workarea_region_atom = gdk_x11_get_xatom_by_name ("_UNITY_NET_WORKAREA_REGION");
@@ -4341,16 +3703,9 @@
43413703
4342 pre_hijacked_scrollbar_dispose = object_class->dispose;3704 pre_hijacked_scrollbar_dispose = object_class->dispose;
43433705
4344#ifdef USE_GTK3
4345 pre_hijacked_scrollbar_draw = widget_class->draw;
4346 pre_hijacked_scrollbar_get_preferred_width = widget_class->get_preferred_width;
4347 pre_hijacked_scrollbar_get_preferred_height = widget_class->get_preferred_height;
4348 pre_hijacked_scrollbar_state_flags_changed = widget_class->state_flags_changed;
4349#else
4350 pre_hijacked_scrollbar_expose_event = widget_class->expose_event;3706 pre_hijacked_scrollbar_expose_event = widget_class->expose_event;
4351 pre_hijacked_scrollbar_size_request = widget_class->size_request;3707 pre_hijacked_scrollbar_size_request = widget_class->size_request;
4352 pre_hijacked_scrollbar_state_changed = widget_class->state_changed;3708 pre_hijacked_scrollbar_state_changed = widget_class->state_changed;
4353#endif
4354 pre_hijacked_scrollbar_grab_notify = widget_class->grab_notify;3709 pre_hijacked_scrollbar_grab_notify = widget_class->grab_notify;
4355 pre_hijacked_scrollbar_hide = widget_class->hide;3710 pre_hijacked_scrollbar_hide = widget_class->hide;
4356 pre_hijacked_scrollbar_map = widget_class->map;3711 pre_hijacked_scrollbar_map = widget_class->map;
@@ -4379,19 +3734,7 @@
4379 G_CALLBACK (scrollbar_mode_changed_cb), NULL);3734 G_CALLBACK (scrollbar_mode_changed_cb), NULL);
4380 scrollbar_mode = g_settings_get_enum (settings, "scrollbar-mode");3735 scrollbar_mode = g_settings_get_enum (settings, "scrollbar-mode");
43813736
4382#ifdef USE_GTK3
4383 /* Initialize styling bits. */
4384 provider = gtk_css_provider_new ();
4385 gtk_css_provider_load_from_data (GTK_CSS_PROVIDER (provider),
4386 "* {\n"
4387 " -GtkScrolledWindow-scrollbar-spacing: 0;\n"
4388 " -GtkScrolledWindow-scrollbars-within-bevel: 1;\n"
4389 "}\n", -1, NULL);
4390#endif
4391
4392#ifndef USE_GTK3
4393 ubuntu_gtk_set_use_overlay_scrollbar (TRUE);3737 ubuntu_gtk_set_use_overlay_scrollbar (TRUE);
4394#endif
43953738
4396 /* Load custom overlay scrollbar style. */3739 /* Load custom overlay scrollbar style. */
4397 if (use_overlay_scrollbar ())3740 if (use_overlay_scrollbar ())
43983741
=== modified file 'os/os-thumb.c'
--- os/os-thumb.c 2013-02-02 00:46:51 +0000
+++ os/os-thumb.c 2015-06-04 09:25:27 +0000
@@ -40,14 +40,12 @@
40/* Number of tolerance pixels, before hiding the thumb. */40/* Number of tolerance pixels, before hiding the thumb. */
41#define TOLERANCE_FADE 341#define TOLERANCE_FADE 3
4242
43#ifndef USE_GTK3
44typedef struct {43typedef struct {
45 gdouble red;44 gdouble red;
46 gdouble green;45 gdouble green;
47 gdouble blue;46 gdouble blue;
48 gdouble alpha;47 gdouble alpha;
49} GdkRGBA;48} GdkRGBA;
50#endif
5149
52struct _OsThumbPrivate {50struct _OsThumbPrivate {
53 GtkOrientation orientation;51 GtkOrientation orientation;
@@ -71,11 +69,7 @@
71static gboolean os_thumb_button_press_event (GtkWidget *widget, GdkEventButton *event);69static gboolean os_thumb_button_press_event (GtkWidget *widget, GdkEventButton *event);
72static gboolean os_thumb_button_release_event (GtkWidget *widget, GdkEventButton *event);70static gboolean os_thumb_button_release_event (GtkWidget *widget, GdkEventButton *event);
73static void os_thumb_composited_changed (GtkWidget *widget);71static void os_thumb_composited_changed (GtkWidget *widget);
74#ifdef USE_GTK3
75static gboolean os_thumb_draw (GtkWidget *widget, cairo_t *cr);
76#else
77static gboolean os_thumb_expose (GtkWidget *widget, GdkEventExpose *event);72static gboolean os_thumb_expose (GtkWidget *widget, GdkEventExpose *event);
78#endif
79static gboolean os_thumb_leave_notify_event (GtkWidget *widget, GdkEventCrossing *event);73static gboolean os_thumb_leave_notify_event (GtkWidget *widget, GdkEventCrossing *event);
80static gboolean os_thumb_motion_notify_event (GtkWidget *widget, GdkEventMotion *event);74static gboolean os_thumb_motion_notify_event (GtkWidget *widget, GdkEventMotion *event);
81static void os_thumb_map (GtkWidget *widget);75static void os_thumb_map (GtkWidget *widget);
@@ -145,11 +139,7 @@
145 widget_class->button_press_event = os_thumb_button_press_event;139 widget_class->button_press_event = os_thumb_button_press_event;
146 widget_class->button_release_event = os_thumb_button_release_event;140 widget_class->button_release_event = os_thumb_button_release_event;
147 widget_class->composited_changed = os_thumb_composited_changed;141 widget_class->composited_changed = os_thumb_composited_changed;
148#ifdef USE_GTK3
149 widget_class->draw = os_thumb_draw;
150#else
151 widget_class->expose_event = os_thumb_expose;142 widget_class->expose_event = os_thumb_expose;
152#endif
153 widget_class->leave_notify_event = os_thumb_leave_notify_event;143 widget_class->leave_notify_event = os_thumb_leave_notify_event;
154 widget_class->map = os_thumb_map;144 widget_class->map = os_thumb_map;
155 widget_class->motion_notify_event = os_thumb_motion_notify_event;145 widget_class->motion_notify_event = os_thumb_motion_notify_event;
@@ -602,7 +592,6 @@
602 b->alpha = a->alpha;592 b->alpha = a->alpha;
603}593}
604594
605#ifndef USE_GTK3
606/* Convert a GdkColor to GdkRGBA. */595/* Convert a GdkColor to GdkRGBA. */
607static void596static void
608convert_gdk_color_to_gdk_rgba (GdkColor *color,597convert_gdk_color_to_gdk_rgba (GdkColor *color,
@@ -614,7 +603,6 @@
614603
615 rgba->alpha = 1.0;604 rgba->alpha = 1.0;
616}605}
617#endif
618606
619enum {607enum {
620 ACTION_NORMAL,608 ACTION_NORMAL,
@@ -624,19 +612,12 @@
624};612};
625613
626static gboolean614static gboolean
627#ifdef USE_GTK3
628os_thumb_draw (GtkWidget *widget,
629 cairo_t *cr)
630{
631 GtkStyleContext *style_context;
632#else
633os_thumb_expose (GtkWidget *widget,615os_thumb_expose (GtkWidget *widget,
634 GdkEventExpose *event)616 GdkEventExpose *event)
635{617{
636 GtkAllocation allocation;618 GtkAllocation allocation;
637 cairo_t *cr;619 cairo_t *cr;
638 GtkStyle *style;620 GtkStyle *style;
639#endif
640 GdkRGBA bg, bg_active, bg_selected;621 GdkRGBA bg, bg_active, bg_selected;
641 GdkRGBA bg_arrow_up, bg_arrow_down;622 GdkRGBA bg_arrow_up, bg_arrow_down;
642 GdkRGBA bg_shadow, bg_dark_line, bg_bright_line;623 GdkRGBA bg_shadow, bg_dark_line, bg_bright_line;
@@ -653,17 +634,6 @@
653634
654 radius = priv->rgba ? THUMB_RADIUS : 0;635 radius = priv->rgba ? THUMB_RADIUS : 0;
655636
656#ifdef USE_GTK3
657 width = gtk_widget_get_allocated_width (widget);
658 height = gtk_widget_get_allocated_height (widget);
659
660 style_context = gtk_widget_get_style_context (widget);
661
662 gtk_style_context_get_background_color (style_context, gtk_widget_get_state_flags (widget), &bg);
663 gtk_style_context_get_background_color (style_context, GTK_STATE_FLAG_ACTIVE, &bg_active);
664 gtk_style_context_get_background_color (style_context, GTK_STATE_FLAG_SELECTED, &bg_selected);
665 gtk_style_context_get_color (style_context, gtk_widget_get_state_flags (widget), &arrow_color);
666#else
667 gtk_widget_get_allocation (widget, &allocation);637 gtk_widget_get_allocation (widget, &allocation);
668 638
669 width = allocation.width;639 width = allocation.width;
@@ -677,7 +647,6 @@
677 convert_gdk_color_to_gdk_rgba (&style->fg[gtk_widget_get_state (widget)], &arrow_color);647 convert_gdk_color_to_gdk_rgba (&style->fg[gtk_widget_get_state (widget)], &arrow_color);
678648
679 cr = gdk_cairo_create (gtk_widget_get_window (widget));649 cr = gdk_cairo_create (gtk_widget_get_window (widget));
680#endif
681650
682 cairo_save (cr);651 cairo_save (cr);
683652
@@ -912,12 +881,8 @@
912 }881 }
913882
914 cairo_restore (cr);883 cairo_restore (cr);
915
916 cairo_restore (cr);884 cairo_restore (cr);
917
918#ifndef USE_GTK3
919 cairo_destroy (cr);885 cairo_destroy (cr);
920#endif
921886
922 return FALSE;887 return FALSE;
923}888}
@@ -1037,16 +1002,6 @@
1037os_thumb_screen_changed (GtkWidget *widget,1002os_thumb_screen_changed (GtkWidget *widget,
1038 GdkScreen *old_screen)1003 GdkScreen *old_screen)
1039{1004{
1040#ifdef USE_GTK3
1041 GdkScreen *screen;
1042 GdkVisual *visual;
1043
1044 screen = gtk_widget_get_screen (widget);
1045 visual = gdk_screen_get_rgba_visual (screen);
1046
1047 if (visual)
1048 gtk_widget_set_visual (widget, visual);
1049#else
1050 GdkScreen *screen;1005 GdkScreen *screen;
1051 GdkColormap *colormap;1006 GdkColormap *colormap;
10521007
@@ -1055,7 +1010,6 @@
10551010
1056 if (colormap)1011 if (colormap)
1057 gtk_widget_set_colormap (widget, colormap);1012 gtk_widget_set_colormap (widget, colormap);
1058#endif
1059}1013}
10601014
1061static gboolean1015static gboolean
10621016
=== modified file 'tests/Makefile.am'
--- tests/Makefile.am 2012-04-26 14:02:33 +0000
+++ tests/Makefile.am 2015-06-04 09:25:27 +0000
@@ -1,16 +1,8 @@
1if USE_GTK3
2VER=3
3else
4VER=1VER=
5endif
62
7noinst_PROGRAMS = \3noinst_PROGRAMS = \
8 test-os4 test-os
95
10if USE_GTK3
11test_os_CFLAGS = -I$(top_srcdir) $(OS_CFLAGS) -DUSE_GTK3
12else
13test_os_CFLAGS = -I$(top_srcdir) $(OS_CFLAGS)6test_os_CFLAGS = -I$(top_srcdir) $(OS_CFLAGS)
14endif
157
16test_os_LDFLAGS = $(OS_LIBADD)8test_os_LDFLAGS = $(OS_LIBADD)
179
=== modified file 'tests/test-os.c'
--- tests/test-os.c 2012-11-26 14:35:24 +0000
+++ tests/test-os.c 2015-06-04 09:25:27 +0000
@@ -250,18 +250,10 @@
250 gtk_window_set_title (GTK_WINDOW (window), "Vertical \"Overlay Scrollbar\" test");250 gtk_window_set_title (GTK_WINDOW (window), "Vertical \"Overlay Scrollbar\" test");
251251
252 /* vbox */252 /* vbox */
253#ifdef USE_GTK3
254 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
255#else
256 vbox = gtk_vbox_new (TRUE, 2);253 vbox = gtk_vbox_new (TRUE, 2);
257#endif
258254
259 /* hbox */255 /* hbox */
260#ifdef USE_GTK3
261 hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
262#else
263 hbox = gtk_hbox_new (TRUE, 2);256 hbox = gtk_hbox_new (TRUE, 2);
264#endif
265257
266 /* scrolled_window_text0 */258 /* scrolled_window_text0 */
267 scrolled_window_text0 = gtk_scrolled_window_new (NULL, NULL);259 scrolled_window_text0 = gtk_scrolled_window_new (NULL, NULL);

Subscribers

People subscribed via source and target branches