libpurple/protocol.c

changeset 41037
c2043b9692f6
parent 41007
90d2dee9b3dc
child 41137
3c1574216aed
equal deleted inserted replaced
41036:c2a9da21b8c0 41037:c2043b9692f6
27 enum { 27 enum {
28 PROP_0, 28 PROP_0,
29 PROP_ID, 29 PROP_ID,
30 PROP_NAME, 30 PROP_NAME,
31 PROP_DESCRIPTION, 31 PROP_DESCRIPTION,
32 PROP_ICON_NAME,
33 PROP_ICON_SEARCH_PATH,
34 PROP_ICON_RESOURCE_PATH,
32 PROP_OPTIONS, 35 PROP_OPTIONS,
33 N_PROPERTIES, 36 N_PROPERTIES,
34 }; 37 };
35 static GParamSpec *properties[N_PROPERTIES] = { NULL, }; 38 static GParamSpec *properties[N_PROPERTIES] = { NULL, };
36 39
37 typedef struct { 40 typedef struct {
38 gchar *id; 41 gchar *id;
39 gchar *name; 42 gchar *name;
40 gchar *description; 43 gchar *description;
41 44
45 gchar *icon_name;
46 gchar *icon_search_path;
47 gchar *icon_resource_path;
48
42 PurpleProtocolOptions options; 49 PurpleProtocolOptions options;
43 } PurpleProtocolPrivate; 50 } PurpleProtocolPrivate;
44 51
45 G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(PurpleProtocol, purple_protocol, 52 G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(PurpleProtocol, purple_protocol,
46 G_TYPE_OBJECT) 53 G_TYPE_OBJECT)
80 87
81 g_object_notify_by_pspec(G_OBJECT(protocol), properties[PROP_DESCRIPTION]); 88 g_object_notify_by_pspec(G_OBJECT(protocol), properties[PROP_DESCRIPTION]);
82 } 89 }
83 90
84 static void 91 static void
92 purple_protocol_set_icon_name(PurpleProtocol *protocol,
93 const gchar *icon_name)
94 {
95 PurpleProtocolPrivate *priv = NULL;
96
97 priv = purple_protocol_get_instance_private(protocol);
98
99 g_free(priv->icon_name);
100 priv->icon_name = g_strdup(icon_name);
101
102 g_object_notify_by_pspec(G_OBJECT(protocol), properties[PROP_ICON_NAME]);
103 }
104
105 static void
106 purple_protocol_set_icon_search_path(PurpleProtocol *protocol,
107 const gchar *path)
108 {
109 PurpleProtocolPrivate *priv = NULL;
110
111 priv = purple_protocol_get_instance_private(protocol);
112
113 g_free(priv->icon_search_path);
114 priv->icon_search_path = g_strdup(path);
115
116 g_object_notify_by_pspec(G_OBJECT(protocol),
117 properties[PROP_ICON_SEARCH_PATH]);
118 }
119
120 static void
121 purple_protocol_set_icon_resource_path(PurpleProtocol *protocol,
122 const gchar *path)
123 {
124 PurpleProtocolPrivate *priv = NULL;
125
126 priv = purple_protocol_get_instance_private(protocol);
127
128 g_free(priv->icon_resource_path);
129 priv->icon_resource_path = g_strdup(path);
130
131 g_object_notify_by_pspec(G_OBJECT(protocol),
132 properties[PROP_ICON_RESOURCE_PATH]);
133 }
134
135 static void
85 purple_protocol_set_options(PurpleProtocol *protocol, 136 purple_protocol_set_options(PurpleProtocol *protocol,
86 PurpleProtocolOptions options) 137 PurpleProtocolOptions options)
87 { 138 {
88 PurpleProtocolPrivate *priv = NULL; 139 PurpleProtocolPrivate *priv = NULL;
89 140
108 break; 159 break;
109 case PROP_NAME: 160 case PROP_NAME:
110 g_value_set_string(value, purple_protocol_get_name(protocol)); 161 g_value_set_string(value, purple_protocol_get_name(protocol));
111 break; 162 break;
112 case PROP_DESCRIPTION: 163 case PROP_DESCRIPTION:
113 g_value_set_string(value, purple_protocol_get_description(protocol)); 164 g_value_set_string(value,
165 purple_protocol_get_description(protocol));
166 break;
167 case PROP_ICON_NAME:
168 g_value_set_string(value, purple_protocol_get_icon_name(protocol));
169 break;
170 case PROP_ICON_SEARCH_PATH:
171 g_value_set_string(value,
172 purple_protocol_get_icon_search_path(protocol));
173 break;
174 case PROP_ICON_RESOURCE_PATH:
175 g_value_set_string(value,
176 purple_protocol_get_icon_resource_path(protocol));
114 break; 177 break;
115 case PROP_OPTIONS: 178 case PROP_OPTIONS:
116 g_value_set_flags(value, purple_protocol_get_options(protocol)); 179 g_value_set_flags(value, purple_protocol_get_options(protocol));
117 break; 180 break;
118 default: 181 default:
133 break; 196 break;
134 case PROP_NAME: 197 case PROP_NAME:
135 purple_protocol_set_name(protocol, g_value_get_string(value)); 198 purple_protocol_set_name(protocol, g_value_get_string(value));
136 break; 199 break;
137 case PROP_DESCRIPTION: 200 case PROP_DESCRIPTION:
138 purple_protocol_set_description(protocol, g_value_get_string(value)); 201 purple_protocol_set_description(protocol,
202 g_value_get_string(value));
203 break;
204 case PROP_ICON_NAME:
205 purple_protocol_set_icon_name(protocol, g_value_get_string(value));
206 break;
207 case PROP_ICON_SEARCH_PATH:
208 purple_protocol_set_icon_search_path(protocol,
209 g_value_get_string(value));
210 break;
211 case PROP_ICON_RESOURCE_PATH:
212 purple_protocol_set_icon_resource_path(protocol,
213 g_value_get_string(value));
139 break; 214 break;
140 case PROP_OPTIONS: 215 case PROP_OPTIONS:
141 purple_protocol_set_options(protocol, g_value_get_flags(value)); 216 purple_protocol_set_options(protocol, g_value_get_flags(value));
142 break; 217 break;
143 default: 218 default:
201 276
202 /** 277 /**
203 * PurpleProtocol::id: 278 * PurpleProtocol::id:
204 * 279 *
205 * The identifier for the protocol. 280 * The identifier for the protocol.
281 *
282 * Since: 3.0.0
206 */ 283 */
207 properties[PROP_ID] = g_param_spec_string( 284 properties[PROP_ID] = g_param_spec_string(
208 "id", "id", 285 "id", "id",
209 "The identifier for the protocol", 286 "The identifier for the protocol",
210 NULL, 287 NULL,
212 289
213 /** 290 /**
214 * PurpleProtocol::name: 291 * PurpleProtocol::name:
215 * 292 *
216 * The name to show in user interface for the protocol. 293 * The name to show in user interface for the protocol.
294 *
295 * Since: 3.0.0
217 */ 296 */
218 properties[PROP_NAME] = g_param_spec_string( 297 properties[PROP_NAME] = g_param_spec_string(
219 "name", "name", 298 "name", "name",
220 "The name of the protocol to show in the user interface", 299 "The name of the protocol to show in the user interface",
221 NULL, 300 NULL,
223 302
224 /** 303 /**
225 * PurpleProtocol::description: 304 * PurpleProtocol::description:
226 * 305 *
227 * The description to show in user interface for the protocol. 306 * The description to show in user interface for the protocol.
307 *
308 * Since: 3.0.0
228 */ 309 */
229 properties[PROP_DESCRIPTION] = g_param_spec_string( 310 properties[PROP_DESCRIPTION] = g_param_spec_string(
230 "description", "description", 311 "description", "description",
231 "The description of the protocol to show in the user interface", 312 "The description of the protocol to show in the user interface",
232 NULL, 313 NULL,
233 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); 314 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
234 315
235 /** 316 /**
317 * PurpleProtocol::icon-name:
318 *
319 * The name of an icon that has been installed to either the path specified
320 * via PurpleProtocol::icon-search-path or
321 * PurpleProtocol::icon-resource-path.
322 *
323 * Since: 3.0.0
324 */
325 properties[PROP_ICON_NAME] = g_param_spec_string(
326 "icon-name", "icon-name",
327 "The name of the XDG icon.",
328 NULL,
329 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
330
331 /**
332 * PurpleProtocol::icon-search-path:
333 *
334 * The path to an XDG Icon Theme directory which contains the icons for the
335 * protocol. See purple_protocol_get_icon_search_path() for more
336 * information.
337 *
338 * Since: 3.0.0
339 */
340 properties[PROP_ICON_SEARCH_PATH] = g_param_spec_string(
341 "icon-search-path", "icon-search-path",
342 "The path to an XDG Icon Theme directory.",
343 NULL,
344 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
345
346 /**
347 * PurpleProtocol::icon-resource-path:
348 *
349 * A #GResource path which contains the icons for the protocol. See
350 * purple_protocol_get_icon_resource_path() for more information.
351 *
352 * Since: 3.0.0
353 */
354 properties[PROP_ICON_RESOURCE_PATH] = g_param_spec_string(
355 "icon-resource-path", "icon-resource-path",
356 "The GResource path to the icons.",
357 NULL,
358 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
359
360 /**
236 * PurpleProtocol::options: 361 * PurpleProtocol::options:
237 * 362 *
238 * The #PurpleProtocolOptions for the protocol. 363 * The #PurpleProtocolOptions for the protocol.
364 *
365 * Since: 3.0.0
239 */ 366 */
240 properties[PROP_OPTIONS] = g_param_spec_flags( 367 properties[PROP_OPTIONS] = g_param_spec_flags(
241 "options", "options", 368 "options", "options",
242 "The options for the protocol", 369 "The options for the protocol",
243 PURPLE_TYPE_PROTOCOL_OPTIONS, 370 PURPLE_TYPE_PROTOCOL_OPTIONS,
281 priv = purple_protocol_get_instance_private(protocol); 408 priv = purple_protocol_get_instance_private(protocol);
282 409
283 return priv->description; 410 return priv->description;
284 } 411 }
285 412
413 const gchar *
414 purple_protocol_get_icon_name(PurpleProtocol *protocol) {
415 PurpleProtocolPrivate *priv = NULL;
416
417 g_return_val_if_fail(PURPLE_IS_PROTOCOL(protocol), NULL);
418
419 priv = purple_protocol_get_instance_private(protocol);
420
421 return priv->icon_name;
422 }
423
424 const gchar *
425 purple_protocol_get_icon_search_path(PurpleProtocol *protocol) {
426 PurpleProtocolPrivate *priv = NULL;
427
428 g_return_val_if_fail(PURPLE_IS_PROTOCOL(protocol), NULL);
429
430 priv = purple_protocol_get_instance_private(protocol);
431
432 return priv->icon_search_path;
433 }
434
435 const gchar *
436 purple_protocol_get_icon_resource_path(PurpleProtocol *protocol) {
437 PurpleProtocolPrivate *priv = NULL;
438
439 g_return_val_if_fail(PURPLE_IS_PROTOCOL(protocol), NULL);
440
441 priv = purple_protocol_get_instance_private(protocol);
442
443 return priv->icon_resource_path;
444 }
445
286 PurpleProtocolOptions 446 PurpleProtocolOptions
287 purple_protocol_get_options(PurpleProtocol *protocol) { 447 purple_protocol_get_options(PurpleProtocol *protocol) {
288 PurpleProtocolPrivate *priv = NULL; 448 PurpleProtocolPrivate *priv = NULL;
289 449
290 g_return_val_if_fail(PURPLE_IS_PROTOCOL(protocol), 0); 450 g_return_val_if_fail(PURPLE_IS_PROTOCOL(protocol), 0);

mercurial