summaryrefslogtreecommitdiff
path: root/pluma/pluma-app.c
diff options
context:
space:
mode:
authormbkma <[email protected]>2021-02-10 12:02:25 +0100
committerraveit65 <[email protected]>2021-03-02 22:19:58 +0100
commitc0c513f3ef7e7ea432e799d8a5e10cfe94d38908 (patch)
treee4b7840617c282855884bd3fac3c1c1313cb68fa /pluma/pluma-app.c
parent814ae9fdeb8367d0f5b43a4691b32a514cf3e6e9 (diff)
downloadpluma-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.c53
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 ();
}
}