comparison pidgin/gtkconv-theme.c @ 32827:4a34689eeb33 default tip

merged from im.pidgin.pidgin
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Sat, 19 Nov 2011 14:42:54 +0900
parents 910475e626be
children
comparison
equal deleted inserted replaced
32692:0f94ec89f0bc 32827:4a34689eeb33
81 /****************************************************************************** 81 /******************************************************************************
82 * Globals 82 * Globals
83 *****************************************************************************/ 83 *****************************************************************************/
84 84
85 static GObjectClass *parent_class = NULL; 85 static GObjectClass *parent_class = NULL;
86 #if GLIB_CHECK_VERSION(2,26,0)
86 static GParamSpec *properties[PROP_LAST]; 87 static GParamSpec *properties[PROP_LAST];
88 #endif
87 89
88 /****************************************************************************** 90 /******************************************************************************
89 * Helper Functions 91 * Helper Functions
90 *****************************************************************************/ 92 *****************************************************************************/
91 93
107 } 109 }
108 110
109 return val; 111 return val;
110 } 112 }
111 113
114 /* The template path can either come from the theme, or can
115 * be stock Template.html that comes with Pidgin */
116 static char *
117 get_template_path(const char *dir)
118 {
119 char *file;
120
121 file = g_build_filename(dir, "Contents", "Resources", "Template.html", NULL);
122
123 if (!g_file_test(file, G_FILE_TEST_EXISTS)) {
124 g_free(file);
125 file = g_build_filename(DATADIR, "pidgin", "theme", "conversation", "Template.html", NULL);
126 }
127
128 return file;
129 }
130
112 static const char * 131 static const char *
113 get_template_html(PidginConvThemePrivate *priv, const char *dir) 132 get_template_html(PidginConvThemePrivate *priv, const char *dir)
114 { 133 {
115 char *file; 134 char *file;
116 135
117 if (priv->template_html) 136 if (priv->template_html)
118 return priv->template_html; 137 return priv->template_html;
119 138
120 /* The template path can either come from the theme, or can 139 file = get_template_path(dir);
121 * be stock Template.html that comes with the plugin */
122 file = g_build_filename(dir, "Contents", "Resources", "Template.html", NULL);
123
124 if (!g_file_test(file, G_FILE_TEST_EXISTS)) {
125 g_free(file);
126 file = g_build_filename(DATADIR, "pidgin", "webkit", "Template.html", NULL);
127 }
128 140
129 if (!g_file_get_contents(file, &priv->template_html, NULL, NULL)) { 141 if (!g_file_get_contents(file, &priv->template_html, NULL, NULL)) {
130 purple_debug_error("webkit", "Could not locate a Template.html (%s)\n", file); 142 purple_debug_error("webkit", "Could not locate a Template.html (%s)\n", file);
131 priv->template_html = g_strdup(""); 143 priv->template_html = g_strdup("");
132 } 144 }
367 379
368 file = g_build_filename(dir, "Contents", "Resources", "Outgoing", "NextContext.html", NULL); 380 file = g_build_filename(dir, "Contents", "Resources", "Outgoing", "NextContext.html", NULL);
369 if (!g_file_get_contents(file, &priv->outgoing_next_context_html, NULL, NULL)) { 381 if (!g_file_get_contents(file, &priv->outgoing_next_context_html, NULL, NULL)) {
370 priv->outgoing_next_context_html = g_strdup(get_outgoing_context_html(priv, dir)); 382 priv->outgoing_next_context_html = g_strdup(get_outgoing_context_html(priv, dir));
371 } 383 }
384 g_free(file);
372 385
373 return priv->outgoing_next_context_html; 386 return priv->outgoing_next_context_html;
374 } 387 }
375 388
376 static void 389 static void
505 pspec = g_param_spec_boxed("info", "Info", 518 pspec = g_param_spec_boxed("info", "Info",
506 "The information about this theme", 519 "The information about this theme",
507 G_TYPE_HASH_TABLE, 520 G_TYPE_HASH_TABLE,
508 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); 521 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
509 g_object_class_install_property(obj_class, PROP_INFO, pspec); 522 g_object_class_install_property(obj_class, PROP_INFO, pspec);
523 #if GLIB_CHECK_VERSION(2,26,0)
510 properties[PROP_INFO] = pspec; 524 properties[PROP_INFO] = pspec;
525 #endif
511 526
512 /* VARIANT */ 527 /* VARIANT */
513 pspec = g_param_spec_string("variant", "Variant", 528 pspec = g_param_spec_string("variant", "Variant",
514 "The current variant for this theme", 529 "The current variant for this theme",
515 NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); 530 NULL, G_PARAM_READWRITE);
516 g_object_class_install_property(obj_class, PROP_VARIANT, pspec); 531 g_object_class_install_property(obj_class, PROP_VARIANT, pspec);
532 #if GLIB_CHECK_VERSION(2,26,0)
517 properties[PROP_VARIANT] = pspec; 533 properties[PROP_VARIANT] = pspec;
518 534 #endif
519 } 535 }
520 536
521 GType 537 GType
522 pidgin_conversation_theme_get_type(void) 538 pidgin_conversation_theme_get_type(void)
523 { 539 {
678 694
679 void 695 void
680 pidgin_conversation_theme_set_variant(PidginConvTheme *theme, const char *variant) 696 pidgin_conversation_theme_set_variant(PidginConvTheme *theme, const char *variant)
681 { 697 {
682 _set_variant(theme, variant); 698 _set_variant(theme, variant);
699 #if GLIB_CHECK_VERSION(2,26,0)
683 g_object_notify_by_pspec(G_OBJECT(theme), properties[PROP_VARIANT]); 700 g_object_notify_by_pspec(G_OBJECT(theme), properties[PROP_VARIANT]);
701 #else
702 g_object_notify(G_OBJECT(theme), "variant");
703 #endif
684 } 704 }
685 705
686 const GList * 706 const GList *
687 pidgin_conversation_theme_get_variants(PidginConvTheme *theme) 707 pidgin_conversation_theme_get_variants(PidginConvTheme *theme)
688 { 708 {
697 717
698 char * 718 char *
699 pidgin_conversation_theme_get_template_path(PidginConvTheme *theme) 719 pidgin_conversation_theme_get_template_path(PidginConvTheme *theme)
700 { 720 {
701 const char *dir; 721 const char *dir;
702 char *filename;
703 722
704 g_return_val_if_fail(theme != NULL, NULL); 723 g_return_val_if_fail(theme != NULL, NULL);
705 724
706 dir = purple_theme_get_dir(PURPLE_THEME(theme)); 725 dir = purple_theme_get_dir(PURPLE_THEME(theme));
707 filename = g_build_filename(dir, "Contents", "Resources", "Template.html", NULL); 726
708 727 return get_template_path(dir);
709 if (!g_file_test(filename, G_FILE_TEST_EXISTS)) {
710 g_free(filename);
711 filename = g_build_filename(DATADIR, "pidgin", "webkit", "Template.html", NULL);
712 }
713
714 return filename;
715 } 728 }
716 729
717 char * 730 char *
718 pidgin_conversation_theme_get_css_path(PidginConvTheme *theme) 731 pidgin_conversation_theme_get_css_path(PidginConvTheme *theme)
719 { 732 {