+2004-05-06 [christoph] 0.9.10claws55
+
+ * src/gtk/prefswindow.c
+ change window type to DIALOG
+
+ * src/folder.[ch]
+ * src/folderview.c
+ * src/news_gtk.c
+ o add folder_remove()
+ o change FolderUpdate hook flag names (NEW -> ADD, DESTROY -> REMOVE)
+ o add new "sort" field to Folder, no longer sort folders by type
+ higher sort values will be first in the folder list, new folders get 0
+ and will be added to the end
+
+ * src/mainwindow.c
+ * src/gtk/Makefile.am
+ * src/gtk/foldersort.(c|h|glade) ** NEW **
+ add dialog to allow users to change the folder order
+
2004-05-04 [paul] 0.9.10claws54
* src/inc.c
MICRO_VERSION=10
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=54
+EXTRA_VERSION=55
if test $EXTRA_VERSION -eq 0; then
VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}claws
/* Init folder data */
folder->account = NULL;
+ folder->sort = 0;
folder->inbox = NULL;
folder->outbox = NULL;
folder->draft = NULL;
void folder_destroy(Folder *folder)
{
- FolderUpdateData hookdata;
-
g_return_if_fail(folder != NULL);
g_return_if_fail(folder->klass->destroy_folder != NULL);
- folder_list = g_list_remove(folder_list, folder);
-
- hookdata.folder = folder;
- hookdata.update_flags = FOLDER_DESTROY_FOLDER;
- hookdata.item = NULL;
- hooks_invoke(FOLDER_UPDATE_HOOKLIST, &hookdata);
+ folder_remove(folder);
folder_tree_destroy(folder);
} else if (!strcmp(attr->name, "collapsed")) {
if (rootitem != NULL)
rootitem->collapsed = *attr->value == '1' ? TRUE : FALSE;
+ } else if (!strcmp(attr->name, "sort")) {
+ folder->sort = atoi(attr->value);
}
}
}
xml_tag_add_attr(tag, "collapsed", g_strdup(rootitem->collapsed ? "1" : "0"));
}
+ xml_tag_add_attr(tag, "sort", g_strdup_printf("%d", folder->sort));
return tag;
}
}
}
+void folder_set_sort(Folder *folder, guint sort)
+{
+ g_return_if_fail(folder != NULL);
+
+ if (folder->sort != sort) {
+ folder_remove(folder);
+ folder->sort = sort;
+ folder_add(folder);
+ }
+}
+
gboolean folder_tree_destroy_func(GNode *node, gpointer data) {
FolderItem *item = (FolderItem *) node->data;
for (i = 0, cur = folder_list; cur != NULL; cur = cur->next, i++) {
cur_folder = FOLDER(cur->data);
- if (FOLDER_TYPE(folder) == F_MH) {
- if (FOLDER_TYPE(cur_folder) != F_MH) break;
- } else if (FOLDER_TYPE(folder) == F_MBOX) {
- if (FOLDER_TYPE(cur_folder) != F_MH &&
- FOLDER_TYPE(cur_folder) != F_MBOX) break;
- } else if (FOLDER_TYPE(folder) == F_IMAP) {
- if (FOLDER_TYPE(cur_folder) != F_MH &&
- FOLDER_TYPE(cur_folder) != F_MBOX &&
- FOLDER_TYPE(cur_folder) != F_IMAP) break;
- } else if (FOLDER_TYPE(folder) == F_NEWS) {
- if (FOLDER_TYPE(cur_folder) != F_MH &&
- FOLDER_TYPE(cur_folder) != F_MBOX &&
- FOLDER_TYPE(cur_folder) != F_IMAP &&
- FOLDER_TYPE(cur_folder) != F_NEWS) break;
- }
+ if (cur_folder->sort < folder->sort)
+ break;
}
folder_list = g_list_insert(folder_list, folder, i);
hookdata.folder = folder;
- hookdata.update_flags = FOLDER_NEW_FOLDER;
+ hookdata.update_flags = FOLDER_ADD_FOLDER;
+ hookdata.item = NULL;
+ hooks_invoke(FOLDER_UPDATE_HOOKLIST, &hookdata);
+}
+
+void folder_remove(Folder *folder)
+{
+ FolderUpdateData hookdata;
+
+ g_return_if_fail(folder != NULL);
+
+ folder_list = g_list_remove(folder_list, folder);
+
+ hookdata.folder = folder;
+ hookdata.update_flags = FOLDER_REMOVE_FOLDER;
hookdata.item = NULL;
hooks_invoke(FOLDER_UPDATE_HOOKLIST, &hookdata);
}
new_item->cache = msgcache_new();
hookdata.folder = new_item->folder;
- hookdata.update_flags = FOLDER_TREE_CHANGED | FOLDER_NEW_FOLDERITEM;
+ hookdata.update_flags = FOLDER_TREE_CHANGED | FOLDER_ADD_FOLDERITEM;
hookdata.item = new_item;
hooks_invoke(FOLDER_UPDATE_HOOKLIST, &hookdata);
}
switch (item->stype) {
case F_INBOX:
- name = g_strdup(!strcmp2(item->name, INBOX_DIR) ? _("Inbox") :
+ name = g_strdup(!g_strcasecmp(item->name, INBOX_DIR) ? _("Inbox") :
item->name);
break;
case F_OUTBOX:
- name = g_strdup(!strcmp2(item->name, OUTBOX_DIR) ? _("Sent") :
+ name = g_strdup(!g_strcasecmp(item->name, OUTBOX_DIR) ? _("Sent") :
item->name);
break;
case F_QUEUE:
- name = g_strdup(!strcmp2(item->name, QUEUE_DIR) ? _("Queue") :
+ name = g_strdup(!g_strcasecmp(item->name, QUEUE_DIR) ? _("Queue") :
item->name);
break;
case F_TRASH:
- name = g_strdup(!strcmp2(item->name, TRASH_DIR) ? _("Trash") :
+ name = g_strdup(!g_strcasecmp(item->name, TRASH_DIR) ? _("Trash") :
item->name);
break;
case F_DRAFT:
- name = g_strdup(!strcmp2(item->name, DRAFT_DIR) ? _("Drafts") :
+ name = g_strdup(!g_strcasecmp(item->name, DRAFT_DIR) ? _("Drafts") :
item->name);
break;
default:
typedef enum
{
- FOLDER_NEW_FOLDER = 1 << 0,
- FOLDER_DESTROY_FOLDER = 1 << 1,
+ FOLDER_ADD_FOLDER = 1 << 0,
+ FOLDER_REMOVE_FOLDER = 1 << 1,
FOLDER_TREE_CHANGED = 1 << 2,
- FOLDER_NEW_FOLDERITEM = 1 << 3,
+ FOLDER_ADD_FOLDERITEM = 1 << 3,
FOLDER_REMOVE_FOLDERITEM = 1 << 4,
} FolderUpdateFlags;
gchar *name;
PrefsAccount *account;
+ guint sort;
FolderItem *inbox;
FolderItem *outbox;
gpointer data);
void folder_set_name (Folder *folder,
const gchar *name);
+void folder_set_sort (Folder *folder,
+ guint sort);
void folder_tree_destroy (Folder *folder);
void folder_add (Folder *folder);
+void folder_remove (Folder *folder);
GList *folder_get_list (void);
gint folder_read_list (void);
ctree = folderview->ctree;
g_return_val_if_fail(ctree != NULL, FALSE);
- if (hookdata->update_flags & FOLDER_NEW_FOLDERITEM)
+ if (hookdata->update_flags & FOLDER_ADD_FOLDERITEM)
folderview_create_folder_node(folderview, hookdata->item);
else if (hookdata->update_flags & FOLDER_REMOVE_FOLDERITEM) {
GtkCTreeNode *node;
node = gtk_ctree_find_by_row_data(GTK_CTREE(ctree), NULL, hookdata->item);
if (node != NULL)
gtk_ctree_remove_node(GTK_CTREE(ctree), node);
- } else if (hookdata->update_flags & (FOLDER_TREE_CHANGED | FOLDER_NEW_FOLDER | FOLDER_DESTROY_FOLDER))
+ } else if (hookdata->update_flags & (FOLDER_TREE_CHANGED | FOLDER_ADD_FOLDER | FOLDER_REMOVE_FOLDER))
folderview_set(folderview);
return FALSE;
colorsel.c \
description_window.c \
filesel.c \
+ foldersort.c \
gtkaspell.c \
gtksctree.c \
gtkshruler.c \
colorsel.h \
description_window.h \
filesel.h \
+ foldersort.h \
gtkaspell.h \
gtksctree.h \
gtkshruler.h \
--- /dev/null
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto and 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "intl.h"
+#include "foldersort.h"
+#include "inc.h"
+#include "utils.h"
+
+typedef struct _FolderSortDialog FolderSortDialog;
+
+struct _FolderSortDialog
+{
+ GtkWidget *window;
+ GtkWidget *moveup_btn;
+ GtkWidget *movedown_btn;
+ GtkWidget *folderlist;
+
+ gint rows, selected;
+};
+
+static void destroy_dialog(FolderSortDialog *dialog)
+{
+ inc_unlock();
+ gtk_widget_destroy(dialog->window);
+
+ g_free(dialog);
+}
+
+static void ok_clicked(GtkWidget *widget, FolderSortDialog *dialog)
+{
+ Folder *folder;
+ int i;
+
+ for (i = 0; i < dialog->rows; i++) {
+ folder = gtk_clist_get_row_data(GTK_CLIST(dialog->folderlist), i);
+
+ folder_set_sort(folder, dialog->rows - i);
+ }
+
+ destroy_dialog(dialog);
+}
+
+static void cancel_clicked(GtkWidget *widget, FolderSortDialog *dialog)
+{
+ destroy_dialog(dialog);
+}
+
+static void set_selected(FolderSortDialog *dialog, gint row)
+{
+ if (row >= 0) {
+ gtk_widget_set_sensitive(dialog->moveup_btn, row > 0);
+ gtk_widget_set_sensitive(dialog->movedown_btn, row < (dialog->rows - 1));
+ } else {
+ gtk_widget_set_sensitive(dialog->moveup_btn, FALSE);
+ gtk_widget_set_sensitive(dialog->movedown_btn, FALSE);
+ }
+
+ dialog->selected = row;
+}
+
+static void moveup_clicked(GtkWidget *widget, FolderSortDialog *dialog)
+{
+ g_return_if_fail(dialog->selected > 0);
+
+ gtk_clist_swap_rows(GTK_CLIST(dialog->folderlist), dialog->selected, dialog->selected - 1);
+}
+
+static void movedown_clicked(GtkWidget *widget, FolderSortDialog *dialog)
+{
+ g_return_if_fail(dialog->selected < (dialog->rows - 1));
+
+ gtk_clist_swap_rows(GTK_CLIST(dialog->folderlist), dialog->selected, dialog->selected + 1);
+}
+
+static void row_selected(GtkCList *clist, gint row, gint column, GdkEventButton *event, FolderSortDialog *dialog)
+{
+ set_selected(dialog, row);
+}
+
+static void row_unselected(GtkCList *clist, gint row, gint column, GdkEventButton *event, FolderSortDialog *dialog)
+{
+ set_selected(dialog, -1);
+}
+
+static void row_moved(GtkCList *clist, gint srcpos, gint destpos, FolderSortDialog *dialog)
+{
+ if (dialog->selected == -1)
+ return;
+ else if (srcpos == dialog->selected)
+ set_selected(dialog, destpos);
+ else if (srcpos < dialog->selected && destpos >= dialog->selected)
+ set_selected(dialog, dialog->selected - 1);
+ else if (srcpos > dialog->selected && destpos <= dialog->selected)
+ set_selected(dialog, dialog->selected + 1);
+}
+
+void foldersort_open()
+{
+ FolderSortDialog *dialog = g_new0(FolderSortDialog, 1);
+ GList *flist;
+
+ /* BEGIN GLADE CODE */
+
+ GtkWidget *window;
+ GtkWidget *table1;
+ GtkWidget *label1;
+ GtkWidget *hbuttonbox1;
+ GtkWidget *ok_btn;
+ GtkWidget *cancel_btn;
+ GtkWidget *vbox1;
+ GtkWidget *moveup_btn;
+ GtkWidget *arrow1;
+ GtkWidget *movedown_btn;
+ GtkWidget *arrow2;
+ GtkWidget *scrolledwindow1;
+ GtkWidget *folderlist;
+ GtkWidget *label2;
+
+ window = gtk_window_new(GTK_WINDOW_DIALOG);
+ gtk_object_set_data(GTK_OBJECT(window), "window", window);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 4);
+ gtk_window_set_title(GTK_WINDOW(window),
+ _("Set folder sortorder"));
+ gtk_window_set_modal(GTK_WINDOW(window), TRUE);
+ gtk_window_set_default_size(GTK_WINDOW(window), 400, 300);
+
+ table1 = gtk_table_new(3, 2, FALSE);
+ gtk_widget_show(table1);
+ gtk_container_add(GTK_CONTAINER(window), table1);
+ gtk_table_set_row_spacings(GTK_TABLE(table1), 4);
+ gtk_table_set_col_spacings(GTK_TABLE(table1), 4);
+
+ label1 =
+ gtk_label_new(_
+ ("Move folders up or down to change\nthe sort order in the folderview"));
+ gtk_widget_show(label1);
+ gtk_table_attach(GTK_TABLE(table1), label1, 0, 1, 0, 1,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+ gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
+
+ hbuttonbox1 = gtk_hbutton_box_new();
+ gtk_widget_show(hbuttonbox1);
+ gtk_table_attach(GTK_TABLE(table1), hbuttonbox1, 0, 1, 2, 3,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonbox1),
+ GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(hbuttonbox1), 0);
+ gtk_button_box_set_child_size(GTK_BUTTON_BOX(hbuttonbox1), 0, 0);
+ gtk_button_box_set_child_ipadding(GTK_BUTTON_BOX(hbuttonbox1), 0,
+ 0);
+
+ ok_btn = gtk_button_new_with_label(_("Ok"));
+ gtk_widget_show(ok_btn);
+ gtk_container_add(GTK_CONTAINER(hbuttonbox1), ok_btn);
+ GTK_WIDGET_SET_FLAGS(ok_btn, GTK_CAN_DEFAULT);
+
+ cancel_btn = gtk_button_new_with_label(_("Cancel"));
+ gtk_widget_show(cancel_btn);
+ gtk_container_add(GTK_CONTAINER(hbuttonbox1), cancel_btn);
+ GTK_WIDGET_SET_FLAGS(cancel_btn, GTK_CAN_DEFAULT);
+
+ vbox1 = gtk_vbox_new(FALSE, 0);
+ gtk_widget_show(vbox1);
+ gtk_table_attach(GTK_TABLE(table1), vbox1, 1, 2, 1, 2,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+ moveup_btn = gtk_button_new();
+ gtk_widget_show(moveup_btn);
+ gtk_box_pack_start(GTK_BOX(vbox1), moveup_btn, FALSE, FALSE, 0);
+
+ arrow1 = gtk_arrow_new(GTK_ARROW_UP, GTK_SHADOW_OUT);
+ gtk_widget_show(arrow1);
+ gtk_container_add(GTK_CONTAINER(moveup_btn), arrow1);
+
+ movedown_btn = gtk_button_new();
+ gtk_widget_show(movedown_btn);
+ gtk_box_pack_start(GTK_BOX(vbox1), movedown_btn, FALSE, FALSE, 0);
+
+ arrow2 = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT);
+ gtk_widget_show(arrow2);
+ gtk_container_add(GTK_CONTAINER(movedown_btn), arrow2);
+
+ scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
+ gtk_widget_show(scrolledwindow1);
+ gtk_table_attach(GTK_TABLE(table1), scrolledwindow1, 0, 1, 1, 2,
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW
+ (scrolledwindow1),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_ALWAYS);
+
+ folderlist = gtk_clist_new(1);
+ gtk_widget_show(folderlist);
+ gtk_container_add(GTK_CONTAINER(scrolledwindow1), folderlist);
+ gtk_clist_set_column_width(GTK_CLIST(folderlist), 0, 80);
+ gtk_clist_column_titles_show(GTK_CLIST(folderlist));
+
+ label2 = gtk_label_new(_("Folders"));
+ gtk_widget_show(label2);
+ gtk_clist_set_column_widget(GTK_CLIST(folderlist), 0, label2);
+ gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
+
+ /* END GLADE CODE */
+
+ dialog->window = window;
+ dialog->moveup_btn = moveup_btn;
+ dialog->movedown_btn = movedown_btn;
+ dialog->folderlist = folderlist;
+
+ gtk_widget_show(window);
+ gtk_widget_set_sensitive(moveup_btn, FALSE);
+ gtk_widget_set_sensitive(movedown_btn, FALSE);
+ gtk_clist_set_reorderable(GTK_CLIST(folderlist), TRUE);
+
+ gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
+ GTK_SIGNAL_FUNC(ok_clicked), dialog);
+ gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
+ GTK_SIGNAL_FUNC(cancel_clicked), dialog);
+ gtk_signal_connect(GTK_OBJECT(moveup_btn), "clicked",
+ GTK_SIGNAL_FUNC(moveup_clicked), dialog);
+ gtk_signal_connect(GTK_OBJECT(movedown_btn), "clicked",
+ GTK_SIGNAL_FUNC(movedown_clicked), dialog);
+
+ gtk_signal_connect(GTK_OBJECT(folderlist), "select-row",
+ GTK_SIGNAL_FUNC(row_selected), dialog);
+ gtk_signal_connect(GTK_OBJECT(folderlist), "unselect-row",
+ GTK_SIGNAL_FUNC(row_unselected), dialog);
+ gtk_signal_connect(GTK_OBJECT(folderlist), "row-move",
+ GTK_SIGNAL_FUNC(row_moved), dialog);
+
+ dialog->rows = 0;
+ dialog->selected = -1;
+ for (flist = folder_get_list(); flist != NULL; flist = g_list_next(flist)) {
+ Folder *folder = flist->data;
+ int row;
+ gchar *text[1];
+
+ text[0] = folder->name;
+ row = gtk_clist_append(GTK_CLIST(folderlist), text);
+ gtk_clist_set_row_data(GTK_CLIST(folderlist), row, folder);
+ dialog->rows++;
+ }
+
+ inc_lock();
+}
--- /dev/null
+<?xml version="1.0"?>
+<GTK-Interface>
+
+<project>
+ <name>Sylpheed-Claws</name>
+ <program_name>sylpheed-claws</program_name>
+ <directory></directory>
+ <source_directory>src</source_directory>
+ <pixmaps_directory>pixmaps</pixmaps_directory>
+ <language>C</language>
+ <gnome_support>False</gnome_support>
+ <gettext_support>True</gettext_support>
+ <output_main_file>False</output_main_file>
+ <output_support_files>False</output_support_files>
+ <output_build_files>False</output_build_files>
+</project>
+
+<widget>
+ <class>GtkWindow</class>
+ <name>window</name>
+ <border_width>4</border_width>
+ <title>Set folder sortorder</title>
+ <type>GTK_WINDOW_DIALOG</type>
+ <position>GTK_WIN_POS_NONE</position>
+ <modal>True</modal>
+ <default_width>400</default_width>
+ <default_height>300</default_height>
+ <allow_shrink>False</allow_shrink>
+ <allow_grow>True</allow_grow>
+ <auto_shrink>False</auto_shrink>
+
+ <widget>
+ <class>GtkTable</class>
+ <name>table1</name>
+ <rows>3</rows>
+ <columns>2</columns>
+ <homogeneous>False</homogeneous>
+ <row_spacing>4</row_spacing>
+ <column_spacing>4</column_spacing>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label1</name>
+ <label>Move folders up or down to change
+the sort order in the folderview</label>
+ <justify>GTK_JUSTIFY_LEFT</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>1</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkHButtonBox</class>
+ <name>hbuttonbox1</name>
+ <layout_style>GTK_BUTTONBOX_END</layout_style>
+ <spacing>0</spacing>
+ <child_min_width>0</child_min_width>
+ <child_min_height>0</child_min_height>
+ <child_ipad_x>0</child_ipad_x>
+ <child_ipad_y>0</child_ipad_y>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>1</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>ok_btn</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <label>Ok</label>
+ <relief>GTK_RELIEF_NORMAL</relief>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>cancel_btn</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <label>Cancel</label>
+ <relief>GTK_RELIEF_NORMAL</relief>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkVBox</class>
+ <name>vbox1</name>
+ <homogeneous>False</homogeneous>
+ <spacing>0</spacing>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>moveup_btn</name>
+ <can_focus>True</can_focus>
+ <relief>GTK_RELIEF_NORMAL</relief>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+
+ <widget>
+ <class>GtkArrow</class>
+ <name>arrow1</name>
+ <arrow_type>GTK_ARROW_UP</arrow_type>
+ <shadow_type>GTK_SHADOW_OUT</shadow_type>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>movedown_btn</name>
+ <can_focus>True</can_focus>
+ <relief>GTK_RELIEF_NORMAL</relief>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+
+ <widget>
+ <class>GtkArrow</class>
+ <name>arrow2</name>
+ <arrow_type>GTK_ARROW_DOWN</arrow_type>
+ <shadow_type>GTK_SHADOW_OUT</shadow_type>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkScrolledWindow</class>
+ <name>scrolledwindow1</name>
+ <hscrollbar_policy>GTK_POLICY_AUTOMATIC</hscrollbar_policy>
+ <vscrollbar_policy>GTK_POLICY_ALWAYS</vscrollbar_policy>
+ <hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
+ <vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>1</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>True</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+
+ <widget>
+ <class>GtkCList</class>
+ <name>folderlist</name>
+ <can_focus>True</can_focus>
+ <columns>1</columns>
+ <column_widths>80</column_widths>
+ <selection_mode>GTK_SELECTION_SINGLE</selection_mode>
+ <show_titles>True</show_titles>
+ <shadow_type>GTK_SHADOW_IN</shadow_type>
+
+ <widget>
+ <class>GtkLabel</class>
+ <child_name>CList:title</child_name>
+ <name>label2</name>
+ <label>Folders</label>
+ <justify>GTK_JUSTIFY_LEFT</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ </widget>
+ </widget>
+ </widget>
+ </widget>
+</widget>
+
+</GTK-Interface>
--- /dev/null
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto and 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef FOLDERSORT_H
+#define FOLDERSORT_H 1
+
+void foldersort_open(void);
+
+#endif /* FOLDERSORT_H */
prefswindow->data = data;
prefswindow->prefs_pages = g_slist_copy(prefs_pages);
- prefswindow->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ prefswindow->window = gtk_window_new(GTK_WINDOW_DIALOG);
gtk_window_set_title(GTK_WINDOW(prefswindow->window), title);
gtk_window_set_default_size(GTK_WINDOW(prefswindow->window), 600, 340);
gtk_window_position (GTK_WINDOW(prefswindow->window), GTK_WIN_POS_CENTER);
#include "localfolder.h"
#include "filtering.h"
#include "folderutils.h"
+#include "foldersort.h"
#define AC_LABEL_WIDTH 240
static void add_mailbox_cb (MainWindow *mainwin,
guint action,
GtkWidget *widget);
+static void foldersort_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
static void import_mbox_cb (MainWindow *mainwin,
guint action,
GtkWidget *widget);
{N_("/_File"), NULL, NULL, 0, "<Branch>"},
{N_("/_File/_Add mailbox"), NULL, NULL, 0, "<Branch>"},
{N_("/_File/_Add mailbox/MH..."), NULL, add_mailbox_cb, 0, NULL},
+ {N_("/_File/Change folder order"), NULL, foldersort_cb, 0, NULL},
{N_("/_File/_Import mbox file..."), NULL, import_mbox_cb, 0, NULL},
{N_("/_File/_Export to mbox file..."), NULL, export_mbox_cb, 0, NULL},
{N_("/_File/Empty _trash"), "<shift>D", empty_trash_cb, 0, NULL},
{"/File/Add mailbox" , M_UNLOCKED},
{"/File/Add mailbox/MH..." , M_UNLOCKED},
+ {"/File/Change folder order" , M_UNLOCKED},
{"/File/Export to mbox file..." , M_UNLOCKED},
{"/File/Empty trash" , M_UNLOCKED},
{"/File/Work offline" , M_UNLOCKED},
folderview_check_new_all();
}
+static void foldersort_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ foldersort_open();
+}
+
static void import_mbox_cb(MainWindow *mainwin, guint action,
GtkWidget *widget)
{
folder_item_append(rootitem, newitem);
hookdata.folder = newitem->folder;
- hookdata.update_flags = FOLDER_TREE_CHANGED | FOLDER_NEW_FOLDERITEM;
+ hookdata.update_flags = FOLDER_TREE_CHANGED | FOLDER_ADD_FOLDERITEM;
hookdata.item = newitem;
hooks_invoke(FOLDER_UPDATE_HOOKLIST, &hookdata);
}