aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui/component
diff options
context:
space:
mode:
authorNot Zed <NotZed@Ximian.com>2004-10-06 11:22:22 +0800
committerMichael Zucci <zucchi@src.gnome.org>2004-10-06 11:22:22 +0800
commitf745553229591ed3f620761b91e7ed447d1800fa (patch)
treebeae7ddecdf59e907a4fea5d300ae38e9c58cc46 /addressbook/gui/component
parentd80f89af7503afd6460698e7cc0f84cf84a6eb4d (diff)
downloadgsoc2013-evolution-f745553229591ed3f620761b91e7ed447d1800fa.tar
gsoc2013-evolution-f745553229591ed3f620761b91e7ed447d1800fa.tar.gz
gsoc2013-evolution-f745553229591ed3f620761b91e7ed447d1800fa.tar.bz2
gsoc2013-evolution-f745553229591ed3f620761b91e7ed447d1800fa.tar.lz
gsoc2013-evolution-f745553229591ed3f620761b91e7ed447d1800fa.tar.xz
gsoc2013-evolution-f745553229591ed3f620761b91e7ed447d1800fa.tar.zst
gsoc2013-evolution-f745553229591ed3f620761b91e7ed447d1800fa.zip
convert to using EABPopup. (sources): remove dead code.
2004-10-01 Not Zed <NotZed@Ximian.com> * 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 <NotZed@Ximian.com> * 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
Diffstat (limited to 'addressbook/gui/component')
-rw-r--r--addressbook/gui/component/addressbook-view.c134
1 files changed, 47 insertions, 87 deletions
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;i<sizeof(abv_source_popups)/sizeof(abv_source_popups[0]);i++)
+ menus = g_slist_prepend(menus, &abv_source_popups[i]);
+
+ e_popup_add_items((EPopup *)ep, menus, abv_source_popup_free, view);
+
+ /* visibility is disabled, we only disable menu items */
+ menu = e_popup_create_menu_once((EPopup *)ep, (EPopupTarget *)t, 0, t->target.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);