pidgin/pidginpluginsmenu.c

Tue, 13 May 2025 14:29:06 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Tue, 13 May 2025 14:29:06 -0500
changeset 43251
8bd7eee2f178
parent 42640
5365cc421c7a
permissions
-rw-r--r--

Create a Privacy preference page with the send typing notification preference

This only controls whether or not the conversation window will send typing
notifications, plugins can still do this on their own.

Testing Done:
Used ngrep to verify if the irc typing messages were being sent or not. Also manually modified the settings file and verified the ui update and vice versa.

Bugs closed: PIDGIN-17450

Reviewed at https://reviews.imfreedom.org/r/3999/

40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
2 * Pidgin - Internet Messenger
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * 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
6 * 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
7 * source distribution.
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 * 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
10 * 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
11 * 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
12 * (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
13 *
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 * 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
15 * 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
16 * 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
17 * 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
18 *
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
20 * along with this program; if not, see <https://www.gnu.org/licenses/>.
40373
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
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
25 #include "pidginapplication.h"
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
26
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27 #include <gplugin.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 <purple.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 struct _PidginPluginsMenu {
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
32 GMenuModel parent;
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
34 GQueue *plugins;
40373
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
42575
580339aa47cc Make sure all of the final types in pidgin are defined as such
Gary Kramlich <grim@reaperworld.com>
parents: 42103
diff changeset
37 G_DEFINE_FINAL_TYPE(PidginPluginsMenu, pidgin_plugins_menu, G_TYPE_MENU_MODEL)
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38
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 * Helpers
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 static void
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
43 pidgin_plugins_menu_add_item(gpointer data, gpointer user_data) {
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
44 PidginPluginsMenu *menu = user_data;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
45 GPluginPlugin *plugin = data;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
46 GPluginPluginInfo *info = NULL;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
47
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
48 info = gplugin_plugin_get_info(plugin);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
49 if(PURPLE_IS_PLUGIN_INFO(info)) {
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
50 GActionGroup *group = NULL;
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
52 group = purple_plugin_info_get_action_group(PURPLE_PLUGIN_INFO(info));
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
53 if(G_IS_ACTION_GROUP(group)) {
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
54 GApplication *application = g_application_get_default();
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
55 const gchar *prefix;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
56
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
57 prefix = gplugin_plugin_info_get_id(info);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
58 pidgin_application_add_action_group(PIDGIN_APPLICATION(application),
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
59 prefix, group);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
60
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
61 g_queue_push_tail(menu->plugins, g_object_ref(plugin));
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
62 }
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63 }
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
64
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
65 g_clear_object(&info);
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66 }
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
67
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68 static void
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
69 pidgin_plugins_menu_refresh(PidginPluginsMenu *menu) {
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
70 GPluginManager *manager = NULL;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
71 GSList *loaded = NULL;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
72 gint removed = 0, added = 0;
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
73
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
74 removed = g_queue_get_length(menu->plugins);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
75 g_queue_clear_full(menu->plugins, g_object_unref);
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
76
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
77 manager = gplugin_manager_get_default();
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
78 loaded = gplugin_manager_find_plugins_with_state(manager,
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
79 GPLUGIN_PLUGIN_STATE_LOADED);
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
80
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
81 g_slist_foreach(loaded, pidgin_plugins_menu_add_item, menu);
41447
bb457ce5ad5e Fix a leak in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41414
diff changeset
82 g_slist_free_full(loaded, g_object_unref);
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
84 added = g_queue_get_length(menu->plugins);
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
86 /* Tell our listeners that our menu has changed. */
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
87 g_menu_model_items_changed(G_MENU_MODEL(menu), 0, removed, added);
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
88 }
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
89
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
90 /******************************************************************************
40896
031172d26bef Use GPluginManager directly in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 40888
diff changeset
91 * Callbacks
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
92 *****************************************************************************/
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
93 static void
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
94 pidgin_plugins_menu_plugin_loaded_cb(G_GNUC_UNUSED GObject *manager,
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
95 G_GNUC_UNUSED GPluginPlugin *plugin,
40896
031172d26bef Use GPluginManager directly in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 40888
diff changeset
96 gpointer data)
031172d26bef Use GPluginManager directly in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 40888
diff changeset
97 {
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
98 pidgin_plugins_menu_refresh(PIDGIN_PLUGINS_MENU(data));
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
99 }
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
100
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
101 static void
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
102 pidgin_plugins_menu_plugin_unloaded_cb(G_GNUC_UNUSED GObject *manager,
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
103 GPluginPlugin *plugin,
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
104 gpointer data)
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
105 {
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
106 GApplication *application = NULL;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
107 GPluginPluginInfo *info = NULL;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
108 const gchar *prefix;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
109
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
110 /* Remove the action group that the plugin added. */
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
111 info = gplugin_plugin_get_info(plugin);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
112 if(GPLUGIN_IS_PLUGIN_INFO(info)) {
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
113 prefix = gplugin_plugin_info_get_id(info);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
114
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
115 if(prefix != NULL) {
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
116 application = g_application_get_default();
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
117 pidgin_application_add_action_group(PIDGIN_APPLICATION(application),
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
118 prefix, NULL);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
119 }
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
120 }
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
121
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
122 /* Refresh the list */
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
123 pidgin_plugins_menu_refresh(PIDGIN_PLUGINS_MENU(data));
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
124 }
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
125
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
126 /******************************************************************************
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
127 * GMenuModel Implementation
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
128 *****************************************************************************/
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
129 static gboolean
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41909
diff changeset
130 pidgin_plugins_menu_is_mutable(G_GNUC_UNUSED GMenuModel *model) {
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
131 return TRUE;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
132 }
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
133
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
134 static gint
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
135 pidgin_plugins_menu_get_n_items(GMenuModel *model) {
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
136 PidginPluginsMenu *menu = PIDGIN_PLUGINS_MENU(model);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
137
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
138 return g_queue_get_length(menu->plugins);
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
139 }
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 static void
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
142 pidgin_plugins_menu_get_item_attributes(GMenuModel *model, gint index,
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
143 GHashTable **attributes)
40896
031172d26bef Use GPluginManager directly in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 40888
diff changeset
144 {
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
145 PidginPluginsMenu *menu = PIDGIN_PLUGINS_MENU(model);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
146 GPluginPlugin *plugin = NULL;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
147 GPluginPluginInfo *info = NULL;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
148 GVariant *value = NULL;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
149
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
150 /* Create our hash table of attributes to return. */
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
151 *attributes = g_hash_table_new_full(g_str_hash, g_str_equal, NULL,
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
152 (GDestroyNotify)g_variant_unref);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
153
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
154 /* Get the plugin the caller is interested in. */
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
155 plugin = g_queue_peek_nth(menu->plugins, index);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
156 if(plugin == NULL) {
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
157 return;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
158 }
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
159
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
160 /* Grab the plugin info and set the label attribute to the name of the
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
161 * plugin and set the action name space to the plugin's id.
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
162 */
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
163 info = gplugin_plugin_get_info(plugin);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
164 value = g_variant_new_string(gplugin_plugin_info_get_name(info));
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
165 g_hash_table_insert(*attributes, G_MENU_ATTRIBUTE_LABEL,
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
166 g_variant_ref_sink(value));
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
167
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
168 g_object_unref(info);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
169 }
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
170
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
171 static void
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
172 pidgin_plugins_menu_get_item_links(GMenuModel *model, gint index,
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
173 GHashTable **links)
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
174 {
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
175 PidginPluginsMenu *menu = PIDGIN_PLUGINS_MENU(model);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
176 PurplePluginInfo *purple_info = NULL;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
177 GPluginPlugin *plugin = NULL;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
178 GPluginPluginInfo *info = NULL;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
179 GMenuModel *actions_model = NULL;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
180
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
181 *links = g_hash_table_new_full(g_str_hash, g_str_equal, NULL,
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
182 g_object_unref);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
183
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
184 plugin = g_queue_peek_nth(menu->plugins, index);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
185 if(!GPLUGIN_IS_PLUGIN(plugin)) {
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
186 return;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
187 }
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
188
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
189 info = gplugin_plugin_get_info(plugin);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
190 purple_info = PURPLE_PLUGIN_INFO(info);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
191
41909
55aaac83f315 Fix actions in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41447
diff changeset
192 /* We need to use a section for the ACTION_NAMESPACE attribute to work, so
55aaac83f315 Fix actions in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41447
diff changeset
193 * create a menu, and add a new section item to it with the menu from the
55aaac83f315 Fix actions in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41447
diff changeset
194 * plugin, then set the ACTION_NAMESPACE attribute. Finally return the menu
55aaac83f315 Fix actions in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41447
diff changeset
195 * as the submenu.
55aaac83f315 Fix actions in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41447
diff changeset
196 */
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
197 actions_model = purple_plugin_info_get_action_menu(purple_info);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
198 if(G_IS_MENU_MODEL(actions_model)) {
41909
55aaac83f315 Fix actions in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41447
diff changeset
199 GMenu *menu = NULL;
55aaac83f315 Fix actions in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41447
diff changeset
200 GMenuItem *section = NULL;
55aaac83f315 Fix actions in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41447
diff changeset
201
55aaac83f315 Fix actions in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41447
diff changeset
202 menu = g_menu_new();
55aaac83f315 Fix actions in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41447
diff changeset
203 section = g_menu_item_new_section(NULL, actions_model);
55aaac83f315 Fix actions in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41447
diff changeset
204 g_menu_item_set_attribute(section, G_MENU_ATTRIBUTE_ACTION_NAMESPACE,
55aaac83f315 Fix actions in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41447
diff changeset
205 "s", gplugin_plugin_info_get_id(info));
55aaac83f315 Fix actions in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41447
diff changeset
206 g_menu_append_item(menu, section);
42103
33ed4a2a7593 Fix leaks in dynamic menus
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41947
diff changeset
207 g_object_unref(section);
41909
55aaac83f315 Fix actions in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41447
diff changeset
208
55aaac83f315 Fix actions in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41447
diff changeset
209 g_hash_table_insert(*links, G_MENU_LINK_SUBMENU, menu);
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
210 }
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
211
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
212 g_object_unref(info);
40373
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 * GObject Implementation
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
217 *****************************************************************************/
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
218 static void
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
219 pidgin_plugins_menu_finalize(GObject *obj) {
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
220 PidginPluginsMenu *menu = PIDGIN_PLUGINS_MENU(obj);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
221
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
222 g_queue_free_full(menu->plugins, g_object_unref);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
223
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
224 G_OBJECT_CLASS(pidgin_plugins_menu_parent_class)->finalize(obj);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
225 }
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
226
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
227 static void
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
228 pidgin_plugins_menu_constructed(GObject *obj) {
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
229 G_OBJECT_CLASS(pidgin_plugins_menu_parent_class)->constructed(obj);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
230
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
231 pidgin_plugins_menu_refresh(PIDGIN_PLUGINS_MENU(obj));
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
232 }
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
233
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
234 static void
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
235 pidgin_plugins_menu_init(PidginPluginsMenu *menu) {
40978
2cb285cacbfd Fix warnings about changing types on assignment.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40896
diff changeset
236 GPluginManager *manager = NULL;
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
237
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
238 menu->plugins = g_queue_new();
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
239
40896
031172d26bef Use GPluginManager directly in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 40888
diff changeset
240 /* Connect to the plugin manager's signals so we can stay up to date. */
41008
dc06703548a1 Update everything for GPlugin 0.33.0
Gary Kramlich <grim@reaperworld.com>
parents: 40978
diff changeset
241 manager = gplugin_manager_get_default();
40896
031172d26bef Use GPluginManager directly in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 40888
diff changeset
242
031172d26bef Use GPluginManager directly in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 40888
diff changeset
243 g_signal_connect_object(manager, "loaded-plugin",
031172d26bef Use GPluginManager directly in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 40888
diff changeset
244 G_CALLBACK(pidgin_plugins_menu_plugin_loaded_cb),
031172d26bef Use GPluginManager directly in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 40888
diff changeset
245 menu, 0);
031172d26bef Use GPluginManager directly in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 40888
diff changeset
246 g_signal_connect_object(manager, "unloaded-plugin",
031172d26bef Use GPluginManager directly in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 40888
diff changeset
247 G_CALLBACK(pidgin_plugins_menu_plugin_unloaded_cb),
031172d26bef Use GPluginManager directly in PidginPluginsMenu
Gary Kramlich <grim@reaperworld.com>
parents: 40888
diff changeset
248 menu, 0);
40373
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
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
251 static void
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
252 pidgin_plugins_menu_class_init(PidginPluginsMenuClass *klass) {
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
253 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
254 GMenuModelClass *model_class = G_MENU_MODEL_CLASS(klass);
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
255
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
256 obj_class->finalize = pidgin_plugins_menu_finalize;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
257 obj_class->constructed = pidgin_plugins_menu_constructed;
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
258
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
259 model_class->is_mutable = pidgin_plugins_menu_is_mutable;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
260 model_class->get_n_items = pidgin_plugins_menu_get_n_items;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
261 model_class->get_item_attributes = pidgin_plugins_menu_get_item_attributes;
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
262 model_class->get_item_links = pidgin_plugins_menu_get_item_links;
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
263 }
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
264
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
265 /******************************************************************************
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
266 * Public API
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
267 *****************************************************************************/
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
268 GMenuModel *
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
269 pidgin_plugins_menu_new(void) {
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41030
diff changeset
270 return g_object_new(PIDGIN_TYPE_PLUGINS_MENU, NULL);
40373
5d2a493339f2 Add the new PidginPluginsMenu which manages itself when plugins and loaded/unloaded.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
271 }

mercurial