/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2004 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2005 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
#include "defs.h"
#include <glib.h>
+#include <glib/gi18n.h>
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include <stdio.h>
#include <errno.h>
-#include "intl.h"
#include "main.h"
#include "mainwindow.h"
#include "folderview.h"
#include "account.h"
#include "prefs_gtk.h"
#include "prefs_account.h"
+#include "prefs_common.h"
#include "folder_item_prefs.h"
#include "compose.h"
#include "manage_window.h"
GtkTreePath *path,
GtkTreeViewColumn *column,
gpointer data);
+
+static void drag_begin (GtkTreeView *list_view,
+ GdkDragContext *context,
+ gpointer data);
+
+static void drag_end (GtkTreeView *list_view,
+ GdkDragContext *context,
+ gpointer data);
+
+static void account_row_changed_while_drag_drop (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer arg3,
+ GtkTreeView *list_view);
void account_read_config_all(void)
{
}
break;
case F_QUEUE:
- if (ac_prefs->folder)
- item = FOLDER(ac_prefs->folder)->queue;
- if (!item)
- item = folder_get_default_queue();
+ if (ac_prefs->set_queue_folder && ac_prefs->queue_folder) {
+ item = folder_find_item_from_identifier
+ (ac_prefs->queue_folder);
+ }
+ if (!item) {
+ if (ac_prefs->folder)
+ item = FOLDER(ac_prefs->folder)->queue;
+ if (!item)
+ item = folder_get_default_queue();
+ }
break;
case F_TRASH:
if (ac_prefs->set_trash_folder && ac_prefs->trash_folder) {
GtkWidget *hbox;
GtkWidget *scrolledwin;
GtkWidget *list_view;
- gchar *titles[N_EDIT_ACCOUNT_COLS];
- gint i;
GtkWidget *vbox2;
GtkWidget *add_btn;
debug_print("Creating account edit window...\n");
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_widget_set_usize (window, 500, 350);
+ gtk_widget_set_size_request (window, 500, 350);
gtk_container_set_border_width (GTK_CONTAINER (window), 8);
gtk_window_set_title (GTK_WINDOW (window), _("Edit accounts"));
gtk_window_set_modal (GTK_WINDOW (window), TRUE);
gtk_widget_show (vbox2);
gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0);
- add_btn = gtk_button_new_with_label (_("Add"));
+ add_btn = gtk_button_new_from_stock(GTK_STOCK_ADD);
gtk_widget_show (add_btn);
gtk_box_pack_start (GTK_BOX (vbox2), add_btn, FALSE, FALSE, 4);
g_signal_connect (G_OBJECT(add_btn), "clicked",
G_CALLBACK (account_add), NULL);
- edit_btn = gtk_button_new_with_label (_("Edit"));
+#ifdef GTK_STOCK_EDIT
+ edit_btn = gtk_button_new_from_stock (GTK_STOCK_EDIT);
+#else
+ edit_btn = gtk_button_new_from_stock(GTK_STOCK_PROPERTIES);
+#endif
gtk_widget_show (edit_btn);
gtk_box_pack_start (GTK_BOX (vbox2), edit_btn, FALSE, FALSE, 4);
g_signal_connect (G_OBJECT(edit_btn), "clicked",
G_CALLBACK (account_edit_prefs), NULL);
- del_btn = gtk_button_new_with_label (_(" Delete "));
+ del_btn = gtk_button_new_from_stock(GTK_STOCK_DELETE);
gtk_widget_show (del_btn);
gtk_box_pack_start (GTK_BOX (vbox2), del_btn, FALSE, FALSE, 4);
g_signal_connect (G_OBJECT(del_btn), "clicked",
G_CALLBACK (account_delete), NULL);
- clone_btn = gtk_button_new_with_label (_(" Clone "));
+ clone_btn = gtk_button_new_from_stock(GTK_STOCK_COPY);
gtk_widget_show (clone_btn);
gtk_box_pack_start (GTK_BOX (vbox2), clone_btn, FALSE, FALSE, 4);
g_signal_connect(G_OBJECT(clone_btn), "clicked",
G_CALLBACK(account_clone), NULL);
- down_btn = gtk_button_new_with_label (_("Down"));
+ down_btn = gtk_button_new_from_stock(GTK_STOCK_GO_DOWN);
gtk_widget_show (down_btn);
gtk_box_pack_end (GTK_BOX (vbox2), down_btn, FALSE, FALSE, 4);
g_signal_connect (G_OBJECT(down_btn), "clicked",
G_CALLBACK (account_down), NULL);
- up_btn = gtk_button_new_with_label (_("Up"));
+ up_btn = gtk_button_new_from_stock(GTK_STOCK_GO_UP);
gtk_widget_show (up_btn);
gtk_box_pack_end (GTK_BOX (vbox2), up_btn, FALSE, FALSE, 4);
g_signal_connect (G_OBJECT(up_btn), "clicked",
g_signal_connect (G_OBJECT(default_btn), "clicked",
G_CALLBACK (account_set_default), NULL);
- gtkut_button_set_create(&hbbox, &close_btn, _("Close"),
- NULL, NULL, NULL, NULL);
+ hbbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(hbbox), GTK_BUTTONBOX_END);
+ gtk_box_set_spacing(GTK_BOX(hbbox), 5);
+
+ gtkut_stock_button_set_create(&hbbox, &close_btn, GTK_STOCK_CLOSE,
+ NULL, NULL, NULL, NULL);
gtk_widget_show(hbbox);
+
gtk_box_pack_end (GTK_BOX (hbox), hbbox, FALSE, FALSE, 0);
gtk_widget_grab_default (close_btn);
G_CALLBACK (account_edit_close),
NULL);
+ account_create_list_view_images(list_view);
edit_account.window = window;
edit_account.list_view = list_view;
static void account_delete(GtkWidget *widget, gpointer data)
{
PrefsAccount *ac_prefs;
- gint account_id;
GList *list;
Folder *folder;
ac_prefs->protocol == A_LOCAL);
getall = has_getallbox && ac_prefs->recv_at_getall;
- return account_list_view_insert_account_item(list_store,
- name, protocol, server,
- ac_prefs->is_default,
- getall, ac_prefs);
+ account_list_view_insert_account_item(list_store,
+ name, protocol, server,
+ ac_prefs->is_default,
+ getall, ac_prefs);
+ return;
}
static void account_list_view_set(void)
{
GtkTreeView *list_view;
GtkTreeSelection *selector;
+ GtkListStore *store = account_create_data_store();
- list_view = GTK_TREE_VIEW(gtk_tree_view_new_with_model(GTK_TREE_MODEL
- (account_create_data_store())));
-
- gtk_tree_view_set_rules_hint(list_view, TRUE);
+ list_view = GTK_TREE_VIEW(gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)));
+ g_object_unref(G_OBJECT(store));
+
+ gtk_tree_view_set_rules_hint(list_view, prefs_common.enable_rules_hint);
selector = gtk_tree_view_get_selection(list_view);
gtk_tree_selection_set_mode(selector, GTK_SELECTION_BROWSE);
- /* create the pixbufs */
- account_create_list_view_images(GTK_WIDGET(list_view));
-
/* create the columns */
account_create_list_view_columns(GTK_WIDGET(list_view));
G_CALLBACK(account_double_clicked),
list_view);
+ g_signal_connect(G_OBJECT(list_view), "drag_begin",
+ G_CALLBACK(drag_begin),
+ list_view);
+
+ g_signal_connect(G_OBJECT(list_view), "drag_end",
+ G_CALLBACK(drag_end),
+ list_view);
+
+ gtk_tree_view_set_reorderable(list_view, TRUE);
return GTK_WIDGET(list_view);
}
static void account_create_list_view_images(GtkWidget *list_view)
{
- GdkPixmap *markxpm;
- GdkBitmap *markxpmmask;
- const guchar *pixdata;
- GdkPixbuf *pbuf;
-
- stock_pixmap_gdk(list_view, STOCK_PIXMAP_MARK, &markxpm, &markxpmmask);
-
- pbuf = gdk_pixbuf_get_from_drawable(NULL, markxpm, NULL,
- 0, 0, 0, 0, -1, -1);
- pixdata = gdk_pixbuf_get_pixels(pbuf);
- mark_pixbuf = gdk_pixbuf_add_alpha(pbuf, TRUE,
- pixdata[0],
- pixdata[1],
- pixdata[2]);
- g_object_unref(pbuf);
+ stock_pixbuf_gdk(list_view, STOCK_PIXMAP_MARK, &mark_pixbuf);
}
static void account_create_list_view_columns(GtkWidget *list_view)
GtkTreeSelection *selector;
GtkTreeModel *model;
GtkTreeIter iter;
- GtkTreePath *res;
selector = gtk_tree_view_get_selection(GTK_TREE_VIEW(list_view));
{
account_edit_prefs(NULL, NULL);
}
+
+static void drag_begin(GtkTreeView *list_view,
+ GdkDragContext *context,
+ gpointer data)
+{
+ /* XXX unfortunately a completed drag & drop does not emit
+ * a "rows_reordered" signal, but a "row_changed" signal.
+ * So during drag and drop, listen to "row_changed", and
+ * update the account list accordingly */
+
+ GtkTreeModel *model = gtk_tree_view_get_model(list_view);
+ g_signal_connect(G_OBJECT(model), "row_changed",
+ G_CALLBACK(account_row_changed_while_drag_drop),
+ list_view);
+}
+
+static void drag_end(GtkTreeView *list_view,
+ GdkDragContext *context,
+ gpointer data)
+{
+ GtkTreeModel *model = gtk_tree_view_get_model(list_view);
+ g_signal_handlers_disconnect_by_func(G_OBJECT(model),
+ G_CALLBACK(account_row_changed_while_drag_drop),
+ list_view);
+}
+
+static void account_row_changed_while_drag_drop(GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer arg3,
+ GtkTreeView *list_view)
+{
+ account_list_set();
+}