| 79 static GObjectClass *parent_class = NULL; |
67 static GObjectClass *parent_class = NULL; |
| 80 |
68 |
| 81 /****************************************************************************** |
69 /****************************************************************************** |
| 82 * Enums |
70 * Enums |
| 83 *****************************************************************************/ |
71 *****************************************************************************/ |
| 84 |
72 enum { |
| |
73 PROP_ZERO = 0, |
| |
74 PROP_ICON_THEME, |
| |
75 PROP_BACKGROUND_COLOR, |
| |
76 PROP_OPACITY, |
| |
77 PROP_LAYOUT, |
| |
78 PROP_EXPANDED_COLOR, |
| |
79 PROP_EXPANDED_TEXT, |
| |
80 PROP_MINIMIZED_COLOR, |
| |
81 PROP_MINIMIZED_TEXT, |
| |
82 PROP_BGCOLOR1, |
| |
83 PROP_BGCOLOR2, |
| |
84 PROP_ONLINE, |
| |
85 PROP_AWAY, |
| |
86 PROP_OFFLINE, |
| |
87 PROP_MESSAGE, |
| |
88 PROP_STATUS, |
| |
89 }; |
| 85 /****************************************************************************** |
90 /****************************************************************************** |
| 86 * GObject Stuff |
91 * GObject Stuff |
| 87 *****************************************************************************/ |
92 *****************************************************************************/ |
| 88 |
93 |
| 89 static void |
94 static void |
| 90 pidgin_buddy_list_theme_init(GTypeInstance *instance, |
95 pidgin_buddy_list_theme_init(GTypeInstance *instance, |
| 91 gpointer klass) |
96 gpointer klass) |
| 92 { |
97 { |
| 93 PidginBuddyListThemePrivate *priv; |
|
| 94 |
|
| 95 (PIDGIN_BUDDY_LIST_THEME(instance))->priv = g_new0(PidginBuddyListThemePrivate, 1); |
98 (PIDGIN_BUDDY_LIST_THEME(instance))->priv = g_new0(PidginBuddyListThemePrivate, 1); |
| 96 |
99 |
| 97 priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(instance); |
100 } |
| 98 |
101 |
| 99 } |
102 static void |
| 100 |
103 pidgin_buddy_list_theme_get_property(GObject *obj, guint param_id, GValue *value, |
| |
104 GParamSpec *psec) |
| |
105 { |
| |
106 PidginBuddyListThemePrivate *priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(obj); |
| |
107 |
| |
108 switch(param_id) { |
| |
109 case PROP_ICON_THEME: |
| |
110 g_value_set_string(value, priv->icon_theme); |
| |
111 break; |
| |
112 case PROP_BACKGROUND_COLOR: |
| |
113 g_value_set_pointer(value, priv->bgcolor); |
| |
114 break; |
| |
115 case PROP_OPACITY: |
| |
116 g_value_set_double(value, priv->opacity); |
| |
117 break; |
| |
118 case PROP_LAYOUT: |
| |
119 g_value_set_pointer(value, priv->layout); |
| |
120 break; |
| |
121 case PROP_EXPANDED_COLOR: |
| |
122 g_value_set_string(value, priv->expanded_color); |
| |
123 break; |
| |
124 case PROP_EXPANDED_TEXT: |
| |
125 g_value_set_pointer(value, priv->expanded); |
| |
126 break; |
| |
127 case PROP_MINIMIZED_COLOR: |
| |
128 g_value_set_string(value, priv->minimized_color); |
| |
129 break; |
| |
130 case PROP_MINIMIZED_TEXT: |
| |
131 g_value_set_pointer(value, priv->minimized); |
| |
132 break; |
| |
133 case PROP_BGCOLOR1: |
| |
134 g_value_set_string(value, priv->buddy_bgcolor1); |
| |
135 break; |
| |
136 case PROP_BGCOLOR2: |
| |
137 g_value_set_string(value, priv->buddy_bgcolor2); |
| |
138 break; |
| |
139 case PROP_ONLINE: |
| |
140 g_value_set_pointer(value, priv->online); |
| |
141 break; |
| |
142 case PROP_AWAY: |
| |
143 g_value_set_pointer(value, priv->away); |
| |
144 break; |
| |
145 case PROP_OFFLINE: |
| |
146 g_value_set_pointer(value, priv->offline); |
| |
147 break; |
| |
148 case PROP_MESSAGE: |
| |
149 g_value_set_pointer(value, priv->message); |
| |
150 break; |
| |
151 case PROP_STATUS: |
| |
152 g_value_set_pointer(value, priv->status); |
| |
153 break; |
| |
154 default: |
| |
155 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, psec); |
| |
156 break; |
| |
157 } |
| |
158 } |
| |
159 |
| |
160 static void |
| |
161 pidgin_buddy_list_theme_set_property(GObject *obj, guint param_id, const GValue *value, |
| |
162 GParamSpec *psec) |
| |
163 { |
| |
164 PidginBuddyListThemePrivate *priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(obj); |
| |
165 |
| |
166 switch(param_id) { |
| |
167 case PROP_ICON_THEME: |
| |
168 g_free(priv->icon_theme); |
| |
169 priv->icon_theme = g_strdup(g_value_get_string(value)); |
| |
170 break; |
| |
171 case PROP_BACKGROUND_COLOR: |
| |
172 g_free(priv->bgcolor); |
| |
173 priv->bgcolor = g_strdup(g_value_get_string(value)); |
| |
174 break; |
| |
175 case PROP_OPACITY: |
| |
176 priv->opacity = g_value_get_double(value); |
| |
177 break; |
| |
178 case PROP_LAYOUT: |
| |
179 g_free(priv->layout); |
| |
180 priv->layout = g_value_get_pointer(value); |
| |
181 break; |
| |
182 case PROP_EXPANDED_COLOR: |
| |
183 g_free(priv->expanded_color); |
| |
184 priv->expanded_color = g_strdup(g_value_get_string(value)); |
| |
185 break; |
| |
186 case PROP_EXPANDED_TEXT: |
| |
187 free_font_and_color(priv->expanded); |
| |
188 priv->expanded = g_value_get_pointer(value); |
| |
189 break; |
| |
190 case PROP_MINIMIZED_COLOR: |
| |
191 g_free(priv->minimized_color); |
| |
192 priv->minimized_color = g_strdup(g_value_get_string(value)); |
| |
193 break; |
| |
194 case PROP_MINIMIZED_TEXT: |
| |
195 free_font_and_color(priv->minimized); |
| |
196 priv->minimized = g_value_get_pointer(value); |
| |
197 break; |
| |
198 case PROP_BGCOLOR1: |
| |
199 g_free(priv->buddy_bgcolor1); |
| |
200 priv->buddy_bgcolor1 = g_strdup(g_value_get_string(value)); |
| |
201 break; |
| |
202 case PROP_BGCOLOR2: |
| |
203 g_free(priv->buddy_bgcolor2); |
| |
204 priv->buddy_bgcolor2 = g_strdup(g_value_get_string(value)); |
| |
205 break; |
| |
206 case PROP_ONLINE: |
| |
207 free_font_and_color(priv->online); |
| |
208 priv->online = g_value_get_pointer(value); |
| |
209 break; |
| |
210 case PROP_AWAY: |
| |
211 free_font_and_color(priv->away); |
| |
212 priv->away = g_value_get_pointer(value); |
| |
213 break; |
| |
214 case PROP_OFFLINE: |
| |
215 free_font_and_color(priv->offline); |
| |
216 priv->offline = g_value_get_pointer(value); |
| |
217 break; |
| |
218 case PROP_MESSAGE: |
| |
219 free_font_and_color(priv->message); |
| |
220 priv->message = g_value_get_pointer(value); |
| |
221 break; |
| |
222 case PROP_STATUS: |
| |
223 free_font_and_color(priv->status); |
| |
224 priv->status = g_value_get_pointer(value); |
| |
225 break; |
| |
226 default: |
| |
227 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, psec); |
| |
228 break; |
| |
229 } |
| |
230 } |
| 101 static void |
231 static void |
| 102 pidgin_buddy_list_theme_finalize (GObject *obj) |
232 pidgin_buddy_list_theme_finalize (GObject *obj) |
| 103 { |
233 { |
| 104 PidginBuddyListThemePrivate *priv; |
234 PidginBuddyListThemePrivate *priv; |
| 105 |
235 |
| 106 priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(obj); |
236 priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(obj); |
| 107 |
237 |
| |
238 /* Buddy List */ |
| |
239 g_free(priv->icon_theme); |
| |
240 g_free(priv->bgcolor); |
| |
241 g_free(priv->layout); |
| |
242 |
| |
243 /* Group */ |
| |
244 g_free(priv->expanded_color); |
| |
245 free_font_and_color(priv->expanded); |
| |
246 g_free(priv->minimized_color); |
| |
247 free_font_and_color(priv->minimized); |
| |
248 |
| |
249 /* Buddy */ |
| |
250 g_free(priv->buddy_bgcolor1); |
| |
251 g_free(priv->buddy_bgcolor2); |
| |
252 |
| |
253 free_font_and_color(priv->online); |
| |
254 free_font_and_color(priv->away); |
| |
255 free_font_and_color(priv->offline); |
| |
256 free_font_and_color(priv->message); |
| |
257 free_font_and_color(priv->status); |
| |
258 |
| |
259 g_free(priv); |
| |
260 |
| 108 parent_class->finalize (obj); |
261 parent_class->finalize (obj); |
| 109 } |
262 } |
| 110 |
263 |
| 111 static void |
264 static void |
| 112 pidgin_buddy_list_theme_class_init (PidginBuddyListThemeClass *klass) |
265 pidgin_buddy_list_theme_class_init (PidginBuddyListThemeClass *klass) |
| 113 { |
266 { |
| 114 GObjectClass *obj_class = G_OBJECT_CLASS(klass); |
267 GObjectClass *obj_class = G_OBJECT_CLASS(klass); |
| |
268 GParamSpec *pspec; |
| 115 |
269 |
| 116 parent_class = g_type_class_peek_parent (klass); |
270 parent_class = g_type_class_peek_parent (klass); |
| 117 |
271 |
| 118 obj_class->finalize = pidgin_buddy_list_theme_finalize; |
272 obj_class->get_property = pidgin_buddy_list_theme_get_property; |
| |
273 obj_class->set_property = pidgin_buddy_list_theme_set_property; |
| |
274 obj_class->finalize = pidgin_buddy_list_theme_finalize; |
| |
275 |
| |
276 /* Icon Theme */ |
| |
277 pspec = g_param_spec_string("icon-theme", "Icon Theme", |
| |
278 "The icon theme to go with this buddy list theme", |
| |
279 NULL, |
| |
280 G_PARAM_READWRITE); |
| |
281 g_object_class_install_property(obj_class, PROP_ICON_THEME, pspec); |
| |
282 |
| |
283 /* Buddy List */ |
| |
284 pspec = g_param_spec_string("background-color", "Background Color", |
| |
285 "The background color for the buddy list", |
| |
286 NULL, |
| |
287 G_PARAM_READWRITE); |
| |
288 g_object_class_install_property(obj_class, PROP_BACKGROUND_COLOR, pspec); |
| |
289 |
| |
290 pspec = g_param_spec_double("opacity","Opacity", |
| |
291 "The transparency of the buddy list", |
| |
292 0.0, 1.0, |
| |
293 1.0, |
| |
294 G_PARAM_READWRITE); |
| |
295 g_object_class_install_property(obj_class, PROP_OPACITY, pspec); |
| |
296 |
| |
297 pspec = g_param_spec_pointer("layout", "Layout", |
| |
298 "The layout of icons, name, and status of the blist", |
| |
299 G_PARAM_READWRITE); |
| |
300 |
| |
301 g_object_class_install_property(obj_class, PROP_LAYOUT, pspec); |
| |
302 |
| |
303 /* Group */ |
| |
304 pspec = g_param_spec_string("expanded-color", "Expanded Background Color", |
| |
305 "The background color of an expanded group", |
| |
306 NULL, |
| |
307 G_PARAM_READWRITE); |
| |
308 g_object_class_install_property(obj_class, PROP_EXPANDED_COLOR, pspec); |
| |
309 |
| |
310 pspec = g_param_spec_pointer("expanded-text", "Expanded Text", |
| |
311 "The text information for when a group is expanded", |
| |
312 G_PARAM_READWRITE); |
| |
313 g_object_class_install_property(obj_class, PROP_EXPANDED_TEXT, pspec); |
| |
314 |
| |
315 pspec = g_param_spec_string("minimized-color", "Minimized Background Color", |
| |
316 "The background color of a minimized group", |
| |
317 NULL, |
| |
318 G_PARAM_READWRITE); |
| |
319 g_object_class_install_property(obj_class, PROP_EXPANDED_COLOR, pspec); |
| |
320 |
| |
321 pspec = g_param_spec_pointer("minimized-text", "Minimized Text", |
| |
322 "The text information for when a group is minimized", |
| |
323 G_PARAM_READWRITE); |
| |
324 g_object_class_install_property(obj_class, PROP_EXPANDED_TEXT, pspec); |
| |
325 |
| |
326 /* Buddy */ |
| |
327 pspec = g_param_spec_string("buddy-bgcolor1", "Buddy Background Color 1", |
| |
328 "The background color of a buddy", |
| |
329 NULL, |
| |
330 G_PARAM_READWRITE); |
| |
331 g_object_class_install_property(obj_class, PROP_BGCOLOR1, pspec); |
| |
332 |
| |
333 pspec = g_param_spec_string("buddy-bgcolor2", "Buddy Background Color 2", |
| |
334 "The background color of a buddy", |
| |
335 NULL, |
| |
336 G_PARAM_READWRITE); |
| |
337 g_object_class_install_property(obj_class, PROP_BGCOLOR2, pspec); |
| |
338 |
| |
339 pspec = g_param_spec_pointer("online", "On-line Text", |
| |
340 "The text information for when a buddy is online", |
| |
341 G_PARAM_READWRITE); |
| |
342 g_object_class_install_property(obj_class, PROP_ONLINE, pspec); |
| |
343 |
| |
344 pspec = g_param_spec_pointer("away", "Away Text", |
| |
345 "The text information for when a buddy is away", |
| |
346 G_PARAM_READWRITE); |
| |
347 g_object_class_install_property(obj_class, PROP_AWAY, pspec); |
| |
348 |
| |
349 pspec = g_param_spec_pointer("offline", "Off-line Text", |
| |
350 "The text information for when a buddy is off-line", |
| |
351 G_PARAM_READWRITE); |
| |
352 g_object_class_install_property(obj_class, PROP_OFFLINE, pspec); |
| |
353 |
| |
354 pspec = g_param_spec_pointer("message", "Meggage Text", |
| |
355 "The text information for when a buddy is has an unread message", |
| |
356 G_PARAM_READWRITE); |
| |
357 g_object_class_install_property(obj_class, PROP_MESSAGE, pspec); |
| |
358 |
| |
359 pspec = g_param_spec_pointer("status", "Status Text", |
| |
360 "The text information for a buddy's status", |
| |
361 G_PARAM_READWRITE); |
| |
362 g_object_class_install_property(obj_class, PROP_STATUS, pspec); |
| 119 } |
363 } |
| 120 |
364 |
| 121 GType |
365 GType |
| 122 pidgin_buddy_list_theme_get_type (void) |
366 pidgin_buddy_list_theme_get_type (void) |
| 123 { |
367 { |
| 145 |
389 |
| 146 /***************************************************************************** |
390 /***************************************************************************** |
| 147 * Public API functions |
391 * Public API functions |
| 148 *****************************************************************************/ |
392 *****************************************************************************/ |
| 149 |
393 |
| |
394 const gchar * |
| |
395 pidgin_buddy_list_theme_get_icon_theme(PidginBuddyListTheme *theme) |
| |
396 { |
| |
397 PidginBuddyListThemePrivate *priv; |
| |
398 |
| |
399 g_return_val_if_fail(PIDGIN_IS_BUDDY_LIST_THEME(theme), NULL); |
| |
400 |
| |
401 priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(G_OBJECT(theme)); |
| |
402 |
| |
403 return priv->icon_theme; |
| |
404 } |
| |
405 |
| |
406 gdouble |
| |
407 pidgin_buddy_list_theme_get_opacity(PidginBuddyListTheme *theme) |
| |
408 { |
| |
409 PidginBuddyListThemePrivate *priv; |
| |
410 |
| |
411 g_return_val_if_fail(PIDGIN_IS_BUDDY_LIST_THEME(theme), 1.0); |
| |
412 |
| |
413 priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(G_OBJECT(theme)); |
| |
414 |
| |
415 return priv->opacity; |
| |
416 } |
| |
417 |
| |
418 const blist_layout * |
| |
419 pidgin_buddy_list_theme_get_layout(PidginBuddyListTheme *theme) |
| |
420 { |
| |
421 PidginBuddyListThemePrivate *priv; |
| |
422 |
| |
423 g_return_val_if_fail(PIDGIN_IS_BUDDY_LIST_THEME(theme), NULL); |
| |
424 |
| |
425 priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(G_OBJECT(theme)); |
| |
426 |
| |
427 return priv->layout; |
| |
428 } |
| |
429 |
| |
430 const gchar * |
| |
431 pidgin_buddy_list_theme_get_expanded_background_color(PidginBuddyListTheme *theme) |
| |
432 { |
| |
433 PidginBuddyListThemePrivate *priv; |
| |
434 |
| |
435 g_return_val_if_fail(PIDGIN_IS_BUDDY_LIST_THEME(theme), NULL); |
| |
436 |
| |
437 priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(G_OBJECT(theme)); |
| |
438 |
| |
439 return priv->expanded_color; |
| |
440 } |
| |
441 |
| |
442 const font_color_pair * |
| |
443 pidgin_buddy_list_theme_get_expanded_text_info(PidginBuddyListTheme *theme) |
| |
444 { |
| |
445 PidginBuddyListThemePrivate *priv; |
| |
446 |
| |
447 g_return_val_if_fail(PIDGIN_IS_BUDDY_LIST_THEME(theme), NULL); |
| |
448 |
| |
449 priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(G_OBJECT(theme)); |
| |
450 |
| |
451 return priv->expanded; |
| |
452 } |
| |
453 |
| |
454 const gchar * |
| |
455 pidgin_buddy_list_theme_get_minimized_background_color(PidginBuddyListTheme *theme) |
| |
456 { |
| |
457 PidginBuddyListThemePrivate *priv; |
| |
458 |
| |
459 g_return_val_if_fail(PIDGIN_IS_BUDDY_LIST_THEME(theme), NULL); |
| |
460 |
| |
461 priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(G_OBJECT(theme)); |
| |
462 |
| |
463 return priv->minimized_color; |
| |
464 } |
| |
465 |
| |
466 const font_color_pair * |
| |
467 pidgin_buddy_list_theme_get_minimized_text_info(PidginBuddyListTheme *theme) |
| |
468 { |
| |
469 PidginBuddyListThemePrivate *priv; |
| |
470 |
| |
471 g_return_val_if_fail(PIDGIN_IS_BUDDY_LIST_THEME(theme), NULL); |
| |
472 |
| |
473 priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(G_OBJECT(theme)); |
| |
474 |
| |
475 return priv->minimized; |
| |
476 } |
| |
477 |
| |
478 const gchar * |
| |
479 pidgin_buddy_list_theme_get_buddy_color_1(PidginBuddyListTheme *theme) |
| |
480 { |
| |
481 PidginBuddyListThemePrivate *priv; |
| |
482 |
| |
483 g_return_val_if_fail(PIDGIN_IS_BUDDY_LIST_THEME(theme), NULL); |
| |
484 |
| |
485 priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(G_OBJECT(theme)); |
| |
486 |
| |
487 return priv->buddy_bgcolor1; |
| |
488 } |
| |
489 |
| |
490 const gchar * |
| |
491 pidgin_buddy_list_theme_get_buddy_color_2(PidginBuddyListTheme *theme) |
| |
492 { |
| |
493 PidginBuddyListThemePrivate *priv; |
| |
494 |
| |
495 g_return_val_if_fail(PIDGIN_IS_BUDDY_LIST_THEME(theme), NULL); |
| |
496 |
| |
497 priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(G_OBJECT(theme)); |
| |
498 |
| |
499 return priv->buddy_bgcolor2; |
| |
500 } |
| |
501 |
| |
502 const font_color_pair * |
| |
503 pidgin_buddy_list_theme_get_online_text_info(PidginBuddyListTheme *theme) |
| |
504 { |
| |
505 PidginBuddyListThemePrivate *priv; |
| |
506 |
| |
507 g_return_val_if_fail(PIDGIN_IS_BUDDY_LIST_THEME(theme), NULL); |
| |
508 |
| |
509 priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(G_OBJECT(theme)); |
| |
510 |
| |
511 return priv->online; |
| |
512 } |
| |
513 |
| |
514 const font_color_pair * |
| |
515 pidgin_buddy_list_theme_get_away_text_info(PidginBuddyListTheme *theme) |
| |
516 { |
| |
517 PidginBuddyListThemePrivate *priv; |
| |
518 |
| |
519 g_return_val_if_fail(PIDGIN_IS_BUDDY_LIST_THEME(theme), NULL); |
| |
520 |
| |
521 priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(G_OBJECT(theme)); |
| |
522 |
| |
523 return priv->away; |
| |
524 } |
| |
525 |
| |
526 const font_color_pair * |
| |
527 pidgin_buddy_list_theme_get_offline_text_info(PidginBuddyListTheme *theme) |
| |
528 { |
| |
529 PidginBuddyListThemePrivate *priv; |
| |
530 |
| |
531 g_return_val_if_fail(PIDGIN_IS_BUDDY_LIST_THEME(theme), NULL); |
| |
532 |
| |
533 priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(G_OBJECT(theme)); |
| |
534 |
| |
535 return priv->offline; |
| |
536 } |
| |
537 |
| |
538 const font_color_pair * |
| |
539 pidgin_buddy_list_theme_get_unread_message_text_info(PidginBuddyListTheme *theme) |
| |
540 { |
| |
541 PidginBuddyListThemePrivate *priv; |
| |
542 |
| |
543 g_return_val_if_fail(PIDGIN_IS_BUDDY_LIST_THEME(theme), NULL); |
| |
544 |
| |
545 priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(G_OBJECT(theme)); |
| |
546 |
| |
547 return priv->message; |
| |
548 } |
| |
549 |
| |
550 const font_color_pair * |
| |
551 pidgin_buddy_list_theme_get_status_text_info(PidginBuddyListTheme *theme) |
| |
552 { |
| |
553 PidginBuddyListThemePrivate *priv; |
| |
554 |
| |
555 g_return_val_if_fail(PIDGIN_IS_BUDDY_LIST_THEME(theme), NULL); |
| |
556 |
| |
557 priv = PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(G_OBJECT(theme)); |
| |
558 |
| |
559 return priv->status; |
| |
560 } |
| |
561 |