aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/gnome-cal.c
diff options
context:
space:
mode:
authorJP Rosevear <jpr@helixcode.com>2000-08-31 23:07:42 +0800
committerJP Rosevear <jpr@src.gnome.org>2000-08-31 23:07:42 +0800
commit72f85e235d8d49582709d912ba52f326e5dfddaa (patch)
treebd3c926b4618f28f381d37f44d42e016169accf1 /calendar/gui/gnome-cal.c
parente242f753cdc7ef38832a9fc22a2faae2015c4fbb (diff)
downloadgsoc2013-evolution-72f85e235d8d49582709d912ba52f326e5dfddaa.tar
gsoc2013-evolution-72f85e235d8d49582709d912ba52f326e5dfddaa.tar.gz
gsoc2013-evolution-72f85e235d8d49582709d912ba52f326e5dfddaa.tar.bz2
gsoc2013-evolution-72f85e235d8d49582709d912ba52f326e5dfddaa.tar.lz
gsoc2013-evolution-72f85e235d8d49582709d912ba52f326e5dfddaa.tar.xz
gsoc2013-evolution-72f85e235d8d49582709d912ba52f326e5dfddaa.tar.zst
gsoc2013-evolution-72f85e235d8d49582709d912ba52f326e5dfddaa.zip
Event editor destroyed callback to do hash cleanup
2000-08-31 JP Rosevear <jpr@helixcode.com> * gui/gnome-cal.c (editor_closed_cb): Event editor destroyed callback to do hash cleanup (gnome_calendar_edit_object): Set event editor calendar client. * gui/event-editor.h: Add new prototype * gui/event-editor.c: Trash signal stuff. We will manipulate the client directly. Make the toolbar save and menu save items work identically. Add icons to the toolbar. (save_event_object): Call cal_client_update_object (close_dialog): Unref the client and disconnect signals Actually destroy the event editor object. (obj_updated_cb): New function. Doesn't really do anything yet but it will inform the user the event has changed elsewhere in the future. (obj_removed_cb): ditto (event_editor_set_cal_client): New function to set the calendar client * gui/gnome-cal.c (gnome_calendar_new_appointment): Commit the sequence to the cal component and use non UTC times. svn path=/trunk/; revision=5142
Diffstat (limited to 'calendar/gui/gnome-cal.c')
-rw-r--r--calendar/gui/gnome-cal.c73
1 files changed, 41 insertions, 32 deletions
diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c
index 2f6a8ddf4a..415d4abec0 100644
--- a/calendar/gui/gnome-cal.c
+++ b/calendar/gui/gnome-cal.c
@@ -1369,19 +1369,6 @@ gnome_calendar_set_selected_time_range (GnomeCalendar *gcal,
gnome_calendar_update_date_navigator (gcal);
}
-
-/* Callback used when an event editor requests that an object be saved */
-static void
-save_event_object_cb (EventEditor *ee, CalComponent *comp, gpointer data)
-{
- GnomeCalendar *gcal;
-
- gcal = GNOME_CALENDAR (data);
- if (!cal_client_update_object (gcal->client, comp))
- g_message ("save_event_object_cb(): Could not update the object!");
-}
-
-
/* Callback used when an event editor finishes editing an object */
static void
released_event_object_cb (EventEditor *ee, const char *uid, gpointer data)
@@ -1403,16 +1390,41 @@ released_event_object_cb (EventEditor *ee, const char *uid, gpointer data)
}
/* Callback used when an event editor dialog is closed */
+struct editor_closure
+{
+ GnomeCalendar *gcal;
+ char *uid;
+};
+
static void
-editor_closed_cb (EventEditor *ee, gpointer data)
+editor_closed_cb (GtkWidget *widget, gpointer data)
{
- gtk_object_unref (GTK_OBJECT (ee));
+ GnomeCalendar *gcal;
+ struct editor_closure *ec;
+ gboolean result;
+ gpointer orig_key;
+ char *orig_uid;
+
+ g_print ("editor_closed_cb ()\n");
+
+ ec = (struct editor_closure *)data;
+ gcal = ec->gcal;
+
+ result = g_hash_table_lookup_extended (gcal->object_editor_hash,
+ ec->uid, &orig_key, NULL);
+ g_assert (result != FALSE);
+
+ orig_uid = orig_key;
+
+ g_hash_table_remove (gcal->object_editor_hash, orig_uid);
+ g_free (orig_uid);
}
void
gnome_calendar_edit_object (GnomeCalendar *gcal, CalComponent *comp)
{
EventEditor *ee;
+ struct editor_closure *ec;
const char *uid;
g_return_if_fail (gcal != NULL);
@@ -1423,29 +1435,24 @@ gnome_calendar_edit_object (GnomeCalendar *gcal, CalComponent *comp)
ee = g_hash_table_lookup (gcal->object_editor_hash, uid);
if (!ee) {
+ ec = g_new0 (struct editor_closure, 1);
+
ee = event_editor_new ();
if (!ee) {
g_message ("gnome_calendar_edit_object(): Could not create the event editor");
return;
}
- /* FIXME: what to do when an event editor wants to switch
- * objects? We would need to know about it as well.
- */
-
- g_hash_table_insert (gcal->object_editor_hash, g_strdup (uid), ee);
-
- gtk_signal_connect (GTK_OBJECT (ee), "save_event_object",
- GTK_SIGNAL_FUNC (save_event_object_cb),
- gcal);
-
- gtk_signal_connect (GTK_OBJECT (ee), "released_event_object",
- GTK_SIGNAL_FUNC (released_event_object_cb),
- gcal);
+ ec->gcal = gcal;
+ ec->uid = g_strdup (uid);
+
+ g_hash_table_insert (gcal->object_editor_hash, ec->uid, ee);
- gtk_signal_connect (GTK_OBJECT (ee), "editor_closed",
- GTK_SIGNAL_FUNC (editor_closed_cb), gcal);
+ gtk_signal_connect (GTK_OBJECT (ee), "destroy",
+ GTK_SIGNAL_FUNC (editor_closed_cb),
+ ec);
+ event_editor_set_cal_client (EVENT_EDITOR (ee), gcal->client);
event_editor_set_event_object (EVENT_EDITOR (ee), comp);
}
@@ -1478,12 +1485,14 @@ gnome_calendar_new_appointment (GnomeCalendar *gcal)
comp = cal_component_new ();
cal_component_set_new_vtype (comp, CAL_COMPONENT_EVENT);
- itt = icaltime_from_timet (dtstart, 0, TRUE);
+ itt = icaltime_from_timet (dtstart, FALSE, FALSE);
cal_component_set_dtstart (comp, &dt);
- itt = icaltime_from_timet (dtend, 0, TRUE);
+ itt = icaltime_from_timet (dtend, FALSE, FALSE);
cal_component_set_dtend (comp, &dt);
+ cal_component_commit_sequence (comp);
+
gnome_calendar_edit_object (gcal, comp);
gtk_object_unref (GTK_OBJECT (comp));