remove gtk_window_set_wmclass()
[claws.git] / src / foldersel.c
index 0c00cf39c44f86996664224ee0082b7a3cd0bba3..70ecb77d34549f3ba7656ed6bcbf0da060e3d799 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
  *
  * 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
@@ -60,8 +60,10 @@ static GtkWidget *ok_button;
 static GtkWidget *cancel_button;
 
 static FolderItem *folder_item;
+static FolderItem *selected_item;
 
 static gboolean cancelled;
+static gboolean finished;
 
 static void foldersel_create   (void);
 static void foldersel_init     (void);
@@ -82,7 +84,7 @@ static void foldersel_activated       (void);
 static gint delete_event       (GtkWidget      *widget,
                                 GdkEventAny    *event,
                                 gpointer        data);
-static void key_pressed                (GtkWidget      *widget,
+static gboolean key_pressed    (GtkWidget      *widget,
                                 GdkEventKey    *event,
                                 gpointer        data);
 
@@ -96,6 +98,8 @@ FolderItem *foldersel_folder_sel(Folder *cur_folder,
 {
        GtkCTreeNode *node;
 
+       selected_item = NULL;
+
        if (!window) {
                foldersel_create();
                foldersel_init();
@@ -122,17 +126,20 @@ FolderItem *foldersel_folder_sel(Folder *cur_folder,
        gtk_widget_grab_focus(ok_button);
        gtk_widget_grab_focus(ctree);
 
-       cancelled = FALSE;
+       cancelled = finished = FALSE;
 
-       gtk_main();
+       while (finished == FALSE)
+               gtk_main_iteration();
 
        gtk_widget_hide(window);
        gtk_entry_set_text(GTK_ENTRY(entry), "");
        gtk_clist_clear(GTK_CLIST(ctree));
 
-       if (!cancelled && folder_item && folder_item->path)
+       if (!cancelled &&
+           selected_item && selected_item->path) {
+               folder_item = selected_item;
                return folder_item;
-       else
+       else
                return NULL;
 }
 
@@ -142,25 +149,23 @@ static void foldersel_create(void)
        GtkWidget *scrolledwin;
        GtkWidget *confirm_area;
 
-       window = gtk_window_new(GTK_WINDOW_DIALOG);
+       window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(window), _("Select folder"));
-       gtk_widget_set_usize(window, 300, 400);
-       gtk_container_set_border_width(GTK_CONTAINER(window), BORDER_WIDTH);
+       gtk_container_set_border_width(GTK_CONTAINER(window), 4);
        gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
        gtk_window_set_modal(GTK_WINDOW(window), TRUE);
-       gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, TRUE);
-       gtk_window_set_wmclass
-               (GTK_WINDOW(window), "folder_selection", "Sylpheed");
-       gtk_signal_connect(GTK_OBJECT(window), "delete_event",
-                          GTK_SIGNAL_FUNC(delete_event), NULL);
-       gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
-                          GTK_SIGNAL_FUNC(key_pressed), NULL);
+       gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
+       g_signal_connect(G_OBJECT(window), "delete_event",
+                        G_CALLBACK(delete_event), NULL);
+       g_signal_connect(G_OBJECT(window), "key_press_event",
+                        G_CALLBACK(key_pressed), NULL);
        MANAGE_WINDOW_SIGNALS_CONNECT(window);
 
        vbox = gtk_vbox_new(FALSE, 4);
        gtk_container_add(GTK_CONTAINER(window), vbox);
 
        scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+       gtk_widget_set_size_request(window, 300, 360);
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
                                       GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
        gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0);
@@ -177,28 +182,29 @@ static void foldersel_create(void)
        gtk_clist_set_compare_func(GTK_CLIST(ctree), foldersel_clist_compare);
        GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(ctree)->column[0].button,
                               GTK_CAN_FOCUS);
-       /* gtk_signal_connect(GTK_OBJECT(ctree), "tree_select_row",
-                          GTK_SIGNAL_FUNC(foldersel_selected), NULL); */
-       gtk_signal_connect(GTK_OBJECT(ctree), "select_row",
-                          GTK_SIGNAL_FUNC(foldersel_selected), NULL);
+       /* g_signal_connect(G_OBJECT(ctree), "tree_select_row",
+                           G_CALLBACK(foldersel_selected), NULL); */
+       g_signal_connect(G_OBJECT(ctree), "select_row",
+                        G_CALLBACK(foldersel_selected), NULL);
 
        entry = gtk_entry_new();
+       gtk_entry_set_editable(GTK_ENTRY(entry), FALSE);
        gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 0);
-       gtk_signal_connect(GTK_OBJECT(entry), "activate",
-                          GTK_SIGNAL_FUNC(foldersel_activated), NULL);
+       g_signal_connect(G_OBJECT(entry), "activate",
+                        G_CALLBACK(foldersel_activated), NULL);
 
        gtkut_button_set_create(&confirm_area,
                                &ok_button,     _("OK"),
                                &cancel_button, _("Cancel"),
-                               NULL, NULL);
+                               NULL,           NULL);
 
        gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0);
        gtk_widget_grab_default(ok_button);
 
-       gtk_signal_connect(GTK_OBJECT(ok_button), "clicked",
-                          GTK_SIGNAL_FUNC(foldersel_ok), NULL);
-       gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked",
-                          GTK_SIGNAL_FUNC(foldersel_cancel), NULL);
+       g_signal_connect(G_OBJECT(ok_button), "clicked",
+                        G_CALLBACK(foldersel_ok), NULL);
+       g_signal_connect(G_OBJECT(cancel_button), "clicked",
+                        G_CALLBACK(foldersel_cancel), NULL);
 
        gtk_widget_show_all(window);
 }
@@ -218,40 +224,7 @@ static gboolean foldersel_gnode_func(GtkCTree *ctree, guint depth,
        FolderItem *item = FOLDER_ITEM(gnode->data);
        gchar *name;
 
-       switch (item->stype) {
-       case F_INBOX:
-               name = _("Inbox");
-               break;
-       case F_OUTBOX:
-               name = _("Sent");
-               break;
-       case F_QUEUE:
-               name = _("Queue");
-               break;
-       case F_TRASH:
-               name = _("Trash");
-               break;
-       case F_DRAFT:
-               name = _("Drafts");
-               break;
-       default:
-               name = item->name;
-
-               if (!item->parent) {
-                       switch (FOLDER_TYPE(item->folder)) {
-                       case F_MBOX:
-                               Xstrcat_a(name, name, " (MBOX)", ); break;
-                       case F_MH:
-                               Xstrcat_a(name, name, " (MH)", ); break;
-                       case F_IMAP:
-                               Xstrcat_a(name, name, " (IMAP4)", ); break;
-                       case F_NEWS:
-                               Xstrcat_a(name, name, " (News)", ); break;
-                       default:
-                               break;
-                       }
-               }
-       }
+       name = folder_item_get_name(item);
 
        gtk_ctree_node_set_row_data(ctree, cnode, item);
        gtk_ctree_set_node_info(ctree, cnode, name,
@@ -260,6 +233,8 @@ static gboolean foldersel_gnode_func(GtkCTree *ctree, guint depth,
                                folderopenxpm, folderopenxpmmask,
                                FALSE, FALSE);
 
+       g_free(name);
+
        return TRUE;
 }
 
@@ -336,12 +311,16 @@ static void foldersel_set_tree(Folder *cur_folder, FolderSelectionType type)
 static void foldersel_selected(GtkCList *clist, gint row, gint column,
                               GdkEvent *event, gpointer data)
 {
-       FolderItem *item;
        GdkEventButton *ev = (GdkEventButton *)event;
 
-       item = gtk_clist_get_row_data(clist, row);
-       if (item) gtk_entry_set_text(GTK_ENTRY(entry),
-                                    item->path ? item->path : "");
+       selected_item = gtk_clist_get_row_data(clist, row);
+       if (selected_item && selected_item->path) {
+               gchar *id;
+               id = folder_item_get_identifier(selected_item);
+               gtk_entry_set_text(GTK_ENTRY(entry), id);
+               g_free(id);
+       } else
+               gtk_entry_set_text(GTK_ENTRY(entry), "");
 
        if (ev && GDK_2BUTTON_PRESS == ev->type)
                gtk_button_clicked(GTK_BUTTON(ok_button));
@@ -349,20 +328,13 @@ static void foldersel_selected(GtkCList *clist, gint row, gint column,
 
 static void foldersel_ok(GtkButton *button, gpointer data)
 {
-       GList *list;
-
-       list = GTK_CLIST(ctree)->selection;
-       if (list)
-               folder_item = gtk_ctree_node_get_row_data
-                       (GTK_CTREE(ctree), GTK_CTREE_NODE(list->data));
-
-       gtk_main_quit();
+       finished = TRUE;
 }
 
 static void foldersel_cancel(GtkButton *button, gpointer data)
 {
        cancelled = TRUE;
-       gtk_main_quit();
+       finished = TRUE;
 }
 
 static void foldersel_activated(void)
@@ -376,10 +348,11 @@ static gint delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data)
        return TRUE;
 }
 
-static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
+static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
 {
        if (event && event->keyval == GDK_Escape)
                foldersel_cancel(NULL, NULL);
+       return FALSE;
 }
 
 static gint foldersel_clist_compare(GtkCList *clist,