From aba13e151731307197178940b4f7eb0725703126 Mon Sep 17 00:00:00 2001 From: Kostoski Stefan Date: Wed, 4 Oct 2023 13:17:46 +0200 Subject: [PATCH] Add show-icon setting for keyboard-layout applet --- .../keyboard-layout/KeyboardLayoutApplet.vala | 80 +++++++++++++++---- ....solus-project.keyboard-layout.gschema.xml | 8 ++ src/panel/applets/keyboard-layout/meson.build | 29 +++++++ .../keyboard-layout/plugin.gresource.xml | 7 ++ src/panel/applets/keyboard-layout/settings.ui | 38 +++++++++ 5 files changed, 146 insertions(+), 16 deletions(-) create mode 100644 src/panel/applets/keyboard-layout/com.solus-project.keyboard-layout.gschema.xml create mode 100644 src/panel/applets/keyboard-layout/plugin.gresource.xml create mode 100644 src/panel/applets/keyboard-layout/settings.ui diff --git a/src/panel/applets/keyboard-layout/KeyboardLayoutApplet.vala b/src/panel/applets/keyboard-layout/KeyboardLayoutApplet.vala index 325331e7d..7927666e8 100644 --- a/src/panel/applets/keyboard-layout/KeyboardLayoutApplet.vala +++ b/src/panel/applets/keyboard-layout/KeyboardLayoutApplet.vala @@ -11,7 +11,7 @@ public class KeyboardLayoutPlugin : Budgie.Plugin, Peas.ExtensionBase { public Budgie.Applet get_panel_widget(string uuid) { - return new KeyboardLayoutApplet(); + return new KeyboardLayoutApplet(uuid); } } @@ -210,7 +210,7 @@ public class KeyboardLayoutApplet : Budgie.Applet { private Gtk.Image img; /* Tracking input-source settings */ - private Settings? settings; + private Settings? input_source_settings; /* Keyboard tracking */ Array sources; @@ -228,7 +228,19 @@ public class KeyboardLayoutApplet : Budgie.Applet { /* ibus interfacing */ private AppletIBusManager? ibus_manager = null; - public KeyboardLayoutApplet() { + /* User settings */ + private Settings user_settings; + public string uuid { public set ; public get; } + + public KeyboardLayoutApplet(string uuid) { + Object(uuid: uuid); + + settings_schema = "com.solus-project.keyboard-layout"; + settings_prefix = "/com/solus-project/budgie-panel/instance/keyboard-layout"; + + user_settings = get_applet_settings(uuid); + user_settings.changed.connect(on_settings_changed); + /* Graphical stuff */ widget = new Gtk.EventBox(); @@ -264,7 +276,7 @@ public class KeyboardLayoutApplet : Budgie.Applet { layout.pack_start(label_stack, false, false, 0); /* Popover menu magicks */ - popover = new Budgie.Popover(img_wrap); + popover = new Budgie.Popover(layout); popover.get_style_context().add_class("user-menu"); listbox = new Gtk.ListBox(); listbox.set_can_focus(false); @@ -275,7 +287,7 @@ public class KeyboardLayoutApplet : Budgie.Applet { /* Settings/init */ xkb = new Gnome.XkbInfo(); - settings = new Settings("org.gnome.desktop.input-sources"); + input_source_settings = new Settings("org.gnome.desktop.input-sources"); /* Hook up the ibus manager */ this.ibus_manager = new AppletIBusManager(); @@ -285,17 +297,23 @@ public class KeyboardLayoutApplet : Budgie.Applet { /* Go show up */ show_all(); + + on_settings_changed("show-icon"); } public override void panel_position_changed(Budgie.PanelPosition position) { Gtk.Orientation orient = Gtk.Orientation.HORIZONTAL; - int margin = 4; if (position == Budgie.PanelPosition.LEFT || position == Budgie.PanelPosition.RIGHT) { orient = Gtk.Orientation.VERTICAL; - margin = 0; + img.set_margin_end(5); + label_stack.set_margin_start(2); + } + else { + img.set_margin_end(0); + label_stack.set_margin_start(4); } - img.set_margin_end(margin); this.layout.set_orientation(orient); + on_settings_changed("show-icon"); } /** @@ -303,7 +321,7 @@ public class KeyboardLayoutApplet : Budgie.Applet { * or we explicitly find it won't work */ private void on_ibus_ready() { - settings.changed.connect(on_settings_changed); + input_source_settings.changed.connect(on_settings_changed); /* Forcibly init ourselves */ on_settings_changed("sources"); @@ -317,7 +335,7 @@ public class KeyboardLayoutApplet : Budgie.Applet { var btn = item as InputSourceMenuItem; uint idx = btn.idx; - this.settings.set_uint("current", idx); + this.input_source_settings.set_uint("current", idx); popover.hide(); } @@ -356,10 +374,19 @@ public class KeyboardLayoutApplet : Budgie.Applet { } private void on_settings_changed(string key) { - if (key == "sources") { - update_sources(); - } else if (key == "current") { - update_current(); + switch (key) + { + case "sources": + update_sources(); + break; + case "current": + update_current(); + break; + case "show-icon": + img_wrap.set_visible(user_settings.get_boolean(key)); + break; + default: + break; } } @@ -373,7 +400,7 @@ public class KeyboardLayoutApplet : Budgie.Applet { sources = null; sources = new Array(); - var val = settings.get_value("sources"); + var val = input_source_settings.get_value("sources"); for (size_t i = 0; i < val.n_children(); i++) { InputSource? source = null; string? id = null; @@ -450,7 +477,7 @@ public class KeyboardLayoutApplet : Budgie.Applet { * Update our knowledge of the currently selected keyboard layout */ private void update_current() { - uint id = settings.get_uint("current"); + uint id = input_source_settings.get_uint("current"); /* Safety: Check we have this guy :] */ Gtk.Widget? child = label_stack.get_child_by_name(id.to_string()); if (child == null) { @@ -475,6 +502,27 @@ public class KeyboardLayoutApplet : Budgie.Applet { this.manager = manager; manager.register_popover(widget, popover); } + + public override Gtk.Widget? get_settings_ui() { + return new KeyboardLayoutSettings(get_applet_settings(uuid)); + } + + public override bool supports_settings() { + return true; + } +} + +[GtkTemplate (ui="/com/solus-project/keyboard-layout/settings.ui")] +public class KeyboardLayoutSettings : Gtk.Grid { + [GtkChild] + private unowned Gtk.Switch? switch_icon; + + private Settings? settings; + + public KeyboardLayoutSettings(Settings? settings) { + this.settings = settings; + settings.bind("show-icon", switch_icon, "active", SettingsBindFlags.DEFAULT); + } } [ModuleInit] diff --git a/src/panel/applets/keyboard-layout/com.solus-project.keyboard-layout.gschema.xml b/src/panel/applets/keyboard-layout/com.solus-project.keyboard-layout.gschema.xml new file mode 100644 index 000000000..a78852f42 --- /dev/null +++ b/src/panel/applets/keyboard-layout/com.solus-project.keyboard-layout.gschema.xml @@ -0,0 +1,8 @@ + + + + + true + + + diff --git a/src/panel/applets/keyboard-layout/meson.build b/src/panel/applets/keyboard-layout/meson.build index 761359a18..db7945aac 100644 --- a/src/panel/applets/keyboard-layout/meson.build +++ b/src/panel/applets/keyboard-layout/meson.build @@ -9,6 +9,24 @@ custom_target('plugin-file-keyboardlayout', install : true, install_dir : applet_keyboardlayout_dir) +gresource = join_paths(meson.current_source_dir(), 'plugin.gresource.xml') + +# Compile the assets into the binary +applet_keyboardlayout_resources = gnome.compile_resources( + 'keyboardlayout-applet-resources', + gresource, + source_dir: meson.current_source_dir(), + c_name: 'budgie_keyboardlayout', +) + +lib_applet_keyboardlayout_resources = static_library( + 'keyboardlayout-applet-resources', + applet_keyboardlayout_resources, + dependencies: [ dep_glib ], + install: false, + c_args: ['-Wno-overlength-strings'], # gresource generates overlength strings... +) + applet_keyboardlayout_sources = [ 'KeyboardLayoutApplet.vala', ] @@ -26,12 +44,18 @@ shared_library( 'keyboardlayoutapplet', applet_keyboardlayout_sources, dependencies: applet_keyboardlayout_deps, + link_whole: [ + lib_applet_keyboardlayout_resources, + ], vala_args: [ '--pkg', 'libpeas-1.0', '--pkg', 'gtk+-3.0', '--pkg', 'ibus-1.0', '--pkg', 'gnome-desktop-3.0', '--vapidir', join_paths(meson.source_root(), 'vapi'), + # Make gresource work + '--target-glib=2.38', + '--gresources=' + gresource, ], c_args: [ '-DGNOME_DESKTOP_USE_UNSTABLE_API', @@ -39,3 +63,8 @@ shared_library( install: true, install_dir: applet_keyboardlayout_dir, ) + +install_data( + 'com.solus-project.keyboard-layout.gschema.xml', + install_dir: join_paths(datadir, 'glib-2.0', 'schemas'), +) diff --git a/src/panel/applets/keyboard-layout/plugin.gresource.xml b/src/panel/applets/keyboard-layout/plugin.gresource.xml new file mode 100644 index 000000000..43fb89a92 --- /dev/null +++ b/src/panel/applets/keyboard-layout/plugin.gresource.xml @@ -0,0 +1,7 @@ + + + + + settings.ui + + diff --git a/src/panel/applets/keyboard-layout/settings.ui b/src/panel/applets/keyboard-layout/settings.ui new file mode 100644 index 000000000..08d3077cc --- /dev/null +++ b/src/panel/applets/keyboard-layout/settings.ui @@ -0,0 +1,38 @@ + + + + +