pidgin/gtkblist-theme.c

branch
soc.2008.themes
changeset 23657
41ba956129e0
parent 23656
d4acd51c1446
child 23659
8251d0f67df5
equal deleted inserted replaced
23656:d4acd51c1446 23657:41ba956129e0
24 #include "gtkblist-theme.h" 24 #include "gtkblist-theme.h"
25 25
26 #define PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(Gobject) \ 26 #define PIDGIN_BUDDY_LIST_THEME_GET_PRIVATE(Gobject) \
27 ((PidginBuddyListThemePrivate *) ((PIDGIN_BUDDY_LIST_THEME(Gobject))->priv)) 27 ((PidginBuddyListThemePrivate *) ((PIDGIN_BUDDY_LIST_THEME(Gobject))->priv))
28 28
29 29 #define free_font_and_color(font_color_pair) \
30 g_free(font_color_pair->font); \
31 g_free(font_color_pair->color); \
32 g_free(font_color_pair)
30 /****************************************************************************** 33 /******************************************************************************
31 * Structs 34 * Structs
32 *****************************************************************************/ 35 *****************************************************************************/
33 typedef struct { 36 typedef struct {
34 gchar *icon_theme; 37 gchar *icon_theme;
35 38
36 /* Buddy list */ 39 /* Buddy list */
37 gchar *blist_color; 40 gchar *bgcolor;
38 gdouble opacity; 41 gdouble opacity;
42 blist_layout *layout;
39 43
40 /* groups */ 44 /* groups */
41 gchar *expanded_bgcolor; 45 gchar *expanded_color;
42 gchar *expanded_tcolor; 46 font_color_pair *expanded;
43 gchar *expanded_font; 47
44 48 gchar *minimized_color;
45 gchar *minimized_bgcolor; 49 font_color_pair *minimized;
46 gchar *minimized_tcolor;
47 gchar *minimized_font;
48 50
49 /* buddy */ 51 /* buddy */
50 gchar *buddy_bgcolor1; 52 gchar *buddy_bgcolor1;
51 gchar *buddy_bgcolor2; 53 gchar *buddy_bgcolor2;
52 54
53 gint icon; 55 font_color_pair *online;
54 gint text; 56 font_color_pair *away;
55 gint status_icon; 57 font_color_pair *offline;
56 gboolean status; 58 font_color_pair *message;
57 59 font_color_pair *status;
58 gchar *online_font;
59 gchar *online_color;
60
61 gchar *away_font;
62 gchar *away_color;
63
64 gchar *offline_font;
65 gchar *offline_color;
66
67 gchar *message_font;
68 gchar *message_color;
69
70 gchar *status_font;
71 gchar *status_color;
72 60
73 } PidginBuddyListThemePrivate; 61 } PidginBuddyListThemePrivate;
74 62
75 /****************************************************************************** 63 /******************************************************************************
76 * Globals 64 * Globals
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

mercurial