[gtk+] Another plugin, for good measure
- From: Ryan Lortie <ryanl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Another plugin, for good measure
- Date: Mon, 19 Dec 2011 18:03:17 +0000 (UTC)
commit 8a21201e2cc375e20111dd4dbf3567304290b3d6
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Dec 9 13:51:39 2011 -0500
Another plugin, for good measure
examples/plugman.c | 98 ++++++++++++++++++++++++++++++++-------------------
1 files changed, 61 insertions(+), 37 deletions(-)
---
diff --git a/examples/plugman.c b/examples/plugman.c
index 55cfe42..e9b6249 100644
--- a/examples/plugman.c
+++ b/examples/plugman.c
@@ -173,11 +173,15 @@ quit_app (GSimpleAction *action,
}
static gboolean is_red_plugin_enabled;
+static gboolean is_black_plugin_enabled;
static gboolean
-red_plugin_enabled (void)
+plugin_enabled (const gchar *name)
{
- return is_red_plugin_enabled;
+ if (g_strcmp0 (name, "red") == 0)
+ return is_red_plugin_enabled;
+ else
+ return is_black_plugin_enabled;
}
static GMenuModel *
@@ -210,68 +214,75 @@ find_plugin_menu (void)
}
static void
-red_action (GAction *action,
- GVariant *parameter,
- gpointer data)
+plugin_action (GAction *action,
+ GVariant *parameter,
+ gpointer data)
{
GApplication *app;
GList *list;
GtkWindow *window;
GtkWidget *text;
- GdkRGBA red;
-
- g_print ("Here is where we turn the text red\n");
+ GdkRGBA color;
app = g_application_get_default ();
list = gtk_application_get_windows (GTK_APPLICATION (app));
window = GTK_WINDOW (list->data);
text = g_object_get_data ((GObject*)window, "plugman-text");
- gdk_rgba_parse (&red, "red");
+ gdk_rgba_parse (&color, g_action_get_name (action));
- gtk_widget_override_color (text, 0, &red);
+ gtk_widget_override_color (text, 0, &color);
}
static void
-enable_red_plugin (void)
+enable_plugin (const gchar *name)
{
- GMenu *plugin_menu;
+ GMenuModel *plugin_menu;
GAction *action;
- g_print ("Enabling 'Red' plugin\n");
+ g_print ("Enabling '%s' plugin\n", name);
- action = (GAction *)g_simple_action_new ("red-action", NULL);
- g_signal_connect (action, "activate", G_CALLBACK (red_action), NULL);
+ action = (GAction *)g_simple_action_new (name, NULL);
+ g_signal_connect (action, "activate", G_CALLBACK (plugin_action), (gpointer)name);
g_action_map_add_action (G_ACTION_MAP (g_application_get_default ()), action);
- g_print ("Actions of 'Red' plugin added\n");
+ g_print ("Actions of '%s' plugin added\n", name);
plugin_menu = find_plugin_menu ();
if (plugin_menu)
{
GMenu *section;
GMenuItem *item;
+ gchar *label;
+ gchar *action;
section = g_menu_new ();
- g_menu_insert (section, 0, "Turn text red", "app.red-action");
+ label = g_strdup_printf ("Turn text %s", name);
+ action = g_strconcat ("app.", name, NULL);
+ g_menu_insert (section, 0, label, action);
+ g_free (label);
+ g_free (action);
item = g_menu_item_new_section (NULL, (GMenuModel*)section);
- g_menu_item_set_attribute (item, "id", "s", "red");
- g_menu_append_item (plugin_menu, item);
+ g_menu_item_set_attribute (item, "id", "s", name);
+ g_menu_append_item (G_MENU (plugin_menu), item);
g_object_unref (item);
g_object_unref (section);
- g_print ("Menus of 'Red' plugin added\n");
+ g_print ("Menus of '%s' plugin added\n", name);
}
else
g_warning ("Plugin menu not found\n");
- is_red_plugin_enabled = TRUE;
+ if (g_strcmp0 (name, "red") == 0)
+ is_red_plugin_enabled = TRUE;
+ else
+ is_black_plugin_enabled = TRUE;
}
static void
-disable_red_plugin (void)
+disable_plugin (const gchar *name)
{
GMenuModel *plugin_menu;
- g_print ("Disabling 'Red' plugin\n");
+ g_print ("Disabling '%s' plugin\n", name);
plugin_menu = find_plugin_menu ();
if (plugin_menu)
@@ -282,29 +293,33 @@ disable_red_plugin (void)
for (i = 0; i < g_menu_model_get_n_items (plugin_menu); i++)
{
if (g_menu_model_get_item_attribute (plugin_menu, i, "id", "s", &id) &&
- g_strcmp0 (id, "red") == 0)
+ g_strcmp0 (id, name) == 0)
{
- g_menu_remove (plugin_menu, i);
- g_print ("Menus of 'Red' plugin removed\n");
+ g_menu_remove (G_MENU (plugin_menu), i);
+ g_print ("Menus of '%s' plugin removed\n", name);
}
}
}
else
g_warning ("Plugin menu not found\n");
- g_action_map_remove_action (G_ACTION_MAP (g_application_get_default ()), "app.red-action");
- g_print ("Actions of 'Red' plugin removed\n");
+ g_action_map_remove_action (G_ACTION_MAP (g_application_get_default ()), name);
+ g_print ("Actions of '%s' plugin removed\n", name);
- is_red_plugin_enabled = FALSE;
+ if (g_strcmp0 (name, "red") == 0)
+ is_red_plugin_enabled = FALSE;
+ else
+ is_black_plugin_enabled = FALSE;
}
static void
-enable_or_disable_red_plugin (void)
+enable_or_disable_plugin (GtkToggleButton *button,
+ const gchar *name)
{
- if (red_plugin_enabled ())
- disable_red_plugin ();
+ if (plugin_enabled (name))
+ disable_plugin (name);
else
- enable_red_plugin ();
+ enable_plugin (name);
}
@@ -315,7 +330,7 @@ configure_plugins (GSimpleAction *action,
{
GtkBuilder *builder;
GtkWidget *dialog;
- GtkWidget *red;
+ GtkWidget *check;
GError *error = NULL;
builder = gtk_builder_new ();
@@ -333,6 +348,12 @@ configure_plugins (GSimpleAction *action,
" <property name='visible'>True</property>"
" </object>"
" </child>"
+ " <child>"
+ " <object class='GtkCheckButton' id='black-plugin'>"
+ " <property name='label'>Black Plugin - turn your text black</property>"
+ " <property name='visible'>True</property>"
+ " </object>"
+ " </child>"
" </object>"
" </child>"
" <child internal-child='action_area'>"
@@ -359,9 +380,12 @@ configure_plugins (GSimpleAction *action,
}
dialog = (GtkWidget *)gtk_builder_get_object (builder, "plugin-dialog");
- red = (GtkWidget *)gtk_builder_get_object (builder, "red-plugin");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (red), red_plugin_enabled ());
- g_signal_connect (red, "toggled", G_CALLBACK (enable_or_disable_red_plugin), NULL);
+ check = (GtkWidget *)gtk_builder_get_object (builder, "red-plugin");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), plugin_enabled ("red"));
+ g_signal_connect (check, "toggled", G_CALLBACK (enable_or_disable_plugin), "red");
+ check = (GtkWidget *)gtk_builder_get_object (builder, "black-plugin");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), plugin_enabled ("black"));
+ g_signal_connect (check, "toggled", G_CALLBACK (enable_or_disable_plugin), "black");
g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]