[vinagre] Added support to PeasActivatable extensions in VinagreWindow



commit d7802c86b62f86a970e323b30fb97ae7a8d95819
Author: Jonh Wendell <jwendell gnome org>
Date:   Tue Aug 24 15:18:58 2010 -0300

    Added support to PeasActivatable extensions in VinagreWindow

 vinagre/vinagre-window-private.h |    4 +++
 vinagre/vinagre-window.c         |   41 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+), 0 deletions(-)
---
diff --git a/vinagre/vinagre-window-private.h b/vinagre/vinagre-window-private.h
index cca409e..c74cb9e 100644
--- a/vinagre/vinagre-window-private.h
+++ b/vinagre/vinagre-window-private.h
@@ -21,6 +21,8 @@
 #ifndef __VINAGRE_WINDOW_PRIVATE_H__
 #define __VINAGRE_WINDOW_PRIVATE_H__
 
+#include <libpeas/peas-extension-set.h>
+
 #include "vinagre-window.h"
 #include "vinagre-notebook.h"
 
@@ -55,6 +57,8 @@ struct _VinagreWindowPrivate
   GtkWidget       *toolbar;
   GtkWidget       *menubar;
 
+  PeasExtensionSet *extensions;
+
   gint            width;
   gint            height;
   GdkWindowState  window_state;
diff --git a/vinagre/vinagre-window.c b/vinagre/vinagre-window.c
index 9f011d0..3945635 100644
--- a/vinagre/vinagre-window.c
+++ b/vinagre/vinagre-window.c
@@ -61,8 +61,15 @@ vinagre_window_dispose (GObject *object)
 {
   VinagreWindow *window = VINAGRE_WINDOW (object);
 
+  peas_engine_garbage_collect (PEAS_ENGINE (vinagre_plugins_engine_get_default ()));
+
   if (!window->priv->dispose_has_run)
     {
+      peas_extension_set_call (window->priv->extensions,
+			       "deactivate",
+			       window);
+
+      g_object_unref (window->priv->extensions);
       peas_engine_garbage_collect (PEAS_ENGINE (vinagre_plugins_engine_get_default ()));
       window->priv->dispose_has_run = TRUE;
     }
@@ -82,6 +89,8 @@ vinagre_window_dispose (GObject *object)
       window->priv->update_recents_menu_ui_id = 0;
     }
 
+  peas_engine_garbage_collect (PEAS_ENGINE (vinagre_plugins_engine_get_default ()));
+
   G_OBJECT_CLASS (vinagre_window_parent_class)->dispose (object);
 }
 
@@ -747,6 +756,24 @@ vinagre_window_check_first_run (VinagreWindow *window)
 }
 
 static void
+extension_added (PeasExtensionSet *extensions,
+		 PeasPluginInfo   *info,
+		 PeasExtension    *exten,
+		 gpointer          user_data)
+{
+  peas_extension_call (exten, "activate");
+}
+
+static void
+extension_removed (PeasExtensionSet *extensions,
+		   PeasPluginInfo   *info,
+		   PeasExtension    *exten,
+		   gpointer          user_data)
+{
+  peas_extension_call (exten, "deactivate");
+}
+
+static void
 vinagre_window_init (VinagreWindow *window)
 {
   GtkWidget *main_box;
@@ -800,6 +827,20 @@ vinagre_window_init (VinagreWindow *window)
                             window);
 #endif
 
+  window->priv->extensions = peas_extension_set_new (PEAS_ENGINE (vinagre_plugins_engine_get_default ()),
+						     PEAS_TYPE_ACTIVATABLE,
+						     "object", window,
+						     NULL);
+  g_signal_connect (window->priv->extensions,
+		    "extension-added",
+		    G_CALLBACK (extension_added),
+		    window);
+  g_signal_connect (window->priv->extensions,
+		    "extension-removed",
+		    G_CALLBACK (extension_removed),
+		    window);
+  peas_extension_set_call (window->priv->extensions, "activate");
+
   g_idle_add ((GSourceFunc) vinagre_window_check_first_run, window);
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]