Skip to content

Commit be84592

Browse files
authored
Support drawing the desktop on wayland using gtk-layer-shell. (#3349)
1 parent 1e41f4b commit be84592

8 files changed

Lines changed: 40 additions & 2 deletions

File tree

config.h.meson.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
#mesondefine HAVE_SELINUX
2020
// Define to enable pango-1.44 fixes
2121
#mesondefine HAVE_PANGO_144
22+
// Define to use gtk-layer-shell
23+
#mesondefine HAVE_GTK_LAYER_SHELL
2224

2325

2426

debian/control

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Build-Depends:
2121
libgsf-1-dev,
2222
libgtk-3-dev (>= 3.10),
2323
libgtk-3-doc,
24+
libgtk-layer-shell-dev,
2425
libjson-glib-dev (>= 1.6),
2526
libpango1.0-dev,
2627
libx11-dev,

debian/rules

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ CONFIGURE_EXTRA_FLAGS = \
88
--buildtype=debugoptimized \
99
-D deprecated_warnings=false \
1010
-D gtk_doc=true \
11-
-D selinux=false
11+
-D selinux=false \
12+
-D gtk_layer_shell=true
1213

1314
export DEB_LDFLAGS_MAINT_APPEND = -Wl,-z,defs -Wl,-O1 -Wl,--as-needed
1415
export DEB_BUILD_MAINT_OPTIONS = hardening=+bindnow

meson.build

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,12 @@ if libselinux_enabled
136136
endif
137137
conf.set('HAVE_SELINUX', libselinux_enabled)
138138

139+
gtk_layer_shell_enabled = get_option('gtk_layer_shell')
140+
if gtk_layer_shell_enabled
141+
gtk_layer_shell = dependency('gtk-layer-shell-0', version: '>=0.8')
142+
endif
143+
conf.set('HAVE_GTK_LAYER_SHELL', gtk_layer_shell_enabled)
144+
139145
# make sure pango development files are installed
140146
pango = dependency('pango', version: '>=1.40.0')
141147
# check for newer pango for necessary workarounds

meson_options.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,5 @@ option('empty_view', type : 'boolean', value : false,
1212
description: 'Enable empty view')
1313
option('tracker',type : 'combo', choices : ['true', 'false', 'auto'], value : 'false',
1414
description: 'Tracker support')
15+
option('gtk_layer_shell', type : 'boolean', value : false,
16+
description: 'Use gtk-layer-shell to draw desktop on wayland')

src/meson.build

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,10 @@ if libexif_enabled
113113
nemo_deps += libexif
114114
endif
115115

116+
if gtk_layer_shell_enabled
117+
nemo_deps += gtk_layer_shell
118+
endif
119+
116120
nemo = executable('nemo',
117121
nemoCommon_sources + nemoWindow_sources,
118122
include_directories: [ rootInclude ],

src/nemo-desktop-main.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,13 @@ main (int argc, char *argv[])
8989

9090
g_set_prgname ("nemo-desktop");
9191

92-
gdk_set_allowed_backends ("x11");
92+
#ifdef HAVE_GTK_LAYER_SHELL
93+
if (gtk_layer_is_supported())
94+
gdk_set_allowed_backends ("wayland");
95+
else
96+
#else
97+
gdk_set_allowed_backends ("x11");
98+
#endif
9399

94100
#ifdef HAVE_EXEMPI
95101
xmp_init();

src/nemo-window.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@
7777
#include <math.h>
7878
#include <sys/time.h>
7979

80+
#ifdef HAVE_GTK_LAYER_SHELL
81+
#include <gtk-layer-shell/gtk-layer-shell.h>
82+
#endif
83+
8084
#define MAX_TITLE_LENGTH 180
8185

8286
/* Forward and back buttons on the mouse */
@@ -619,6 +623,18 @@ nemo_window_constructed (GObject *self)
619623
window = NEMO_WINDOW (self);
620624
application = nemo_application_get_singleton ();
621625

626+
#ifdef HAVE_GTK_LAYER_SHELL
627+
if (gtk_layer_is_supported() && window->details->disable_chrome) {
628+
gtk_layer_init_for_window(GTK_WINDOW(window));
629+
gtk_layer_set_namespace(GTK_WINDOW(window), _("Nemo"));
630+
gtk_layer_set_layer(GTK_WINDOW(window), GTK_LAYER_SHELL_LAYER_BOTTOM);
631+
gtk_layer_set_margin(GTK_WINDOW(window), GTK_LAYER_SHELL_EDGE_TOP, 0);
632+
for (int anchor = 0; anchor < 4; anchor++) {
633+
gtk_layer_set_anchor(GTK_WINDOW(window), anchor, 1);
634+
}
635+
}
636+
#endif
637+
622638
G_OBJECT_CLASS (nemo_window_parent_class)->constructed (self);
623639
gtk_window_set_application (GTK_WINDOW (window), GTK_APPLICATION (application));
624640

0 commit comments

Comments
 (0)