From 26f8433aa06f52cefb43fa6d69a4101d6563ef8b Mon Sep 17 00:00:00 2001 From: Christopher James Lahey Date: Wed, 21 Jun 2000 03:45:32 +0000 Subject: Added a variable to keep track of the cursor. Set the cursor when 2000-06-20 Christopher James Lahey * e-canvas.c, e-canvas.h: Added a variable to keep track of the cursor. Set the cursor when selection_add is called. Properly unset the cursor at the right times. svn path=/trunk/; revision=3663 --- e-util/ChangeLog | 6 ++++++ e-util/e-canvas.c | 25 +++++++++++++++++++------ e-util/e-canvas.h | 14 ++++++++++---- 3 files changed, 35 insertions(+), 10 deletions(-) (limited to 'e-util') diff --git a/e-util/ChangeLog b/e-util/ChangeLog index abb89bd807..728281dac0 100644 --- a/e-util/ChangeLog +++ b/e-util/ChangeLog @@ -1,3 +1,9 @@ +2000-06-20 Christopher James Lahey + + * e-canvas.c, e-canvas.h: Added a variable to keep track of the + cursor. Set the cursor when selection_add is called. Properly + unset the cursor at the right times. + 2000-06-20 Christopher James Lahey * e-canvas.c: Grab the focus when setting the cursor. diff --git a/e-util/e-canvas.c b/e-util/e-canvas.c index bbe58efdc3..5b843bf5b8 100644 --- a/e-util/e-canvas.c +++ b/e-util/e-canvas.c @@ -45,11 +45,6 @@ enum { static guint e_canvas_signals [LAST_SIGNAL] = { 0, }; -typedef struct { - GnomeCanvasItem *item; - gpointer id; -} ECanvasSelectionInfo; - GtkType e_canvas_get_type (void) { @@ -113,6 +108,7 @@ static void e_canvas_init (ECanvas *canvas) { canvas->selection = NULL; + canvas->cursor = NULL; } static void @@ -519,6 +515,7 @@ e_canvas_item_set_cursor (GnomeCanvasItem *item, gpointer id) func(item, flags, id); canvas->selection = g_list_prepend(canvas->selection, info); + canvas->cursor = info; } void @@ -538,9 +535,19 @@ e_canvas_item_add_selection (GnomeCanvasItem *item, gpointer id) g_return_if_fail(GNOME_IS_CANVAS_ITEM(item)); g_return_if_fail(item->canvas != NULL); g_return_if_fail(E_IS_CANVAS(item->canvas)); + + flags = E_CANVAS_ITEM_SELECTION_SELECT; + canvas = E_CANVAS(item->canvas); + + if (canvas->cursor) { + func = gtk_object_get_data(GTK_OBJECT(canvas->cursor->item), "ECanvasItem::selection_callback"); + if (func) + func(canvas->cursor->item, flags, canvas->cursor->id); + } + + gnome_canvas_item_grab_focus(item); flags = E_CANVAS_ITEM_SELECTION_SELECT | E_CANVAS_ITEM_SELECTION_CURSOR; - canvas = E_CANVAS(item->canvas); info = g_new(ECanvasSelectionInfo, 1); info->item = item; @@ -551,6 +558,7 @@ e_canvas_item_add_selection (GnomeCanvasItem *item, gpointer id) func(item, flags, id); canvas->selection = g_list_prepend(canvas->selection, info); + canvas->cursor = info; } void @@ -575,12 +583,17 @@ e_canvas_item_remove_selection (GnomeCanvasItem *item, gpointer id) if (info->item == item) { ECanvasItemSelectionCompareFunc compare_func; compare_func = gtk_object_get_data(GTK_OBJECT(info->item), "ECanvasItem::selection_compare_callback"); + if (compare_func(info->item, info->id, id, 0) == 0) { ECanvasItemSelectionFunc func; func = gtk_object_get_data(GTK_OBJECT(info->item), "ECanvasItem::selection_callback"); if (func) func(info->item, flags, info->id); canvas->selection = g_list_remove_link(canvas->selection, list); + + if (canvas->cursor == info) + canvas->cursor = NULL; + g_free(info); g_list_free_1(list); break; diff --git a/e-util/e-canvas.h b/e-util/e-canvas.h index 9e572a1179..06e3768e12 100644 --- a/e-util/e-canvas.h +++ b/e-util/e-canvas.h @@ -66,12 +66,18 @@ enum { E_CANVAS_ITEM_SELECTION_DELETE_DATA = 1 << 2, }; +typedef struct { + GnomeCanvasItem *item; + gpointer id; +} ECanvasSelectionInfo; + struct _ECanvas { - GnomeCanvas parent; - - int idle_id; - GList *selection; + GnomeCanvas parent; + + int idle_id; + GList *selection; + ECanvasSelectionInfo *cursor; }; struct _ECanvasClass -- cgit v1.2.3