diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2007-02-13 07:18:24 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2007-02-13 07:18:24 +0000 |
commit | a1839d2def700ed6b60dfffb619e7be8c39a68d1 (patch) | |
tree | a03d942e1a4d979c76e73892fe9698e0f304cd95 | |
parent | 9a0a8fd471d4ca1c95be5b6dd0a8ccf43764f94e (diff) |
enabled multiple copy and paste of persons in addressbook.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@1542 ee746299-78ed-0310-b773-934348b2243d
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | ChangeLog.ja | 4 | ||||
-rw-r--r-- | src/addressbook.c | 80 |
3 files changed, 58 insertions, 30 deletions
@@ -1,5 +1,9 @@ 2007-02-13 + * src/addressbook.c: enabled multiple copy and paste of persons. + +2007-02-13 + * src/addressbook.c src/addrbook.[ch]: when deleting email from group, only remove from group list and not from person. diff --git a/ChangeLog.ja b/ChangeLog.ja index 38c11b4d..4a957a38 100644 --- a/ChangeLog.ja +++ b/ChangeLog.ja @@ -1,5 +1,9 @@ 2007-02-13 + * src/addressbook.c: 人物の複数コピー&ペーストができるようにした。 + +2007-02-13 + * src/addressbook.c src/addrbook.[ch]: グループからメールアドレスを削除するとき、 グループのリストからのみ削除し、人物からは削除しないようにした。 diff --git a/src/addressbook.c b/src/addressbook.c index e9949601..3785fa7a 100644 --- a/src/addressbook.c +++ b/src/addressbook.c @@ -141,7 +141,7 @@ static GList *_addressIFaceSelection_ = NULL; #define ADDRESSBOOK_IFACE_SELECTION "1/y,3/y,4/y,2/n" /* Address clipboard */ -static AddressObject *clipObj = NULL; +static GList *_clipObjectList_ = NULL; static AddressBook_win addrbook; @@ -875,8 +875,9 @@ static void addressbook_del_clicked(GtkButton *button, gpointer data) } else if( aio->type == ADDR_ITEM_PERSON ) { ItemPerson *item = ( ItemPerson * ) aio; - if( item == ( ItemPerson * )clipObj ) - clipObj = NULL; + if( _clipObjectList_ ) { + _clipObjectList_ = g_list_remove( _clipObjectList_, item ); + } item = addrbook_remove_person( abf, item ); if( item ) { addritem_free_item_person( item ); @@ -1102,8 +1103,18 @@ static void addressbook_menuitem_set_sensitive(void) { canDelete = canEditAddress; if( GTK_CLIST(addrbook.clist)->selection && GTK_CLIST(addrbook.clist)->selection->next ) canEditAddress = FALSE; - if( obj && obj->type == ADDR_ITEM_PERSON ) canCopy = TRUE; - if( clipObj && canAdd ) canPaste = TRUE; + if( _addressListSelection_ ) { + GList *cur; + AddressObject *item; + for( cur = _addressListSelection_; cur != NULL; cur = cur->next ) { + item = cur->data; + if( item->type == ADDR_ITEM_PERSON ) { + canCopy = TRUE; + break; + } + } + } + if( _clipObjectList_ && canAdd ) canPaste = TRUE; /* Enable add */ menu_set_sensitive( addrbook.menu_factory, "/Address/New Address", canAdd ); @@ -1294,7 +1305,6 @@ static void addressbook_list_row_selected( GtkCTree *clist, GtkCTreeNode *node, addrbook.listSelected = node; obj = gtk_ctree_node_get_row_data( clist, node ); if( obj != NULL ) { - g_print( "list select: %d : '%s'\n", obj->type, obj->name ); addressbook_list_select_add( obj ); } @@ -1306,7 +1316,6 @@ static void addressbook_list_row_unselected( GtkCTree *ctree, GtkCTreeNode *node obj = gtk_ctree_node_get_row_data( ctree, node ); if( obj != NULL ) { - g_print( "list unselect: %d : '%s'\n", obj->type, obj->name ); addressbook_list_select_remove( obj ); } @@ -1882,16 +1891,20 @@ static void addressbook_copy_address_cb(gpointer data, guint action, { GtkCTree *clist = GTK_CTREE( addrbook.clist ); AddressObject *obj; + GList *node; - if( addrbook.listSelected == NULL ) return; - obj = gtk_ctree_node_get_row_data( clist, addrbook.listSelected ); - g_return_if_fail(obj != NULL); + if ( _addressListSelection_ == NULL ) return; - if( obj->type == ADDR_ITEM_PERSON ) { - clipObj = obj; - } - else { - return; + g_list_free( _clipObjectList_ ); + _clipObjectList_ = NULL; + + node = _addressListSelection_; + while( node ) { + obj = node->data; + if( obj->type == ADDR_ITEM_PERSON ) { + _clipObjectList_ = g_list_append( _clipObjectList_, obj ); + } + node = g_list_next( node ); } addressbook_menuitem_set_sensitive(); @@ -1908,9 +1921,9 @@ static void addressbook_paste_address_cb(gpointer data, guint action, ItemFolder *folder = NULL; ItemPerson *clipPerson, *person; GList *cur; + GList *node; - if (!clipObj) return; - if (clipObj->type != ADDR_ITEM_PERSON) return; + if (!_clipObjectList_) return; pobj = gtk_ctree_node_get_row_data( ctree, addrbook.treeSelected ); if( pobj->type == ADDR_ITEM_FOLDER ) @@ -1926,19 +1939,26 @@ static void addressbook_paste_address_cb(gpointer data, guint action, abf = ds->rawDataSource; if( abf == NULL ) return; - clipPerson = (ItemPerson *)clipObj; - person = addrbook_add_address_list(abf, folder, NULL); - ADDRITEM_NAME(person) = g_strdup(ADDRITEM_NAME(clipPerson)); - person->firstName = g_strdup(clipPerson->firstName); - person->lastName = g_strdup(clipPerson->lastName); - person->nickName = g_strdup(clipPerson->nickName); - for (cur = clipPerson->listEMail; cur != NULL; cur = cur->next) { - ItemEMail *email = cur->data; - addritem_person_add_email(person, addritem_copy_item_email(email)); - } - for (cur = clipPerson->listAttrib; cur != NULL; cur = cur->next) { - UserAttribute *attr = cur->data; - addritem_person_add_attribute(person, addritem_copy_attribute(attr)); + node = _clipObjectList_; + while( node ) { + obj = node->data; + node = g_list_next( node ); + if( obj->type != ADDR_ITEM_PERSON ) continue; + clipPerson = (ItemPerson *)obj; + + person = addrbook_add_address_list(abf, folder, NULL); + ADDRITEM_NAME(person) = g_strdup(ADDRITEM_NAME(clipPerson)); + person->firstName = g_strdup(clipPerson->firstName); + person->lastName = g_strdup(clipPerson->lastName); + person->nickName = g_strdup(clipPerson->nickName); + for (cur = clipPerson->listEMail; cur != NULL; cur = cur->next) { + ItemEMail *email = cur->data; + addritem_person_add_email(person, addritem_copy_item_email(email)); + } + for (cur = clipPerson->listAttrib; cur != NULL; cur = cur->next) { + UserAttribute *attr = cur->data; + addritem_person_add_attribute(person, addritem_copy_attribute(attr)); + } } if (addrbook.treeSelected == addrbook.opened) { |