Re: PATCH: mblist fix, drag-and-drop, message filing
- From: christophe barbe <christophe barbe ml online fr>
- To: balsa-list gnome org
- Subject: Re: PATCH: mblist fix, drag-and-drop, message filing
- Date: Thu, 16 Aug 2001 22:16:19 +0200
I've tested it. Everything seems ok.
The move as default made me sade. I've had a look at it a few days ago and
was unable to find a correct solution and your patch for this is so little.
Btw It's a VERY important improvement from my point of view. Thank you.
The "Move to" is cool also but I don't like the 2 words menu entry. I would
prefer "move" (the to is clear enough to be omitted).
This should definitively go in CVS.
Christophe
Le 2001.08.16 18:54:39 +0200, M . Thielker a écrit :
> Hi,
>
> here's a new patch:
>
> Provides:
> - New option in prefs-misc to set the default drag and drop action to
> "move"
> - New "Move to" menu in message window, with MRU list
>
> Fixes:
> - segfault in libgtk when a mblist's parent is destroyed
>
> Requires:
> - current Balsa from CVS
>
> This will also let Peter streamline some of his code, now.
>
> Melanie
>
> diff -b -B -r -u -P --exclude-from=ignore ../balsa-cvs/src/balsa-app.c
> ./src/balsa-app.c
> --- ../balsa-cvs/src/balsa-app.c Thu Aug 16 18:40:34 2001
> +++ ./src/balsa-app.c Thu Aug 16 18:42:04 2001
> @@ -323,6 +323,10 @@
> /* IMAP */
> balsa_app.check_imap = 1;
> balsa_app.check_imap_inbox = 0;
> +
> + /* Message filing */
> + balsa_app.folder_mru=NULL;
> + balsa_app.drag_default_is_move=0;
> }
>
> static gint
> diff -b -B -r -u -P --exclude-from=ignore ../balsa-cvs/src/balsa-app.h
> ./src/balsa-app.h
> --- ../balsa-cvs/src/balsa-app.h Thu Aug 16 18:40:34 2001
> +++ ./src/balsa-app.h Thu Aug 16 18:42:04 2001
> @@ -95,6 +95,8 @@
> #define DEFAULT_CHECK_SIG FALSE
> #define DEFAULT_CHECK_QUOTED FALSE
>
> +/* Length of the folder MRU list */
> +#define FOLDER_MRU_LENGTH 10
>
> enum {
> WHILERETR,
> @@ -322,6 +324,9 @@
> BalsaMDNReply mdn_reply_clean;
> BalsaMDNReply mdn_reply_notclean;
> #endif
> +
> + GList *folder_mru;
> + gint drag_default_is_move;
>
> } balsa_app;
>
> diff -b -B -r -u -P --exclude-from=ignore ../balsa-cvs/src/balsa-index.c
> ./src/balsa-index.c
> --- ../balsa-cvs/src/balsa-index.c Thu Aug 16 18:40:34 2001
> +++ ./src/balsa-index.c Thu Aug 16 18:51:39 2001
> @@ -450,12 +450,12 @@
> return t2-t1;
> }
>
> -/* bi_get_largest_selected:
> +/* balsa_index_get_largest_selected:
> helper function, finds the message with largest number among selected
> and
> fails with -1, if the selection is empty.
> */
> -static gint
> -bi_get_largest_selected(GtkCList * clist)
> +gint
> +balsa_index_get_largest_selected(GtkCList * clist)
> {
> GList *list;
> gint i = 0;
> @@ -490,7 +490,7 @@
> gtk_clist_sort(clist);
> DO_CLIST_WORKAROUND(clist);
>
> - if ((h = bi_get_largest_selected(clist)) >= 0 &&
> + if ((h = balsa_index_get_largest_selected(clist)) >= 0 &&
> gtk_clist_row_is_visible(clist, h) != GTK_VISIBILITY_FULL)
> gtk_clist_moveto(clist, h, 0, 1.0, 0.0);
> }
> @@ -860,7 +860,7 @@
> clist = GTK_CLIST(bindex->ctree);
>
> /* [MBG] check this part, it might need to be h - 2 instead */
> - if ((h = bi_get_largest_selected(clist)) < 0 || h + 1 >=
> clist->rows)
> + if ((h = balsa_index_get_largest_selected(clist)) < 0 || h + 1 >=
> clist->rows)
> h = clist->rows - 1;
>
> balsa_index_select_row(bindex, h + 1);
> @@ -908,7 +908,7 @@
> g_return_if_fail(bindex != NULL);
> clist = GTK_CLIST(bindex->ctree);
>
> - if ((h = bi_get_largest_selected(clist) + 1) <= 0)
> + if ((h = balsa_index_get_largest_selected(clist) + 1) <= 0)
> h = 0;
>
> if (h >= clist->rows)
> @@ -1332,7 +1332,7 @@
> gtk_clist_freeze(clist);
>
> old_message =
> - gtk_clist_get_row_data(clist, bi_get_largest_selected(clist));
> + gtk_clist_get_row_data(clist,
> balsa_index_get_largest_selected(clist));
> gtk_clist_unselect_all(clist);
> gtk_clist_clear(clist);
>
> @@ -1543,7 +1543,7 @@
>
> /* select the previous message if we're at the bottom of the index
> */
> if (GTK_CLIST(index->ctree)->rows - 1 ==
> - bi_get_largest_selected(GTK_CLIST(index->ctree)))
> + balsa_index_get_largest_selected(GTK_CLIST(index->ctree)))
> select_next = FALSE;
>
>
> @@ -1764,7 +1764,7 @@
> GtkCList *list;
>
> list = GTK_CLIST(index->ctree);
> - row = bi_get_largest_selected (list);
> + row = balsa_index_get_largest_selected (list);
>
> if (row < 0)
> message = NULL;
> @@ -2040,7 +2040,7 @@
> return;
>
> /* select the previous message if we're at the bottom of the index
> */
> - if (clist->rows - 1 == bi_get_largest_selected(clist))
> + if (clist->rows - 1 == balsa_index_get_largest_selected(clist))
> select_next = FALSE;
>
>
> @@ -2068,6 +2068,8 @@
>
> libbalsa_mailbox_sync_backend(bindex->mailbox_node->mailbox);
>
> + balsa_remove_from_folder_mru(mbnode->mailbox->url);
> + balsa_add_to_folder_mru(mbnode->mailbox->url);
> gtk_object_set_data(GTK_OBJECT(bindex), "transferredp", (gpointer)
> 1);
> }
>
> diff -b -B -r -u -P --exclude-from=ignore ../balsa-cvs/src/balsa-index.h
> ./src/balsa-index.h
> --- ../balsa-cvs/src/balsa-index.h Thu Aug 16 18:40:34 2001
> +++ ./src/balsa-index.h Thu Aug 16 18:42:04 2001
> @@ -132,6 +132,7 @@
> gint, gpointer);
> void balsa_index_refresh_size (GtkNotebook *, GtkNotebookPage *,
> gint, gpointer);
> + gint balsa_index_get_largest_selected(GtkCList *clist);
> #ifdef __cplusplus
> }
> #endif /* __cplusplus */
> diff -b -B -r -u -P --exclude-from=ignore ../balsa-cvs/src/balsa-mblist.c
> ./src/balsa-mblist.c
> --- ../balsa-cvs/src/balsa-mblist.c Thu Aug 16 18:40:35 2001
> +++ ./src/balsa-mblist.c Thu Aug 16 18:42:04 2001
> @@ -143,8 +143,16 @@
> balsa_mblist_destroy(GtkObject * obj)
> {
> BalsaMBList *del;
> + GtkCTree *ctree;
>
> del = BALSA_MBLIST(obj);
> +
> + ctree = GTK_CTREE(del);
> +
> + gtk_ctree_post_recursive(GTK_CTREE(del), NULL,
> + balsa_mblist_disconnect_mailbox_signals,
> + NULL);
> +
> /* chain up ... */
> if (GTK_OBJECT_CLASS(parent_class)->destroy)
> (*GTK_OBJECT_CLASS(parent_class)->destroy) (GTK_OBJECT(del));
> @@ -1516,17 +1524,15 @@
>
> /* cannot transfer to the originating mailbox */
> if (mailbox != orig_mailbox) {
> - switch (context->suggested_action) {
> + switch (context->action) {
> case GDK_ACTION_MOVE:
> libbalsa_messages_move (messages, mailbox);
> - context->action = context->suggested_action;
> break;
>
> case GDK_ACTION_DEFAULT:
> case GDK_ACTION_COPY:
> default:
> libbalsa_messages_copy (messages, mailbox);
> - context->action = context->suggested_action;
> break;
> }
>
> @@ -1567,5 +1573,11 @@
> NULL);
> }
> #endif
> + if(balsa_app.drag_default_is_move) {
> + if(context->actions == GDK_ACTION_COPY)
> + gdk_drag_status(context, GDK_ACTION_COPY, time);
> + else
> + gdk_drag_status(context, GDK_ACTION_MOVE, time);
> + }
> return FALSE;
> }
> diff -b -B -r -u -P --exclude-from=ignore
> ../balsa-cvs/src/message-window.c ./src/message-window.c
> --- ../balsa-cvs/src/message-window.c Thu Aug 16 18:40:35 2001
> +++ ./src/message-window.c Thu Aug 16 18:42:04 2001
> @@ -25,14 +25,24 @@
> #include "balsa-app.h"
> #include "balsa-message.h"
> #include "balsa-icons.h"
> +#include "balsa-index.h"
> #include "main-window.h"
> #include "sendmsg-window.h"
> #include "message-window.h"
> #include "print.h"
> #include "toolbar-factory.h"
> +#include "mailbox-node.h"
>
> #include "libbalsa.h"
>
> +struct BalsaMRUEntry
> +{
> + LibBalsaMailbox *mailbox;
> + gchar *url;
> + char *name;
> + gpointer mw;
> +};
> +
> /* callbacks */
> static void destroy_message_window(GtkWidget * widget, gpointer data);
> static void close_message_window(GtkWidget * widget, gpointer data);
> @@ -60,6 +70,9 @@
> static void print_cb(GtkWidget * widget, gpointer);
> static void trash_cb(GtkWidget * widget, gpointer);
>
> +static gint find_url_cb(GNode *node, struct BalsaMRUEntry *data);
> +static void mru_select_cb(GtkWidget *widget, struct BalsaMRUEntry
> *entry);
> +
> /*
> * The list of messages which are being displayed.
> */
> @@ -140,10 +153,16 @@
> GNOMEUIINFO_END
> };
>
> +static GnomeUIInfo move_menu[]={
> + GNOMEUIINFO_END
> +};
> +
> static GnomeUIInfo main_menu[] = {
> GNOMEUIINFO_MENU_FILE_TREE(file_menu),
> GNOMEUIINFO_MENU_EDIT_TREE(edit_menu),
> GNOMEUIINFO_MENU_VIEW_TREE(view_menu),
> +#define MAIN_MENU_MOVE_POS 3
> + GNOMEUIINFO_SUBTREE("Move _To", move_menu),
> GNOMEUIINFO_SUBTREE("_Message", message_menu),
> GNOMEUIINFO_END
> };
> @@ -157,9 +176,18 @@
> LibBalsaMessage *message;
> int show_all_headers_save;
> int headers_shown;
> + GtkWidget *move_menu;
> + gint transferred;
> + GList *mru_list;
> };
>
> void reset_show_all_headers(MessageWindow *mw);
> +static void populate_move_menu(MessageWindow *mw);
> +static gint close_if_transferred_cb(BalsaMBList * bmbl, GdkEvent *
> event,
> + MessageWindow * mw);
> +static void transfer_message_cb(GtkCTree * ctree, GtkCTreeNode * row,
> + gint column, MessageWindow * mw);
> +static void load_mru(MessageWindow * mw);
>
> void
> message_window_new(LibBalsaMessage * message)
> @@ -200,6 +228,8 @@
>
> mw->message = message;
>
> + mw->mru_list=NULL;
> +
> mw->window = gnome_app_new("balsa", "Message");
>
> mw->show_all_headers_save=-1;
> @@ -244,6 +274,9 @@
> GTK_SIGNAL_FUNC(destroy_message_window), mw);
>
> gnome_app_create_menus_with_data(GNOME_APP(mw->window), main_menu,
> mw);
> + mw->move_menu=main_menu[MAIN_MENU_MOVE_POS].widget;
> +
> + populate_move_menu(mw);
>
> scroll = gtk_scrolled_window_new(NULL, NULL);
> gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
> @@ -251,6 +284,7 @@
> GTK_POLICY_AUTOMATIC);
>
> mw->bmessage = balsa_message_new();
> + mw->transferred=0;
>
> gtk_signal_connect(GTK_OBJECT(mw->bmessage), "select-part",
> GTK_SIGNAL_FUNC(select_part_cb), mw);
> @@ -299,6 +333,8 @@
> static void
> destroy_message_window(GtkWidget * widget, gpointer data)
> {
> + GList *tmp;
> +
> MessageWindow *mw = (MessageWindow *) data;
>
> release_toolbars(mw->window);
> @@ -307,6 +343,12 @@
> gtk_widget_destroy(mw->window);
> gtk_widget_destroy(mw->bmessage);
>
> + if(mw->mru_list) {
> + for(tmp=mw->mru_list;tmp;tmp=g_list_next(tmp))
> + g_free(tmp->data);
> + g_list_free(mw->mru_list);
> + }
> +
> g_free(mw);
> }
>
> @@ -583,3 +625,262 @@
> if(btn)
> gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(btn), FALSE);
> }
> +
> +static void populate_move_menu(MessageWindow *mw)
> +{
> + GtkWidget *item;
> + GtkWidget *scroller;
> + GtkWidget *bmbl;
> + GtkWidget *submenu, *smenuitem;
> + GtkRequisition req;
> +
> + if(mw->message->mailbox->readonly)
> + {
> + gtk_widget_set_sensitive(mw->move_menu, FALSE);
> + return;
> + }
> +
> + /* Load Folder MRU */
> + load_mru(mw);
> +
> + item=gtk_menu_item_new();
> + gtk_menu_append(GTK_MENU(GTK_MENU_ITEM(mw->move_menu)->submenu),
> item);
> + gtk_widget_show(item);
> +
> + /* Create standard entry */
> + item=gtk_menu_item_new_with_label(_("Folder"));
> +
> + gtk_menu_append(GTK_MENU(GTK_MENU_ITEM(mw->move_menu)->submenu),
> item);
> + gtk_widget_show(item);
> +
> + submenu=gtk_menu_new();
> + smenuitem=gtk_menu_item_new();
> +
> + scroller=gtk_scrolled_window_new(NULL, NULL);
> + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(scroller),
> + GTK_POLICY_AUTOMATIC,
> GTK_POLICY_AUTOMATIC);
> + bmbl = balsa_mblist_new();
> +
> + gtk_widget_size_request(bmbl, &req);
> +
> + if ( req.height > balsa_app.mw_height )
> + req.height = balsa_app.mw_height;
> +
> + req.width=balsa_app.mblist_width;
> + gtk_widget_set_usize(GTK_WIDGET(bmbl), req.width, req.height);
> +
> + gtk_container_add(GTK_CONTAINER(scroller), bmbl);
> + gtk_container_add(GTK_CONTAINER(smenuitem), scroller);
> +
> + gtk_menu_append(GTK_MENU(submenu), smenuitem);
> + gtk_widget_show(bmbl);
> + gtk_widget_show(scroller);
> + gtk_widget_show(smenuitem);
> + gtk_widget_show(submenu);
> +
> + gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);
> +
> + gtk_signal_connect (GTK_OBJECT(smenuitem), "button_release_event",
> + (GtkSignalFunc) close_if_transferred_cb,
> + (gpointer) mw);
> +
> + gtk_signal_connect(GTK_OBJECT(bmbl), "tree_select_row",
> + (GtkSignalFunc) transfer_message_cb,
> + (gpointer) mw);
> +
> +
> +}
> +
> +static gint
> +close_if_transferred_cb(BalsaMBList * bmbl, GdkEvent * event,
> + MessageWindow * mw)
> +{
> + if (mw->transferred) {
> + return FALSE;
> + } else {
> + return TRUE;
> + }
> +}
> +
> +static void
> +transfer_message_cb(GtkCTree * ctree, GtkCTreeNode * row, gint column,
> + MessageWindow * mw)
> +{
> + GtkCList* clist=NULL;
> + BalsaIndex* bindex = NULL;
> + BalsaMailboxNode *mbnode;
> + gboolean select_next = TRUE;
> +
> + g_return_if_fail(mw != NULL);
> +
> + bindex = balsa_find_index_by_mailbox(mw->message->mailbox);
> +
> + mbnode = gtk_ctree_node_get_row_data(ctree, row);
> +
> + if(mbnode->mailbox == NULL) return;
> +
> + /*Transferring to same mailbox? */
> + if (mw->message->mailbox == mbnode->mailbox)
> + return;
> +
> + if(bindex != NULL && bindex->ctree != NULL) {
> + clist = GTK_CLIST(bindex->ctree);
> +
> + /* select the previous message if we're at the bottom of
> the index */
> + if (clist->rows - 1 == balsa_index_get_largest_selected(clist))
> + select_next = FALSE;
> + }
> +
> + mw->transferred=1;
> + libbalsa_message_move(mw->message, mbnode->mailbox);
> +
> + if(bindex != NULL && bindex->ctree != NULL) {
> + /* select another message depending on where we are in
> the list */
> + if (clist->rows > 1) {
> + if (select_next)
> + balsa_index_select_next(bindex);
> + else
> + balsa_index_select_previous(bindex);
> + }
> + libbalsa_mailbox_sync_backend(bindex->mailbox_node->mailbox);
> + }
> +
> + balsa_remove_from_folder_mru(mbnode->mailbox->url);
> + balsa_add_to_folder_mru(mbnode->mailbox->url);
> +
> + close_message_window(NULL, (gpointer) mw);
> +}
> +
> +static gint
> +find_url_cb(GNode *gnode, struct BalsaMRUEntry *data)
> +{
> + BalsaMailboxNode *node;
> +
> + node=gnode->data;
> + if(!node || !BALSA_IS_MAILBOX_NODE(node))
> + return(FALSE);
> +
> + if(!node->mailbox)
> + return(FALSE);
> +
> + if(!strcmp(LIBBALSA_MAILBOX(node->mailbox)->url, data->url)) {
> + data->url=LIBBALSA_MAILBOX(node->mailbox)->url;
> + data->name=LIBBALSA_MAILBOX(node->mailbox)->name;
> + data->mailbox=LIBBALSA_MAILBOX(node->mailbox);
> + return(TRUE);
> + }
> +
> + return(FALSE);
> +}
> +
> +static void
> +load_mru(MessageWindow * mw)
> +{
> + GList *mru;
> + GList *tmp;
> + struct BalsaMRUEntry *mru_entry;
> + GtkWidget *item;
> +
> + for(mru=balsa_app.folder_mru;mru != NULL;mru=g_list_next(mru)) {
> + while(mru) {
> + mru_entry=g_malloc(sizeof(struct
> BalsaMRUEntry));
> + if(!mru_entry)
> + return;
> +
> + mru_entry->url=mru->data;
> + mru_entry->mailbox=NULL;
> + mru_entry->mw=mw;
> + g_node_traverse(balsa_app.mailbox_nodes,
> G_IN_ORDER, G_TRAVERSE_ALL,
> + -1, (gint (*)(GNode *, gpointer))find_url_cb,
> mru_entry);
> + if(mru_entry->mailbox == NULL) {
> + g_free(mru_entry);
> + tmp=g_list_next(mru);
> + g_free(mru->data);
> + balsa_app.folder_mru=g_list_remove(balsa_app.folder_mru,
> + mru->data);
> + mru=tmp;
> + continue;
> + }
> + break;
> + }
> +
> + if(!mru)
> + break;
> +
> + mw->mru_list=g_list_append(mw->mru_list, mru_entry);
> + item=gtk_menu_item_new_with_label(mru_entry->name);
> + gtk_widget_show(item);
> + gtk_menu_append(GTK_MENU(GTK_MENU_ITEM(mw->move_menu)->submenu),
> item);
> + gtk_signal_connect(GTK_OBJECT(item), "activate",
> + GTK_SIGNAL_FUNC(mru_select_cb),
> mru_entry);
> + }
> +}
> +
> +static void
> +mru_select_cb(GtkWidget *widget, struct BalsaMRUEntry *entry)
> +{
> + MessageWindow *mw=entry->mw;
> +
> + LibBalsaMailbox *mailbox=entry->mailbox;
> +
> + GtkCList* clist=NULL;
> + BalsaIndex* bindex = NULL;
> + gboolean select_next = TRUE;
> +
> + bindex = balsa_find_index_by_mailbox(mw->message->mailbox);
> +
> + /*Transferring to same mailbox? */
> + if (mw->message->mailbox == mailbox)
> + return;
> +
> + if(bindex != NULL && bindex->ctree != NULL) {
> + clist = GTK_CLIST(bindex->ctree);
> +
> + /* select the previous message if we're at the bottom of
> the index */
> + if (clist->rows - 1 == balsa_index_get_largest_selected(clist))
> + select_next = FALSE;
> + }
> +
> + mw->transferred=1;
> + libbalsa_message_move(mw->message, mailbox);
> +
> + if(bindex != NULL && bindex->ctree != NULL) {
> + /* select another message depending on where we are in
> the list */
> + if (clist->rows > 1) {
> + if (select_next)
> + balsa_index_select_next(bindex);
> + else
> + balsa_index_select_previous(bindex);
> + }
> + libbalsa_mailbox_sync_backend(bindex->mailbox_node->mailbox);
> + }
> +
> + balsa_remove_from_folder_mru(mailbox->url);
> + balsa_add_to_folder_mru(mailbox->url);
> +
> + close_message_window(NULL, (gpointer) mw);
> +}
> +
> +void
> +balsa_add_to_folder_mru(gchar *url)
> +{
> + if(g_list_length(balsa_app.folder_mru) >= FOLDER_MRU_LENGTH)
> + balsa_app.folder_mru=g_list_remove(balsa_app.folder_mru,
> + g_list_last(balsa_app.folder_mru)->data);
> + balsa_app.folder_mru=g_list_prepend(balsa_app.folder_mru,
> g_strdup(url));
> +}
> +
> +void
> +balsa_remove_from_folder_mru(gchar *url)
> +{
> + GList *tmp;
> +
> + for(tmp=balsa_app.folder_mru;tmp != NULL;tmp=g_list_next(tmp)) {
> + if(!strcmp((char *)tmp->data, url)) {
> + g_free(tmp->data);
> + balsa_app.folder_mru=g_list_remove(balsa_app.folder_mru,
> tmp->data);
> + break;
> + }
> + }
> +}
> +
> diff -b -B -r -u -P --exclude-from=ignore
> ../balsa-cvs/src/message-window.h ./src/message-window.h
> --- ../balsa-cvs/src/message-window.h Thu Aug 16 18:40:35 2001
> +++ ./src/message-window.h Thu Aug 16 18:42:04 2001
> @@ -25,5 +25,7 @@
> #include "libbalsa.h"
>
> void message_window_new(LibBalsaMessage * message);
> +void balsa_remove_from_folder_mru(gchar *url);
> +void balsa_add_to_folder_mru(gchar *url);
>
> #endif /* __MESSAGE_WINDOW_H__ */
> diff -b -B -r -u -P --exclude-from=ignore ../balsa-cvs/src/pref-manager.c
> ./src/pref-manager.c
> --- ../balsa-cvs/src/pref-manager.c Thu Aug 16 18:40:35 2001
> +++ ./src/pref-manager.c Thu Aug 16 18:42:04 2001
> @@ -63,6 +63,7 @@
> #endif
>
> GtkWidget *close_mailbox_auto;
> + GtkWidget *drag_default_is_move;
> GtkWidget *close_mailbox_minutes;
>
> GtkWidget *previewpane;
> @@ -349,6 +350,9 @@
> gtk_signal_connect(GTK_OBJECT(pui->close_mailbox_auto), "toggled",
> GTK_SIGNAL_FUNC(mailbox_timer_modified_cb),
> property_box);
>
> + gtk_signal_connect(GTK_OBJECT(pui->drag_default_is_move), "toggled",
> + GTK_SIGNAL_FUNC(properties_modified_cb),
> property_box);
> +
> gtk_signal_connect(GTK_OBJECT(pui->close_mailbox_minutes),
> "changed",
> GTK_SIGNAL_FUNC(mailbox_timer_modified_cb),
> property_box);
>
> @@ -566,6 +570,8 @@
>
> balsa_app.close_mailbox_auto =
> GTK_TOGGLE_BUTTON(pui->close_mailbox_auto)->active;
> + balsa_app.drag_default_is_move =
> + GTK_TOGGLE_BUTTON(pui->drag_default_is_move)->active;
> balsa_app.close_mailbox_timeout =
> gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON
> (pui->close_mailbox_minutes));
> @@ -766,6 +772,8 @@
>
> gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pui->close_mailbox_auto),
> balsa_app.close_mailbox_auto);
> + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pui->drag_default_is_move),
> + balsa_app.drag_default_is_move);
> gtk_spin_button_set_value(GTK_SPIN_BUTTON(pui->close_mailbox_minutes),
> (float) balsa_app.close_mailbox_timeout);
>
> @@ -1862,6 +1870,11 @@
> label33 = gtk_label_new(_("minutes"));
> gtk_widget_show(label33);
> gtk_box_pack_start(GTK_BOX(hbox1), label33, FALSE, TRUE, 0);
> +
> + pui->drag_default_is_move =
> + gtk_check_button_new_with_label(_("Drag-and-drop moves messages
> by default"));
> + gtk_widget_show(pui->drag_default_is_move);
> + gtk_box_pack_start(GTK_BOX(vbox10), pui->drag_default_is_move,
> FALSE, FALSE, 0);
>
> return vbox9;
> }
> diff -b -B -r -u -P --exclude-from=ignore ../balsa-cvs/src/save-restore.c
> ./src/save-restore.c
> --- ../balsa-cvs/src/save-restore.c Thu Aug 16 18:40:35 2001
> +++ ./src/save-restore.c Thu Aug 16 18:42:04 2001
> @@ -26,6 +26,7 @@
> #include "save-restore.h"
> #include "quote-color.h"
> #include "toolbar-prefs.h"
> +#include "balsa-message.h"
>
> #define BALSA_CONFIG_PREFIX "balsa/"
> #define FOLDER_SECTION_PREFIX "folder-"
> @@ -43,6 +44,8 @@
> static gchar **mailbox_list_to_vector(GList * mailbox_list);
> static void save_color(gchar * key, GdkColor * color);
> static void load_color(gchar * key, GdkColor * color);
> +static void save_mru(GList *mru);
> +static void load_mru(GList **mru);
>
> static void config_address_books_load(void);
> static void config_address_books_save(void);
> @@ -547,6 +550,8 @@
> /* ... Progress Window Dialog */
> balsa_app.pwindow_option = d_get_gint("ProgressWindow", WHILERETR);
>
> + balsa_app.drag_default_is_move = d_get_gint("DragDefaultIsMove",
> 0);
> +
> gnome_config_pop_prefix();
>
> /* Printing options ... */
> @@ -715,6 +720,11 @@
> balsa_app.save_dir = gnome_config_get_string("SavePartDir");
> gnome_config_pop_prefix();
>
> + /* Folder MRU */
> + gnome_config_push_prefix(BALSA_CONFIG_PREFIX "FolderMRU/");
> + load_mru(&balsa_app.folder_mru);
> + gnome_config_pop_prefix();
> +
> return TRUE;
> } /* config_global_load */
>
> @@ -800,6 +810,7 @@
> gnome_config_set_bool("MsgSizeAsLines", balsa_app.line_length);
> gnome_config_set_bool("PageDownMod", balsa_app.pgdownmod);
> gnome_config_set_int("PageDownPercent", balsa_app.pgdown_percent);
> + gnome_config_set_int("DragDefaultIsMove",
> balsa_app.drag_default_is_move);
>
> gnome_config_pop_prefix();
>
> @@ -940,6 +951,11 @@
> gnome_config_set_string("SavePartDir", balsa_app.save_dir);
> gnome_config_pop_prefix();
>
> +
> + gnome_config_push_prefix(BALSA_CONFIG_PREFIX "FolderMRU/");
> + save_mru(balsa_app.folder_mru);
> + gnome_config_pop_prefix();
> +
> gnome_config_sync();
> return TRUE;
> } /* config_global_save */
> @@ -1163,4 +1179,33 @@
> str = gnome_config_get_string(key);
> gdk_color_parse(str, color);
> g_free(str);
> +}
> +
> +void
> +load_mru(GList **mru)
> +{
> + int count, i;
> + char tmpkey[32];
> +
> + count=d_get_gint("MRUCount", 0);
> + for(i=0;i<count;i++)
> + {
> + sprintf(tmpkey, "MRU%d", i+1);
> + (*mru)=g_list_append((*mru), gnome_config_get_string(tmpkey));
> + }
> +}
> +
> +void
> +save_mru(GList *mru)
> +{
> + int i;
> + char tmpkey[32];
> + GList *ltmp;
> +
> + for(ltmp=g_list_first(balsa_app.folder_mru),i=0;ltmp !=
> NULL;ltmp=g_list_next(ltmp),i++)
> + {
> + sprintf(tmpkey, "MRU%d", i+1);
> + gnome_config_set_string(tmpkey, (gchar *)(ltmp->data));
> + }
> + gnome_config_set_int("MRUCount", i);
> }
>
--
Christophe Barbé <christophe.barbe@online.fr>
GnuPG FingerPrint: E0F6 FADF 2A5C F072 6AF8 F67A 8F45 2F1E D72C B41E
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]