|
36 | 36 | #include <gio/gio.h> |
37 | 37 | #include <glib/gi18n.h> |
38 | 38 |
|
| 39 | +#ifdef HAVE_GTK_LAYER_SHELL |
| 40 | +#include <gtk-layer-shell/gtk-layer-shell.h> |
| 41 | +#endif |
| 42 | + |
39 | 43 | #include <eel/eel-vfs-extensions.h> |
40 | 44 | #include <libnemo-private/nemo-file-utilities.h> |
41 | 45 | #include <libnemo-private/nemo-icon-names.h> |
@@ -177,12 +181,20 @@ nemo_desktop_window_init (NemoDesktopWindow *window) |
177 | 181 | window->details = G_TYPE_INSTANCE_GET_PRIVATE (window, NEMO_TYPE_DESKTOP_WINDOW, |
178 | 182 | NemoDesktopWindowDetails); |
179 | 183 |
|
180 | | - g_object_set_data (G_OBJECT (window), "is_desktop_window", |
| 184 | + g_object_set_data (G_OBJECT (window), "is_desktop_window", |
181 | 185 | GINT_TO_POINTER (1)); |
182 | 186 |
|
183 | 187 | /* Make it easier for themes authors to style the desktop window separately */ |
184 | 188 | gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (window)), "nemo-desktop-window"); |
185 | | - gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DESKTOP); |
| 189 | + |
| 190 | +#ifdef HAVE_GTK_LAYER_SHELL |
| 191 | + if (gtk_layer_is_supported ()) { |
| 192 | + gtk_layer_init_for_window (GTK_WINDOW (window)); |
| 193 | + } else |
| 194 | +#endif |
| 195 | + { |
| 196 | + gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DESKTOP); |
| 197 | + } |
186 | 198 | } |
187 | 199 |
|
188 | 200 | NemoDesktopWindow * |
@@ -230,7 +242,13 @@ map (GtkWidget *widget) |
230 | 242 | { |
231 | 243 | /* Chain up to realize our children */ |
232 | 244 | GTK_WIDGET_CLASS (nemo_desktop_window_parent_class)->map (widget); |
233 | | - gdk_window_lower (gtk_widget_get_window (widget)); |
| 245 | + |
| 246 | +#ifdef HAVE_GTK_LAYER_SHELL |
| 247 | + if (!gtk_layer_is_layer_window (GTK_WINDOW (widget))) |
| 248 | +#endif |
| 249 | + { |
| 250 | + gdk_window_lower (gtk_widget_get_window (widget)); |
| 251 | + } |
234 | 252 |
|
235 | 253 | GdkWindow *window; |
236 | 254 | GdkRGBA transparent = { 0, 0, 0, 0 }; |
@@ -335,6 +353,28 @@ nemo_desktop_window_update_geometry (NemoDesktopWindow *window) |
335 | 353 | { |
336 | 354 | GdkRectangle rect; |
337 | 355 |
|
| 356 | +#ifdef HAVE_GTK_LAYER_SHELL |
| 357 | + if (gtk_layer_is_layer_window (GTK_WINDOW (window))) { |
| 358 | + GdkDisplay *display = gdk_display_get_default (); |
| 359 | + GdkMonitor *monitor = gdk_display_get_monitor (display, window->details->monitor); |
| 360 | + |
| 361 | + gtk_layer_set_layer (GTK_WINDOW (window), GTK_LAYER_SHELL_LAYER_BOTTOM); |
| 362 | + gtk_layer_set_namespace (GTK_WINDOW (window), "nemo-desktop"); |
| 363 | + gtk_layer_set_keyboard_mode (GTK_WINDOW (window), GTK_LAYER_SHELL_KEYBOARD_MODE_ON_DEMAND); |
| 364 | + gtk_layer_set_exclusive_zone (GTK_WINDOW (window), -1); |
| 365 | + gtk_layer_set_anchor (GTK_WINDOW (window), GTK_LAYER_SHELL_EDGE_TOP, TRUE); |
| 366 | + gtk_layer_set_anchor (GTK_WINDOW (window), GTK_LAYER_SHELL_EDGE_BOTTOM, TRUE); |
| 367 | + gtk_layer_set_anchor (GTK_WINDOW (window), GTK_LAYER_SHELL_EDGE_LEFT, TRUE); |
| 368 | + gtk_layer_set_anchor (GTK_WINDOW (window), GTK_LAYER_SHELL_EDGE_RIGHT, TRUE); |
| 369 | + |
| 370 | + if (monitor) { |
| 371 | + gtk_layer_set_monitor (GTK_WINDOW (window), monitor); |
| 372 | + } |
| 373 | + |
| 374 | + return; |
| 375 | + } |
| 376 | +#endif |
| 377 | + |
338 | 378 | nemo_desktop_manager_get_window_rect_for_monitor (nemo_desktop_manager_get (), |
339 | 379 | window->details->monitor, |
340 | 380 | &rect); |
|
0 commit comments