-
-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathDisplaySettings.vala
More file actions
51 lines (44 loc) · 1.8 KB
/
DisplaySettings.vala
File metadata and controls
51 lines (44 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*
* Copyright 2024 elementary, Inc. (https://elementary.io)
* SPDX-License-Identifier: GPL-3.0-or-later
*/
public class SettingsDaemon.Backends.DisplaySettings : GLib.Object {
private string monitors_path;
private FileMonitor? file_monitor;
construct {
monitors_path = Path.build_filename (GLib.Environment.get_user_config_dir (), "monitors.xml");
sync_monitors_to_greeter ();
var file = File.new_for_path (monitors_path);
try {
file_monitor = file.monitor (GLib.FileMonitorFlags.NONE);
file_monitor.changed.connect ((file, other_file, type) => {
if (type == FileMonitorEvent.CHANGES_DONE_HINT) {
sync_monitors_to_greeter ();
}
});
} catch (Error e) {
critical ("Couldn't obtain FileMonitor for %s", monitors_path);
file_monitor = null;
}
}
private void sync_monitors_to_greeter () {
if (!FileUtils.test (monitors_path, EXISTS)) {
critical ("%s not found", monitors_path);
return;
}
var source = File.new_for_path (monitors_path);
var greeter_data_dir = Environment.get_variable ("XDG_GREETER_DATA_DIR") ?? Path.build_filename ("/var/lib/lightdm-data", Environment.get_user_name ());
var folder = File.new_for_path (greeter_data_dir);
var dest = folder.get_child ("monitors.xml");
try {
if (!folder.query_exists ()) {
folder.make_directory_with_parents ();
}
source.copy (dest, OVERWRITE | ALL_METADATA);
// Ensure monitors.xml is readable by greeter user (owner rw, others r)
FileUtils.chmod (dest.get_path (), 0604);
} catch (Error e) {
warning (e.message);
}
}
}