summaryrefslogtreecommitdiff
path: root/plugins/trailsave/pluma-trail-save-plugin.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/trailsave/pluma-trail-save-plugin.c')
-rw-r--r--plugins/trailsave/pluma-trail-save-plugin.c139
1 files changed, 124 insertions, 15 deletions
diff --git a/plugins/trailsave/pluma-trail-save-plugin.c b/plugins/trailsave/pluma-trail-save-plugin.c
index dbc1621b..589a85c2 100644
--- a/plugins/trailsave/pluma-trail-save-plugin.c
+++ b/plugins/trailsave/pluma-trail-save-plugin.c
@@ -22,9 +22,35 @@
#include <config.h>
#endif
+#include <libpeas/peas-activatable.h>
+
+#include <pluma/pluma-window.h>
+#include <pluma/pluma-debug.h>
+
#include "pluma-trail-save-plugin.h"
-PLUMA_PLUGIN_REGISTER_TYPE(PlumaTrailSavePlugin, pluma_trail_save_plugin)
+#define PLUMA_TRAIL_SAVE_PLUGIN_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
+ PLUMA_TYPE_TRAIL_SAVE_PLUGIN, \
+ PlumaTrailSavePluginPrivate))
+
+static void peas_activatable_iface_init (PeasActivatableInterface *iface);
+
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (PlumaTrailSavePlugin,
+ pluma_trail_save_plugin,
+ PEAS_TYPE_EXTENSION_BASE,
+ 0,
+ G_IMPLEMENT_INTERFACE_DYNAMIC (PEAS_TYPE_ACTIVATABLE,
+ peas_activatable_iface_init))
+
+struct _PlumaTrailSavePluginPrivate
+{
+ GtkWidget *window;
+};
+
+enum {
+ PROP_0,
+ PROP_OBJECT
+};
static void
strip_trailing_spaces (GtkTextBuffer *text_buffer)
@@ -107,7 +133,7 @@ on_save (PlumaDocument *document,
const gchar *uri,
PlumaEncoding *encoding,
PlumaDocumentSaveFlags save_flags,
- PlumaPlugin *plugin)
+ PlumaTrailSavePlugin *plugin)
{
GtkTextBuffer *text_buffer = GTK_TEXT_BUFFER (document);
@@ -117,7 +143,7 @@ on_save (PlumaDocument *document,
static void
on_tab_added (PlumaWindow *window,
PlumaTab *tab,
- PlumaPlugin *plugin)
+ PlumaTrailSavePlugin *plugin)
{
PlumaDocument *document;
@@ -128,7 +154,7 @@ on_tab_added (PlumaWindow *window,
static void
on_tab_removed (PlumaWindow *window,
PlumaTab *tab,
- PlumaPlugin *plugin)
+ PlumaTrailSavePlugin *plugin)
{
PlumaDocument *document;
@@ -137,15 +163,19 @@ on_tab_removed (PlumaWindow *window,
}
static void
-impl_activate (PlumaPlugin *plugin,
- PlumaWindow *window)
+pluma_trail_save_plugin_activate (PeasActivatable *activatable)
{
+ PlumaTrailSavePlugin *plugin;
+ PlumaWindow *window;
GList *documents;
GList *documents_iter;
PlumaDocument *document;
pluma_debug (DEBUG_PLUGINS);
+ plugin = PLUMA_TRAIL_SAVE_PLUGIN (activatable);
+ window = PLUMA_WINDOW (plugin->priv->window);
+
g_signal_connect (window, "tab_added", G_CALLBACK (on_tab_added), plugin);
g_signal_connect (window, "tab_removed", G_CALLBACK (on_tab_removed), plugin);
@@ -163,15 +193,19 @@ impl_activate (PlumaPlugin *plugin,
}
static void
-impl_deactivate (PlumaPlugin *plugin,
- PlumaWindow *window)
+pluma_trail_save_plugin_deactivate (PeasActivatable *activatable)
{
+ PlumaTrailSavePlugin *plugin;
+ PlumaWindow *window;
GList *documents;
GList *documents_iter;
PlumaDocument *document;
pluma_debug (DEBUG_PLUGINS);
+ plugin = PLUMA_TRAIL_SAVE_PLUGIN (activatable);
+ window = PLUMA_WINDOW (plugin->priv->window);
+
g_signal_handlers_disconnect_by_data (window, plugin);
documents = pluma_window_get_documents (window);
@@ -191,24 +225,99 @@ static void
pluma_trail_save_plugin_init (PlumaTrailSavePlugin *plugin)
{
pluma_debug_message (DEBUG_PLUGINS, "PlumaTrailSavePlugin initializing");
+
+ plugin->priv = PLUMA_TRAIL_SAVE_PLUGIN_GET_PRIVATE (plugin);
+}
+
+static void
+pluma_trail_save_plugin_dispose (GObject *object)
+{
+ PlumaTrailSavePlugin *plugin = PLUMA_TRAIL_SAVE_PLUGIN (object);
+
+ pluma_debug_message (DEBUG_PLUGINS, "PlumaTrailSavePlugin disposing");
+
+ if (plugin->priv->window != NULL)
+ {
+ g_object_unref (plugin->priv->window);
+ plugin->priv->window = NULL;
+ }
+
+ G_OBJECT_CLASS (pluma_trail_save_plugin_parent_class)->dispose (object);
}
static void
-pluma_trail_save_plugin_finalize (GObject *object)
+pluma_trail_save_plugin_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
- pluma_debug_message (DEBUG_PLUGINS, "PlumaTrailSavePlugin finalizing");
+ PlumaTrailSavePlugin *plugin = PLUMA_TRAIL_SAVE_PLUGIN (object);
- G_OBJECT_CLASS (pluma_trail_save_plugin_parent_class)->finalize (object);
+ switch (prop_id)
+ {
+ case PROP_OBJECT:
+ plugin->priv->window = GTK_WIDGET (g_value_dup_object (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+pluma_trail_save_plugin_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ PlumaTrailSavePlugin *plugin = PLUMA_TRAIL_SAVE_PLUGIN (object);
+
+ switch (prop_id)
+ {
+ case PROP_OBJECT:
+ g_value_set_object (value, plugin->priv->window);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
}
static void
pluma_trail_save_plugin_class_init (PlumaTrailSavePluginClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- PlumaPluginClass *plugin_class = PLUMA_PLUGIN_CLASS (klass);
- object_class->finalize = pluma_trail_save_plugin_finalize;
+ object_class->dispose = pluma_trail_save_plugin_dispose;
+ object_class->set_property = pluma_trail_save_plugin_set_property;
+ object_class->get_property = pluma_trail_save_plugin_get_property;
+
+ g_object_class_override_property (object_class, PROP_OBJECT, "object");
+
+ g_type_class_add_private (object_class, sizeof (PlumaTrailSavePluginPrivate));
+}
+
+static void
+pluma_trail_save_plugin_class_finalize (PlumaTrailSavePluginClass *klass)
+{
+ /* dummy function - used by G_DEFINE_DYNAMIC_TYPE_EXTENDED */
+}
+
+static void
+peas_activatable_iface_init (PeasActivatableInterface *iface)
+{
+ iface->activate = pluma_trail_save_plugin_activate;
+ iface->deactivate = pluma_trail_save_plugin_deactivate;
+}
+
+G_MODULE_EXPORT void
+peas_register_types (PeasObjectModule *module)
+{
+ pluma_trail_save_plugin_register_type (G_TYPE_MODULE (module));
- plugin_class->activate = impl_activate;
- plugin_class->deactivate = impl_deactivate;
+ peas_object_module_register_extension_type (module,
+ PEAS_TYPE_ACTIVATABLE,
+ PLUMA_TYPE_TRAIL_SAVE_PLUGIN);
}