diff options
Diffstat (limited to 'eel/eel-background.c')
| -rw-r--r-- | eel/eel-background.c | 43 |
1 files changed, 31 insertions, 12 deletions
diff --git a/eel/eel-background.c b/eel/eel-background.c index ae585d6a..ceaa972f 100644 --- a/eel/eel-background.c +++ b/eel/eel-background.c @@ -105,7 +105,7 @@ free_background_surface (EelBackground *self) it will live forever, so we need to kill it manually. If set as root background it will be killed next time the background is changed. */ - if (self->details->unset_root_surface) + if (GDK_IS_X11_DISPLAY (gdk_display_get_default()) && (self->details->unset_root_surface)) { XKillClient (cairo_xlib_surface_get_display (surface), cairo_xlib_surface_get_drawable (surface)); @@ -311,9 +311,20 @@ drawable_get_adjusted_size (EelBackground *self, if (self->details->is_desktop) { GdkScreen *screen = gtk_widget_get_screen (self->details->widget); - gint scale = gtk_widget_get_scale_factor (self->details->widget); - *width = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale; - *height = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale; + GdkDisplay *display = gdk_screen_get_display (screen); + if (GDK_IS_X11_DISPLAY (display)) + { + gint scale = gtk_widget_get_scale_factor (self->details->widget); + *width = WidthOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale; + *height = HeightOfScreen (gdk_x11_screen_get_xscreen (screen)) / scale; + } + else { + GdkRectangle workarea = {0}; + gdk_monitor_get_workarea(gdk_display_get_monitor_at_window(gdk_display_get_default(), + gtk_widget_get_window (self->details->widget)), &workarea); + *width = workarea.width; + *height = workarea.height; + } } else { @@ -413,17 +424,18 @@ set_root_surface (EelBackground *self, GdkScreen *screen) { eel_background_ensure_realized (self); + GdkDisplay *display = gdk_screen_get_display (screen); if (self->details->use_common_surface) { self->details->unset_root_surface = FALSE; } else { int width, height; drawable_get_adjusted_size (self, &width, &height); - self->details->bg_surface = mate_bg_create_surface (self->details->bg, window, - width, height, TRUE); + if ((GDK_IS_X11_DISPLAY (display)) && (self->details->bg_surface == NULL)) + self->details->bg_surface = mate_bg_create_surface (self->details->bg, window, + width, height, TRUE); } - - if (self->details->bg_surface != NULL) + if ((GDK_IS_X11_DISPLAY (display)) && (self->details->bg_surface != NULL)) mate_bg_set_surface_as_root (screen, self->details->bg_surface); } @@ -638,7 +650,7 @@ widget_realized_setup (GtkWidget *widget, } GdkScreen *screen = gtk_widget_get_screen (widget); - GdkWindow *window = gdk_screen_get_root_window (screen); + GdkDisplay *display = gdk_screen_get_display (screen); if (self->details->screen_size_handler > 0) { @@ -654,9 +666,16 @@ widget_realized_setup (GtkWidget *widget, self->details->screen_monitors_handler = g_signal_connect (screen, "monitors-changed", G_CALLBACK (screen_size_changed), self); - self->details->use_common_surface = - (gdk_window_get_visual (window) == gtk_widget_get_visual (widget)) ? TRUE : FALSE; - + if (GDK_IS_X11_DISPLAY (display)) + { + GdkWindow *window = gdk_screen_get_root_window (screen); + self->details->use_common_surface = + (gdk_window_get_visual (window) == gtk_widget_get_visual (widget)) ? TRUE : FALSE; + } + else /*Wayland is always composited but never has a root window*/ + { + self->details->use_common_surface = FALSE; + } init_fade (self); } |
