[Xfce4-commits] r30202 - terminal/trunk/terminal
Nick Schermer
nick at xfce.org
Sun Jul 5 18:05:27 CEST 2009
Author: nick
Date: 2009-07-05 16:05:26 +0000 (Sun, 05 Jul 2009)
New Revision: 30202
Modified:
terminal/trunk/terminal/terminal-app.c
terminal/trunk/terminal/terminal-screen.c
terminal/trunk/terminal/terminal-window.c
Log:
Set the rgba colormap on the window.
Hopefully this will fix some issues regarding drawing
problems with the compositor. The previous way
was a bit of a flaw since the vte widget was assumed
to be composited while the window had no rgba colormap.
Modified: terminal/trunk/terminal/terminal-app.c
===================================================================
--- terminal/trunk/terminal/terminal-app.c 2009-07-05 15:09:54 UTC (rev 30201)
+++ terminal/trunk/terminal/terminal-app.c 2009-07-05 16:05:26 UTC (rev 30202)
@@ -360,7 +360,6 @@
terminal_app_find_screen (const gchar *display_name)
{
const gchar *other_name;
- GdkColormap *colormap;
GdkDisplay *display = NULL;
GdkScreen *screen = NULL;
GSList *displays;
@@ -421,23 +420,6 @@
g_object_ref (G_OBJECT (screen));
}
- /* check if we already checked this screen */
- if (g_object_get_data (G_OBJECT (screen), "terminal-checked-screen") == NULL)
- {
- /* check if we can use ARGB visual for this screen */
- colormap = gdk_screen_get_rgba_colormap (screen);
- if (G_LIKELY (colormap != NULL))
- {
- /* use ARGB visual for all windows on this screen, required
- * for real transparency with a compositing manager.
- */
- gdk_screen_set_default_colormap (screen, colormap);
- }
-
- /* mark this screen as handled */
- g_object_set_data (G_OBJECT (screen), I_("terminal-checked-screen"), GINT_TO_POINTER (1));
- }
-
return screen;
}
Modified: terminal/trunk/terminal/terminal-screen.c
===================================================================
--- terminal/trunk/terminal/terminal-screen.c 2009-07-05 15:09:54 UTC (rev 30201)
+++ terminal/trunk/terminal/terminal-screen.c 2009-07-05 16:05:26 UTC (rev 30202)
@@ -977,11 +977,12 @@
static gboolean
terminal_screen_timer_background (gpointer user_data)
{
+ TerminalScreen *screen = TERMINAL_SCREEN (user_data);
TerminalImageLoader *loader;
TerminalBackground background_mode;
- TerminalScreen *screen = TERMINAL_SCREEN (user_data);
GdkPixbuf *image;
gdouble background_darkness;
+ gboolean transparent = FALSE;
terminal_return_val_if_fail (TERMINAL_IS_SCREEN (screen), FALSE);
terminal_return_val_if_fail (VTE_IS_TERMINAL (screen->terminal), FALSE);
@@ -990,49 +991,49 @@
g_object_get (G_OBJECT (screen->preferences), "background-mode", &background_mode, NULL);
- if (background_mode == TERMINAL_BACKGROUND_SOLID)
+
+ if (G_UNLIKELY (background_mode == TERMINAL_BACKGROUND_IMAGE))
{
- vte_terminal_set_background_image (VTE_TERMINAL (screen->terminal), NULL);
- vte_terminal_set_background_saturation (VTE_TERMINAL (screen->terminal), 1.0);
- vte_terminal_set_background_transparent (VTE_TERMINAL (screen->terminal), FALSE);
- vte_terminal_set_opacity (VTE_TERMINAL (screen->terminal), 0xFFFF);
- }
- else if (background_mode == TERMINAL_BACKGROUND_IMAGE)
- {
- vte_terminal_set_background_saturation (VTE_TERMINAL (screen->terminal), 1.0);
- vte_terminal_set_background_transparent (VTE_TERMINAL (screen->terminal), FALSE);
-
loader = terminal_image_loader_get ();
image = terminal_image_loader_load (loader,
screen->terminal->allocation.width,
screen->terminal->allocation.height);
vte_terminal_set_background_image (VTE_TERMINAL (screen->terminal), image);
- vte_terminal_set_opacity (VTE_TERMINAL (screen->terminal), 0xFFFF);
- if (image != NULL)
+ if (G_LIKELY (image != NULL))
g_object_unref (G_OBJECT (image));
g_object_unref (G_OBJECT (loader));
}
else
{
- g_object_get (G_OBJECT (screen->preferences), "background-darkness", &background_darkness, NULL);
vte_terminal_set_background_image (VTE_TERMINAL (screen->terminal), NULL);
+ }
- /* check if the X screen is composited */
- if (gdk_screen_is_composited (gtk_widget_get_screen (user_data)))
+ if (G_UNLIKELY (background_mode == TERMINAL_BACKGROUND_IMAGE
+ || background_mode == TERMINAL_BACKGROUND_TRANSPARENT))
+ {
+ g_object_get (G_OBJECT (screen->preferences), "background-darkness", &background_darkness, NULL);
+
+ if (gtk_widget_is_composited (GTK_WIDGET (screen)))
{
+ vte_terminal_set_opacity (VTE_TERMINAL (screen->terminal), 0xffff * background_darkness);
vte_terminal_set_background_saturation (VTE_TERMINAL (screen->terminal), 1.0);
- vte_terminal_set_background_transparent (VTE_TERMINAL (screen->terminal), FALSE);
- vte_terminal_set_opacity (VTE_TERMINAL (screen->terminal), (guint16) (0xFFFFu * background_darkness));
}
else
{
vte_terminal_set_background_saturation (VTE_TERMINAL (screen->terminal), 1.0 - background_darkness);
- vte_terminal_set_background_transparent (VTE_TERMINAL (screen->terminal), TRUE);
- vte_terminal_set_opacity (VTE_TERMINAL (screen->terminal), 0xFFFF);
+ vte_terminal_set_opacity (VTE_TERMINAL (screen->terminal), 0xffff);
+ transparent = TRUE;
}
}
+ else
+ {
+ vte_terminal_set_background_saturation (VTE_TERMINAL (screen->terminal), 1.0);
+ vte_terminal_set_opacity (VTE_TERMINAL (screen->terminal), 0xffff);
+ }
+ vte_terminal_set_background_transparent (VTE_TERMINAL (screen->terminal), transparent);
+
screen->last_size_change = time (NULL);
GDK_THREADS_LEAVE ();
Modified: terminal/trunk/terminal/terminal-window.c
===================================================================
--- terminal/trunk/terminal/terminal-window.c 2009-07-05 15:09:54 UTC (rev 30201)
+++ terminal/trunk/terminal/terminal-window.c 2009-07-05 16:05:26 UTC (rev 30202)
@@ -84,6 +84,7 @@
static void terminal_window_dispose (GObject *object);
static void terminal_window_finalize (GObject *object);
static void terminal_window_show (GtkWidget *widget);
+static void terminal_window_realize (GtkWidget *widget);
static gboolean terminal_window_confirm_close (TerminalWindow *window);
static void terminal_window_queue_reset_size (TerminalWindow *window);
static gboolean terminal_window_reset_size (gpointer user_data);
@@ -207,6 +208,9 @@
TerminalScreen *active;
guint reset_size_idle_id;
+
+ /* whether this window has an rgba colormap */
+ guint is_composited : 1;
};
@@ -272,6 +276,7 @@
gtkwidget_class = GTK_WIDGET_CLASS (klass);
gtkwidget_class->show = terminal_window_show;
+ gtkwidget_class->realize = terminal_window_realize;
/**
* TerminalWindow::new-window
@@ -495,6 +500,34 @@
+static void
+terminal_window_realize (GtkWidget *widget)
+{
+ TerminalWindow *window = TERMINAL_WINDOW (widget);
+ GdkScreen *screen;
+ GdkColormap *colormap;
+
+ /* unset rgba */
+ window->is_composited = FALSE;
+
+ /* try to set the rgba colormap so vte can use real transparency */
+ screen = gtk_widget_get_screen (widget);
+ if (gdk_screen_is_composited (screen))
+ {
+ colormap = gdk_screen_get_rgba_colormap (screen);
+ if (G_LIKELY (colormap != NULL))
+ window->is_composited = TRUE;
+ else
+ colormap = gdk_screen_get_default_colormap (screen);
+
+ gtk_widget_set_colormap (widget, colormap);
+ }
+
+ (*GTK_WIDGET_CLASS (terminal_window_parent_class)->realize) (widget);
+}
+
+
+
static gboolean
terminal_window_confirm_close (TerminalWindow *window)
{
More information about the Xfce4-commits
mailing list