[libpeas] Add PeasPluginInfo:Hidden
- From: Garrett Regier <gregier src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libpeas] Add PeasPluginInfo:Hidden
- Date: Fri, 18 Feb 2011 16:21:01 +0000 (UTC)
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]