Use correct dir separator for "Scanning folder ..." in statusbar.
[claws.git] / src / folderview.c
index 73555ea81e11e91dfb491f7350325e76189c0619..af710058df823a197334aab09879829f0632acc8 100644 (file)
@@ -552,9 +552,9 @@ void folderview_set_column_order(FolderView *folderview)
        }
 
        if (folderview->selected)
-               sel_item = gtk_cmctree_node_get_row_data(GTK_CMCTREE(ctree), folderview->selected);
+               sel_item = folderview_get_selected_item(folderview);
        if (folderview->opened)
-               op_item = gtk_cmctree_node_get_row_data(GTK_CMCTREE(ctree), folderview->opened);
+               op_item = folderview_get_opened_item(folderview);
 
        debug_print("recreating tree...\n");
        gtk_widget_destroy(folderview->ctree);
@@ -769,9 +769,9 @@ void folderview_set(FolderView *folderview)
        main_window_cursor_wait(mainwin);
 
        if (folderview->selected)
-               sel_item = gtk_cmctree_node_get_row_data(ctree, folderview->selected);
+               sel_item = folderview_get_selected_item(folderview);
        if (folderview->opened)
-               op_item = gtk_cmctree_node_get_row_data(ctree, folderview->opened);
+               op_item = folderview_get_opened_item(folderview);
 
        folderview->selected = NULL;
        folderview->opened = NULL;
@@ -991,6 +991,14 @@ FolderItem *folderview_get_selected_item(FolderView *folderview)
        return gtk_cmctree_node_get_row_data(ctree, folderview->selected);
 }
 
+FolderItem *folderview_get_opened_item(FolderView *folderview)
+{
+       GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
+
+       if (!folderview->opened) return NULL;
+       return gtk_cmctree_node_get_row_data(ctree, folderview->opened);
+}
+
 static void folderview_set_folders(FolderView *folderview)
 {
        GList *list;
@@ -1004,9 +1012,8 @@ static void folderview_set_folders(FolderView *folderview)
 static gchar *get_scan_str(FolderItem *item)
 {
        if (item->path)
-               return g_strdup_printf(_("Scanning folder %s%c%s..."),
-                                     item->folder->name, G_DIR_SEPARATOR,
-                                     item->path);
+               return g_strdup_printf(_("Scanning folder %s/%s..."),
+                                     item->folder->name, item->path);
        else
                return g_strdup_printf(_("Scanning folder %s..."),
                                      item->folder->name);      
@@ -1746,7 +1753,7 @@ static void set_special_folder(GtkCMCTree *ctree, FolderItem *item,
 
                node = gtk_cmctree_find_by_row_data(ctree, root, item);
                if (!node)
-                       g_warning("%s not found.\n", item->path);
+                       g_warning("%s not found.", item->path);
                else {
                        parent = GTK_CMCTREE_ROW(node)->parent;
                        if (*prev && parent == GTK_CMCTREE_ROW(*prev)->parent)
@@ -1996,6 +2003,7 @@ static gboolean folderview_key_pressed(GtkWidget *widget, GdkEventKey *event,
                                       FolderView *folderview)
 {
        GtkCMCTreeNode *node;
+       FolderItem *item;
 
        if (!event) return FALSE;
 
@@ -2004,13 +2012,14 @@ static gboolean folderview_key_pressed(GtkWidget *widget, GdkEventKey *event,
 
        switch (event->keyval) {
        case GDK_KEY_Right:
-#ifndef GENERIC_UMPC
-       case GDK_KEY_Return:
-       case GDK_KEY_KP_Enter:
-#endif
                if (folderview->selected) {
-                       folderview_select_node(folderview,
-                                              folderview->selected);
+                       if (GTK_CMCTREE_ROW(folderview->selected)->children != NULL
+                                       && !GTK_CMCTREE_ROW(folderview->selected)->expanded)
+                               gtk_cmctree_expand(GTK_CMCTREE(folderview->ctree),
+                                               folderview->selected);
+                       else
+                               folderview_select_node(folderview,
+                                                      folderview->selected);
                }
                break;
 #ifdef GENERIC_UMPC
@@ -2021,6 +2030,12 @@ static gboolean folderview_key_pressed(GtkWidget *widget, GdkEventKey *event,
                                folderview->selected);
                }
                break;  
+#else
+       case GDK_KEY_Return:
+       case GDK_KEY_KP_Enter:
+               if (folderview->selected)
+                       folderview_select_node(folderview, folderview->selected);
+               break;
 #endif
        case GDK_KEY_space:
                BREAK_ON_MODIFIER_KEY();
@@ -2034,6 +2049,25 @@ static gboolean folderview_key_pressed(GtkWidget *widget, GdkEventKey *event,
                                                       folderview->selected);
                }
                break;
+       case GDK_KEY_Left:
+               if (folderview->selected) {
+                       if (GTK_CMCTREE_ROW(folderview->selected)->expanded) {
+                               gtk_cmctree_collapse(GTK_CMCTREE(folderview->ctree),
+                                               folderview->selected);
+                       } else {
+                               if ((item = gtk_cmctree_node_get_row_data(GTK_CMCTREE(folderview->ctree),
+                                               folderview->selected))) {
+                                       if ((node = gtk_cmctree_find_by_row_data(GTK_CMCTREE(folderview->ctree),
+                                                       NULL, folder_item_parent(item)))) {
+                                               gtk_sctree_select(GTK_SCTREE(folderview->ctree), node);
+                                               if (!gtk_cmctree_node_is_visible(GTK_CMCTREE(folderview->ctree), node))
+                                                       gtk_cmctree_node_moveto(GTK_CMCTREE(folderview->ctree),
+                                                                       node, -1, 0, 0);
+                                       }
+                               }
+                       }
+               }
+               break;
        case GDK_KEY_Home:
        case GDK_KEY_End:
                if (event->keyval == GDK_KEY_Home)
@@ -2042,7 +2076,7 @@ static gboolean folderview_key_pressed(GtkWidget *widget, GdkEventKey *event,
                        node = gtk_cmctree_last(GTK_CMCTREE(folderview->ctree),
                                        gtk_cmctree_node_nth(GTK_CMCTREE(folderview->ctree), 0));
 
-               gtk_cmctree_select(GTK_CMCTREE(folderview->ctree), node);
+               gtk_sctree_select(GTK_SCTREE(folderview->ctree), node);
 
                if (!gtk_cmctree_node_is_visible(GTK_CMCTREE(folderview->ctree), node))
                        gtk_cmctree_node_moveto(GTK_CMCTREE(folderview->ctree),
@@ -2323,7 +2357,6 @@ static void folderview_create_folder_node(FolderView *folderview, FolderItem *it
 static void folderview_empty_trash_cb(GtkAction *action, gpointer data)
 {
        FolderView *folderview = (FolderView *)data;
-       GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
        FolderItem *item;
        GSList *mlist = NULL;
        GSList *cur = NULL;
@@ -2331,7 +2364,7 @@ static void folderview_empty_trash_cb(GtkAction *action, gpointer data)
        PrefsAccount *ac;
 
        if (!folderview->selected) return;
-       item = gtk_cmctree_node_get_row_data(ctree, folderview->selected);
+       item = folderview_get_selected_item(folderview);
        cm_return_if_fail(item != NULL);
        cm_return_if_fail(item->folder != NULL);
 
@@ -2344,7 +2377,7 @@ static void folderview_empty_trash_cb(GtkAction *action, gpointer data)
        if (prefs_common.ask_on_clean) {
                if (alertpanel(_("Empty trash"),
                               _("Delete all messages in trash?"),
-                              GTK_STOCK_CANCEL, _("+_Empty trash"), NULL) != G_ALERTALTERNATE)
+                              GTK_STOCK_CANCEL, g_strconcat("+", _("_Empty trash"), NULL), NULL) != G_ALERTALTERNATE)
                        return;
        }
        
@@ -2367,14 +2400,13 @@ static void folderview_empty_trash_cb(GtkAction *action, gpointer data)
 static void folderview_send_queue_cb(GtkAction *action, gpointer data)
 {
        FolderView *folderview = (FolderView *)data;
-       GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
        FolderItem *item;
        FolderItem *special_queue = NULL;
        PrefsAccount *ac;
        gchar *errstr = NULL;
 
        if (!folderview->selected) return;
-       item = gtk_cmctree_node_get_row_data(ctree, folderview->selected);
+       item = folderview_get_selected_item(folderview);
        cm_return_if_fail(item != NULL);
        cm_return_if_fail(item->folder != NULL);
 
@@ -2429,12 +2461,11 @@ static void folderview_search_cb(GtkAction *action, gpointer data)
 static void folderview_run_processing_cb(GtkAction *action, gpointer data)
 {
        FolderView *folderview = (FolderView *)data;
-       GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
        FolderItem *item;
 
        if (!folderview->selected) return;
 
-       item = gtk_cmctree_node_get_row_data(ctree, folderview->selected);
+       item = folderview_get_selected_item(folderview);
        cm_return_if_fail(item != NULL);
        cm_return_if_fail(item->folder != NULL);
 
@@ -2446,12 +2477,11 @@ static void folderview_run_processing_cb(GtkAction *action, gpointer data)
 static void folderview_property_cb(GtkAction *action, gpointer data)
 {
        FolderView *folderview = (FolderView *)data;
-       GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
        FolderItem *item;
 
        if (!folderview->selected) return;
 
-       item = gtk_cmctree_node_get_row_data(ctree, folderview->selected);
+       item = folderview_get_selected_item(folderview);
        cm_return_if_fail(item != NULL);
        cm_return_if_fail(item->folder != NULL);
 
@@ -2588,13 +2618,12 @@ static gint folderview_clist_compare(GtkCMCList *clist,
 static void folderview_processing_cb(GtkAction *action, gpointer data)
 {
        FolderView *folderview = (FolderView *)data;
-       GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
        FolderItem *item;
        gchar *id, *title;
 
        if (!folderview->selected) return;
 
-       item = gtk_cmctree_node_get_row_data(ctree, folderview->selected);
+       item = folderview_get_selected_item(folderview);
        cm_return_if_fail(item != NULL);
        cm_return_if_fail(item->folder != NULL);
 
@@ -2776,7 +2805,7 @@ static void folderview_drag_data_get(GtkWidget        *widget,
                                               source, strlen(source));
                }
        } else {
-               g_warning("unknown info %d\n", info);
+               g_warning("unknown info %d", info);
        }
 }