aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/org.ArcticaProject.arctica-greeter.gschema.xml8
-rw-r--r--src/arctica-greeter.vala66
-rw-r--r--src/settings.vala1
3 files changed, 75 insertions, 0 deletions
diff --git a/data/org.ArcticaProject.arctica-greeter.gschema.xml b/data/org.ArcticaProject.arctica-greeter.gschema.xml
index e42c606..2546206 100644
--- a/data/org.ArcticaProject.arctica-greeter.gschema.xml
+++ b/data/org.ArcticaProject.arctica-greeter.gschema.xml
@@ -117,6 +117,14 @@
<default>'Noto Sans 11'</default>
<summary>Font to use.</summary>
</key>
+ <key name="window-manager" type="s">
+ <choices>
+ <choice value='none'/>
+ <choice value='metacity'/>
+ </choices>
+ <default>'metacity'</default>
+ <summary>If at all and if yes, which window manager to use.</summary>
+ </key>
<key name="xft-antialias" type="b">
<default>true</default>
<summary>Whether to antialias Xft fonts.</summary>
diff --git a/src/arctica-greeter.vala b/src/arctica-greeter.vala
index e7a049d..119f3af 100644
--- a/src/arctica-greeter.vala
+++ b/src/arctica-greeter.vala
@@ -1278,6 +1278,7 @@ public class ArcticaGreeter : Object
Pid atspi_pid = 0;
Pid nmapplet_pid = 0;
+ Pid windowmanager_pid = 0;
if (!do_test_mode)
{
@@ -1421,6 +1422,55 @@ public class ArcticaGreeter : Object
activate_upower();
+ string wm = AGSettings.get_string (AGSettings.KEY_WINDOW_MANAGER);
+ if (wm == "metacity")
+ {
+ try
+ {
+ string[] argv;
+
+ Shell.parse_argv (wm, out argv);
+ Process.spawn_async (null,
+ argv,
+ null,
+ SpawnFlags.SEARCH_PATH,
+ null,
+ out windowmanager_pid);
+ debug ("Launched '%s' WM. PID: %d", wm, windowmanager_pid);
+ }
+ catch (Error e)
+ {
+ warning ("Error starting the '%s' Window Manager: %s", wm, e.message);
+ }
+
+ Timeout.add (50, () =>
+ {
+ try
+ {
+ string[] argv;
+ Pid wm_message_pid = 0;
+
+ Shell.parse_argv ("%s-message disable-keybindings".printf(wm), out argv);
+
+ Process.spawn_sync (null,
+ argv,
+ null,
+ SpawnFlags.SEARCH_PATH,
+ null,
+ null,
+ null,
+ null);
+ debug ("Launched '%s-message disable-keybindings' command", wm);
+ return false;
+ }
+ catch (Error e)
+ {
+ warning ("Error during '%s-message disable-keybindings' command call: %s", wm, e.message);
+ return true;
+ }
+ });
+ }
+
greeter.greeter_ready.connect (() => {
debug ("Showing greeter");
greeter.show ();
@@ -1514,6 +1564,22 @@ public class ArcticaGreeter : Object
debug ("GeoClue-2.0 agent terminated with signal %d", Process.term_sig (status));
geoclueagent_pid = 0;
}
+
+ if (windowmanager_pid != 0)
+ {
+#if VALA_0_40
+ Posix.kill (windowmanager_pid, Posix.Signal.TERM);
+#else
+ Posix.kill (windowmanager_pid, Posix.SIGTERM);
+#endif
+ int status;
+ Posix.waitpid (windowmanager_pid, out status, 0);
+ if (Process.if_exited (status))
+ debug ("Marco Window Manager exited with return value %d", Process.exit_status (status));
+ else
+ debug ("Marco Window Manager terminated with signal %d", Process.term_sig (status));
+ windowmanager_pid = 0;
+ }
}
gsettings_mate_desktop_interface.set_int ("window-scaling-factor", wsf_orig);
diff --git a/src/settings.vala b/src/settings.vala
index 6bdfe5d..bb95c9f 100644
--- a/src/settings.vala
+++ b/src/settings.vala
@@ -43,6 +43,7 @@ public class AGSettings : Object
public const string KEY_CURSOR_THEME_NAME = "cursor-theme-name";
public const string KEY_CURSOR_THEME_SIZE = "cursor-theme-size";
public const string KEY_FONT_NAME = "font-name";
+ public const string KEY_WINDOW_MANAGER = "window-manager";
public const string KEY_XFT_ANTIALIAS = "xft-antialias";
public const string KEY_XFT_DPI = "xft-dpi";
public const string KEY_XFT_HINTSTYLE = "xft-hintstyle";