63 lines
2.3 KiB
Diff
63 lines
2.3 KiB
Diff
|
From df5793813d19dccfb6dfa75c1be766df562adb48 Mon Sep 17 00:00:00 2001
|
||
|
From: Lars Uebernickel <lars.uebernickel@canonical.com>
|
||
|
Date: Wed, 28 May 2014 14:11:02 +0200
|
||
|
Subject: [PATCH] window: Make the drawing robust across all themes
|
||
|
|
||
|
There are lots of themes out there in the wild that do not specify a
|
||
|
background-color for all widgets and the default is transparent. This
|
||
|
is usually not a problem because GTK+ sets an opaque region on the
|
||
|
whole window and things without a background-color get drawn with the
|
||
|
theme's default background colour. However, to achieve transparency
|
||
|
we disable the opaque region by making the window app-paintable. This
|
||
|
can lead to transparent menubars or notebook tabs in some themes. We
|
||
|
can avoid this by ensuring that the window always renders a background.
|
||
|
|
||
|
https://bugzilla.gnome.org/show_bug.cgi?id=730016
|
||
|
---
|
||
|
src/terminal-window.c | 21 +++++++++++++++++++++
|
||
|
1 files changed, 21 insertions(+), 0 deletions(-)
|
||
|
|
||
|
diff --git a/src/terminal-window.c b/src/terminal-window.c
|
||
|
index 98acab4..b838424 100644
|
||
|
--- a/src/terminal-window.c
|
||
|
+++ b/src/terminal-window.c
|
||
|
@@ -2189,6 +2189,26 @@ terminal_window_realize (GtkWidget *widget)
|
||
|
}
|
||
|
|
||
|
static gboolean
|
||
|
+terminal_window_draw (GtkWidget *widget,
|
||
|
+ cairo_t *cr)
|
||
|
+{
|
||
|
+ if (gtk_widget_get_app_paintable (widget))
|
||
|
+ {
|
||
|
+ GtkStyleContext *context;
|
||
|
+ int width;
|
||
|
+ int height;
|
||
|
+
|
||
|
+ context = gtk_widget_get_style_context (widget);
|
||
|
+ width = gtk_widget_get_allocated_width (widget);
|
||
|
+ height = gtk_widget_get_allocated_height (widget);
|
||
|
+ gtk_render_background (context, cr, 0, 0, width, height);
|
||
|
+ gtk_render_frame (context, cr, 0, 0, width, height);
|
||
|
+ }
|
||
|
+
|
||
|
+ return GTK_WIDGET_CLASS (terminal_window_parent_class)->draw (widget, cr);
|
||
|
+}
|
||
|
+
|
||
|
+static gboolean
|
||
|
terminal_window_state_event (GtkWidget *widget,
|
||
|
GdkEventWindowState *event)
|
||
|
{
|
||
|
@@ -2748,6 +2768,7 @@ terminal_window_class_init (TerminalWindowClass *klass)
|
||
|
|
||
|
widget_class->show = terminal_window_show;
|
||
|
widget_class->realize = terminal_window_realize;
|
||
|
+ widget_class->draw = terminal_window_draw;
|
||
|
widget_class->window_state_event = terminal_window_state_event;
|
||
|
widget_class->screen_changed = terminal_window_screen_changed;
|
||
|
widget_class->style_updated = terminal_window_style_updated;
|
||
|
--
|
||
|
1.7.1
|
||
|
|
||
|
|