From 7f0adec46e06b8a9236dfe9fd3a64a3c8e2abb29 Mon Sep 17 00:00:00 2001 From: Robert Tari Date: Wed, 6 Dec 2023 09:39:11 +0100 Subject: data/org.ArcticaProject.arctica-greeter.gschema.xml: Store screen magnifier state --- data/org.ArcticaProject.arctica-greeter.gschema.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/data/org.ArcticaProject.arctica-greeter.gschema.xml b/data/org.ArcticaProject.arctica-greeter.gschema.xml index d4544bc..0af9d09 100644 --- a/data/org.ArcticaProject.arctica-greeter.gschema.xml +++ b/data/org.ArcticaProject.arctica-greeter.gschema.xml @@ -150,6 +150,10 @@ false Whether to enable the onscreen keyboard. + + false + Whether to enable the screen magnifier. + false Whether to use a high contrast theme. -- cgit v1.2.3 From 64e0a76e9cbae6320535f906931da0f539748b95 Mon Sep 17 00:00:00 2001 From: Robert Tari Date: Wed, 6 Dec 2023 09:41:26 +0100 Subject: Add magnifier toggling logic --- src/arctica-greeter.vala | 40 ++++++++++++++++++++++++++++++++++++++++ src/settings.vala | 1 + 2 files changed, 41 insertions(+) diff --git a/src/arctica-greeter.vala b/src/arctica-greeter.vala index 1f9bbfa..7e7fd47 100644 --- a/src/arctica-greeter.vala +++ b/src/arctica-greeter.vala @@ -1438,9 +1438,24 @@ public class DBusServer : Object private ArcticaGreeter pGreeter; private Pid nOrca = 0; private Pid nOnBoard = 0; + private Pid nMagnifier = 0; private Gtk.Socket pSocket = null; private bool high_contrast_osk = AGSettings.get_boolean(AGSettings.KEY_HIGH_CONTRAST); + private void onMagnifierClosed (Pid nPid, int nStatus) + { + nMagnifier = 0; + + try + { + this.pConnection.emit_signal (null, "/org/ayatana/greeter", "org.ayatana.greeter", "MagnifierClosed", null); + } + catch (Error pError) + { + error ("Panic: Could not send magnifier closed signal: %s", pError.message); + } + } + private void closePid (ref Pid nPid, int nMultiplier) { if (nPid > 0) @@ -1464,6 +1479,7 @@ public class DBusServer : Object { closePid (ref nOnBoard, -1); closePid (ref nOrca, 1); + closePid (ref nMagnifier, 1); } public DBusServer (DBusConnection pConnection, ArcticaGreeter pGreeter) @@ -1701,6 +1717,7 @@ public class DBusServer : Object else { closePid (ref nOrca, 1); + nOrca = 0; } } @@ -1713,4 +1730,27 @@ public class DBusServer : Object debug ("High-Contrast mode toggled (new state: %b), refreshing OSK, as well.", bActive); ToggleOnBoard (AGSettings.get_boolean (AGSettings.KEY_ONSCREEN_KEYBOARD)); } + + public void ToggleMagnifier (bool bActive) throws GLib.DBusError, GLib.IOError + { + AGSettings.set_boolean (AGSettings.KEY_MAGNIFIER, bActive); + + if (bActive) + { + try + { + Process.spawn_async (null, {"magnus"}, null, SpawnFlags.SEARCH_PATH | SpawnFlags.DO_NOT_REAP_CHILD, null, out nMagnifier); + GLib.ChildWatch.add (nMagnifier, onMagnifierClosed); + } + catch (Error pError) + { + warning ("Failed to run magnifier: %s", pError.message); + } + } + else + { + closePid (ref nMagnifier, 1); + nMagnifier = 0; + } + } } diff --git a/src/settings.vala b/src/settings.vala index 74e6e40..8447c0f 100644 --- a/src/settings.vala +++ b/src/settings.vala @@ -83,6 +83,7 @@ public class AGSettings : Object public const string KEY_SHUTDOWN_DIALOG_TIMEOUT = "shutdown-dialog-timeout"; public const string KEY_PREFERRED_SESSIONS = "preferred-sessions"; public const string KEY_GEOCLUE_AGENT = "geoclue-agent"; + public const string KEY_MAGNIFIER = "magnifier"; public static bool get_boolean (string key) { -- cgit v1.2.3