mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-15 05:00:09 +00:00
Fix a problem with screen changes and csd
When a new screen is set on a window, we unrealize it, to recreate all the resources. But we don't reset the client_decorated flag, so realize() doesn't call create_decoration() - which makes sense, since the decoration already exists. But the side-effect of create_decoration() is to select the rgba visual, and visuals are per-screen. Fix this by looking for the rgba visual in set_screen(), and replacing it with the rgba visual for the new screen, if necessary.
This commit is contained in:
parent
2002613012
commit
fea13fcfc1
@ -10291,6 +10291,7 @@ gtk_window_set_screen (GtkWindow *window,
|
||||
GtkWindowPrivate *priv;
|
||||
GtkWidget *widget;
|
||||
GdkScreen *previous_screen;
|
||||
gboolean was_rgba;
|
||||
gboolean was_mapped;
|
||||
|
||||
g_return_if_fail (GTK_IS_WINDOW (window));
|
||||
@ -10304,6 +10305,12 @@ gtk_window_set_screen (GtkWindow *window,
|
||||
widget = GTK_WIDGET (window);
|
||||
|
||||
previous_screen = priv->screen;
|
||||
|
||||
if (gdk_screen_get_rgba_visual (previous_screen) == gtk_widget_get_visual (widget))
|
||||
was_rgba = TRUE;
|
||||
else
|
||||
was_rgba = FALSE;
|
||||
|
||||
was_mapped = gtk_widget_get_mapped (widget);
|
||||
|
||||
if (was_mapped)
|
||||
@ -10337,6 +10344,15 @@ gtk_window_set_screen (GtkWindow *window,
|
||||
}
|
||||
g_object_notify (G_OBJECT (window), "screen");
|
||||
|
||||
if (was_rgba)
|
||||
{
|
||||
GdkVisual *visual;
|
||||
|
||||
visual = gdk_screen_get_rgba_visual (screen);
|
||||
if (visual)
|
||||
gtk_widget_set_visual (widget, visual);
|
||||
}
|
||||
|
||||
if (was_mapped)
|
||||
gtk_widget_map (widget);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user