| 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: |
| 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); |