@@ -148,7 +148,38 @@ 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
160+ }
161+
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+ }
151181 }
182+ #endif
152183
153184 private void show_stage () {
154185 unowned Meta . Display display = get_display ();
@@ -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);
@@ -410,10 +441,12 @@ namespace Gala {
410441 private void launch_action (string action_key ) {
411442 try {
412443 var action = behavior_settings. get_string (action_key);
413- if (action != null && action != " " ) {
444+ if (action != null ) {
414445 Process . spawn_command_line_async (action);
415446 }
416- } catch (Error e) { warning (e. message); }
447+ } catch (Error e) {
448+ warning (e. message);
449+ }
417450 }
418451
419452 private void on_monitors_changed () {
@@ -516,6 +549,9 @@ namespace Gala {
516549 case " screenshot" :
517550 screenshot_screen. begin ();
518551 break ;
552+ case " interactive-screenshot" :
553+ launch_action (" interactive-screenshot-action" );
554+ break ;
519555 case " area-screenshot" :
520556 screenshot_area. begin ();
521557 break ;
@@ -1045,13 +1081,7 @@ namespace Gala {
10451081 current. @delete (Gtk . get_current_event_time ());
10461082 break ;
10471083 case ActionType . OPEN_LAUNCHER:
1048- try {
1049- Process . spawn_command_line_async (
1050- behavior_settings. get_string (" panel-main-menu-action" )
1051- );
1052- } catch (Error e) {
1053- warning (e. message);
1054- }
1084+ launch_action (" panel-main-menu-action" );
10551085 break ;
10561086 case ActionType . WINDOW_OVERVIEW:
10571087 if (window_overview == null ) {
@@ -1300,6 +1330,8 @@ namespace Gala {
13001330 case Meta . SizeChange . UNFULLSCREEN:
13011331 handle_fullscreen_window (window, which_change_local);
13021332 break ;
1333+ default:
1334+ break ;
13031335 }
13041336
13051337 size_change_completed (actor);
0 commit comments