|
30 | 30 | #include <gio/gio.h> |
31 | 31 | #include <glib/gi18n.h> |
32 | 32 |
|
| 33 | +#ifdef HAVE_GTK_LAYER_SHELL |
| 34 | +#include <gtk-layer-shell/gtk-layer-shell.h> |
| 35 | +#endif |
| 36 | + |
33 | 37 | #include <libnemo-private/nemo-desktop-utils.h> |
34 | 38 | #include <libnemo-private/nemo-action.h> |
35 | 39 | #include <libnemo-private/nemo-file.h> |
@@ -402,7 +406,15 @@ nemo_blank_desktop_window_init (NemoBlankDesktopWindow *window) |
402 | 406 |
|
403 | 407 | window->details->popup_menu = NULL; |
404 | 408 | window->details->actions_changed_id = 0; |
405 | | - gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DESKTOP); |
| 409 | + |
| 410 | +#ifdef HAVE_GTK_LAYER_SHELL |
| 411 | + if (gtk_layer_is_supported ()) { |
| 412 | + gtk_layer_init_for_window (GTK_WINDOW (window)); |
| 413 | + } else |
| 414 | +#endif |
| 415 | + { |
| 416 | + gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DESKTOP); |
| 417 | + } |
406 | 418 |
|
407 | 419 | /* Make it easier for themes authors to style the desktop window separately */ |
408 | 420 | gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (window)), "nemo-desktop-window"); |
@@ -436,7 +448,13 @@ map (GtkWidget *widget) |
436 | 448 | { |
437 | 449 | /* Chain up to realize our children */ |
438 | 450 | GTK_WIDGET_CLASS (nemo_blank_desktop_window_parent_class)->map (widget); |
439 | | - gdk_window_lower (gtk_widget_get_window (widget)); |
| 451 | + |
| 452 | +#ifdef HAVE_GTK_LAYER_SHELL |
| 453 | + if (!gtk_layer_is_layer_window (GTK_WINDOW (widget))) |
| 454 | +#endif |
| 455 | + { |
| 456 | + gdk_window_lower (gtk_widget_get_window (widget)); |
| 457 | + } |
440 | 458 |
|
441 | 459 | GdkWindow *window; |
442 | 460 | GdkRGBA transparent = { 0, 0, 0, 0 }; |
@@ -499,6 +517,31 @@ nemo_blank_desktop_window_update_geometry (NemoBlankDesktopWindow *window) |
499 | 517 | { |
500 | 518 | GdkRectangle rect; |
501 | 519 |
|
| 520 | +#ifdef HAVE_GTK_LAYER_SHELL |
| 521 | + if (gtk_layer_is_layer_window (GTK_WINDOW (window))) { |
| 522 | + GdkDisplay *display = gdk_display_get_default (); |
| 523 | + GdkMonitor *monitor = gdk_display_get_monitor (display, window->details->monitor); |
| 524 | + |
| 525 | + DEBUG ("NemoBlankDesktopWindow: using layer-shell for monitor %d", |
| 526 | + window->details->monitor); |
| 527 | + |
| 528 | + gtk_layer_set_layer (GTK_WINDOW (window), GTK_LAYER_SHELL_LAYER_BOTTOM); |
| 529 | + gtk_layer_set_namespace (GTK_WINDOW (window), "nemo-desktop"); |
| 530 | + gtk_layer_set_keyboard_mode (GTK_WINDOW (window), GTK_LAYER_SHELL_KEYBOARD_MODE_NONE); |
| 531 | + gtk_layer_set_exclusive_zone (GTK_WINDOW (window), 0); |
| 532 | + gtk_layer_set_anchor (GTK_WINDOW (window), GTK_LAYER_SHELL_EDGE_TOP, TRUE); |
| 533 | + gtk_layer_set_anchor (GTK_WINDOW (window), GTK_LAYER_SHELL_EDGE_BOTTOM, TRUE); |
| 534 | + gtk_layer_set_anchor (GTK_WINDOW (window), GTK_LAYER_SHELL_EDGE_LEFT, TRUE); |
| 535 | + gtk_layer_set_anchor (GTK_WINDOW (window), GTK_LAYER_SHELL_EDGE_RIGHT, TRUE); |
| 536 | + |
| 537 | + if (monitor) { |
| 538 | + gtk_layer_set_monitor (GTK_WINDOW (window), monitor); |
| 539 | + } |
| 540 | + |
| 541 | + return; |
| 542 | + } |
| 543 | +#endif |
| 544 | + |
502 | 545 | nemo_desktop_manager_get_window_rect_for_monitor (nemo_desktop_manager_get (), |
503 | 546 | window->details->monitor, |
504 | 547 | &rect); |
|
0 commit comments