2007-10-13 [paul] 3.0.2cvs66
[claws.git] / src / gtk / gtkutils.c
index 97832977f2539bfeaff66ca0caa7ffb7541e28bd..a86950c5b7bdc334b102798aa674616582f42ca1 100644 (file)
@@ -36,6 +36,8 @@
 #include <stdarg.h>
 #include <sys/stat.h>
 
+#include "combobox.h"
+
 #if HAVE_LIBCOMPFACE
 #  include <compface.h>
 #endif
@@ -929,21 +931,22 @@ void label_window_destroy(GtkWidget *window)
 }
 
 GtkWidget *gtkut_account_menu_new(GList                        *ac_list,
-                                 GCallback              callback,
-                                 gpointer               data)
+                                       GCallback               callback,
+                                 gpointer              data)
 {
        GList *cur_ac;
-       GtkWidget *menu;
+       GtkWidget *optmenu;
+       GtkListStore *menu;
+       GtkTreeIter iter;
+       PrefsAccount *account;
+       gchar *name;
        
        g_return_val_if_fail(ac_list != NULL, NULL);
 
-       menu = gtk_menu_new();
+       optmenu = gtkut_sc_combobox_create(NULL, FALSE);
+       menu = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(optmenu)));
 
        for (cur_ac = ac_list; cur_ac != NULL; cur_ac = cur_ac->next) {
-               gchar *name;
-               GtkWidget *menuitem;
-               PrefsAccount *account;
-               
                account = (PrefsAccount *) cur_ac->data;
                if (account->name)
                        name = g_strdup_printf("%s: %s <%s>",
@@ -954,13 +957,15 @@ GtkWidget *gtkut_account_menu_new(GList                   *ac_list,
                        name = g_strdup_printf("%s: %s",
                                               account->account_name,
                                               account->address);
-               MENUITEM_ADD(menu, menuitem, name, account->account_id);
+               COMBOBOX_ADD_ESCAPED(menu, name, account->account_id);
                g_free(name);
-               if (callback != NULL)
-                       g_signal_connect(G_OBJECT(menuitem), "activate",
-                                        callback, data);
        }
-       return menu;
+       gtk_combo_box_set_active(GTK_COMBO_BOX(optmenu), 0);
+
+       if( callback != NULL )
+               g_signal_connect(G_OBJECT(optmenu), "changed", callback, data);
+
+       return optmenu;
 }
 
 void gtkut_set_widget_bgcolor_rgb(GtkWidget *widget, guint rgbvalue)
@@ -1228,7 +1233,8 @@ GtkWidget *xface_get_from_header(const gchar *o_xface, GdkColor *background,
        pixmap = gdk_pixmap_create_from_xpm_d
                (window, &mask, 
                 background, xpm_xface);
-       return gtk_image_new_from_pixmap(pixmap, mask);
+       return gtk_image_new_from_pixbuf(
+               gdk_pixbuf_new_from_xpm_data((const char **)xpm_xface));
 }
 #endif
 
@@ -1379,6 +1385,20 @@ GtkWidget *gtkut_get_link_btn(GtkWidget *window, const gchar *url, const gchar *
        return btn;
 }
 
+static gboolean _combobox_separator_func(GtkTreeModel *model,
+               GtkTreeIter *iter, gpointer data)
+{
+       gchar *txt = NULL;
+
+       g_return_val_if_fail(model != NULL, FALSE);
+
+       gtk_tree_model_get(model, iter, COMBOBOX_TEXT, &txt, -1);
+
+       if( txt == NULL )
+               return TRUE;
+       return FALSE;
+}
+
 GtkWidget *gtkut_sc_combobox_create(GtkWidget *eventbox, gboolean focus_on_click)
 {
        GtkWidget *combobox;
@@ -1401,6 +1421,10 @@ GtkWidget *gtkut_sc_combobox_create(GtkWidget *eventbox, gboolean focus_on_click
 #if GTK_CHECK_VERSION(2,6,0)
        gtk_combo_box_set_focus_on_click(GTK_COMBO_BOX(combobox), focus_on_click);
 #endif
+
+       gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(combobox),
+                       (GtkTreeViewRowSeparatorFunc)_combobox_separator_func, NULL, NULL);
+
        return combobox;
 }
 
@@ -1618,24 +1642,18 @@ gboolean gtkut_tree_model_get_iter_last(GtkTreeModel *model,
        return gtk_tree_model_iter_nth_child(model, iter, NULL, count - 1);
 }
 
-#ifdef MAEMO
-HildonWindow *gtkut_window_new         (GtkWindowType   type,
-                                        const gchar    *class)
-{
-       HildonWindow *window = HILDON_WINDOW(hildon_window_new());
-       gtk_window_set_role(GTK_WINDOW(window), class);
-       hildon_program_add_window(hildon_program(), window);
-       return window;
-}
-#else
 GtkWidget *gtkut_window_new            (GtkWindowType   type,
                                         const gchar    *class)
 {
+#ifndef MAEMO
        GtkWidget *window = gtk_window_new(type);
+#else
+       GtkWidget *window = hildon_window_new();
+       hildon_program_add_window(hildon_program, HILDON_WINDOW(window));
+#endif
        gtk_window_set_role(GTK_WINDOW(window), class);
        return window;
 }
-#endif
 
 gboolean gtkut_tree_iter_comp(GtkTreeModel *model, 
                                     GtkTreeIter *iter1,