diff options
author | Larry Ewing <lewing@ximian.com> | 2004-03-30 16:31:57 +0800 |
---|---|---|
committer | Larry Ewing <lewing@src.gnome.org> | 2004-03-30 16:31:57 +0800 |
commit | be8d119494fc3a3d1b705a3b24c4112b041d53ee (patch) | |
tree | aabdd46e92bf10a7da513b1e10229f25656d1fbf /calendar | |
parent | e2a3911b478c1555886c09e2e3796a70b6863332 (diff) | |
download | gsoc2013-evolution-be8d119494fc3a3d1b705a3b24c4112b041d53ee.tar gsoc2013-evolution-be8d119494fc3a3d1b705a3b24c4112b041d53ee.tar.gz gsoc2013-evolution-be8d119494fc3a3d1b705a3b24c4112b041d53ee.tar.bz2 gsoc2013-evolution-be8d119494fc3a3d1b705a3b24c4112b041d53ee.tar.lz gsoc2013-evolution-be8d119494fc3a3d1b705a3b24c4112b041d53ee.tar.xz gsoc2013-evolution-be8d119494fc3a3d1b705a3b24c4112b041d53ee.tar.zst gsoc2013-evolution-be8d119494fc3a3d1b705a3b24c4112b041d53ee.zip |
call drag_finish properly. (selector_tree_drag_motion): set the drag
2004-03-29 Larry Ewing <lewing@ximian.com>
* gui/component/addressbook-component.c
(selector_tree_drag_data_received): call drag_finish properly.
(selector_tree_drag_motion): set the drag status properly.
2004-03-29 Larry Ewing <lewing@ximian.com>
* gui/calendar-component.c (selector_tree_drag_data_received):
deal with the action type a properly. in the normal case.
* gui/calendar-component.c (selector_tree_drag_data_received):
call drag_finish properly, change the uid.
(selector_tree_drag_motion): set drag status properly.
svn path=/trunk/; revision=25240
Diffstat (limited to 'calendar')
-rw-r--r-- | calendar/ChangeLog | 9 | ||||
-rw-r--r-- | calendar/gui/calendar-component.c | 117 |
2 files changed, 65 insertions, 61 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index 8d786a5d63..020c64a062 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,12 @@ +2004-03-29 Larry Ewing <lewing@ximian.com> + + * gui/calendar-component.c (selector_tree_drag_data_received): + deal with the action type a properly. in the normal case. + + * gui/calendar-component.c (selector_tree_drag_data_received): + call drag_finish properly, change the uid. + (selector_tree_drag_motion): set drag status properly. + 2004-03-29 William Jon McCann <mccann@jhu.edu> * gui/tasks-component.c (delete_task_list_cb): diff --git a/calendar/gui/calendar-component.c b/calendar/gui/calendar-component.c index db6fdabe7d..566e5b15d7 100644 --- a/calendar/gui/calendar-component.c +++ b/calendar/gui/calendar-component.c @@ -627,7 +627,6 @@ selector_tree_drag_drop (GtkWidget *widget, return FALSE; } - gtk_drag_get_data (widget, context, gdk_atom_intern (CALENDAR_TYPE, FALSE), time); gtk_tree_path_free (path); return TRUE; } @@ -638,34 +637,37 @@ selector_tree_drag_motion (GtkWidget *widget, int x, int y) { - GtkTreePath *path; + GtkTreePath *path = NULL; + gpointer data = NULL; GtkTreeViewDropPosition pos; - gpointer data; GtkTreeModel *model; GtkTreeIter iter; + GdkDragAction action = GDK_ACTION_DEFAULT; if (!gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (widget), x, y, &path, &pos)) - return FALSE; + goto finish; model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget)); - if (!gtk_tree_model_get_iter (model, &iter, path)) { - gtk_tree_path_free (path); - return FALSE; - } + if (!gtk_tree_model_get_iter (model, &iter, path)) + goto finish; gtk_tree_model_get (model, &iter, 0, &data, -1); - if (E_IS_SOURCE_GROUP (data) || e_source_get_readonly (data)) { - g_object_unref (data); - gtk_tree_path_free (path); - return FALSE; - } + if (E_IS_SOURCE_GROUP (data) || e_source_get_readonly (data)) + goto finish; gtk_tree_view_set_drag_dest_row(GTK_TREE_VIEW (widget), path, GTK_TREE_VIEW_DROP_INTO_OR_BEFORE); - - gtk_tree_path_free (path); + action = context->suggested_action; + + finish: + if (path) + gtk_tree_path_free (path); + if (data) + g_object_unref (data); + + gdk_drag_status (context, action, time); return TRUE; } @@ -723,7 +725,7 @@ update_objects (ECal *client, icalcomponent *icalcomp) return TRUE; } -static gboolean +static void selector_tree_drag_data_received (GtkWidget *widget, GdkDragContext *context, gint x, @@ -733,70 +735,63 @@ selector_tree_drag_data_received (GtkWidget *widget, guint time, gpointer user_data) { - GtkTreePath *path; + GtkTreePath *path = NULL; GtkTreeViewDropPosition pos; - gpointer source; + gpointer source = NULL; GtkTreeModel *model; GtkTreeIter iter; - gboolean ret = FALSE; + gboolean success = FALSE; + icalcomponent *icalcomp = NULL; + ECal *client = NULL; if (!gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (widget), x, y, &path, &pos)) - return FALSE; + goto finish; model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget)); - if (!gtk_tree_model_get_iter (model, &iter, path)) { - gtk_tree_path_free (path); - return FALSE; - } + if (!gtk_tree_model_get_iter (model, &iter, path)) + goto finish; + gtk_tree_model_get (model, &iter, 0, &source, -1); - if (E_IS_SOURCE_GROUP (source) || e_source_get_readonly (source)) { - g_object_unref (source); - gtk_tree_path_free (path); - return FALSE; - } - - - if ((data->length >= 0) && (data->format == 8)) { - gtk_drag_finish (context, FALSE, TRUE, time); - } else { - gtk_drag_finish (context, FALSE, FALSE, time); - } - gtk_tree_path_free (path); + if (E_IS_SOURCE_GROUP (source) || e_source_get_readonly (source)) + goto finish; + icalcomp = icalparser_parse_string (data->data); - //e_source_selector_set_primary_selection (E_SOURCE_SELECTOR (widget), source); - { - icalcomponent *ical_comp = NULL; - icalvcal_defaults defaults = { 0 }; - VObject *vcal; - ECal *client = NULL; - - - vcal = Parse_MIME (data->data, data->length); - if (vcal) { - ical_comp = icalvcal_convert_with_defaults (vcal, &defaults); - cleanVObject (vcal); - - if (ical_comp) - client = auth_new_cal_from_source (source, - E_CAL_SOURCE_TYPE_EVENT); - - if (client) { - if (e_cal_open (client, TRUE, NULL)) { - /* FIXME should the drag status be set here? */ - update_objects (client, ical_comp); - } + if (icalcomp) { + char * uid; + + /* FIXME deal with GDK_ACTION_ASK */ + if (context->action == GDK_ACTION_COPY) { + uid = e_cal_component_gen_uid (); + icalcomponent_set_uid (icalcomp, uid); + } - g_object_unref (client); + client = auth_new_cal_from_source (source, + E_CAL_SOURCE_TYPE_EVENT); + + if (client) { + if (e_cal_open (client, TRUE, NULL)) { + success = TRUE; + update_objects (client, icalcomp); } + + g_object_unref (client); } + + icalcomponent_free (icalcomp); } - return ret; + finish: + if (source) + g_object_unref (source); + if (path) + gtk_tree_path_free (path); + + gtk_drag_finish (context, success, context->action == GDK_ACTION_MOVE, time); } static void |