Merge lp:~3v1n0/ubuntu/wily/gnome-terminal/scrollbar-background-fix into lp:~ubuntu-desktop/gnome-terminal/ubuntu

Proposed by Marco Trevisan (Treviño) on 2015-09-09
Status: Merged
Merged at revision: 163
Proposed branch: lp:~3v1n0/ubuntu/wily/gnome-terminal/scrollbar-background-fix
Merge into: lp:~ubuntu-desktop/gnome-terminal/ubuntu
Diff against target: 217 lines (+197/-0)
3 files modified
debian/changelog (+8/-0)
debian/patches/scrollbar-background-theming.patch (+188/-0)
debian/patches/series (+1/-0)
To merge this branch: bzr merge lp:~3v1n0/ubuntu/wily/gnome-terminal/scrollbar-background-fix
Reviewer Review Type Date Requested Status
Lars Karlitski (community) Approve on 2015-09-10
Ubuntu branches 2015-09-09 Pending
Review via email: mp+270605@code.launchpad.net

Commit Message

debian/patches/scrollbar-background-theming.patch:
    - Draw background under the scrollbar that matches the actual terminal
      background color. This allows proper theming. (LP: #1493964)

Description of the Change

Manually draw the background of the scrollbar, using the same color that is used by the terminal view (works even with semi-transparency).

To post a comment you must log in.
Lars Karlitski (larsu) wrote :

Looks good to me, thanks!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/changelog'
2--- debian/changelog 2015-06-01 14:05:04 +0000
3+++ debian/changelog 2015-09-09 21:09:36 +0000
4@@ -1,3 +1,11 @@
5+gnome-terminal (3.16.2-1ubuntu2) UNRELEASED; urgency=medium
6+
7+ * debian/patches/scrollbar-background-theming.patch:
8+ - Draw background under the scrollbar that matches the actual terminal
9+ background color. This allows proper theming. (LP: #1493964)
10+
11+ -- Marco Trevisan (Treviño) <marco@ubuntu.com> Wed, 09 Sep 2015 23:00:58 +0200
12+
13 gnome-terminal (3.16.2-1ubuntu1) wily; urgency=low
14
15 * Merge with Debian, remaining changes:
16
17=== added file 'debian/patches/scrollbar-background-theming.patch'
18--- debian/patches/scrollbar-background-theming.patch 1970-01-01 00:00:00 +0000
19+++ debian/patches/scrollbar-background-theming.patch 2015-09-09 21:09:36 +0000
20@@ -0,0 +1,188 @@
21+Description: draw proper background under the scrollbar
22+Author: Marco Trevisan <marco.trevisan@canonical.com>
23+Forwarded: yes, https://bugzilla.gnome.org/show_bug.cgi?id=754796
24+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-terminal/+bug/1493964
25+
26+Index: gnome-terminal-3.16.2/src/terminal-screen-container.c
27+===================================================================
28+--- gnome-terminal-3.16.2.orig/src/terminal-screen-container.c
29++++ gnome-terminal-3.16.2/src/terminal-screen-container.c
30+@@ -100,9 +100,25 @@ terminal_screen_container_init (Terminal
31+ priv->vscrollbar_policy = GTK_POLICY_AUTOMATIC;
32+ }
33+
34++static gboolean
35++scrollbar_bg_draw_cb (GtkWidget *widget, cairo_t *cr, TerminalScreenContainer *container)
36++{
37++ TerminalScreenContainerPrivate *priv = container->priv;
38++ GdkRGBA * bg = terminal_screen_get_bg_color (priv->screen);
39++
40++ cairo_save (cr);
41++ cairo_set_source_rgba (cr, bg->red, bg->green, bg->blue, bg->alpha);
42++ cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
43++ cairo_paint (cr);
44++ cairo_restore (cr);
45++
46++ return FALSE;
47++}
48++
49+ static void
50+ terminal_screen_container_constructed (GObject *object)
51+ {
52++ GtkWidget *scrollbar;
53+ TerminalScreenContainer *container = TERMINAL_SCREEN_CONTAINER (object);
54+ TerminalScreenContainerPrivate *priv = container->priv;
55+
56+@@ -111,9 +127,12 @@ terminal_screen_container_constructed (G
57+ g_assert (priv->screen != NULL);
58+
59+ priv->hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
60++ priv->vscrollbar = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
61+
62+- priv->vscrollbar = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL,
63+- gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (priv->screen)));
64++ scrollbar = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL,
65++ gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (priv->screen)));
66++
67++ gtk_box_pack_start (GTK_BOX (priv->vscrollbar), scrollbar, TRUE, TRUE, 0);
68+
69+ gtk_box_pack_start (GTK_BOX (priv->hbox), GTK_WIDGET (priv->screen), TRUE, TRUE, 0);
70+ gtk_box_pack_start (GTK_BOX (priv->hbox), priv->vscrollbar, FALSE, FALSE, 0);
71+@@ -122,6 +141,11 @@ terminal_screen_container_constructed (G
72+ gtk_widget_show_all (priv->hbox);
73+
74+ _terminal_screen_update_scrollbar (priv->screen);
75++
76++ g_signal_connect (G_OBJECT (priv->vscrollbar), "draw",
77++ G_CALLBACK (scrollbar_bg_draw_cb), container);
78++ g_signal_connect_swapped (priv->screen, "notify::bg-color",
79++ G_CALLBACK (gtk_widget_queue_draw), priv->vscrollbar);
80+ }
81+
82+ static void
83+Index: gnome-terminal-3.16.2/src/terminal-screen.c
84+===================================================================
85+--- gnome-terminal-3.16.2.orig/src/terminal-screen.c
86++++ gnome-terminal-3.16.2/src/terminal-screen.c
87+@@ -84,6 +84,8 @@ struct _TerminalScreenPrivate
88+ int child_pid;
89+ GSList *match_tags;
90+ guint launch_child_source_id;
91++ GdkRGBA bg_color;
92++ GdkRGBA fg_color;
93+ };
94+
95+ enum
96+@@ -101,7 +103,9 @@ enum {
97+ PROP_ICON_TITLE,
98+ PROP_ICON_TITLE_SET,
99+ PROP_TITLE,
100+- PROP_INITIAL_ENVIRONMENT
101++ PROP_INITIAL_ENVIRONMENT,
102++ PROP_BG_COLOR,
103++ PROP_FG_COLOR
104+ };
105+
106+ enum
107+@@ -459,6 +463,12 @@ terminal_screen_get_property (GObject *o
108+ case PROP_TITLE:
109+ g_value_set_string (value, terminal_screen_get_title (screen));
110+ break;
111++ case PROP_BG_COLOR:
112++ g_value_set_boxed (value, terminal_screen_get_bg_color (screen));
113++ break;
114++ case PROP_FG_COLOR:
115++ g_value_set_boxed (value, terminal_screen_get_bg_color (screen));
116++ break;
117+ default:
118+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
119+ break;
120+@@ -484,6 +494,8 @@ terminal_screen_set_property (GObject *o
121+ case PROP_ICON_TITLE:
122+ case PROP_ICON_TITLE_SET:
123+ case PROP_TITLE:
124++ case PROP_FG_COLOR:
125++ case PROP_BG_COLOR:
126+ /* not writable */
127+ default:
128+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
129+@@ -589,6 +601,20 @@ terminal_screen_class_init (TerminalScre
130+ G_TYPE_STRV,
131+ G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
132+
133++ g_object_class_install_property
134++ (object_class,
135++ PROP_BG_COLOR,
136++ g_param_spec_boxed ("bg-color", NULL, NULL,
137++ GDK_TYPE_RGBA,
138++ G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
139++
140++ g_object_class_install_property
141++ (object_class,
142++ PROP_FG_COLOR,
143++ g_param_spec_boxed ("fg-color", NULL, NULL,
144++ GDK_TYPE_RGBA,
145++ G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
146++
147+ g_type_class_add_private (object_class, sizeof (TerminalScreenPrivate));
148+
149+ gtk_widget_class_install_style_property (widget_class,
150+@@ -771,6 +797,22 @@ terminal_screen_get_icon_title_set (Term
151+ return vte_terminal_get_icon_title (VTE_TERMINAL (screen)) != NULL;
152+ }
153+
154++GdkRGBA*
155++terminal_screen_get_bg_color (TerminalScreen *screen)
156++{
157++ g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL);
158++
159++ return &screen->priv->bg_color;
160++}
161++
162++GdkRGBA*
163++terminal_screen_get_fg_color (TerminalScreen *screen)
164++{
165++ g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL);
166++
167++ return &screen->priv->fg_color;
168++}
169++
170+ static void
171+ terminal_screen_profile_changed_cb (GSettings *profile,
172+ const char *prop_name,
173+@@ -954,10 +996,21 @@ update_color_scheme (TerminalScreen *scr
174+ colors, n_colors);
175+ vte_terminal_set_color_bold (VTE_TERMINAL (screen), boldp);
176+
177++ if (gdk_rgba_hash (&priv->bg_color) != gdk_rgba_hash (&bg))
178++ {
179++ priv->bg_color = bg;
180++ g_object_notify (G_OBJECT (screen), "bg-color");
181++ }
182++
183++ if (gdk_rgba_hash (&priv->fg_color) != gdk_rgba_hash (&fg))
184++ {
185++ priv->fg_color = fg;
186++ g_object_notify (G_OBJECT (screen), "fg-color");
187++ }
188++
189+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (screen));
190+ if (toplevel != NULL && gtk_widget_is_toplevel (toplevel))
191+ gtk_widget_set_app_paintable (toplevel, transparent);
192+-
193+ }
194+
195+ static void
196+Index: gnome-terminal-3.16.2/src/terminal-screen.h
197+===================================================================
198+--- gnome-terminal-3.16.2.orig/src/terminal-screen.h
199++++ gnome-terminal-3.16.2/src/terminal-screen.h
200+@@ -104,6 +104,8 @@ char ** terminal_screen_get_initial
201+ const char* terminal_screen_get_title (TerminalScreen *screen);
202+ const char* terminal_screen_get_icon_title (TerminalScreen *screen);
203+ gboolean terminal_screen_get_icon_title_set (TerminalScreen *screen);
204++GdkRGBA* terminal_screen_get_bg_color (TerminalScreen *screen);
205++GdkRGBA* terminal_screen_get_fg_color (TerminalScreen *screen);
206+
207+ char *terminal_screen_get_current_dir (TerminalScreen *screen);
208+
209
210=== modified file 'debian/patches/series'
211--- debian/patches/series 2015-06-01 13:38:34 +0000
212+++ debian/patches/series 2015-09-09 21:09:36 +0000
213@@ -9,3 +9,4 @@
214 0001-window-Make-the-drawing-robust-across-all-themes.patch
215 gnome-shell_search_provider.patch
216 Provide-fallback-for-reading-current-directory-if-OS.patch
217+scrollbar-background-theming.patch

Subscribers

People subscribed via source and target branches