diff options
author | Christopher James Lahey <clahey@helixcode.com> | 2000-04-10 23:46:25 +0800 |
---|---|---|
committer | Chris Lahey <clahey@src.gnome.org> | 2000-04-10 23:46:25 +0800 |
commit | 99700ad43dcbf0bf95b335a9fc8f95934080d63c (patch) | |
tree | d325feef8319087bb323f592da432884d03b6e92 /addressbook/gui/minicard | |
parent | c4f6086c2948f3384dd95393f7ea737db6143682 (diff) | |
download | gsoc2013-evolution-99700ad43dcbf0bf95b335a9fc8f95934080d63c.tar.gz gsoc2013-evolution-99700ad43dcbf0bf95b335a9fc8f95934080d63c.tar.zst gsoc2013-evolution-99700ad43dcbf0bf95b335a9fc8f95934080d63c.zip |
Fixed a bug where I was sending the wrong information to some callbacks.
2000-04-10 Christopher James Lahey <clahey@helixcode.com>
* addressbook/backend/ebook/e-book-view.c: Fixed a bug where I was
sending the wrong information to some callbacks.
* addressbook/backend/ebook/e-card.c,
addressbook/backend/ebook/e-card.h: Added an e_card_duplicate
function. Made ids get stored in vcards. Made sure to delete the
url if it exists.
* addressbook/backend/pas/Makefile.am: Made pas include
addressbook/backend/ebook/ in the search path.
* addressbook/backend/pas/pas-backend-file.c: Fixed some bugs and
made the create card function store the generated id in the card
being saved.
* addressbook/backend/pas/pas-book-view.c: Fixed a double free
bug.
* addressbook/contact-editor/e-contact-editor.c: Fixed some bugs.
Made the contact editor actually return a valid card when
gtk_object_get(editor, "card", ...) is called.
* addressbook/contact-editor/e-contact-editor.h: Fixed a copy and
paste error.
* addressbook/gui/component/addressbook.c: Made this get the card
properly.
* addressbook/gui/minicard/Makefile.am: Made this include
contact-editor directory in the search path and link against
libecontacteditor so that double clicking can open a dialog.
* addressbook/gui/minicard/e-minicard.c: Fixed some small bugs.
Made double clicking open a contact editor dialog if this minicard
is contained in a minicard view. (It needs the minicard view to
get the EBook to save to.
* wombat/Makefile.am: Link wombat against libebook, since
pas-backend-file now uses ECard.
svn path=/trunk/; revision=2360
Diffstat (limited to 'addressbook/gui/minicard')
-rw-r--r-- | addressbook/gui/minicard/Makefile.am | 4 | ||||
-rw-r--r-- | addressbook/gui/minicard/e-minicard.c | 207 |
2 files changed, 133 insertions, 78 deletions
diff --git a/addressbook/gui/minicard/Makefile.am b/addressbook/gui/minicard/Makefile.am index 3534e9cb69..2eeb1ec3bc 100644 --- a/addressbook/gui/minicard/Makefile.am +++ b/addressbook/gui/minicard/Makefile.am @@ -1,5 +1,6 @@ INCLUDES = \ -I$(top_srcdir)/addressbook/backend/ebook \ + -I$(top_srcdir)/addressbook/contact-editor \ -I$(top_srcdir)/widgets/e-text \ -I$(top_srcdir)/e-util \ $(GNOME_INCLUDEDIR) @@ -47,6 +48,7 @@ minicard_test_LDADD = \ $(top_builddir)/e-util/libeutil.la \ $(top_builddir)/addressbook/backend/ebook/libebook.la \ $(top_builddir)/libversit/libversit.la \ + $(top_builddir)/addressbook/contact-editor/libecontacteditor.a \ $(top_builddir)/widgets/e-text/libetext.a reflow_test_SOURCES = \ @@ -60,6 +62,7 @@ reflow_test_LDADD = \ $(top_builddir)/e-util/libeutil.la \ $(top_builddir)/addressbook/backend/ebook/libebook.la \ $(top_builddir)/libversit/libversit.la \ + $(top_builddir)/addressbook/contact-editor/libecontacteditor.a \ $(top_builddir)/widgets/e-text/libetext.a minicard_view_test_SOURCES = \ @@ -73,4 +76,5 @@ minicard_view_test_LDADD = \ $(top_builddir)/e-util/libeutil.la \ $(top_builddir)/addressbook/backend/ebook/libebook.la \ $(top_builddir)/libversit/libversit.la \ + $(top_builddir)/addressbook/contact-editor/libecontacteditor.a \ $(top_builddir)/widgets/e-text/libetext.a diff --git a/addressbook/gui/minicard/e-minicard.c b/addressbook/gui/minicard/e-minicard.c index 12041a0c5f..6db76afd6d 100644 --- a/addressbook/gui/minicard/e-minicard.c +++ b/addressbook/gui/minicard/e-minicard.c @@ -28,6 +28,8 @@ #include "e-canvas.h" #include "e-util.h" #include "e-canvas-utils.h" +#include "e-contact-editor.h" +#include "e-minicard-view.h" static void e_minicard_init (EMinicard *card); static void e_minicard_class_init (EMinicardClass *klass); static void e_minicard_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); @@ -278,87 +280,130 @@ e_minicard_unrealize (GnomeCanvasItem *item) (* GNOME_CANVAS_ITEM_CLASS(parent_class)->unrealize) (item); } +static void +card_changed_cb (EBook* book, EBookStatus status, gpointer user_data) +{ + g_print ("%s: %s(): a card was changed\n", __FILE__, __FUNCTION__); +} + static gboolean e_minicard_event (GnomeCanvasItem *item, GdkEvent *event) { - EMinicard *e_minicard; - - e_minicard = E_MINICARD (item); - - switch( event->type ) - { - case GDK_FOCUS_CHANGE: - { - GdkEventFocus *focus_event = (GdkEventFocus *) event; - if ( focus_event->in ) - { - gnome_canvas_item_set( e_minicard->rect, - "outline_color", "grey50", - NULL ); - gnome_canvas_item_set( e_minicard->header_rect, - "fill_color", "darkblue", - NULL ); - gnome_canvas_item_set( e_minicard->header_text, - "fill_color", "white", - NULL ); - e_minicard->has_focus = TRUE; - } + EMinicard *e_minicard; + + e_minicard = E_MINICARD (item); + + switch( event->type ) { + case GDK_FOCUS_CHANGE: + { + GdkEventFocus *focus_event = (GdkEventFocus *) event; + if ( focus_event->in ) { + gnome_canvas_item_set( e_minicard->rect, + "outline_color", "grey50", + NULL ); + gnome_canvas_item_set( e_minicard->header_rect, + "fill_color", "darkblue", + NULL ); + gnome_canvas_item_set( e_minicard->header_text, + "fill_color", "white", + NULL ); + e_minicard->has_focus = TRUE; + } else { + gnome_canvas_item_set( e_minicard->rect, + "outline_color", NULL, + NULL ); + gnome_canvas_item_set( e_minicard->header_rect, + "fill_color", "grey70", + NULL ); + gnome_canvas_item_set( e_minicard->header_text, + "fill_color", "black", + NULL ); + e_minicard->has_focus = FALSE; + } + } + break; + case GDK_BUTTON_PRESS: + if (event->button.button == 1) { + e_canvas_item_grab_focus(item); + } + break; + case GDK_2BUTTON_PRESS: + if (E_IS_MINICARD_VIEW(item->parent)) { + gint result; + GtkWidget* contact_editor = + e_contact_editor_new(e_minicard->card); + EBook *book; + GtkWidget *dlg; + gtk_object_get(GTK_OBJECT(item->parent), + "book", &book, + NULL); + + dlg = gnome_dialog_new ("Contact Editor", "Save", "Cancel", NULL); + + g_assert (E_IS_BOOK (book)); + + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dlg)->vbox), + contact_editor, TRUE, TRUE, 0); + + gtk_widget_show_all (dlg); + + gnome_dialog_close_hides (GNOME_DIALOG (dlg), TRUE); + result = gnome_dialog_run_and_close (GNOME_DIALOG (dlg)); + + + /* If the user clicks "okay"...*/ + if (result == 0) { + ECard *card; + g_assert (contact_editor); + g_assert (GTK_IS_OBJECT (contact_editor)); + gtk_object_get(GTK_OBJECT(contact_editor), + "card", &card, + NULL); + + /* Add the card in the contact editor to our ebook */ + e_book_commit_card (book, + card, + card_changed_cb, + NULL); + } + } + break; + case GDK_KEY_PRESS: + if (event->key.keyval == GDK_Tab || + event->key.keyval == GDK_KP_Tab || + event->key.keyval == GDK_ISO_Left_Tab) { + GList *list; + for (list = e_minicard->fields; list; list = list->next) { + GnomeCanvasItem *item = GNOME_CANVAS_ITEM (list->data); + EFocus has_focus; + gtk_object_get(GTK_OBJECT(item), + "has_focus", &has_focus, + NULL); + if (has_focus != E_FOCUS_NONE) { + if (event->key.state & GDK_SHIFT_MASK) + list = list->prev; + else + list = list->next; + if (list) { + item = GNOME_CANVAS_ITEM (list->data); + gnome_canvas_item_set(item, + "has_focus", (event->key.state & GDK_SHIFT_MASK) ? E_FOCUS_END : E_FOCUS_START, + NULL); + return 1; + } else { + return 0; + } + } + } + } + default: + break; + } + + if (GNOME_CANVAS_ITEM_CLASS( parent_class )->event) + return (* GNOME_CANVAS_ITEM_CLASS( parent_class )->event) (item, event); else - { - gnome_canvas_item_set( e_minicard->rect, - "outline_color", NULL, - NULL ); - gnome_canvas_item_set( e_minicard->header_rect, - "fill_color", "grey70", - NULL ); - gnome_canvas_item_set( e_minicard->header_text, - "fill_color", "black", - NULL ); - e_minicard->has_focus = FALSE; - } - } - break; - case GDK_BUTTON_PRESS: - if (event->button.button == 1) { - e_canvas_item_grab_focus(item); - } - break; - case GDK_KEY_PRESS: - if (event->key.keyval == GDK_Tab || - event->key.keyval == GDK_KP_Tab || - event->key.keyval == GDK_ISO_Left_Tab) { - GList *list; - for (list = e_minicard->fields; list; list = list->next) { - GnomeCanvasItem *item = GNOME_CANVAS_ITEM (list->data); - EFocus has_focus; - gtk_object_get(GTK_OBJECT(item), - "has_focus", &has_focus, - NULL); - if (has_focus != E_FOCUS_NONE) { - if (event->key.state & GDK_SHIFT_MASK) - list = list->prev; - else - list = list->next; - if (list) { - item = GNOME_CANVAS_ITEM (list->data); - gnome_canvas_item_set(item, - "has_focus", (event->key.state & GDK_SHIFT_MASK) ? E_FOCUS_END : E_FOCUS_START, - NULL); - return 1; - } else { - return 0; - } - } - } - } - default: - break; - } - - if (GNOME_CANVAS_ITEM_CLASS( parent_class )->event) - return (* GNOME_CANVAS_ITEM_CLASS( parent_class )->event) (item, event); - else - return 0; + return 0; } static void @@ -548,7 +593,13 @@ e_minicard_compare (EMinicard *minicard1, EMinicard *minicard2) gtk_object_get(GTK_OBJECT(minicard2->card), "full_name", &fname2, NULL); - return strcmp(fname1, fname2); + if (fname1 && fname2) + return strcmp(fname1, fname2); + if (fname1) + return -1; + if (fname2) + return 1; + return 0; } else { return 0; } |