From f745553229591ed3f620761b91e7ed447d1800fa Mon Sep 17 00:00:00 2001 From: Not Zed Date: Wed, 6 Oct 2004 03:22:22 +0000 Subject: convert to using EABPopup. (sources): remove dead code. 2004-10-01 Not Zed * gui/widgets/e-addressbook-view.c (do_popup_menu): convert to using EABPopup. (sources): remove dead code. (has_email_address_1, get_has_email_address): removed now redundant code. (save_as, send_as, send_to, print, copy, paste, cut, delete) (copy_to_folder, move_to_folder, new_card, new_list): new api. (free_popup_info): dead. (print_envelope): not pining. (get_contact_list): take a popup target instead, don't ref. (get_contact_list_1): not required no more. (contact_and_book_free): same. (delete): call eab_view_delete_selection. (eab_view_delete_selection): do the actual delete here. * gui/widgets/eab-popup.c (eab_popup_target_new_select): implement. 2004-10-01 Not Zed * gui/widgets/eab-popup.[ch]: addressbook popup driver. * gui/component/addressbook-view.c (delete_addressbook_cb): use e-error for the message prompt. don't bother keeping it around, it can never be re-sensitised anyway. (book_removed): no longer destroy the original dialogue. * addressbook-errors.xml: add ask-delete for deleting addressbooks. * gui/component/addressbook-view.c (addressbook_view_init): connect to popup_event rather than fill_popup_menu now. (fill_popup_menu_callback): renamed to popup_event_callback, changed to use epopup. (add_popup_menu_item): remove, no longer needed. svn path=/trunk/; revision=27466 --- addressbook/gui/component/addressbook-view.c | 134 ++++++++++----------------- 1 file changed, 47 insertions(+), 87 deletions(-) (limited to 'addressbook/gui/component/addressbook-view.c') diff --git a/addressbook/gui/component/addressbook-view.c b/addressbook/gui/component/addressbook-view.c index 84888f3ff5..48d8499a32 100644 --- a/addressbook/gui/component/addressbook-view.c +++ b/addressbook/gui/component/addressbook-view.c @@ -60,6 +60,7 @@ #include "addressbook/gui/merging/eab-contact-merging.h" #include "addressbook/printing/e-contact-print.h" #include "addressbook/util/eab-book-util.h" +#include "addressbook/gui/widgets/eab-popup.h" #define PARENT_TYPE G_TYPE_OBJECT static GObjectClass *parent_class = NULL; @@ -614,45 +615,10 @@ load_primary_selection (AddressbookView *view) } /* Folder popup menu callbacks */ - -static void -add_popup_menu_item (GtkMenu *menu, const char *label, const char *pixmap, - GCallback callback, gpointer user_data, gboolean sensitive) -{ - GtkWidget *item, *image; - - if (pixmap) { - item = gtk_image_menu_item_new_with_label (label); - - /* load the image */ - if (g_file_test (pixmap, G_FILE_TEST_EXISTS)) - image = gtk_image_new_from_file (pixmap); - else - image = gtk_image_new_from_stock (pixmap, GTK_ICON_SIZE_MENU); - - if (image) { - gtk_widget_show (image); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image); - } - } else { - item = gtk_menu_item_new_with_label (label); - } - - if (callback) - g_signal_connect (G_OBJECT (item), "activate", callback, user_data); - - if (!sensitive) - gtk_widget_set_sensitive (item, FALSE); - - gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); - gtk_widget_show (item); -} - typedef struct { AddressbookView *view; ESource *selected_source; GtkWidget *toplevel; - GtkWidget *dialog; } BookRemovedClosure; static void @@ -662,7 +628,6 @@ book_removed (EBook *book, EBookStatus status, gpointer data) AddressbookView *view = closure->view; AddressbookViewPrivate *priv = view->priv; ESource *source = closure->selected_source; - GtkWidget *dialog = closure->dialog; GtkWidget *toplevel = closure->toplevel; g_free (closure); @@ -685,73 +650,54 @@ book_removed (EBook *book, EBookStatus status, gpointer data) "addressbook:remove-addressbook", NULL); } - - gtk_widget_destroy (dialog); } static void -delete_addressbook_cb (GtkWidget *widget, AddressbookView *view) +delete_addressbook_cb(EPopup *ep, EPopupItem *pitem, void *data) { + AddressbookView *view = data; AddressbookViewPrivate *priv = view->priv; ESource *selected_source; - GtkWidget *dialog; EBook *book; GError *error = NULL; + GtkWindow *toplevel; selected_source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (priv->selector)); if (!selected_source) return; - /* Create the confirmation dialog */ - dialog = gtk_message_dialog_new ( - GTK_WINDOW (gtk_widget_get_toplevel (widget)), - GTK_DIALOG_MODAL, - GTK_MESSAGE_QUESTION, - GTK_BUTTONS_YES_NO, - _("Address book '%s' will be removed. Are you sure you want to continue?"), - e_source_peek_name (selected_source)); -#if !GTK_CHECK_VERSION (2,4,0) - gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE); -#endif - - if (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_YES) { - gtk_widget_destroy (dialog); + toplevel = (GtkWindow *)gtk_widget_get_toplevel(ep->target->widget); + + if (e_error_run(toplevel, "addressbook:ask-delete-addressbook", e_source_peek_name(selected_source)) != GTK_RESPONSE_YES) return; - } /* Remove local data */ book = e_book_new (selected_source, &error); if (book) { BookRemovedClosure *closure = g_new (BookRemovedClosure, 1); - closure->toplevel = gtk_widget_get_toplevel (widget); + closure->toplevel = (GtkWidget *)toplevel; closure->view = view; closure->selected_source = selected_source; - closure->dialog = dialog; if (e_book_async_remove (book, book_removed, closure)) { - e_error_run (GTK_WINDOW (gtk_widget_get_toplevel (widget)), - "addressbook:remove-addressbook", - NULL); - + e_error_run (toplevel, "addressbook:remove-addressbook", NULL); g_free (closure); - g_object_unref (book); } } - - gtk_widget_set_sensitive (dialog, FALSE); } static void -new_addressbook_cb (GtkWidget *widget, AddressbookView *view) +new_addressbook_cb(EPopup *ep, EPopupItem *pitem, void *data) { - addressbook_config_create_new_source (gtk_widget_get_toplevel (widget)); + addressbook_config_create_new_source (gtk_widget_get_toplevel(ep->target->widget)); } static void -edit_addressbook_cb (GtkWidget *widget, AddressbookView *view) +edit_addressbook_cb(EPopup *ep, EPopupItem *pitem, void *data) { + AddressbookView *view = data; AddressbookViewPrivate *priv = view->priv; ESource *selected_source; const char *uid; @@ -769,7 +715,7 @@ edit_addressbook_cb (GtkWidget *widget, AddressbookView *view) char *uid_copy = g_strdup (uid); closure = g_new (EditorUidClosure, 1); - closure->editor = addressbook_config_edit_source (gtk_widget_get_toplevel (widget), selected_source); + closure->editor = addressbook_config_edit_source (gtk_widget_get_toplevel(ep->target->widget), selected_source); closure->uid = uid_copy; closure->view = view; @@ -794,25 +740,41 @@ primary_source_selection_changed_callback (ESourceSelector *selector, save_primary_selection (view); } +static EPopupItem abv_source_popups[] = { + { E_POPUP_ITEM, "10.new", N_("New Address Book"), new_addressbook_cb, NULL, NULL, 0 }, + { E_POPUP_ITEM, "20.delete", N_("Delete"), delete_addressbook_cb, NULL, "stock_delete", EAB_POPUP_SOURCE_USER|EAB_POPUP_SOURCE_PRIMARY }, + { E_POPUP_ITEM, "30.properties", N_("Properties..."), edit_addressbook_cb, NULL, NULL, EAB_POPUP_SOURCE_PRIMARY }, +}; static void -fill_popup_menu_callback (ESourceSelector *selector, GtkMenu *menu, AddressbookView *view) +abv_source_popup_free(EPopup *ep, GSList *list, void *data) { - AddressbookViewPrivate *priv = view->priv; - gboolean sensitive; - gboolean local_addressbook; - ESource *selected_source; - char *uri; + g_slist_free(list); +} - selected_source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (priv->selector)); - sensitive = selected_source ? TRUE : FALSE; +static gboolean +popup_event_callback(ESourceSelector *selector, ESource *source, GdkEventButton *event, AddressbookView *view) +{ + EABPopup *ep; + EABPopupTargetSource *t; + GSList *menus = NULL; + int i; + GtkMenu *menu; - uri = e_source_peek_relative_uri (selected_source); - local_addressbook = (uri && !strcmp ("system", uri)); - - add_popup_menu_item (menu, _("New Address Book"), NULL, G_CALLBACK (new_addressbook_cb), view, TRUE); - add_popup_menu_item (menu, _("Delete"), GTK_STOCK_DELETE, G_CALLBACK (delete_addressbook_cb), view, sensitive && !local_addressbook); - add_popup_menu_item (menu, _("Properties..."), NULL, G_CALLBACK (edit_addressbook_cb), view, sensitive); + ep = eab_popup_new("com.novell.evolution.addressbook.source.popup"); + t = eab_popup_target_new_source(ep, selector); + t->target.widget = (GtkWidget *)view->priv->notebook; + + for (i=0;itarget.mask); + gtk_menu_popup(menu, NULL, NULL, NULL, NULL, event?event->button:0, event?event->time:gtk_get_current_event_time()); + + return TRUE; } static gboolean @@ -978,15 +940,13 @@ selector_tree_drag_data_received (GtkWidget *widget, { GtkTreePath *path = NULL; GtkTreeViewDropPosition pos; - gpointer source, target = NULL; + gpointer target = NULL; GtkTreeModel *model; GtkTreeIter iter; gboolean success = FALSE; - EBook *source_book, *target_book; MergeContext *merge_context; GList *contactlist; - GList *l; if (!gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (widget), x, y, &path, &pos)) @@ -1170,8 +1130,8 @@ addressbook_view_init (AddressbookView *view) g_signal_connect_object (priv->selector, "primary_selection_changed", G_CALLBACK (primary_source_selection_changed_callback), G_OBJECT (view), 0); - g_signal_connect_object (priv->selector, "fill_popup_menu", - G_CALLBACK (fill_popup_menu_callback), + g_signal_connect_object (priv->selector, "popup_event", + G_CALLBACK (popup_event_callback), G_OBJECT (view), 0); load_primary_selection (view); -- cgit v1.2.3