gala/daemon-gtk3/BackgroundMenu.vala
2024-07-05 11:14:35 -07:00

58 lines
2.1 KiB
Vala

/*
* Copyright 2024 elementary, Inc. (https://elementary.io)
* SPDX-License-Identifier: GPL-3.0-or-later
*/
public class Gala.Daemon.BackgroundMenu : Gtk.Menu {
public const string ACTION_GROUP_PREFIX = "background-menu";
public const string ACTION_PREFIX = ACTION_GROUP_PREFIX + ".";
construct {
var change_wallpaper = new Gtk.MenuItem.with_label (_("Change Wallpaper…")) {
action_name = ACTION_PREFIX + "launch-uri",
action_target = new Variant.string ("settings://desktop/appearance/wallpaper")
};
var display_settings = new Gtk.MenuItem.with_label (_("Display Settings…")) {
action_name = ACTION_PREFIX + "launch-uri",
action_target = new Variant.string ("settings://display")
};
var system_settings = new Gtk.MenuItem.with_label (_("System Settings…")) {
action_name = ACTION_PREFIX + "launch-uri",
action_target = new Variant.string ("settings://")
};
append (change_wallpaper);
append (display_settings);
append (new Gtk.SeparatorMenuItem ());
append (system_settings);
show_all ();
var launch_action = new SimpleAction ("launch-uri", VariantType.STRING);
launch_action.activate.connect (action_launch);
var action_group = new SimpleActionGroup ();
action_group.add_action (launch_action);
insert_action_group (ACTION_GROUP_PREFIX, action_group);
}
private void action_launch (SimpleAction action, Variant? variant) {
try {
AppInfo.launch_default_for_uri (variant.get_string (), null);
} catch (Error e) {
var message_dialog = new Granite.MessageDialog.with_image_from_icon_name (
_("Failed to open System Settings"),
_("A handler for the “settings://” URI scheme must be installed."),
"dialog-error",
Gtk.ButtonsType.CLOSE
);
message_dialog.show_error_details (e.message);
message_dialog.present ();
message_dialog.response.connect (message_dialog.destroy);
}
}
}