diff --git a/panel/panel-base-window.c b/panel/panel-base-window.c index 8bdb298..ad88641 100644 --- a/panel/panel-base-window.c +++ b/panel/panel-base-window.c @@ -192,6 +192,9 @@ panel_base_window_class_init (PanelBaseWindowClass *klass) static void panel_base_window_init (PanelBaseWindow *window) { + GdkColormap *colormap; + GdkScreen *screen; + window->priv = G_TYPE_INSTANCE_GET_PRIVATE (window, PANEL_TYPE_BASE_WINDOW, PanelBaseWindowPrivate); window->is_composited = FALSE; @@ -210,7 +213,18 @@ panel_base_window_init (PanelBaseWindow *window) * the type-hint already takes care of that */ gtk_window_stick (GTK_WINDOW (window)); - panel_base_window_composited_changed (GTK_WIDGET (window)); + /* set the rgba colormap if supported by the screen */ + screen = gtk_window_get_screen (GTK_WINDOW (window)); + colormap = gdk_screen_get_rgba_colormap (screen); + if (colormap != NULL) + { + gtk_widget_set_colormap (GTK_WIDGET (window), colormap); + window->is_composited = gtk_widget_is_composited (GTK_WIDGET (window)); + } + + panel_debug (PANEL_DEBUG_BASE_WINDOW, + "%p: rgba colormap=%s", window, + PANEL_DEBUG_BOOL (colormap != NULL)); } @@ -641,50 +655,17 @@ static void panel_base_window_composited_changed (GtkWidget *widget) { PanelBaseWindow *window = PANEL_BASE_WINDOW (widget); - GdkColormap *colormap = NULL; gboolean was_composited = window->is_composited; - gboolean was_visible; - GdkScreen *screen; - gboolean colormap_changed; - gboolean colormap_rgba = FALSE; - - panel_return_if_fail (PANEL_IS_BASE_WINDOW (widget)); + GdkWindow *gdkwindow; - /* get the widget screen */ - screen = gtk_window_get_screen (GTK_WINDOW (widget)); - panel_return_if_fail (GDK_IS_SCREEN (screen)); - - /* get the rgba colormap */ - colormap = gdk_screen_get_rgba_colormap (screen); - if (G_UNLIKELY (colormap == NULL)) - { - window->is_composited = FALSE; - colormap = gdk_screen_get_rgb_colormap (screen); - } - else - { - colormap_rgba = TRUE; - window->is_composited = gtk_widget_is_composited (widget); - gtk_window_set_opacity (GTK_WINDOW (widget), window->priv->leave_opacity); - } - - panel_return_if_fail (GDK_IS_COLORMAP (colormap)); - colormap_changed = gtk_widget_get_colormap (widget) != colormap; + /* set new compositing state */ + window->is_composited = gtk_widget_is_composited (widget); + if (window->is_composited) + gtk_window_set_opacity (GTK_WINDOW (widget), window->priv->leave_opacity); panel_debug (PANEL_DEBUG_BASE_WINDOW, - "%p: composited=%s, rgba=%s, visible=%s", window, - PANEL_DEBUG_BOOL (gtk_widget_is_composited (widget)), - PANEL_DEBUG_BOOL (colormap_rgba), - PANEL_DEBUG_BOOL (GTK_WIDGET_VISIBLE (widget))); - - was_visible = GTK_WIDGET_VISIBLE (widget); - if (was_visible) - { - gtk_widget_hide (widget); - - if (colormap_changed) - gtk_widget_unrealize (widget); - } + "%p: compositing=%s", window, + PANEL_DEBUG_BOOL (window->is_composited)); /* clear cairo image cache */ if (window->priv->bg_image_cache != NULL) @@ -693,20 +674,12 @@ panel_base_window_composited_changed (GtkWidget *widget) window->priv->bg_image_cache = NULL; } - if (colormap_changed) - gtk_widget_set_colormap (widget, colormap); - - if (was_visible) - { - /* restore the window */ - if (colormap_changed) - gtk_widget_realize (widget); - gtk_widget_show (widget); - } - - /* emit the property if it changed */ if (window->is_composited != was_composited) g_object_notify (G_OBJECT (widget), "composited"); + + gdkwindow = gtk_widget_get_window (widget); + if (gdkwindow != NULL) + gdk_window_invalidate_rect (gdkwindow, NULL, TRUE); } diff --git a/panel/panel-window.c b/panel/panel-window.c index 046e2ec..1d5424d 100644 --- a/panel/panel-window.c +++ b/panel/panel-window.c @@ -117,7 +117,6 @@ static void panel_window_style_set (GtkWidget *w static void panel_window_realize (GtkWidget *widget); static StrutsEgde panel_window_screen_struts_edge (PanelWindow *window); static void panel_window_screen_struts_set (PanelWindow *window); -static void panel_window_screen_force_update (PanelWindow *window); static void panel_window_screen_update_borders (PanelWindow *window); static SnapPosition panel_window_snap_position (PanelWindow *window); static void panel_window_display_layout_debug (GtkWidget *widget); @@ -457,10 +456,6 @@ panel_window_init (PanelWindow *window) /* set the screen */ panel_window_screen_changed (GTK_WIDGET (window), NULL); - - /* watch changes in the compositing */ - g_signal_connect (G_OBJECT (window), "notify::composited", - G_CALLBACK (panel_window_screen_force_update), NULL); } @@ -1577,25 +1572,6 @@ panel_window_screen_struts_set (PanelWindow *window) static void -panel_window_screen_force_update (PanelWindow *window) -{ - panel_return_if_fail (PANEL_IS_WINDOW (window)); - - if (GTK_WIDGET_VISIBLE (window)) - { - /* make sure the struts are set again, when enabled */ - if (window->struts_edge != STRUTS_EDGE_NONE - && window->autohide_state == AUTOHIDE_DISABLED) - window->struts[0] = -1; - - /* update the panel position */ - panel_window_screen_layout_changed (window->screen, window); - } -} - - - -static void panel_window_screen_update_borders (PanelWindow *window) { PanelBorders borders = PANEL_BORDER_NONE;