diff options
-rw-r--r-- | data/org.ArcticaProject.arctica-greeter.gschema.xml | 4 | ||||
-rw-r--r-- | src/main-window.vala | 51 | ||||
-rw-r--r-- | src/settings.vala | 1 |
3 files changed, 36 insertions, 20 deletions
diff --git a/data/org.ArcticaProject.arctica-greeter.gschema.xml b/data/org.ArcticaProject.arctica-greeter.gschema.xml index b7991a4..ffee269 100644 --- a/data/org.ArcticaProject.arctica-greeter.gschema.xml +++ b/data/org.ArcticaProject.arctica-greeter.gschema.xml @@ -123,5 +123,9 @@ <default>false</default> <summary>Whether to activate numlock. This features requires the installation of numlockx.</summary> </key> + <key name="only-on-monitor" type="s"> + <default>'auto'</default> + <summary>Monitor on which to show the Login GUI</summary> + </key> </schema> </schemalist> diff --git a/src/main-window.vala b/src/main-window.vala index 3240bc1..df530e0 100644 --- a/src/main-window.vala +++ b/src/main-window.vala @@ -27,6 +27,8 @@ public class MainWindow : Gtk.Window private List<Monitor> monitors; private Monitor? primary_monitor; private Monitor active_monitor; + private string only_on_monitor; + private bool monitor_setting_ok; private Background background; private Gtk.Box login_box; private Gtk.Box hbox; @@ -154,6 +156,9 @@ public class MainWindow : Gtk.Window window_size_y = 0; primary_monitor = null; + only_on_monitor = AGSettings.get_string(AGSettings.KEY_ONLY_ON_MONITOR); + monitor_setting_ok = only_on_monitor == "auto"; + if (ArcticaGreeter.singleton.test_mode) { /* Simulate an 800x600 monitor to the left of a 640x480 monitor */ @@ -252,9 +257,13 @@ public class MainWindow : Gtk.Window if (monitor_is_unique_position (display, i)) { var greeter_monitor = new Monitor (geometry.x, geometry.y, geometry.width, geometry.height); + var plug_name = monitor.get_model(); monitors.append (greeter_monitor); - if (primary_monitor == null || primary == monitor) + if (plug_name == only_on_monitor) + monitor_setting_ok = true; + + if (plug_name == only_on_monitor || primary_monitor == null || primary == monitor) primary_monitor = greeter_monitor; } } @@ -291,30 +300,32 @@ public class MainWindow : Gtk.Window public override bool motion_notify_event (Gdk.EventMotion event) { - var x = (int) (event.x + 0.5); - var y = (int) (event.y + 0.5); - - /* Get motion event relative to this widget */ - if (event.window != get_window ()) + if (!monitor_setting_ok || only_on_monitor == "auto") { - int w_x, w_y; - get_window ().get_origin (out w_x, out w_y); - x -= w_x; - y -= w_y; - event.window.get_origin (out w_x, out w_y); - x += w_x; - y += w_y; - } + var x = (int) (event.x + 0.5); + var y = (int) (event.y + 0.5); - foreach (var m in monitors) - { - if (x >= m.x && x <= m.x + m.width && y >= m.y && y <= m.y + m.height) + /* Get motion event relative to this widget */ + if (event.window != get_window ()) { - move_to_monitor (m); - break; + int w_x, w_y; + get_window ().get_origin (out w_x, out w_y); + x -= w_x; + y -= w_y; + event.window.get_origin (out w_x, out w_y); + x += w_x; + y += w_y; } - } + foreach (var m in monitors) + { + if (x >= m.x && x <= m.x + m.width && y >= m.y && y <= m.y + m.height) + { + move_to_monitor (m); + break; + } + } + } return false; } diff --git a/src/settings.vala b/src/settings.vala index 0372721..701d5a1 100644 --- a/src/settings.vala +++ b/src/settings.vala @@ -44,6 +44,7 @@ public class AGSettings public const string KEY_GROUP_FILTER = "group-filter"; public const string KEY_IDLE_TIMEOUT = "idle-timeout"; public const string KEY_ACTIVATE_NUMLOCK = "activate-numlock"; + public const string KEY_ONLY_ON_MONITOR = "only-on-monitor"; public const string KEY_REMOTE_SERVICE_CONFIGURE_URI = "remote-service-configure-uri"; public const string KEY_TOGGLEBOX_FONT_FGCOLOR = "togglebox-font-fgcolor"; public const string KEY_TOGGLEBOX_BUTTON_BGCOLOR = "togglebox-button-bgcolor"; |