Tue, 07 Apr 2020 18:28:26 -0500
use g_list_index instead of manually searching a list and a bunch of whitespace fixes
|
40373
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
1 | /* |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
2 | * pidgin |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
3 | * |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
4 | * Pidgin is the legal property of its developers, whose names are too numerous |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
5 | * to list here. Please refer to the COPYRIGHT file distributed with this |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
6 | * source distribution. |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
7 | * |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
8 | * This program is free software; you can redistribute it and/or modify |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
9 | * it under the terms of the GNU General Public License as published by |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
10 | * the Free Software Foundation; either version 2 of the License, or |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
11 | * (at your option) any later version. |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
12 | * |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
13 | * This program is distributed in the hope that it will be useful, |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
16 | * GNU General Public License for more details. |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
17 | * |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
18 | * You should have received a copy of the GNU General Public License |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
19 | * along with this program; if not, write to the Free Software |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
21 | */ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
22 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
23 | #include "pidginpluginsmenu.h" |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
24 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
25 | #include <gplugin.h> |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
26 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
27 | #include <purple.h> |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
28 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
29 | #include "internal.h" |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
30 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
31 | #include "pidgin/pidginpluginsdialog.h" |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
32 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
33 | struct _PidginPluginsMenu { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
34 | GtkMenu parent; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
35 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
36 | GtkWidget *separator; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
37 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
38 | GSimpleActionGroup *action_group; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
39 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
40 | GHashTable *plugin_items; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
41 | }; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
42 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
43 | #define PIDGIN_PLUGINS_MENU_ACTION_PREFIX "plugins-menu" |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
44 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
45 | /****************************************************************************** |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
46 | * Helpers |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
47 | *****************************************************************************/ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
48 | static void |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
49 | pidgin_plugins_menu_action_activated(GSimpleAction *simple, GVariant *parameter, |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
50 | gpointer data) |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
51 | { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
52 | PurplePluginAction *action = (PurplePluginAction *)data; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
53 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
54 | if(action != NULL && action->callback != NULL) { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
55 | action->callback(action); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
56 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
57 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
58 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
59 | static void |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
60 | pidgin_plugins_menu_add_plugin_actions(PidginPluginsMenu *menu, |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
61 | PurplePlugin *plugin) |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
62 | { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
63 | GPluginPluginInfo *info = NULL; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
64 | PurplePluginActionsCb actions_cb = NULL; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
65 | GList *actions = NULL, *l = NULL; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
66 | GtkWidget *submenu = NULL, *item = NULL; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
67 | gint i = 0; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
68 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
69 | info = gplugin_plugin_get_info(GPLUGIN_PLUGIN(plugin)); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
70 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
71 | actions_cb = purple_plugin_info_get_actions_cb(PURPLE_PLUGIN_INFO(info)); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
72 | if(actions_cb == NULL) { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
73 | g_object_unref(G_OBJECT(info)); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
74 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
75 | return; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
76 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
77 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
78 | actions = actions_cb(plugin); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
79 | if(actions == NULL) { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
80 | g_object_unref(G_OBJECT(info)); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
81 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
82 | return; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
83 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
84 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
85 | submenu = gtk_menu_new(); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
86 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
87 | for(l = actions, i = 0; l != NULL; l = l->next, i++) { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
88 | PurplePluginAction *action = (PurplePluginAction *)l->data; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
89 | GSimpleAction *gaction = NULL; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
90 | GtkWidget *action_item = NULL; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
91 | gchar *action_base_name = NULL; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
92 | gchar *action_full_name = NULL; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
93 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
94 | if(action->label == NULL) { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
95 | continue; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
96 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
97 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
98 | action_base_name = g_strdup_printf("%s-%d", |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
99 | gplugin_plugin_info_get_id(info), |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
100 | i); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
101 | action_full_name = g_strdup_printf("%s.%s", |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
102 | PIDGIN_PLUGINS_MENU_ACTION_PREFIX, |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
103 | action_base_name); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
104 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
105 | /* create the menu item with the full action name */ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
106 | action_item = gtk_menu_item_new_with_label(action->label); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
107 | gtk_actionable_set_action_name(GTK_ACTIONABLE(action_item), |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
108 | action_full_name); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
109 | gtk_widget_show(action_item); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
110 | g_free(action_full_name); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
111 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
112 | /* add our action item to the menu */ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
113 | gtk_menu_shell_append(GTK_MENU_SHELL(submenu), action_item); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
114 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
115 | /* now Creation the gaction with the base name */ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
116 | gaction = g_simple_action_new(action_base_name, NULL); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
117 | g_free(action_base_name); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
118 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
119 | /* now connect to the activate signal of the action using |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
120 | * g_signal_connect_data with a destory notify to free the plugin action |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
121 | * when the signal handler is removed. |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
122 | */ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
123 | g_signal_connect_data(G_OBJECT(gaction), "activate", |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
124 | G_CALLBACK(pidgin_plugins_menu_action_activated), |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
125 | action, |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
126 | (GClosureNotify)purple_plugin_action_free, |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
127 | 0); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
128 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
129 | /* finally add the action to the action group and remove our ref */ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
130 | g_action_map_add_action(G_ACTION_MAP(menu->action_group), |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
131 | G_ACTION(gaction)); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
132 | g_object_unref(G_OBJECT(gaction)); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
133 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
134 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
135 | item = gtk_menu_item_new_with_label(gplugin_plugin_info_get_name(info)); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
136 | gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
137 | gtk_widget_show(item); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
138 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
139 | gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
140 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
141 | g_hash_table_insert(menu->plugin_items, |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
142 | g_object_ref(G_OBJECT(plugin)), |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
143 | item); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
144 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
145 | g_object_unref(G_OBJECT(info)); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
146 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
147 | /* make sure that our separator is visible */ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
148 | gtk_widget_show(menu->separator); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
149 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
150 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
151 | static void |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
152 | pidgin_plugins_menu_remove_plugin_actions(PidginPluginsMenu *menu, |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
153 | PurplePlugin *plugin) |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
154 | { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
155 | GPluginPluginInfo *info = NULL; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
156 | PurplePluginActionsCb actions_cb = NULL; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
157 | GList *actions = NULL, *l = NULL; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
158 | gint i = 0; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
159 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
160 | /* try remove the menu item from plugin from the hash table. If we didn't |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
161 | * remove anything, we have nothing to do so bail. |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
162 | */ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
163 | if(!g_hash_table_remove(menu->plugin_items, plugin)) { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
164 | return; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
165 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
166 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
167 | info = gplugin_plugin_get_info(GPLUGIN_PLUGIN(plugin)); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
168 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
169 | actions_cb = purple_plugin_info_get_actions_cb(PURPLE_PLUGIN_INFO(info)); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
170 | if(actions_cb == NULL) { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
171 | g_object_unref(G_OBJECT(info)); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
172 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
173 | return; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
174 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
175 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
176 | actions = actions_cb(plugin); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
177 | if(actions == NULL) { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
178 | g_object_unref(G_OBJECT(info)); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
179 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
180 | return; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
181 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
182 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
183 | /* now walk through the actions and remove them from the action group. */ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
184 | for(l = actions, i = 0; l != NULL; l = l->next, i++) { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
185 | gchar *name = NULL; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
186 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
187 | name = g_strdup_printf("%s-%d", gplugin_plugin_info_get_id(info), i); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
188 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
189 | g_action_map_remove_action(G_ACTION_MAP(menu->action_group), name); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
190 | g_free(name); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
191 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
192 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
193 | g_object_unref(G_OBJECT(info)); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
194 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
195 | /* finally, if this was the last item in the list, hide the separator. */ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
196 | if(g_hash_table_size(menu->plugin_items) == 0) { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
197 | gtk_widget_hide(menu->separator); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
198 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
199 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
200 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
201 | /****************************************************************************** |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
202 | * Purple Signal Callbacks |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
203 | *****************************************************************************/ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
204 | static void |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
205 | pidgin_plugins_menu_plugin_load_cb(PurplePlugin *plugin, gpointer data) { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
206 | pidgin_plugins_menu_add_plugin_actions(PIDGIN_PLUGINS_MENU(data), plugin); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
207 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
208 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
209 | static void |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
210 | pidgin_plugins_menu_plugin_unload_cb(PurplePlugin *plugin, gpointer data) { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
211 | pidgin_plugins_menu_remove_plugin_actions(PIDGIN_PLUGINS_MENU(data), |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
212 | plugin); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
213 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
214 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
215 | /****************************************************************************** |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
216 | * Static Actions |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
217 | *****************************************************************************/ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
218 | static void |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
219 | pidgin_plugins_menu_show_manager(GSimpleAction *action, GVariant *parameter, |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
220 | gpointer data) |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
221 | { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
222 | GtkWidget *dialog = pidgin_plugins_dialog_new(); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
223 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
224 | /* fixme? */ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
225 | #if 0 |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
226 | gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(window)); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
227 | #endif |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
228 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
229 | gtk_widget_show_all(dialog); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
230 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
231 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
232 | /****************************************************************************** |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
233 | * GObject Implementation |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
234 | *****************************************************************************/ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
235 | G_DEFINE_TYPE(PidginPluginsMenu, pidgin_plugins_menu, GTK_TYPE_MENU) |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
236 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
237 | static void |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
238 | pidgin_plugins_menu_init(PidginPluginsMenu *menu) { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
239 | GActionEntry actions[] = { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
240 | { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
241 | .name = "manager", |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
242 | .activate = pidgin_plugins_menu_show_manager, |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
243 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
244 | }; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
245 | gpointer handle; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
246 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
247 | /* initialize our template */ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
248 | gtk_widget_init_template(GTK_WIDGET(menu)); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
249 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
250 | /* create our internal action group and assign it to ourself */ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
251 | menu->action_group = g_simple_action_group_new(); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
252 | g_action_map_add_action_entries(G_ACTION_MAP(menu->action_group), actions, |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
253 | G_N_ELEMENTS(actions), NULL); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
254 | gtk_widget_insert_action_group(GTK_WIDGET(menu), |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
255 | PIDGIN_PLUGINS_MENU_ACTION_PREFIX, |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
256 | G_ACTION_GROUP(menu->action_group)); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
257 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
258 | /* create our storage for the items */ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
259 | menu->plugin_items = g_hash_table_new_full(g_direct_hash, g_direct_equal, |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
260 | g_object_unref, |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
261 | (GDestroyNotify)gtk_widget_destroy); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
262 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
263 | /* finally connect to the purple signals to stay up to date */ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
264 | handle = purple_plugins_get_handle(); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
265 | purple_signal_connect(handle, "plugin-load", menu, |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
266 | PURPLE_CALLBACK(pidgin_plugins_menu_plugin_load_cb), |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
267 | menu); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
268 | purple_signal_connect(handle, "plugin-unload", menu, |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
269 | PURPLE_CALLBACK(pidgin_plugins_menu_plugin_unload_cb), |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
270 | menu); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
271 | }; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
272 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
273 | static void |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
274 | pidgin_plugins_menu_finalize(GObject *obj) { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
275 | purple_signals_disconnect_by_handle(obj); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
276 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
277 | G_OBJECT_CLASS(pidgin_plugins_menu_parent_class)->finalize(obj); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
278 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
279 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
280 | static void |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
281 | pidgin_plugins_menu_class_init(PidginPluginsMenuClass *klass) { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
282 | GObjectClass *obj_class = G_OBJECT_CLASS(klass); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
283 | GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
284 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
285 | obj_class->finalize = pidgin_plugins_menu_finalize; |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
286 | |
|
40387
4cdb2a681dc1
use g_list_index instead of manually searching a list and a bunch of whitespace fixes
Gary Kramlich <grim@reaperworld.com>
parents:
40373
diff
changeset
|
287 | gtk_widget_class_set_template_from_resource( |
|
4cdb2a681dc1
use g_list_index instead of manually searching a list and a bunch of whitespace fixes
Gary Kramlich <grim@reaperworld.com>
parents:
40373
diff
changeset
|
288 | widget_class, |
|
4cdb2a681dc1
use g_list_index instead of manually searching a list and a bunch of whitespace fixes
Gary Kramlich <grim@reaperworld.com>
parents:
40373
diff
changeset
|
289 | "/im/pidgin/Pidgin/Plugins/menu.ui" |
|
4cdb2a681dc1
use g_list_index instead of manually searching a list and a bunch of whitespace fixes
Gary Kramlich <grim@reaperworld.com>
parents:
40373
diff
changeset
|
290 | ); |
|
40373
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
291 | |
|
40387
4cdb2a681dc1
use g_list_index instead of manually searching a list and a bunch of whitespace fixes
Gary Kramlich <grim@reaperworld.com>
parents:
40373
diff
changeset
|
292 | gtk_widget_class_bind_template_child(widget_class, PidginPluginsMenu, |
|
4cdb2a681dc1
use g_list_index instead of manually searching a list and a bunch of whitespace fixes
Gary Kramlich <grim@reaperworld.com>
parents:
40373
diff
changeset
|
293 | separator); |
|
40373
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
294 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
295 | |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
296 | /****************************************************************************** |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
297 | * Public API |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
298 | *****************************************************************************/ |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
299 | GtkWidget * |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
300 | pidgin_plugins_menu_new(void) { |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
301 | return GTK_WIDGET(g_object_new(PIDGIN_TYPE_PLUGINS_MENU, NULL)); |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
302 | } |
|
5d2a493339f2
Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
303 |