2004-11-12 [paul] 0.9.12cvs146.4
[claws.git] / src / prefs_themes.c
index 12f3c131b51b27a33b6c235f25dfc2a2c28708f6..de6204ce4b519a77ff48ca9702293dc128e51373 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 2003 Hiroyuki Yamamoto & the Sylpheed-Claws team
+ * Copyright (C) 2003-2004 Hiroyuki Yamamoto & the Sylpheed-Claws team
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -33,6 +33,7 @@
 
 #include "intl.h"
 #include "utils.h"
+#include "codeconv.h"
 #include "prefs_common.h"
 #include "prefs_gtk.h"
 
@@ -274,9 +275,9 @@ static void prefs_themes_set_themes_menu(GtkOptionMenu *opmenu, const ThemesData
                
                item = gtk_menu_item_new_with_label(tname->name);
                gtk_widget_show(item);
-               gtk_signal_connect(GTK_OBJECT(item), "activate",
-                                  GTK_SIGNAL_FUNC(prefs_themes_menu_item_activated_cb),
-                                  tname->item->data);
+               g_signal_connect(G_OBJECT(item), "activate",
+                                G_CALLBACK(prefs_themes_menu_item_activated_cb),
+                                tname->item->data);
                gtk_menu_append(GTK_MENU(menu), item);
 
                if (tdata->displayed != NULL && tdata->displayed == tpath)
@@ -321,9 +322,14 @@ static void prefs_themes_get_themes_and_names(ThemesData *tdata)
 
 void prefs_themes_init(void)
 {
-       ThemesData *tdata;
-       ThemesPage *page;
-       GList      *tpaths;
+       ThemesData   *tdata;
+       ThemesPage   *page;
+       GList        *tpaths;
+       static gchar *path[3];
+
+       path[0] = _("Display");
+       path[1] = _("Themes");
+       path[2] = NULL;
 
        debug_print("Creating prefereces for themes...\n");
        
@@ -334,7 +340,7 @@ void prefs_themes_init(void)
        
        page = g_new0(ThemesPage, 1);
        
-       page->page.path = _("Display/Themes");
+       page->page.path = path;
        page->page.create_widget = prefs_themes_create_widget;
        page->page.destroy_widget = prefs_themes_destroy_widget;
        page->page.save_page = prefs_themes_save;
@@ -368,7 +374,6 @@ static void prefs_themes_free_names(ThemesData *tdata)
 void prefs_themes_done(void)
 {
        ThemesData *tdata = prefs_themes_data;
-       GList      *n;
 
        debug_print("Finished prefereces for themes.\n");
        
@@ -447,7 +452,6 @@ static void prefs_themes_btn_remove_clicked_cb(GtkWidget *widget, gpointer data)
 
 static void prefs_themes_btn_install_clicked_cb(GtkWidget *widget, gpointer data)
 {
-       struct stat s;
        gchar      *filename, *source;
        gchar      *themeinfo, *themename;
        gchar      *alert_title = NULL;
@@ -455,12 +459,12 @@ static void prefs_themes_btn_install_clicked_cb(GtkWidget *widget, gpointer data
        AlertValue  val = 0;
        ThemesData *tdata = prefs_themes_data;
        
-       filename = filesel_select_file(_("Select theme folder"), NULL);
+       filename = filesel_select_file_open_folder(_("Select theme folder"), NULL);
        if (filename == NULL) 
                return;
        
        cinfo = g_new0(CopyInfo, 1);
-       source = g_dirname(filename);
+       source = g_path_get_dirname(filename);
        themename = g_basename(source);
        debug_print("Installing '%s' theme from %s\n", themename, filename);
 
@@ -475,7 +479,7 @@ static void prefs_themes_btn_install_clicked_cb(GtkWidget *widget, gpointer data
        }
        if (getuid() == 0) {
                val = alertpanel(alert_title,
-                                _("Do you want to install theme for system's all users?"),
+                                _("Do you want to install theme for all users?"),
                                 _("Yes"), _("No"), _("Cancel"));
                switch (val) {
                case G_ALERTDEFAULT:
@@ -506,17 +510,21 @@ static void prefs_themes_btn_install_clicked_cb(GtkWidget *widget, gpointer data
        prefs_themes_foreach_file(source, prefs_themes_file_install, cinfo);
        if (cinfo->status == NULL) {
                GList *insted;
-               
-               alertpanel_notice(_("Theme installed succesfully"));
+
                /* update interface to show newly installed theme */
                prefs_themes_get_themes_and_names(tdata);
                insted = g_list_find_custom(tdata->themes, 
                                            (gpointer)(cinfo->dest), 
                                            (GCompareFunc)strcmp2);
-               tdata->displayed = (gchar *)(insted->data);
-               prefs_themes_set_themes_menu(GTK_OPTION_MENU(tdata->page->op_menu), tdata);
-               prefs_themes_display_global_stats(tdata);
-               prefs_themes_get_theme_info(tdata);     
+               if (NULL != insted) {
+                       alertpanel_notice(_("Theme installed succesfully"));
+                       tdata->displayed = (gchar *)(insted->data);
+                       prefs_themes_set_themes_menu(GTK_OPTION_MENU(tdata->page->op_menu), tdata);
+                       prefs_themes_display_global_stats(tdata);
+                       prefs_themes_get_theme_info(tdata);
+               }
+               else
+                       alertpanel_error(_("Failed installing theme"));
        }
        else
                alertpanel_error(_("File %s failed\nwhile installing theme."), cinfo->status);
@@ -557,29 +565,44 @@ static void prefs_themes_update_buttons(const ThemesData *tdata)
                gtk_widget_set_sensitive(theme->btn_remove, can_rem);
 }
 
+/* placeholders may already be utf8 (i18n) */
+#define SET_LABEL_TEXT_UTF8(label, text)                               \
+{                                                                      \
+       gchar *tmpstr;                                                  \
+                                                                       \
+       if (!g_utf8_validate(text, -1, NULL))                           \
+               tmpstr = conv_codeset_strdup(text,                      \
+                       conv_get_current_charset_str(), CS_UTF_8);      \
+       else                                                            \
+               tmpstr = g_strdup(text);                                \
+                                                                       \
+       gtk_label_set_text(GTK_LABEL(label), tmpstr);                   \
+       g_free(tmpstr);                                                 \
+}
 static void prefs_themes_display_theme_info(ThemesData *tdata, const ThemeInfo *info)
 {
        ThemesPage *theme = tdata->page;
        gchar *save_prefs_path;
        gint   i;
-       
-       gtk_label_set_text(GTK_LABEL(theme->name), info->name);
-       gtk_label_set_text(GTK_LABEL(theme->author), info->author);
-       gtk_label_set_text(GTK_LABEL(theme->url), info->url);   
-       gtk_label_set_text(GTK_LABEL(theme->status), info->status);
+
+       SET_LABEL_TEXT_UTF8(theme->name,        info->name);
+       SET_LABEL_TEXT_UTF8(theme->author,      info->author);
+       SET_LABEL_TEXT_UTF8(theme->url,         info->url);
+       SET_LABEL_TEXT_UTF8(theme->status,      info->status);
 
        save_prefs_path = prefs_common.pixmap_theme_path;
        prefs_common.pixmap_theme_path = tdata->displayed;
        for (i = 0; i < PREVIEW_ICONS; ++i) {
                stock_pixmap_gdk(theme->window, prefs_themes_icons[i], 
                                &(theme->pixmaps[i]), &(theme->masks[i]));
-               gtk_pixmap_set(GTK_PIXMAP(theme->icons[i]),
+               gtk_image_set_from_pixmap(GTK_IMAGE(theme->icons[i]),
                                theme->pixmaps[i], theme->masks[i]);
        }
        prefs_common.pixmap_theme_path = save_prefs_path;
 
        prefs_themes_update_buttons(tdata);
 }
+#undef SET_LABEL_TEXT_UTF8
 
 static void prefs_themes_display_global_stats(const ThemesData *tdata)
 {
@@ -690,7 +713,7 @@ static gchar *prefs_themes_get_theme_stats(const gchar *dirname)
        dinfo = g_new0(DirInfo, 1);
        
        prefs_themes_foreach_file(dirname, prefs_themes_file_stats, dinfo);
-       stats = g_strdup_printf(_("%d files (%d icons), size is %s"), 
+       stats = g_strdup_printf(_("%d files (%d icons), size: %s"), 
                                dinfo->files, dinfo->pixms, to_human_readable(dinfo->bytes));
        
        g_free(dinfo);
@@ -720,9 +743,9 @@ static GtkWidget* create_dummy_pixmap(GtkWidget *widget)
                        NULL, dummy_pixmap_xpm);
        if (gdkpixmap == NULL)
                g_error ("Couldn't create replacement pixmap.");
-       pixmap = gtk_pixmap_new (gdkpixmap, mask);
-       gdk_pixmap_unref (gdkpixmap);
-       gdk_bitmap_unref (mask);
+       pixmap = gtk_image_new_from_pixmap(gdkpixmap, mask);
+       g_object_unref (gdkpixmap);
+       g_object_unref (mask);
        return pixmap;
 }
 /* END GLADE CODE */
@@ -971,18 +994,18 @@ static void prefs_themes_create_widget(PrefsPage *page, GtkWindow *window, gpoin
        gtk_container_add (GTK_CONTAINER (hbuttonbox1), btn_remove);
        GTK_WIDGET_SET_FLAGS (btn_remove, GTK_CAN_DEFAULT);
 
-       gtk_signal_connect(GTK_OBJECT (btn_use), "clicked",
-                       GTK_SIGNAL_FUNC (prefs_themes_btn_use_clicked_cb),
-                       NULL);
-       gtk_signal_connect(GTK_OBJECT(btn_remove), "clicked",
-                       GTK_SIGNAL_FUNC(prefs_themes_btn_remove_clicked_cb),
-                       NULL);
-       gtk_signal_connect(GTK_OBJECT(btn_install), "clicked",
-                       GTK_SIGNAL_FUNC(prefs_themes_btn_install_clicked_cb),
-                       NULL);
-       gtk_signal_connect(GTK_OBJECT(btn_more), "clicked",
-                       GTK_SIGNAL_FUNC(prefs_themes_btn_more_clicked_cb),
-                       NULL);
+       g_signal_connect(G_OBJECT(btn_use), "clicked",
+                        G_CALLBACK(prefs_themes_btn_use_clicked_cb),
+                        NULL);
+       g_signal_connect(G_OBJECT(btn_remove), "clicked",
+                        G_CALLBACK(prefs_themes_btn_remove_clicked_cb),
+                        NULL);
+       g_signal_connect(G_OBJECT(btn_install), "clicked",
+                        G_CALLBACK(prefs_themes_btn_install_clicked_cb),
+                        NULL);
+       g_signal_connect(G_OBJECT(btn_more), "clicked",
+                        G_CALLBACK(prefs_themes_btn_more_clicked_cb),
+                        NULL);
 
        gtk_widget_grab_default (btn_use);
        /* END GLADE EDITED CODE */