[geary/mjog/user-plugins: 7/26] Add UI to preferences window for managing optional plugins
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary/mjog/user-plugins: 7/26] Add UI to preferences window for managing optional plugins
- Date: Tue, 17 Mar 2020 08:24:49 +0000 (UTC)
commit c29078728402094220cc82ce390b68260a52e2ff
Author: Michael Gratton <mike vee net>
Date: Mon Mar 2 12:25:08 2020 +1100
Add UI to preferences window for managing optional plugins
meson.build | 1 +
src/client/application/application-client.vala | 3 +-
.../components/components-preferences-window.vala | 86 +++++++++++++++++++++-
src/client/meson.build | 1 +
4 files changed, 89 insertions(+), 2 deletions(-)
---
diff --git a/meson.build b/meson.build
index 43a46c1b..84fe0710 100644
--- a/meson.build
+++ b/meson.build
@@ -87,6 +87,7 @@ json_glib = dependency('json-glib-1.0', version: '>= 1.0')
libhandy = dependency('libhandy-0.0', version: '>= 0.0.10')
libmath = cc.find_library('m')
libpeas = dependency('libpeas-1.0', version: '>= 1.24.0')
+libpeas_gtk = dependency('libpeas-gtk-1.0', version: '>= 1.24.0')
libsecret = dependency('libsecret-1', version: '>= 0.11')
libsoup = dependency('libsoup-2.4', version: '>= 2.48')
libunwind_dep = dependency(
diff --git a/src/client/application/application-client.vala b/src/client/application/application-client.vala
index ff4e51c7..45472b49 100644
--- a/src/client/application/application-client.vala
+++ b/src/client/application/application-client.vala
@@ -632,7 +632,8 @@ public class Application.Client : Gtk.Application {
yield this.present();
Components.PreferencesWindow prefs = new Components.PreferencesWindow(
- get_active_main_window()
+ get_active_main_window(),
+ this.controller.plugins
);
prefs.show();
}
diff --git a/src/client/components/components-preferences-window.vala
b/src/client/components/components-preferences-window.vala
index 794f3650..e99e4ac7 100644
--- a/src/client/components/components-preferences-window.vala
+++ b/src/client/components/components-preferences-window.vala
@@ -28,13 +28,22 @@ public class Components.PreferencesWindow : Hdy.PreferencesWindow {
set { base.set_application(value); }
}
+ private Application.PluginManager plugins;
- public PreferencesWindow(Application.MainWindow parent) {
+
+ public PreferencesWindow(Application.MainWindow parent,
+ Application.PluginManager plugins) {
Object(
application: parent.application,
transient_for: parent
);
+ this.plugins = plugins;
+
+ add_general_pane();
+ add_plugin_pane();
+ }
+ private void add_general_pane() {
var autoselect = new Gtk.Switch();
autoselect.valign = CENTER;
@@ -104,6 +113,8 @@ public class Components.PreferencesWindow : Hdy.PreferencesWindow {
group.add(startup_notifications_row);
var page = new Hdy.PreferencesPage();
+ /// Translators: Preferences page title
+ page.title = _("Preferences");
page.propagate_natural_height = true;
page.propagate_natural_width = true;
page.add(group);
@@ -148,6 +159,79 @@ public class Components.PreferencesWindow : Hdy.PreferencesWindow {
this.delete_event.connect(on_delete);
}
+ private void add_plugin_pane() {
+ var group = new Hdy.PreferencesGroup();
+ /// Translators: Preferences group title
+ //group.title = _("Plugins");
+ /// Translators: Preferences group description
+ //group.description = _("Optional features for Geary");
+
+ Application.Client? application = this.application;
+ if (application != null) {
+ foreach (Peas.PluginInfo plugin in
+ this.plugins.get_optional_plugins()) {
+ group.add(new_plugin_row(plugin));
+ }
+ }
+
+ var page = new Hdy.PreferencesPage();
+ /// Translators: Preferences page title
+ page.title = _("Plugins");
+ page.propagate_natural_width = true;
+ page.add(group);
+ page.show_all();
+
+ add(page);
+ }
+
+ private Hdy.ActionRow new_plugin_row(Peas.PluginInfo plugin) {
+ var @switch = new Gtk.Switch();
+ @switch.active = plugin.is_loaded();
+ @switch.notify["active"].connect_after(
+ () => enable_plugin(plugin, switch)
+ );
+ @switch.valign = CENTER;
+
+ var row = new Hdy.ActionRow();
+ row.title = plugin.get_name();
+ row.subtitle = plugin.get_description();
+ row.activatable_widget = @switch;
+ row.add_action(@switch);
+
+ return row;
+ }
+
+ private void enable_plugin(Peas.PluginInfo plugin, Gtk.Switch @switch) {
+ if (@switch.active && !plugin.is_loaded()) {
+ bool loaded = false;
+ try {
+ loaded = this.plugins.load_optional(plugin);
+ } catch (GLib.Error err) {
+ warning(
+ "Plugin %s not able to be loaded: %s",
+ plugin.get_name(), err.message
+ );
+ }
+ if (!loaded) {
+ @switch.active = false;
+ }
+ } else if (!@switch.active && plugin.is_loaded()) {
+ bool unloaded = false;
+ try {
+ unloaded = this.plugins.unload_optional(plugin);
+ } catch (GLib.Error err) {
+ warning(
+ "Plugin %s not able to be loaded: %s",
+ plugin.get_name(), err.message
+ );
+ }
+ if (!unloaded) {
+ @switch.active = true;
+ }
+ }
+ }
+
+
private void on_close() {
close();
}
diff --git a/src/client/meson.build b/src/client/meson.build
index cf8d8a83..1960dd48 100644
--- a/src/client/meson.build
+++ b/src/client/meson.build
@@ -133,6 +133,7 @@ geary_client_dependencies = [
libhandy,
libmath,
libpeas,
+ libpeas_gtk,
libsecret,
libsoup,
libxml,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]