pidgin/gtkplugin.c

branch
soc.2013.gobjectification.plugins
changeset 36934
e7268aeb3b89
parent 36929
eed15b8d51a1
child 36935
5384600e613c
equal deleted inserted replaced
36933:3c12364588a6 36934:e7268aeb3b89
42 42
43 #define PIDGIN_RESPONSE_CONFIGURE 98121 43 #define PIDGIN_RESPONSE_CONFIGURE 98121
44 44
45 typedef struct 45 typedef struct
46 { 46 {
47 PidginPluginConfigFrame get_config_frame; 47 PidginPluginConfigFrameCb config_frame_cb;
48 } PidginPluginInfoPrivate; 48 } PidginPluginInfoPrivate;
49 49
50 enum 50 enum
51 { 51 {
52 PROP_0, 52 PROP_0,
53 PROP_PIDGIN_CONFIG_FRAME, 53 PROP_PIDGIN_CONFIG_FRAME_CB,
54 PROP_LAST 54 PROP_LAST
55 }; 55 };
56 56
57 typedef struct 57 typedef struct
58 { 58 {
96 GParamSpec *pspec) 96 GParamSpec *pspec)
97 { 97 {
98 PidginPluginInfoPrivate *priv = PIDGIN_PLUGIN_INFO_GET_PRIVATE(obj); 98 PidginPluginInfoPrivate *priv = PIDGIN_PLUGIN_INFO_GET_PRIVATE(obj);
99 99
100 switch (param_id) { 100 switch (param_id) {
101 case PROP_PIDGIN_CONFIG_FRAME: 101 case PROP_PIDGIN_CONFIG_FRAME_CB:
102 priv->get_config_frame = g_value_get_pointer(value); 102 priv->config_frame_cb = g_value_get_pointer(value);
103 break; 103 break;
104 default: 104 default:
105 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec); 105 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
106 break; 106 break;
107 } 107 }
113 GParamSpec *pspec) 113 GParamSpec *pspec)
114 { 114 {
115 PidginPluginInfoPrivate *priv = PIDGIN_PLUGIN_INFO_GET_PRIVATE(obj); 115 PidginPluginInfoPrivate *priv = PIDGIN_PLUGIN_INFO_GET_PRIVATE(obj);
116 116
117 switch (param_id) { 117 switch (param_id) {
118 case PROP_PIDGIN_CONFIG_FRAME: 118 case PROP_PIDGIN_CONFIG_FRAME_CB:
119 g_value_set_pointer(value, priv->get_config_frame); 119 g_value_set_pointer(value, priv->config_frame_cb);
120 break; 120 break;
121 default: 121 default:
122 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec); 122 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
123 break; 123 break;
124 } 124 }
133 133
134 /* Setup properties */ 134 /* Setup properties */
135 obj_class->get_property = pidgin_plugin_info_get_property; 135 obj_class->get_property = pidgin_plugin_info_get_property;
136 obj_class->set_property = pidgin_plugin_info_set_property; 136 obj_class->set_property = pidgin_plugin_info_set_property;
137 137
138 g_object_class_install_property(obj_class, PROP_PIDGIN_CONFIG_FRAME, 138 g_object_class_install_property(obj_class, PROP_PIDGIN_CONFIG_FRAME_CB,
139 g_param_spec_pointer("pidgin-config-frame", 139 g_param_spec_pointer("pidgin-config-frame-cb",
140 "Pidgin configuration frame callback", 140 "Pidgin configuration frame callback",
141 "Callback that returns a GTK configuration frame", 141 "Callback that returns a GTK configuration frame",
142 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); 142 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
143 } 143 }
144 144
194 return FALSE; 194 return FALSE;
195 195
196 if (PIDGIN_IS_PLUGIN_INFO(info)) 196 if (PIDGIN_IS_PLUGIN_INFO(info))
197 priv = PIDGIN_PLUGIN_INFO_GET_PRIVATE(info); 197 priv = PIDGIN_PLUGIN_INFO_GET_PRIVATE(info);
198 198
199 ret = ((priv && priv->get_config_frame) || 199 ret = ((priv && priv->config_frame_cb) ||
200 purple_plugin_info_get_pref_frame_callback(info) || 200 purple_plugin_info_get_pref_frame_cb(info) ||
201 purple_plugin_info_get_pref_request_callback(info)); 201 purple_plugin_info_get_pref_request_cb(info));
202 202
203 return ret; 203 return ret;
204 } 204 }
205 205
206 static GtkWidget * 206 static GtkWidget *
216 info = purple_plugin_get_info(plugin); 216 info = purple_plugin_get_info(plugin);
217 if (PIDGIN_IS_PLUGIN_INFO(info)) 217 if (PIDGIN_IS_PLUGIN_INFO(info))
218 priv = PIDGIN_PLUGIN_INFO_GET_PRIVATE(info); 218 priv = PIDGIN_PLUGIN_INFO_GET_PRIVATE(info);
219 219
220 if (priv) 220 if (priv)
221 config = priv->get_config_frame(plugin); 221 config = priv->config_frame_cb(plugin);
222 222
223 if (!config && purple_plugin_info_get_pref_frame_callback(info)) 223 if (!config && purple_plugin_info_get_pref_frame_cb(info))
224 { 224 {
225 PurplePluginPrefFrame *frame; 225 PurplePluginPrefFrame *frame;
226 PurplePluginPrefFrameCallback get_pref_frame = 226 PurplePluginPrefFrameCb pref_frame_cb =
227 purple_plugin_info_get_pref_frame_callback(info); 227 purple_plugin_info_get_pref_frame_cb(info);
228 228
229 frame = get_pref_frame(plugin); 229 frame = pref_frame_cb(plugin);
230 230
231 config = pidgin_plugin_pref_create_frame(frame); 231 config = pidgin_plugin_pref_create_frame(frame);
232 232
233 *purple_pref_frame = frame; 233 *purple_pref_frame = frame;
234 } 234 }
282 pidgin_plugin_open_config(PurplePlugin *plugin, GtkWindow *parent) 282 pidgin_plugin_open_config(PurplePlugin *plugin, GtkWindow *parent)
283 { 283 {
284 PurplePluginInfo *info; 284 PurplePluginInfo *info;
285 PidginPluginInfoPrivate *priv = NULL; 285 PidginPluginInfoPrivate *priv = NULL;
286 PidginPluginUiData *ui_data; 286 PidginPluginUiData *ui_data;
287 PurplePluginPrefFrameCallback get_pref_frame; 287 PurplePluginPrefFrameCb pref_frame_cb;
288 PurplePluginPrefRequestCallback get_pref_request; 288 PurplePluginPrefRequestCb pref_request_cb;
289 PidginPluginConfigFrame get_pidgin_frame = NULL; 289 PidginPluginConfigFrameCb get_pidgin_frame = NULL;
290 gint prefs_count; 290 gint prefs_count;
291 291
292 g_return_if_fail(plugin != NULL); 292 g_return_if_fail(plugin != NULL);
293 293
294 info = purple_plugin_get_info(plugin); 294 info = purple_plugin_get_info(plugin);
302 return; 302 return;
303 303
304 if (PIDGIN_IS_PLUGIN_INFO(info)) 304 if (PIDGIN_IS_PLUGIN_INFO(info))
305 priv = PIDGIN_PLUGIN_INFO_GET_PRIVATE(info); 305 priv = PIDGIN_PLUGIN_INFO_GET_PRIVATE(info);
306 306
307 get_pref_frame = purple_plugin_info_get_pref_frame_callback(info); 307 pref_frame_cb = purple_plugin_info_get_pref_frame_cb(info);
308 get_pref_request = purple_plugin_info_get_pref_request_callback(info); 308 pref_request_cb = purple_plugin_info_get_pref_request_cb(info);
309 309
310 if (priv) 310 if (priv)
311 get_pidgin_frame = priv->get_config_frame; 311 get_pidgin_frame = priv->config_frame_cb;
312 312
313 prefs_count = 0; 313 prefs_count = 0;
314 if (get_pref_frame) 314 if (pref_frame_cb)
315 prefs_count++; 315 prefs_count++;
316 if (get_pref_request) 316 if (pref_request_cb)
317 prefs_count++; 317 prefs_count++;
318 if (get_pidgin_frame) 318 if (get_pidgin_frame)
319 prefs_count++; 319 prefs_count++;
320 320
321 if (prefs_count > 1) { 321 if (prefs_count > 1) {
329 purple_plugin_info_set_ui_data(info, ui_data); 329 purple_plugin_info_set_ui_data(info, ui_data);
330 330
331 /* Priority: pidgin frame > purple request > purple frame 331 /* Priority: pidgin frame > purple request > purple frame
332 * Purple frame could be replaced with purple request some day. 332 * Purple frame could be replaced with purple request some day.
333 */ 333 */
334 if (get_pref_request && !get_pidgin_frame) { 334 if (pref_request_cb && !get_pidgin_frame) {
335 ui_data->type = PIDGIN_PLUGIN_UI_DATA_TYPE_REQUEST; 335 ui_data->type = PIDGIN_PLUGIN_UI_DATA_TYPE_REQUEST;
336 ui_data->u.request_handle = get_pref_request(plugin); 336 ui_data->u.request_handle = pref_request_cb(plugin);
337 purple_request_add_close_notify(ui_data->u.request_handle, 337 purple_request_add_close_notify(ui_data->u.request_handle,
338 purple_callback_set_zero, &info->ui_data); 338 purple_callback_set_zero, &info->ui_data);
339 purple_request_add_close_notify(ui_data->u.request_handle, 339 purple_request_add_close_notify(ui_data->u.request_handle,
340 g_free, ui_data); 340 g_free, ui_data);
341 } else { 341 } else {

mercurial