gnome-terminal r3239 - trunk/src
- From: chpe svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-terminal r3239 - trunk/src
- Date: Sun, 7 Dec 2008 22:02:37 +0000 (UTC)
Author: chpe
Date: Sun Dec 7 22:02:37 2008
New Revision: 3239
URL: http://svn.gnome.org/viewvc/gnome-terminal?rev=3239&view=rev
Log:
Bug 563561 â g-t doesn't notice if compositing manager starts/stops
Re-realize windows when compositing changes.
Modified:
trunk/src/terminal-window.c
Modified: trunk/src/terminal-window.c
==============================================================================
--- trunk/src/terminal-window.c (original)
+++ trunk/src/terminal-window.c Sun Dec 7 22:02:37 2008
@@ -1028,31 +1028,6 @@
gtk_action_set_sensitive (action, num_pages > 1);
}
-static void
-initialize_alpha_mode (TerminalWindow *window)
-{
- TerminalWindowPrivate *priv = window->priv;
- GdkScreen *screen;
- GdkColormap *colormap;
-
- /* FIXME: update the TerminalScreen's for this change! */
-
- screen = gtk_widget_get_screen (GTK_WIDGET (window));
- colormap = gdk_screen_get_rgba_colormap (screen);
- if (colormap != NULL && gdk_screen_is_composited (screen))
- {
- /* Set RGBA colormap if possible so VTE can use real alpha
- * channels for transparency. */
-
- gtk_widget_set_colormap(GTK_WIDGET (window), colormap);
- priv->have_argb_visual = TRUE;
- }
- else
- {
- priv->have_argb_visual = FALSE;
- }
-}
-
gboolean
terminal_window_uses_argb_visual (TerminalWindow *window)
{
@@ -1389,6 +1364,33 @@
/*****************************************/
+static void
+terminal_window_realize (GtkWidget *widget)
+{
+#ifdef GDK_WINDOWING_X11
+ TerminalWindow *window = TERMINAL_WINDOW (widget);
+ TerminalWindowPrivate *priv = window->priv;
+ GdkScreen *screen;
+ GdkColormap *colormap;
+
+ screen = gtk_widget_get_screen (GTK_WIDGET (window));
+ colormap = gdk_screen_get_rgba_colormap (screen);
+ if (colormap != NULL && gdk_screen_is_composited (screen))
+ {
+ /* Set RGBA colormap if possible so VTE can use real transparency */
+ gtk_widget_set_colormap (widget, colormap);
+ priv->have_argb_visual = TRUE;
+ }
+ else
+ {
+ gtk_widget_set_colormap (widget, gdk_screen_get_default_colormap (screen));
+ priv->have_argb_visual = FALSE;
+ }
+#endif
+
+ GTK_WIDGET_CLASS (terminal_window_parent_class)->realize (widget);
+}
+
static gboolean
terminal_window_state_event (GtkWidget *widget,
GdkEventWindowState *event)
@@ -1429,6 +1431,35 @@
gtk_action_set_sensitive (action, supports_fs);
}
+#ifdef GDK_WINDOWING_X11
+
+static void
+terminal_window_composited_changed_cb (GdkScreen *screen,
+ TerminalWindow *window)
+{
+ TerminalWindowPrivate *priv = window->priv;
+ gboolean composited;
+
+ composited = gdk_screen_is_composited (screen);
+ if ((composited != priv->have_argb_visual) &&
+ GTK_WIDGET_REALIZED (window))
+ {
+ GtkWidget *widget = GTK_WIDGET (window);
+ guint32 user_time;
+
+ user_time = gdk_x11_display_get_user_time (gtk_widget_get_display (widget));
+
+ /* If compositing changed, re-realize the window. Bug #563561 */
+ gtk_widget_hide (widget);
+ gtk_widget_unrealize (widget);
+ gtk_widget_realize (widget);
+ gdk_x11_window_set_user_time (widget->window, user_time);
+ gtk_widget_show (widget);
+ }
+}
+
+#endif /* GDK_WINDOWING_X11 */
+
static void
terminal_window_screen_update (TerminalWindow *window,
GdkScreen *screen)
@@ -1438,6 +1469,10 @@
terminal_window_window_manager_changed_cb (screen, window);
g_signal_connect (screen, "window-manager-changed",
G_CALLBACK (terminal_window_window_manager_changed_cb), window);
+#ifdef GDK_WINDOWING_X11
+ g_signal_connect (screen, "composited-changed",
+ G_CALLBACK (terminal_window_composited_changed_cb), window);
+#endif
if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (screen), "GT::HasSettingsConnection")))
return;
@@ -1471,9 +1506,16 @@
return;
if (previous_screen)
- g_signal_handlers_disconnect_by_func (previous_screen,
- G_CALLBACK (terminal_window_window_manager_changed_cb),
- window);
+ {
+ g_signal_handlers_disconnect_by_func (previous_screen,
+ G_CALLBACK (terminal_window_window_manager_changed_cb),
+ window);
+#ifdef GDK_WINDOWING_X11
+ g_signal_handlers_disconnect_by_func (previous_screen,
+ G_CALLBACK (terminal_window_composited_changed_cb),
+ window);
+#endif
+ }
if (!screen)
return;
@@ -1675,8 +1717,6 @@
priv = window->priv = G_TYPE_INSTANCE_GET_PRIVATE (window, TERMINAL_TYPE_WINDOW, TerminalWindowPrivate);
- initialize_alpha_mode (window);
-
g_signal_connect (G_OBJECT (window), "delete_event",
G_CALLBACK(terminal_window_delete_event),
NULL);
@@ -1815,6 +1855,7 @@
object_class->finalize = terminal_window_finalize;
widget_class->show = terminal_window_show;
+ widget_class->realize = terminal_window_realize;
widget_class->window_state_event = terminal_window_state_event;
widget_class->screen_changed = terminal_window_screen_changed;
@@ -1860,9 +1901,16 @@
screen = gtk_widget_get_screen (GTK_WIDGET (object));
if (screen)
- g_signal_handlers_disconnect_by_func (screen,
- G_CALLBACK (terminal_window_window_manager_changed_cb),
- window);
+ {
+ g_signal_handlers_disconnect_by_func (screen,
+ G_CALLBACK (terminal_window_window_manager_changed_cb),
+ window);
+#ifdef GDK_WINDOWING_X11
+ g_signal_handlers_disconnect_by_func (screen,
+ G_CALLBACK (terminal_window_composited_changed_cb),
+ window);
+#endif
+ }
G_OBJECT_CLASS (terminal_window_parent_class)->dispose (object);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]