mirror of
https://github.com/dguglielmi/sunny-overlay.git
synced 2025-12-06 18:12:39 +01:00
x11-terms/gnome-terminal: add 3.46.7 & apply Ubuntu patches for terminal transparency
This commit is contained in:
@@ -0,0 +1,195 @@
|
||||
From: Marco Trevisan <marco.trevisan@canonical.com>
|
||||
Date: Sat, 20 Jan 2018 18:48:39 -0500
|
||||
Subject: draw proper background under the scrollbar
|
||||
|
||||
Forwarded: yes, https://bugzilla.gnome.org/show_bug.cgi?id=754796
|
||||
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-terminal/+bug/1493964
|
||||
---
|
||||
src/terminal-screen-container.cc | 28 +++++++++++++++++--
|
||||
src/terminal-screen.cc | 60 ++++++++++++++++++++++++++++++++++++++++
|
||||
src/terminal-screen.hh | 2 ++
|
||||
3 files changed, 88 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/terminal-screen-container.cc b/src/terminal-screen-container.cc
|
||||
index 6d85190..cedb1d9 100644
|
||||
--- a/src/terminal-screen-container.cc
|
||||
+++ b/src/terminal-screen-container.cc
|
||||
@@ -121,9 +121,25 @@ terminal_screen_container_init (TerminalScreenContainer *container)
|
||||
priv->vscrollbar_policy = GTK_POLICY_AUTOMATIC;
|
||||
}
|
||||
|
||||
+static gboolean
|
||||
+scrollbar_bg_draw_cb (GtkWidget *widget, cairo_t *cr, TerminalScreenContainer *container)
|
||||
+{
|
||||
+ TerminalScreenContainerPrivate *priv = container->priv;
|
||||
+ GdkRGBA * bg = terminal_screen_get_bg_color (priv->screen);
|
||||
+
|
||||
+ cairo_save (cr);
|
||||
+ cairo_set_source_rgba (cr, bg->red, bg->green, bg->blue, bg->alpha);
|
||||
+ cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
|
||||
+ cairo_paint (cr);
|
||||
+ cairo_restore (cr);
|
||||
+
|
||||
+ return FALSE;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
terminal_screen_container_constructed (GObject *object)
|
||||
{
|
||||
+ GtkWidget *scrollbar;
|
||||
TerminalScreenContainer *container = TERMINAL_SCREEN_CONTAINER (object);
|
||||
TerminalScreenContainerPrivate *priv = container->priv;
|
||||
|
||||
@@ -151,9 +167,12 @@ terminal_screen_container_constructed (GObject *object)
|
||||
}
|
||||
#else
|
||||
priv->hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||
+ priv->vscrollbar = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||
|
||||
- priv->vscrollbar = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL,
|
||||
- gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (priv->screen)));
|
||||
+ scrollbar = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL,
|
||||
+ gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (priv->screen)));
|
||||
+
|
||||
+ gtk_box_pack_start (GTK_BOX (priv->vscrollbar), scrollbar, TRUE, TRUE, 0);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (priv->hbox), GTK_WIDGET (priv->screen), TRUE, TRUE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (priv->hbox), priv->vscrollbar, FALSE, FALSE, 0);
|
||||
@@ -163,6 +182,11 @@ terminal_screen_container_constructed (GObject *object)
|
||||
#endif
|
||||
|
||||
_terminal_screen_update_scrollbar (priv->screen);
|
||||
+
|
||||
+ g_signal_connect (G_OBJECT (priv->vscrollbar), "draw",
|
||||
+ G_CALLBACK (scrollbar_bg_draw_cb), container);
|
||||
+ g_signal_connect_swapped (priv->screen, "notify::bg-color",
|
||||
+ G_CALLBACK (gtk_widget_queue_draw), priv->vscrollbar);
|
||||
}
|
||||
|
||||
static void
|
||||
diff --git a/src/terminal-screen.cc b/src/terminal-screen.cc
|
||||
index 85ae885..4e004c4 100644
|
||||
--- a/src/terminal-screen.cc
|
||||
+++ b/src/terminal-screen.cc
|
||||
@@ -108,6 +108,8 @@ struct _TerminalScreenPrivate
|
||||
gboolean exec_on_realize;
|
||||
guint idle_exec_source;
|
||||
ExecData *exec_data;
|
||||
+ GdkRGBA bg_color;
|
||||
+ GdkRGBA fg_color;
|
||||
};
|
||||
|
||||
enum
|
||||
@@ -123,6 +125,8 @@ enum {
|
||||
PROP_0,
|
||||
PROP_PROFILE,
|
||||
PROP_TITLE,
|
||||
+ PROP_BG_COLOR,
|
||||
+ PROP_FG_COLOR
|
||||
};
|
||||
|
||||
enum
|
||||
@@ -616,6 +620,12 @@ terminal_screen_get_property (GObject *object,
|
||||
case PROP_TITLE:
|
||||
g_value_set_string (value, terminal_screen_get_title (screen));
|
||||
break;
|
||||
+ case PROP_BG_COLOR:
|
||||
+ g_value_set_boxed (value, terminal_screen_get_bg_color (screen));
|
||||
+ break;
|
||||
+ case PROP_FG_COLOR:
|
||||
+ g_value_set_boxed (value, terminal_screen_get_bg_color (screen));
|
||||
+ break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
@@ -636,6 +646,8 @@ terminal_screen_set_property (GObject *object,
|
||||
terminal_screen_set_profile (screen, (GSettings*)g_value_get_object (value));
|
||||
break;
|
||||
case PROP_TITLE:
|
||||
+ case PROP_FG_COLOR:
|
||||
+ case PROP_BG_COLOR:
|
||||
/* not writable */
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
@@ -727,6 +739,26 @@ terminal_screen_class_init (TerminalScreenClass *klass)
|
||||
G_PARAM_STATIC_NICK |
|
||||
G_PARAM_STATIC_BLURB)));
|
||||
|
||||
+ g_object_class_install_property
|
||||
+ (object_class,
|
||||
+ PROP_BG_COLOR,
|
||||
+ g_param_spec_boxed ("bg-color", NULL, NULL,
|
||||
+ GDK_TYPE_RGBA,
|
||||
+ GParamFlags(G_PARAM_READABLE |
|
||||
+ G_PARAM_STATIC_NAME |
|
||||
+ G_PARAM_STATIC_NICK |
|
||||
+ G_PARAM_STATIC_BLURB)));
|
||||
+
|
||||
+ g_object_class_install_property
|
||||
+ (object_class,
|
||||
+ PROP_FG_COLOR,
|
||||
+ g_param_spec_boxed ("fg-color", NULL, NULL,
|
||||
+ GDK_TYPE_RGBA,
|
||||
+ GParamFlags(G_PARAM_READABLE |
|
||||
+ G_PARAM_STATIC_NAME |
|
||||
+ G_PARAM_STATIC_NICK |
|
||||
+ G_PARAM_STATIC_BLURB)));
|
||||
+
|
||||
g_type_class_add_private (object_class, sizeof (TerminalScreenPrivate));
|
||||
|
||||
gtk_widget_class_install_style_property (widget_class,
|
||||
@@ -1072,6 +1104,22 @@ terminal_screen_get_title (TerminalScreen *screen)
|
||||
return vte_terminal_get_window_title (VTE_TERMINAL (screen));
|
||||
}
|
||||
|
||||
+GdkRGBA*
|
||||
+terminal_screen_get_bg_color (TerminalScreen *screen)
|
||||
+{
|
||||
+ g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL);
|
||||
+
|
||||
+ return &screen->priv->bg_color;
|
||||
+}
|
||||
+
|
||||
+GdkRGBA*
|
||||
+terminal_screen_get_fg_color (TerminalScreen *screen)
|
||||
+{
|
||||
+ g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL);
|
||||
+
|
||||
+ return &screen->priv->fg_color;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
terminal_screen_profile_changed_cb (GSettings *profile,
|
||||
const char *prop_name,
|
||||
@@ -1324,6 +1372,18 @@ update_color_scheme (TerminalScreen *screen)
|
||||
vte_terminal_set_color_highlight (VTE_TERMINAL (screen), highlight_bgp);
|
||||
vte_terminal_set_color_highlight_foreground (VTE_TERMINAL (screen), highlight_fgp);
|
||||
|
||||
+ if (gdk_rgba_hash (&priv->bg_color) != gdk_rgba_hash (&bg))
|
||||
+ {
|
||||
+ priv->bg_color = bg;
|
||||
+ g_object_notify (G_OBJECT (screen), "bg-color");
|
||||
+ }
|
||||
+
|
||||
+ if (gdk_rgba_hash (&priv->fg_color) != gdk_rgba_hash (&fg))
|
||||
+ {
|
||||
+ priv->fg_color = fg;
|
||||
+ g_object_notify (G_OBJECT (screen), "fg-color");
|
||||
+ }
|
||||
+
|
||||
update_toplevel_transparency (screen);
|
||||
}
|
||||
|
||||
diff --git a/src/terminal-screen.hh b/src/terminal-screen.hh
|
||||
index 70d0d8c..b434052 100644
|
||||
--- a/src/terminal-screen.hh
|
||||
+++ b/src/terminal-screen.hh
|
||||
@@ -115,6 +115,8 @@ GSettings* terminal_screen_get_profile (TerminalScreen *screen);
|
||||
GSettings* terminal_screen_ref_profile (TerminalScreen *screen);
|
||||
|
||||
const char* terminal_screen_get_title (TerminalScreen *screen);
|
||||
+GdkRGBA* terminal_screen_get_bg_color (TerminalScreen *screen);
|
||||
+GdkRGBA* terminal_screen_get_fg_color (TerminalScreen *screen);
|
||||
|
||||
char *terminal_screen_get_current_dir (TerminalScreen *screen);
|
||||
|
||||
Reference in New Issue
Block a user