diff options
author | mbkma <[email protected]> | 2021-02-10 12:02:25 +0100 |
---|---|---|
committer | raveit65 <[email protected]> | 2021-03-02 22:19:58 +0100 |
commit | c0c513f3ef7e7ea432e799d8a5e10cfe94d38908 (patch) | |
tree | e4b7840617c282855884bd3fac3c1c1313cb68fa /pluma/pluma-app.c | |
parent | 814ae9fdeb8367d0f5b43a4691b32a514cf3e6e9 (diff) | |
download | pluma-c0c513f3ef7e7ea432e799d8a5e10cfe94d38908.tar.bz2 pluma-c0c513f3ef7e7ea432e799d8a5e10cfe94d38908.tar.xz |
Introduce PlumaWindowActivatable, PlumaAppActivatable, PlumaViewActivatable
These interfaces are for extensions that should be activated against a window/app/view.
Backport from
- https://gitlab.gnome.org/GNOME/gedit/-/commit/4fe7161560941ae1aa42165ff4d71121ad6f67b9
- https://gitlab.gnome.org/GNOME/gedit/-/commit/56a790a6851ebc98766cc4aca27cb32dde1b41bf
- https://gitlab.gnome.org/GNOME/gedit/-/commit/210ed41e48988646203fc94eba19ce94657821cd
In pluma-app.c we use gtk_main_quit instead of app object unref when last window closed.
Plugin engine finalization calls app_get_default which
reconstructs the app object. Before that was reasonably ok
because it didn't really do anything, but now the app does stuff
in 'init'.
See https://gitlab.gnome.org/GNOME/gedit/-/commit/90c9889a4a31fbebfa042c5d2c64bb2b05160b10
Diffstat (limited to 'pluma/pluma-app.c')
-rw-r--r-- | pluma/pluma-app.c | 53 |
1 files changed, 43 insertions, 10 deletions
diff --git a/pluma/pluma-app.c b/pluma/pluma-app.c index 60ce9bac..ef4e3fe4 100644 --- a/pluma/pluma-app.c +++ b/pluma/pluma-app.c @@ -36,8 +36,10 @@ #include <unistd.h> #include <glib/gi18n.h> +#include <libpeas/peas-extension-set.h> #include <gdk/gdk.h> #include <gdk/gdkx.h> + #include "pluma-app.h" #include "pluma-commands.h" #include "pluma-notebook.h" @@ -46,6 +48,8 @@ #include "pluma-enum-types.h" #include "pluma-dirs.h" #include "pluma-settings.h" +#include "pluma-app-activatable.h" +#include "pluma-plugins-engine.h" #define PLUMA_PAGE_SETUP_FILE "pluma-page-setup" #define PLUMA_PRINT_SETTINGS_FILE "pluma-print-settings" @@ -68,6 +72,8 @@ struct _PlumaAppPrivate GtkPrintSettings *print_settings; GSettings *window_settings; + + PeasExtensionSet *extensions; }; G_DEFINE_TYPE_WITH_PRIVATE (PlumaApp, pluma_app, G_TYPE_OBJECT) @@ -93,6 +99,7 @@ pluma_app_dispose (GObject *object) PlumaApp *app = PLUMA_APP (object); g_clear_object (&app->priv->window_settings); + g_clear_object (&app->priv->extensions); G_OBJECT_CLASS (pluma_app_parent_class)->dispose (object); } @@ -338,6 +345,25 @@ save_print_settings (PlumaApp *app) } static void +extension_added (PeasExtensionSet *extensions, + PeasPluginInfo *info, + PeasExtension *exten, + PlumaApp *app) +{ + peas_extension_call (exten, "activate"); +} + +static void +extension_removed (PeasExtensionSet *extensions, + PeasPluginInfo *info, + PeasExtension *exten, + PlumaApp *app) +{ + peas_extension_call (exten, "deactivate"); +} + + +static void pluma_app_init (PlumaApp *app) { PlumaSettings *settings; @@ -352,13 +378,23 @@ pluma_app_init (PlumaApp *app) /* initial lockdown state */ app->priv->lockdown = pluma_settings_get_lockdown (settings); -} -static void -app_weak_notify (gpointer data, - GObject *where_the_app_was) -{ - gtk_main_quit (); + app->priv->extensions = peas_extension_set_new (PEAS_ENGINE (pluma_plugins_engine_get_default ()), + PLUMA_TYPE_APP_ACTIVATABLE, + "app", app, + NULL); + + g_signal_connect (app->priv->extensions, + "extension-added", + G_CALLBACK (extension_added), + app); + + g_signal_connect (app->priv->extensions, + "extension-removed", + G_CALLBACK (extension_removed), + app); + + peas_extension_set_call (app->priv->extensions, "activate"); } /** @@ -381,9 +417,6 @@ pluma_app_get_default (void) g_object_add_weak_pointer (G_OBJECT (app), (gpointer) &app); - g_object_weak_ref (G_OBJECT (app), - app_weak_notify, - NULL); return app; } @@ -460,7 +493,7 @@ window_destroy (PlumaWindow *window, save_page_setup (app); save_print_settings (app); - g_object_unref (app); + gtk_main_quit (); } } |