| 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 |
| |
| |