[libpeas] Add PeasPluginInfo:Hidden



commit d0ea5001e61e098c08bbc9fc891ef468f2ee0b24
Author: Garrett Regier <alias301 gmail com>
Date:   Thu Feb 17 20:11:22 2011 -0800

    Add PeasPluginInfo:Hidden
    
    This allows plugins be be hidden even when builtin
    plugins are being shown in the plugin manager.

 libpeas-gtk/peas-gtk-plugin-manager-store.c |    7 ++++-
 libpeas/peas-plugin-info-priv.h             |    1 +
 libpeas/peas-plugin-info.c                  |   31 +++++++++++++++++++++++++++
 libpeas/peas-plugin-info.h                  |    1 +
 tests/libpeas-gtk/plugin-manager-store.c    |   22 +++++++++++++++---
 tests/libpeas-gtk/plugins/Makefile.am       |    1 +
 tests/libpeas-gtk/plugins/hidden.plugin     |    8 +++++++
 tests/libpeas-gtk/testing/testing.c         |   19 ++++++++++------
 tests/libpeas-gtk/testing/testing.h         |    2 +-
 9 files changed, 78 insertions(+), 14 deletions(-)
---
diff --git a/libpeas-gtk/peas-gtk-plugin-manager-store.c b/libpeas-gtk/peas-gtk-plugin-manager-store.c
index 025f5a6..9f74570 100644
--- a/libpeas-gtk/peas-gtk-plugin-manager-store.c
+++ b/libpeas-gtk/peas-gtk-plugin-manager-store.c
@@ -356,8 +356,11 @@ peas_gtk_plugin_manager_store_reload (PeasGtkPluginManagerStore *store)
 
       info = PEAS_PLUGIN_INFO (plugins->data);
 
-      gtk_list_store_append (list_store, &iter);
-      update_plugin (store, &iter, info);
+      if (!peas_plugin_info_is_hidden (info))
+        {
+          gtk_list_store_append (list_store, &iter);
+          update_plugin (store, &iter, info);
+        }
 
       plugins = plugins->next;
     }
diff --git a/libpeas/peas-plugin-info-priv.h b/libpeas/peas-plugin-info-priv.h
index eca5ce8..610a83c 100644
--- a/libpeas/peas-plugin-info-priv.h
+++ b/libpeas/peas-plugin-info-priv.h
@@ -55,6 +55,7 @@ struct _PeasPluginInfo {
   gint available : 1;
 
   guint builtin : 1;
+  guint hidden : 1;
 };
 
 PeasPluginInfo *_peas_plugin_info_new   (const gchar    *filename,
diff --git a/libpeas/peas-plugin-info.c b/libpeas/peas-plugin-info.c
index 3b59a62..e06941e 100644
--- a/libpeas/peas-plugin-info.c
+++ b/libpeas/peas-plugin-info.c
@@ -253,6 +253,13 @@ _peas_plugin_info_new (const gchar *filename,
   else
     info->builtin = b;
 
+  /* Get Hidden */
+  b = g_key_file_get_boolean (plugin_file, "Plugin", "Hidden", &error);
+  if (error != NULL)
+    g_clear_error (&error);
+  else
+    info->hidden = b;
+
   g_key_file_free (plugin_file);
 
   info->module_dir = g_strdup (module_dir);
@@ -343,6 +350,30 @@ peas_plugin_info_is_builtin (const PeasPluginInfo *info)
 }
 
 /**
+ * peas_plugin_info_is_hidden:
+ * @info: A #PeasPluginInfo.
+ *
+ * Check if the plugin is a hidden plugin.
+ *
+ * A hidden plugin is a plugin which cannot be seen by a
+ * user through a plugin manager (like #PeasGtkPluginManager). Loading and
+ * unloading such plugins is the responsibility of the application alone or
+ * through plugins that depend on them.
+ *
+ * The relevant key in the plugin info file is "Hidden".
+ *
+ * Returns: %TRUE if the plugin is a hidden plugin, %FALSE
+ * if not.
+ **/
+gboolean
+peas_plugin_info_is_hidden (const PeasPluginInfo *info)
+{
+  g_return_val_if_fail (info != NULL, FALSE);
+
+  return info->hidden;
+}
+
+/**
  * peas_plugin_info_get_module_name:
  * @info: A #PeasPluginInfo.
  *
diff --git a/libpeas/peas-plugin-info.h b/libpeas/peas-plugin-info.h
index 58bc78b..d48778e 100644
--- a/libpeas/peas-plugin-info.h
+++ b/libpeas/peas-plugin-info.h
@@ -72,6 +72,7 @@ gboolean      peas_plugin_info_is_loaded        (const PeasPluginInfo *info);
 gboolean      peas_plugin_info_is_available     (const PeasPluginInfo *info,
                                                  GError               **error);
 gboolean      peas_plugin_info_is_builtin       (const PeasPluginInfo *info);
+gboolean      peas_plugin_info_is_hidden        (const PeasPluginInfo *info);
 
 const gchar  *peas_plugin_info_get_module_name  (const PeasPluginInfo *info);
 const gchar  *peas_plugin_info_get_module_dir   (const PeasPluginInfo *info);
diff --git a/tests/libpeas-gtk/plugin-manager-store.c b/tests/libpeas-gtk/plugin-manager-store.c
index db70688..7c32164 100644
--- a/tests/libpeas-gtk/plugin-manager-store.c
+++ b/tests/libpeas-gtk/plugin-manager-store.c
@@ -175,7 +175,7 @@ verify_model (TestFixture    *fixture,
   gboolean model_can_enable, model_icon_visible, model_info_sensitive;
   gchar *model_icon_name;
 
-  testing_get_iter_for_plugin_info (fixture->view, info, &iter);
+  g_assert (testing_get_iter_for_plugin_info (fixture->view, info, &iter));
 
   gtk_tree_model_get (fixture->model, &iter,
     PEAS_GTK_PLUGIN_MANAGER_STORE_CAN_ENABLE_COLUMN,     &model_can_enable,
@@ -241,7 +241,7 @@ test_gtk_plugin_manager_store_verify_info (TestFixture *fixture)
 
   /* Has description */
   info = peas_engine_get_plugin_info (fixture->engine, "configurable");
-  testing_get_iter_for_plugin_info (fixture->view, info, &iter);
+  g_assert (testing_get_iter_for_plugin_info (fixture->view, info, &iter));
 
   gtk_tree_model_get (fixture->model, &iter,
     PEAS_GTK_PLUGIN_MANAGER_STORE_INFO_COLUMN,  &model_info,
@@ -252,7 +252,7 @@ test_gtk_plugin_manager_store_verify_info (TestFixture *fixture)
 
   /* Does not have description */
   info = peas_engine_get_plugin_info (fixture->engine, "min-info");
-  testing_get_iter_for_plugin_info (fixture->view, info, &iter);
+  g_assert (testing_get_iter_for_plugin_info (fixture->view, info, &iter));
 
   gtk_tree_model_get (fixture->model, &iter,
     PEAS_GTK_PLUGIN_MANAGER_STORE_INFO_COLUMN,  &model_info,
@@ -273,7 +273,7 @@ verify_icon (TestFixture *fixture,
   gchar *model_icon_name;
 
   info = peas_engine_get_plugin_info (fixture->engine, plugin_name);
-  testing_get_iter_for_plugin_info (fixture->view, info, &iter);
+  g_assert (testing_get_iter_for_plugin_info (fixture->view, info, &iter));
 
   gtk_tree_model_get (fixture->model, &iter,
     PEAS_GTK_PLUGIN_MANAGER_STORE_ICON_PIXBUF_COLUMN, &model_icon_pixbuf,
@@ -318,6 +318,18 @@ test_gtk_plugin_manager_store_invalid_stock_icon (TestFixture *fixture)
   verify_icon (fixture, "invalid-stock-icon", FALSE, "libpeas-plugin");
 }
 
+static void
+test_gtk_plugin_manager_store_hidden (TestFixture *fixture)
+{
+  PeasPluginInfo *info;
+
+  info = peas_engine_get_plugin_info (fixture->engine, "hidden");
+
+  g_assert (peas_plugin_info_is_hidden (info));
+
+  g_assert (!testing_get_iter_for_plugin_info (fixture->view, info, NULL));
+}
+
 int
 main (int    argc,
       char **argv)
@@ -346,6 +358,8 @@ main (int    argc,
   TEST ("invalid-custom-icon", invalid_custom_icon);
   TEST ("invalid-stock-icon", invalid_stock_icon);
 
+  TEST ("hidden", hidden);
+
 #undef TEST
 
   return g_test_run ();
diff --git a/tests/libpeas-gtk/plugins/Makefile.am b/tests/libpeas-gtk/plugins/Makefile.am
index c9756a8..6ef4c35 100644
--- a/tests/libpeas-gtk/plugins/Makefile.am
+++ b/tests/libpeas-gtk/plugins/Makefile.am
@@ -3,6 +3,7 @@ include $(top_srcdir)/tests/Makefile.plugin
 SUBDIRS = builtin-configurable configurable valid-custom-icon
 
 noinst_PLUGIN = \
+	hidden.plugin			\
 	invalid-custom-icon.plugin	\
 	invalid-stock-icon.plugin	\
 	valid-stock-icon.plugin
diff --git a/tests/libpeas-gtk/plugins/hidden.plugin b/tests/libpeas-gtk/plugins/hidden.plugin
new file mode 100644
index 0000000..4c3f2b4
--- /dev/null
+++ b/tests/libpeas-gtk/plugins/hidden.plugin
@@ -0,0 +1,8 @@
+[Plugin]
+Module=hidden
+IAge=2
+Name=Hidden
+Description=A plugin that is hidden.
+Authors=Garrett Regier
+Copyright=Copyright © 2011 Garrett Regier
+Hidden=true
diff --git a/tests/libpeas-gtk/testing/testing.c b/tests/libpeas-gtk/testing/testing.c
index 718988c..6f51ca2 100644
--- a/tests/libpeas-gtk/testing/testing.c
+++ b/tests/libpeas-gtk/testing/testing.c
@@ -167,26 +167,31 @@ testing_get_plugin_info_for_iter (PeasGtkPluginManagerView *view,
   return info;
 }
 
-void
+gboolean
 testing_get_iter_for_plugin_info (PeasGtkPluginManagerView *view,
                                   PeasPluginInfo           *info,
                                   GtkTreeIter              *iter)
 {
   GtkTreeModel *model;
-  gboolean found = FALSE;
+  GtkTreeIter pos_iter;
 
   model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
 
-  g_assert (gtk_tree_model_get_iter_first (model, iter));
+  g_assert (gtk_tree_model_get_iter_first (model, &pos_iter));
 
   do
     {
-      if (testing_get_plugin_info_for_iter (view, iter) == info)
-        found = TRUE;
+      if (testing_get_plugin_info_for_iter (view, &pos_iter) == info)
+        {
+          if (iter != NULL)
+            *iter = pos_iter;
+
+          return TRUE;
+        }
     }
-  while (!found && gtk_tree_model_iter_next (model, iter));
+  while (gtk_tree_model_iter_next (model, &pos_iter));
 
-  g_assert (found);
+  return FALSE;
 }
 
 static gboolean
diff --git a/tests/libpeas-gtk/testing/testing.h b/tests/libpeas-gtk/testing/testing.h
index f5d9d0c..4f20165 100644
--- a/tests/libpeas-gtk/testing/testing.h
+++ b/tests/libpeas-gtk/testing/testing.h
@@ -32,7 +32,7 @@ void            testing_engine_free              (PeasEngine *engine);
 
 PeasPluginInfo *testing_get_plugin_info_for_iter (PeasGtkPluginManagerView *view,
                                                   GtkTreeIter              *iter);
-void            testing_get_iter_for_plugin_info (PeasGtkPluginManagerView *view,
+gboolean        testing_get_iter_for_plugin_info (PeasGtkPluginManagerView *view,
                                                   PeasPluginInfo           *info,
                                                   GtkTreeIter              *iter);
 



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