@@ -148,8 +148,39 @@ namespace Gala {
148148 display. gl_video_memory_purged. connect (() = > {
149149 Meta . Background . refresh_all ();
150150 });
151+
152+ #if WITH_SYSTEMD
153+ if (Meta . Util . is_wayland_compositor ()) {
154+ display. init_xserver. connect ((task) = > {
155+ start_x11_services. begin (task);
156+ return true ;
157+ });
158+ }
159+ #endif
151160 }
152161
162+ #if WITH_SYSTEMD
163+ private async void start_x11_services (GLib .Task task ) {
164+ try {
165+ var session_bus = yield GLib . Bus . @get (GLib . BusType . SESSION );
166+ yield session_bus. call (
167+ " org.freedesktop.systemd1" ,
168+ " /org/freedesktop/systemd1" ,
169+ " org.freedesktop.systemd1.Manager" ,
170+ " StartUnit" ,
171+ new GLib .Variant (" (ss)" , " gnome-session-x11-services-ready.target" , " fail" ),
172+ new GLib .VariantType (" (o)" ),
173+ GLib . DBusCallFlags . NONE ,
174+ - 1
175+ );
176+ } catch (Error e) {
177+ critical (e. message);
178+ } finally {
179+ task. return_boolean (true );
180+ }
181+ }
182+ #endif
183+
153184 private void show_stage () {
154185 unowned Meta . Display display = get_display ();
155186
@@ -255,6 +286,7 @@ namespace Gala {
255286 display. add_keybinding (" switch-input-source-backward" , keybinding_settings, Meta . KeyBindingFlags . IGNORE_AUTOREPEAT , (Meta . KeyHandlerFunc ) handle_switch_input_source);
256287
257288 display. add_keybinding (" screenshot" , keybinding_settings, Meta . KeyBindingFlags . IGNORE_AUTOREPEAT , (Meta . KeyHandlerFunc ) handle_screenshot);
289+ display. add_keybinding (" interactive-screenshot" , keybinding_settings, Meta . KeyBindingFlags . IGNORE_AUTOREPEAT , (Meta . KeyHandlerFunc ) handle_screenshot);
258290 display. add_keybinding (" window-screenshot" , keybinding_settings, Meta . KeyBindingFlags . IGNORE_AUTOREPEAT , (Meta . KeyHandlerFunc ) handle_screenshot);
259291 display. add_keybinding (" area-screenshot" , keybinding_settings, Meta . KeyBindingFlags . IGNORE_AUTOREPEAT , (Meta . KeyHandlerFunc ) handle_screenshot);
260292 display. add_keybinding (" screenshot-clip" , keybinding_settings, Meta . KeyBindingFlags . IGNORE_AUTOREPEAT , (Meta . KeyHandlerFunc ) handle_screenshot);
@@ -295,8 +327,7 @@ namespace Gala {
295327 // Most things inside this "later" depend on GTK. We get segfaults if we try to do GTK stuff before the window manager
296328 // is initialized, so we hold this stuff off until we're ready to draw
297329 laters. add (Meta . LaterType . BEFORE_REDRAW , () = > {
298- unowned string xdg_session_type = Environment . get_variable (" XDG_SESSION_TYPE" );
299- if (xdg_session_type == " x11" ) {
330+ if (! Meta . Util . is_wayland_compositor ()) {
300331 string [] args = {};
301332 unowned string [] _args = args;
302333 Gtk . init (ref _args);
@@ -518,6 +549,9 @@ namespace Gala {
518549 case " screenshot" :
519550 screenshot_screen. begin ();
520551 break ;
552+ case " interactive-screenshot" :
553+ launch_action (" interactive-screenshot-action" );
554+ break ;
521555 case " area-screenshot" :
522556 screenshot_area. begin ();
523557 break ;
0 commit comments