edit-dialog: use GcalEvent internally
Instead of using the ESource + ECalComponent combination, use the new GcalEvent class, which wraps up and simplifies most of the code. This commit adds a GcalEditDialog::event property, and adapts the dialog (and everything dependant on it's code) to use the GcalEvent class.
This commit is contained in:
+154
-444
@@ -29,9 +29,6 @@ struct _GcalEditDialog
|
|||||||
{
|
{
|
||||||
GtkDialog parent;
|
GtkDialog parent;
|
||||||
|
|
||||||
gchar *source_uid;
|
|
||||||
gchar *event_uid;
|
|
||||||
gchar *event_rid;
|
|
||||||
gboolean writable;
|
gboolean writable;
|
||||||
|
|
||||||
GcalManager *manager;
|
GcalManager *manager;
|
||||||
@@ -63,8 +60,7 @@ struct _GcalEditDialog
|
|||||||
GSimpleActionGroup *action_group;
|
GSimpleActionGroup *action_group;
|
||||||
|
|
||||||
/* new data holders */
|
/* new data holders */
|
||||||
ESource *source; /* weak reference */
|
GcalEvent *event;
|
||||||
ECalComponent *component;
|
|
||||||
|
|
||||||
/* flags */
|
/* flags */
|
||||||
gboolean format_24h;
|
gboolean format_24h;
|
||||||
@@ -115,6 +111,7 @@ G_DEFINE_TYPE (GcalEditDialog, gcal_edit_dialog, GTK_TYPE_DIALOG)
|
|||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PROP_0,
|
PROP_0,
|
||||||
|
PROP_EVENT,
|
||||||
PROP_MANAGER,
|
PROP_MANAGER,
|
||||||
PROP_WRITABLE,
|
PROP_WRITABLE,
|
||||||
LAST_PROP
|
LAST_PROP
|
||||||
@@ -208,9 +205,9 @@ on_calendar_selected (GtkWidget *menu_item,
|
|||||||
gtk_image_set_from_pixbuf (GTK_IMAGE (dialog->source_image), pix);
|
gtk_image_set_from_pixbuf (GTK_IMAGE (dialog->source_image), pix);
|
||||||
g_object_unref (pix);
|
g_object_unref (pix);
|
||||||
|
|
||||||
g_set_object (&dialog->source, source);
|
gcal_event_set_source (dialog->event, source);
|
||||||
gtk_header_bar_set_subtitle (GTK_HEADER_BAR (dialog->titlebar),
|
gtk_header_bar_set_subtitle (GTK_HEADER_BAR (dialog->titlebar),
|
||||||
e_source_get_display_name (dialog->source));
|
e_source_get_display_name (source));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -223,100 +220,24 @@ static void
|
|||||||
update_date (GtkEntry *entry,
|
update_date (GtkEntry *entry,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
ECalComponentDateTime dtstart;
|
|
||||||
ECalComponentDateTime dtend;
|
|
||||||
GcalEditDialog *dialog;
|
GcalEditDialog *dialog;
|
||||||
icaltimetype *start_date;
|
GDateTime *start_date;
|
||||||
icaltimetype *end_date;
|
GDateTime *end_date;
|
||||||
|
|
||||||
dialog = GCAL_EDIT_DIALOG (user_data);
|
dialog = GCAL_EDIT_DIALOG (user_data);
|
||||||
|
|
||||||
if (dialog->setting_event)
|
if (dialog->setting_event)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
start_date = gcal_edit_dialog_get_start_date (GCAL_EDIT_DIALOG (user_data));
|
start_date = gcal_edit_dialog_get_date_start (GCAL_EDIT_DIALOG (user_data));
|
||||||
end_date = gcal_edit_dialog_get_end_date (GCAL_EDIT_DIALOG (user_data));
|
end_date = gcal_edit_dialog_get_date_end (GCAL_EDIT_DIALOG (user_data));
|
||||||
|
|
||||||
/* check if the start & end dates are sane */
|
|
||||||
if (icaltime_compare (*start_date, *end_date) != -1)
|
|
||||||
{
|
|
||||||
/* change the non-editing entry */
|
|
||||||
if (GTK_WIDGET (entry) == dialog->start_date_selector)
|
|
||||||
{
|
|
||||||
end_date->day = start_date->day;
|
|
||||||
end_date->month = start_date->month;
|
|
||||||
end_date->year = start_date->year;
|
|
||||||
|
|
||||||
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->all_day_check)))
|
|
||||||
{
|
|
||||||
end_date->day += 1;
|
|
||||||
*end_date = icaltime_normalize (*end_date);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
start_date->day = end_date->day;
|
|
||||||
start_date->month = end_date->month;
|
|
||||||
start_date->year = end_date->year;
|
|
||||||
|
|
||||||
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->all_day_check)))
|
|
||||||
{
|
|
||||||
start_date->day -= 1;
|
|
||||||
*start_date = icaltime_normalize (*start_date);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* update the entries with the new sane values */
|
|
||||||
g_signal_handlers_block_by_func (dialog->start_date_selector,
|
|
||||||
update_date,
|
|
||||||
user_data);
|
|
||||||
g_signal_handlers_block_by_func (dialog->end_date_selector,
|
|
||||||
update_date,
|
|
||||||
user_data);
|
|
||||||
|
|
||||||
gcal_date_selector_set_date (GCAL_DATE_SELECTOR (dialog->start_date_selector),
|
|
||||||
start_date->day,
|
|
||||||
start_date->month,
|
|
||||||
start_date->year);
|
|
||||||
gcal_date_selector_set_date (GCAL_DATE_SELECTOR (dialog->end_date_selector),
|
|
||||||
end_date->day,
|
|
||||||
end_date->month,
|
|
||||||
end_date->year);
|
|
||||||
|
|
||||||
g_signal_handlers_unblock_by_func (dialog->start_date_selector,
|
|
||||||
update_date,
|
|
||||||
user_data);
|
|
||||||
g_signal_handlers_unblock_by_func (dialog->end_date_selector,
|
|
||||||
update_date,
|
|
||||||
user_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* update component */
|
/* update component */
|
||||||
e_cal_component_get_dtstart (dialog->component, &dtstart);
|
gcal_event_set_date_start (dialog->event, start_date);
|
||||||
e_cal_component_get_dtend (dialog->component, &dtend);
|
gcal_event_set_date_end (dialog->event, end_date);
|
||||||
|
|
||||||
*(dtstart.value) = *start_date;
|
g_clear_pointer (&start_date, g_date_time_unref);
|
||||||
if (dtstart.tzid != NULL)
|
g_clear_pointer (&end_date, g_date_time_unref);
|
||||||
{
|
|
||||||
icaltimezone* zone = icaltimezone_get_builtin_timezone_from_tzid (dtstart.tzid);
|
|
||||||
*(dtstart.value) = icaltime_convert_to_zone (*start_date, zone);
|
|
||||||
}
|
|
||||||
|
|
||||||
*(dtend.value) = *end_date;
|
|
||||||
if (dtend.tzid != NULL)
|
|
||||||
{
|
|
||||||
icaltimezone* zone = icaltimezone_get_builtin_timezone_from_tzid (dtend.tzid);
|
|
||||||
*(dtend.value) = icaltime_convert_to_zone (*end_date, zone);
|
|
||||||
}
|
|
||||||
|
|
||||||
e_cal_component_set_dtstart (dialog->component, &dtstart);
|
|
||||||
e_cal_component_set_dtend (dialog->component, &dtend);
|
|
||||||
e_cal_component_commit_sequence (dialog->component);
|
|
||||||
|
|
||||||
g_free (start_date);
|
|
||||||
g_free (end_date);
|
|
||||||
e_cal_component_free_datetime (&dtstart);
|
|
||||||
e_cal_component_free_datetime (&dtend);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -329,8 +250,7 @@ update_location (GtkEntry *entry,
|
|||||||
|
|
||||||
dialog = GCAL_EDIT_DIALOG (user_data);
|
dialog = GCAL_EDIT_DIALOG (user_data);
|
||||||
|
|
||||||
e_cal_component_set_location (dialog->component, gtk_entry_get_text (entry));
|
gcal_event_set_location (dialog->event, gtk_entry_get_text (entry));
|
||||||
e_cal_component_commit_sequence (dialog->component);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -338,8 +258,6 @@ update_notes (GtkTextBuffer *buffer,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GcalEditDialog *dialog;
|
GcalEditDialog *dialog;
|
||||||
GSList note;
|
|
||||||
ECalComponentText text;
|
|
||||||
gchar *note_text;
|
gchar *note_text;
|
||||||
|
|
||||||
dialog = GCAL_EDIT_DIALOG (user_data);
|
dialog = GCAL_EDIT_DIALOG (user_data);
|
||||||
@@ -348,13 +266,7 @@ update_notes (GtkTextBuffer *buffer,
|
|||||||
"text", ¬e_text,
|
"text", ¬e_text,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
text.value = note_text;
|
gcal_event_set_description (dialog->event, note_text);
|
||||||
text.altrep = NULL;
|
|
||||||
note.data = &text;
|
|
||||||
note.next = NULL;
|
|
||||||
|
|
||||||
e_cal_component_set_description_list (dialog->component, ¬e);
|
|
||||||
e_cal_component_commit_sequence (dialog->component);
|
|
||||||
|
|
||||||
g_free (note_text);
|
g_free (note_text);
|
||||||
}
|
}
|
||||||
@@ -364,116 +276,39 @@ update_summary (GtkEntry *entry,
|
|||||||
GParamSpec *pspec,
|
GParamSpec *pspec,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
|
|
||||||
ECalComponentText summary;
|
|
||||||
GcalEditDialog *dialog;
|
GcalEditDialog *dialog;
|
||||||
|
|
||||||
dialog = GCAL_EDIT_DIALOG (user_data);
|
dialog = GCAL_EDIT_DIALOG (user_data);
|
||||||
|
|
||||||
summary.value = gtk_entry_get_text (entry);
|
gcal_event_set_summary (dialog->event, gtk_entry_get_text (entry));
|
||||||
summary.altrep = NULL;
|
|
||||||
|
|
||||||
e_cal_component_set_summary (dialog->component, &summary);
|
|
||||||
e_cal_component_commit_sequence (dialog->component);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
update_time (GtkEntry *entry,
|
update_time (GtkEntry *entry,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
ECalComponentDateTime dtstart;
|
|
||||||
ECalComponentDateTime dtend;
|
|
||||||
GcalEditDialog *dialog;
|
GcalEditDialog *dialog;
|
||||||
icaltimetype *start_date;
|
GDateTime *start_date;
|
||||||
icaltimetype *end_date;
|
GDateTime *end_date;
|
||||||
|
|
||||||
dialog = GCAL_EDIT_DIALOG (user_data);
|
dialog = GCAL_EDIT_DIALOG (user_data);
|
||||||
|
|
||||||
if (dialog->setting_event)
|
if (dialog->setting_event)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
start_date = gcal_edit_dialog_get_start_date (GCAL_EDIT_DIALOG (user_data));
|
start_date = gcal_edit_dialog_get_date_start (dialog);
|
||||||
end_date = gcal_edit_dialog_get_end_date (GCAL_EDIT_DIALOG (user_data));
|
end_date = gcal_edit_dialog_get_date_end (dialog);
|
||||||
|
|
||||||
/* check if the start & end dates are sane */
|
// g_debug ("Updating date: %s -> %s",
|
||||||
if (icaltime_compare (*start_date, *end_date) > -1)
|
// icaltime_as_ical_string (*start_date),
|
||||||
{
|
// icaltime_as_ical_string (*end_date));
|
||||||
/* change the non-editing entry */
|
|
||||||
if (GTK_WIDGET (entry) == dialog->start_time_selector)
|
|
||||||
{
|
|
||||||
end_date->hour = start_date->hour + 1;
|
|
||||||
end_date->minute = start_date->minute;
|
|
||||||
*end_date = icaltime_normalize (*end_date);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
start_date->hour = end_date->hour - 1;
|
|
||||||
start_date->minute = end_date->minute;
|
|
||||||
*start_date = icaltime_normalize (*start_date);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* update the entries with the new sane values */
|
|
||||||
g_signal_handlers_block_by_func (dialog->start_time_selector,
|
|
||||||
update_time,
|
|
||||||
user_data);
|
|
||||||
g_signal_handlers_block_by_func (dialog->end_time_selector,
|
|
||||||
update_time,
|
|
||||||
user_data);
|
|
||||||
|
|
||||||
/* updates date as well, since hours can change the current date */
|
|
||||||
gcal_time_selector_set_time (GCAL_TIME_SELECTOR (dialog->start_time_selector),
|
|
||||||
start_date->hour,
|
|
||||||
start_date->minute);
|
|
||||||
gcal_date_selector_set_date (GCAL_DATE_SELECTOR (dialog->start_date_selector),
|
|
||||||
start_date->day,
|
|
||||||
start_date->month,
|
|
||||||
start_date->year);
|
|
||||||
gcal_time_selector_set_time (GCAL_TIME_SELECTOR (dialog->end_time_selector),
|
|
||||||
end_date->hour,
|
|
||||||
end_date->minute);
|
|
||||||
gcal_date_selector_set_date (GCAL_DATE_SELECTOR (dialog->end_date_selector),
|
|
||||||
end_date->day,
|
|
||||||
end_date->month,
|
|
||||||
end_date->year);
|
|
||||||
|
|
||||||
g_signal_handlers_unblock_by_func (dialog->start_time_selector,
|
|
||||||
update_time,
|
|
||||||
user_data);
|
|
||||||
g_signal_handlers_unblock_by_func (dialog->end_time_selector,
|
|
||||||
update_time,
|
|
||||||
user_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_debug ("Updating date: %s -> %s",
|
|
||||||
icaltime_as_ical_string (*start_date),
|
|
||||||
icaltime_as_ical_string (*end_date));
|
|
||||||
|
|
||||||
/* update component */
|
/* update component */
|
||||||
e_cal_component_get_dtstart (dialog->component, &dtstart);
|
gcal_event_set_date_start (dialog->event, start_date);
|
||||||
e_cal_component_get_dtend (dialog->component, &dtend);
|
gcal_event_set_date_end (dialog->event, end_date);
|
||||||
|
|
||||||
*(dtstart.value) = *start_date;
|
g_clear_pointer (&start_date, g_date_time_unref);
|
||||||
if (dtstart.tzid != NULL)
|
g_clear_pointer (&end_date, g_date_time_unref);
|
||||||
{
|
|
||||||
icaltimezone* zone = icaltimezone_get_builtin_timezone_from_tzid (dtstart.tzid);
|
|
||||||
*(dtstart.value) = icaltime_convert_to_zone (*start_date, zone);
|
|
||||||
}
|
|
||||||
|
|
||||||
*(dtend.value) = *end_date;
|
|
||||||
if (dtend.tzid != NULL)
|
|
||||||
{
|
|
||||||
icaltimezone* zone = icaltimezone_get_builtin_timezone_from_tzid (dtend.tzid);
|
|
||||||
*(dtend.value) = icaltime_convert_to_zone (*end_date, zone);
|
|
||||||
}
|
|
||||||
|
|
||||||
e_cal_component_set_dtstart (dialog->component, &dtstart);
|
|
||||||
e_cal_component_set_dtend (dialog->component, &dtend);
|
|
||||||
e_cal_component_commit_sequence (dialog->component);
|
|
||||||
|
|
||||||
g_free (start_date);
|
|
||||||
g_free (end_date);
|
|
||||||
e_cal_component_free_datetime (&dtstart);
|
|
||||||
e_cal_component_free_datetime (&dtend);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -486,6 +321,10 @@ gcal_edit_dialog_get_property (GObject *object,
|
|||||||
|
|
||||||
switch (prop_id)
|
switch (prop_id)
|
||||||
{
|
{
|
||||||
|
case PROP_EVENT:
|
||||||
|
g_value_set_object (value, self->event);
|
||||||
|
break;
|
||||||
|
|
||||||
case PROP_MANAGER:
|
case PROP_MANAGER:
|
||||||
g_value_set_object (value, self->manager);
|
g_value_set_object (value, self->manager);
|
||||||
break;
|
break;
|
||||||
@@ -509,6 +348,10 @@ gcal_edit_dialog_set_property (GObject *object,
|
|||||||
|
|
||||||
switch (prop_id)
|
switch (prop_id)
|
||||||
{
|
{
|
||||||
|
case PROP_EVENT:
|
||||||
|
gcal_edit_dialog_set_event (self, g_value_get_object (value));
|
||||||
|
break;
|
||||||
|
|
||||||
case PROP_MANAGER:
|
case PROP_MANAGER:
|
||||||
gcal_edit_dialog_set_manager (self, g_value_get_object (value));
|
gcal_edit_dialog_set_manager (self, g_value_get_object (value));
|
||||||
break;
|
break;
|
||||||
@@ -537,6 +380,19 @@ gcal_edit_dialog_class_init (GcalEditDialogClass *klass)
|
|||||||
widget_class = GTK_WIDGET_CLASS (klass);
|
widget_class = GTK_WIDGET_CLASS (klass);
|
||||||
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/calendar/edit-dialog.ui");
|
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/calendar/edit-dialog.ui");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GcalEditDialog::event:
|
||||||
|
*
|
||||||
|
* The #GcalEvent being edited.
|
||||||
|
*/
|
||||||
|
g_object_class_install_property (object_class,
|
||||||
|
PROP_EVENT,
|
||||||
|
g_param_spec_object ("event",
|
||||||
|
"event of the dialog",
|
||||||
|
"The event being edited",
|
||||||
|
GCAL_TYPE_EVENT,
|
||||||
|
G_PARAM_READWRITE));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GcalEditDialog::manager:
|
* GcalEditDialog::manager:
|
||||||
*
|
*
|
||||||
@@ -651,13 +507,10 @@ gcal_edit_dialog_finalize (GObject *object)
|
|||||||
|
|
||||||
dialog = GCAL_EDIT_DIALOG (object);
|
dialog = GCAL_EDIT_DIALOG (object);
|
||||||
|
|
||||||
g_clear_pointer (&dialog->source_uid, g_free);
|
|
||||||
g_clear_pointer (&dialog->event_uid, g_free);
|
|
||||||
g_clear_object (&dialog->action_group);
|
g_clear_object (&dialog->action_group);
|
||||||
g_clear_object (&dialog->action);
|
g_clear_object (&dialog->action);
|
||||||
g_clear_object (&dialog->component);
|
|
||||||
g_clear_object (&dialog->manager);
|
g_clear_object (&dialog->manager);
|
||||||
g_clear_object (&dialog->source);
|
g_clear_object (&dialog->event);
|
||||||
|
|
||||||
G_OBJECT_CLASS (gcal_edit_dialog_parent_class)->finalize (object);
|
G_OBJECT_CLASS (gcal_edit_dialog_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
@@ -746,6 +599,8 @@ gcal_edit_dialog_action_button_clicked (GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
|
|
||||||
gtk_dialog_response (GTK_DIALOG (user_data), response);
|
gtk_dialog_response (GTK_DIALOG (user_data), response);
|
||||||
|
|
||||||
|
gcal_edit_dialog_set_event (dialog, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -792,158 +647,107 @@ gcal_edit_dialog_set_event_is_new (GcalEditDialog *dialog,
|
|||||||
gtk_button_set_relief (GTK_BUTTON (dialog->sources_button), event_is_new ? GTK_RELIEF_NORMAL : GTK_RELIEF_NONE);
|
gtk_button_set_relief (GTK_BUTTON (dialog->sources_button), event_is_new ? GTK_RELIEF_NORMAL : GTK_RELIEF_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GcalEvent*
|
||||||
|
gcal_edit_dialog_get_event (GcalEditDialog *dialog)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GCAL_IS_EDIT_DIALOG (dialog), NULL);
|
||||||
|
|
||||||
|
return dialog->event;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gcal_edit_dialog_set_event (GcalEditDialog *dialog,
|
gcal_edit_dialog_set_event (GcalEditDialog *dialog,
|
||||||
GcalEvent *event)
|
GcalEvent *event)
|
||||||
{
|
{
|
||||||
GdkRGBA color;
|
g_return_if_fail (GCAL_IS_EDIT_DIALOG (dialog));
|
||||||
GdkPixbuf *pix;
|
|
||||||
ESource *source;
|
|
||||||
|
|
||||||
const gchar *const_text = NULL;
|
if (g_set_object (&dialog->event, event))
|
||||||
gboolean all_day;
|
|
||||||
gchar *description;
|
|
||||||
|
|
||||||
ECalComponentId *id;
|
|
||||||
ECalComponentText e_summary;
|
|
||||||
ECalComponentDateTime dtstart;
|
|
||||||
ECalComponentDateTime dtend;
|
|
||||||
|
|
||||||
all_day = FALSE;
|
|
||||||
source = gcal_event_get_source (event);
|
|
||||||
|
|
||||||
dialog->setting_event = TRUE;
|
|
||||||
|
|
||||||
g_set_object (&dialog->source, source);
|
|
||||||
|
|
||||||
g_clear_object (&dialog->component);
|
|
||||||
dialog->component = e_cal_component_clone (gcal_event_get_component (event));
|
|
||||||
|
|
||||||
g_clear_pointer (&dialog->source_uid, g_free);
|
|
||||||
dialog->source_uid = e_source_dup_uid (dialog->source);
|
|
||||||
|
|
||||||
/* Setup UID */
|
|
||||||
id = e_cal_component_get_id (dialog->component);
|
|
||||||
|
|
||||||
g_clear_pointer (&(dialog->event_uid), g_free);
|
|
||||||
dialog->event_uid = g_strdup (id->uid);
|
|
||||||
|
|
||||||
g_clear_pointer (&(dialog->event_rid), g_free);
|
|
||||||
dialog->event_rid = g_strdup (id->rid);
|
|
||||||
|
|
||||||
e_cal_component_free_id (id);
|
|
||||||
|
|
||||||
/* Clear event data */
|
|
||||||
gcal_edit_dialog_clear_data (dialog);
|
|
||||||
|
|
||||||
/* update sources list */
|
|
||||||
if (dialog->sources_menu != NULL)
|
|
||||||
g_menu_remove_all (dialog->sources_menu);
|
|
||||||
|
|
||||||
fill_sources_menu (dialog);
|
|
||||||
|
|
||||||
/* Load new event data */
|
|
||||||
/* summary */
|
|
||||||
e_cal_component_get_summary (dialog->component, &e_summary);
|
|
||||||
if (e_summary.value == NULL || g_strcmp0 (e_summary.value, "") == 0)
|
|
||||||
gtk_entry_set_text (GTK_ENTRY (dialog->summary_entry), _("Unnamed event"));
|
|
||||||
else
|
|
||||||
gtk_entry_set_text (GTK_ENTRY (dialog->summary_entry), e_summary.value);
|
|
||||||
|
|
||||||
/* dialog titlebar's title & subtitle */
|
|
||||||
get_color_name_from_source (source, &color);
|
|
||||||
|
|
||||||
pix = gcal_get_pixbuf_from_color (&color, 16);
|
|
||||||
gtk_image_set_from_pixbuf (GTK_IMAGE (dialog->source_image), pix);
|
|
||||||
g_object_unref (pix);
|
|
||||||
|
|
||||||
gtk_header_bar_set_subtitle (GTK_HEADER_BAR (dialog->titlebar),
|
|
||||||
e_source_get_display_name (source));
|
|
||||||
|
|
||||||
/* retrieve start and end dates */
|
|
||||||
e_cal_component_get_dtstart (dialog->component, &dtstart);
|
|
||||||
e_cal_component_get_dtend (dialog->component, &dtend);
|
|
||||||
|
|
||||||
/* check if it's an all-day event */
|
|
||||||
all_day = (dtstart.value->is_date == 1 && (dtend.value != NULL ? dtend.value->is_date == 1 : FALSE));
|
|
||||||
|
|
||||||
/* start date */
|
|
||||||
gcal_date_selector_set_date (GCAL_DATE_SELECTOR (dialog->start_date_selector),
|
|
||||||
dtstart.value->day,
|
|
||||||
dtstart.value->month,
|
|
||||||
dtstart.value->year);
|
|
||||||
|
|
||||||
/* start time */
|
|
||||||
if (!all_day)
|
|
||||||
{
|
{
|
||||||
icaltimetype *date = gcal_dup_icaltime (dtstart.value);
|
GDateTime *date_start;
|
||||||
if (dtstart.tzid != NULL)
|
GDateTime *date_end;
|
||||||
{
|
GdkPixbuf *pix;
|
||||||
dtstart.value->zone =
|
ESource *source;
|
||||||
icaltimezone_get_builtin_timezone_from_tzid (dtstart.tzid);
|
const gchar *summary;
|
||||||
}
|
|
||||||
*date = icaltime_convert_to_zone (*(dtstart.value),
|
dialog->setting_event = TRUE;
|
||||||
e_cal_util_get_system_timezone ());
|
|
||||||
gcal_time_selector_set_time (GCAL_TIME_SELECTOR (dialog->start_time_selector),
|
/* If we just set the event to NULL, simply send a property notify */
|
||||||
date->hour, date->minute);
|
if (!event)
|
||||||
g_free (date);
|
goto out;
|
||||||
}
|
|
||||||
|
source = gcal_event_get_source (event);
|
||||||
|
|
||||||
|
/* Clear event data */
|
||||||
|
gcal_edit_dialog_clear_data (dialog);
|
||||||
|
|
||||||
|
/* update sources list */
|
||||||
|
if (dialog->sources_menu != NULL)
|
||||||
|
g_menu_remove_all (dialog->sources_menu);
|
||||||
|
|
||||||
|
fill_sources_menu (dialog);
|
||||||
|
|
||||||
|
/* Load new event data */
|
||||||
|
/* summary */
|
||||||
|
summary = gcal_event_get_summary (event);
|
||||||
|
|
||||||
|
if (g_strcmp0 (summary, "") == 0)
|
||||||
|
gtk_entry_set_text (GTK_ENTRY (dialog->summary_entry), _("Unnamed event"));
|
||||||
|
else
|
||||||
|
gtk_entry_set_text (GTK_ENTRY (dialog->summary_entry), summary);
|
||||||
|
|
||||||
|
/* dialog titlebar's title & subtitle */
|
||||||
|
pix = gcal_get_pixbuf_from_color (gcal_event_get_color (event), 16);
|
||||||
|
gtk_image_set_from_pixbuf (GTK_IMAGE (dialog->source_image), pix);
|
||||||
|
g_object_unref (pix);
|
||||||
|
|
||||||
|
gtk_header_bar_set_subtitle (GTK_HEADER_BAR (dialog->titlebar),
|
||||||
|
e_source_get_display_name (source));
|
||||||
|
|
||||||
|
/* retrieve start and end dates */
|
||||||
|
date_start = gcal_event_get_date_start (event);
|
||||||
|
date_end = gcal_event_get_date_end (event);
|
||||||
|
|
||||||
|
/* start date */
|
||||||
|
gcal_date_selector_set_date (GCAL_DATE_SELECTOR (dialog->start_date_selector),
|
||||||
|
g_date_time_get_day_of_month (date_start),
|
||||||
|
g_date_time_get_month (date_start),
|
||||||
|
g_date_time_get_year (date_start));
|
||||||
|
|
||||||
/* end date */
|
|
||||||
if (dtend.value != NULL)
|
|
||||||
{
|
|
||||||
gcal_date_selector_set_date (GCAL_DATE_SELECTOR (dialog->end_date_selector),
|
gcal_date_selector_set_date (GCAL_DATE_SELECTOR (dialog->end_date_selector),
|
||||||
dtend.value->day, dtend.value->month, dtend.value->year);
|
g_date_time_get_day_of_month (date_end),
|
||||||
|
g_date_time_get_month (date_end),
|
||||||
|
g_date_time_get_year (date_end));
|
||||||
|
|
||||||
if (!all_day)
|
/* start time */
|
||||||
|
if (!gcal_event_get_all_day (event))
|
||||||
{
|
{
|
||||||
icaltimetype *date = gcal_dup_icaltime (dtend.value);
|
gcal_time_selector_set_time (GCAL_TIME_SELECTOR (dialog->start_time_selector),
|
||||||
if (dtend.tzid != NULL)
|
g_date_time_get_hour (date_start),
|
||||||
{
|
g_date_time_get_minute (date_start));
|
||||||
dtend.value->zone =
|
|
||||||
icaltimezone_get_builtin_timezone_from_tzid (dtend.tzid);
|
|
||||||
}
|
|
||||||
*date = icaltime_convert_to_zone (*(dtend.value), e_cal_util_get_system_timezone ());
|
|
||||||
gcal_time_selector_set_time (GCAL_TIME_SELECTOR (dialog->end_time_selector),
|
gcal_time_selector_set_time (GCAL_TIME_SELECTOR (dialog->end_time_selector),
|
||||||
date->hour, date->minute);
|
g_date_time_get_hour (date_end),
|
||||||
g_free (date);
|
g_date_time_get_minute (date_end));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gcal_date_selector_set_date (GCAL_DATE_SELECTOR (dialog->end_date_selector),
|
|
||||||
dtstart.value->day, dtstart.value->month, dtstart.value->year);
|
|
||||||
gcal_time_selector_set_time (GCAL_TIME_SELECTOR (dialog->end_time_selector),
|
|
||||||
dtstart.value->hour, dtstart.value->minute);
|
|
||||||
}
|
|
||||||
|
|
||||||
e_cal_component_free_datetime (&dtstart);
|
/* all_day */
|
||||||
e_cal_component_free_datetime (&dtend);
|
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->all_day_check), gcal_event_get_all_day (event));
|
||||||
|
|
||||||
/* all_day */
|
/* location */
|
||||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->all_day_check), all_day);
|
gtk_entry_set_text (GTK_ENTRY (dialog->location_entry), gcal_event_get_location (event));
|
||||||
|
|
||||||
|
/* notes */
|
||||||
/* location */
|
|
||||||
e_cal_component_get_location (dialog->component, &const_text);
|
|
||||||
gtk_entry_set_text (GTK_ENTRY (dialog->location_entry),
|
|
||||||
const_text != NULL ? const_text : "");
|
|
||||||
|
|
||||||
/* notes */
|
|
||||||
description = get_desc_from_component (dialog->component, "\n");
|
|
||||||
|
|
||||||
if (description != NULL)
|
|
||||||
{
|
|
||||||
gtk_text_buffer_set_text (gtk_text_view_get_buffer (GTK_TEXT_VIEW (dialog->notes_text)),
|
gtk_text_buffer_set_text (gtk_text_view_get_buffer (GTK_TEXT_VIEW (dialog->notes_text)),
|
||||||
description,
|
gcal_event_get_description (event),
|
||||||
-1);
|
-1);
|
||||||
|
|
||||||
g_free (description);
|
gcal_edit_dialog_set_writable (dialog, gcal_manager_is_client_writable (dialog->manager, source));
|
||||||
|
|
||||||
|
out:
|
||||||
|
g_object_notify (G_OBJECT (dialog), "event");
|
||||||
|
|
||||||
|
dialog->setting_event = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
gcal_edit_dialog_set_writable (dialog, gcal_manager_is_client_writable (dialog->manager, dialog->source));
|
|
||||||
|
|
||||||
dialog->setting_event = FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -957,138 +761,44 @@ gcal_edit_dialog_set_manager (GcalEditDialog *dialog,
|
|||||||
g_object_notify (G_OBJECT (dialog), "manager");
|
g_object_notify (G_OBJECT (dialog), "manager");
|
||||||
}
|
}
|
||||||
|
|
||||||
ECalComponent*
|
GDateTime*
|
||||||
gcal_edit_dialog_get_component (GcalEditDialog *dialog)
|
gcal_edit_dialog_get_date_start (GcalEditDialog *dialog)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (GCAL_IS_EDIT_DIALOG (dialog), NULL);
|
GDateTime *date;
|
||||||
|
gint year, month, day;
|
||||||
g_object_ref (dialog->component);
|
gint hour, minute;
|
||||||
return dialog->component;
|
|
||||||
}
|
|
||||||
|
|
||||||
ESource*
|
|
||||||
gcal_edit_dialog_get_source (GcalEditDialog *dialog)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (GCAL_IS_EDIT_DIALOG (dialog), NULL);
|
|
||||||
|
|
||||||
return dialog->source;
|
|
||||||
}
|
|
||||||
|
|
||||||
const gchar*
|
|
||||||
gcal_edit_dialog_peek_source_uid (GcalEditDialog *dialog)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (GCAL_IS_EDIT_DIALOG (dialog), NULL);
|
|
||||||
|
|
||||||
return dialog->source_uid;
|
|
||||||
}
|
|
||||||
|
|
||||||
const gchar*
|
|
||||||
gcal_edit_dialog_peek_event_uid (GcalEditDialog *dialog)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (GCAL_IS_EDIT_DIALOG (dialog), NULL);
|
|
||||||
|
|
||||||
return dialog->event_uid;
|
|
||||||
}
|
|
||||||
|
|
||||||
gchar*
|
|
||||||
gcal_edit_dialog_get_event_uuid (GcalEditDialog *dialog)
|
|
||||||
{
|
|
||||||
gchar *uuid;
|
|
||||||
|
|
||||||
if (dialog->source_uid == NULL ||
|
|
||||||
dialog->event_uid == NULL)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dialog->event_rid != NULL)
|
|
||||||
{
|
|
||||||
uuid = g_strdup_printf ("%s:%s:%s",
|
|
||||||
dialog->source_uid,
|
|
||||||
dialog->event_uid,
|
|
||||||
dialog->event_rid);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
uuid = g_strdup_printf ("%s:%s",
|
|
||||||
dialog->source_uid,
|
|
||||||
dialog->event_uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
return uuid;
|
|
||||||
}
|
|
||||||
|
|
||||||
icaltimetype*
|
|
||||||
gcal_edit_dialog_get_start_date (GcalEditDialog *dialog)
|
|
||||||
{
|
|
||||||
icaltimetype *date;
|
|
||||||
|
|
||||||
gint value1;
|
|
||||||
gint value2;
|
|
||||||
gint value3;
|
|
||||||
|
|
||||||
date = g_new0 (icaltimetype, 1);
|
|
||||||
|
|
||||||
icaltime_set_timezone (date, gcal_manager_get_system_timezone (dialog->manager));
|
|
||||||
|
|
||||||
gcal_date_selector_get_date (GCAL_DATE_SELECTOR (dialog->start_date_selector),
|
gcal_date_selector_get_date (GCAL_DATE_SELECTOR (dialog->start_date_selector),
|
||||||
&value1,
|
&day,
|
||||||
&value2,
|
&month,
|
||||||
&value3);
|
&year);
|
||||||
date->day = value1;
|
|
||||||
date->month = value2;
|
|
||||||
date->year = value3;
|
|
||||||
|
|
||||||
value1 = value2 = 0;
|
|
||||||
gcal_time_selector_get_time (GCAL_TIME_SELECTOR (dialog->start_time_selector),
|
gcal_time_selector_get_time (GCAL_TIME_SELECTOR (dialog->start_time_selector),
|
||||||
&value1,
|
&hour,
|
||||||
&value2);
|
&minute);
|
||||||
date->hour = value1;
|
|
||||||
date->minute = value2;
|
|
||||||
|
|
||||||
if (date->hour == 0 &&
|
date = g_date_time_new_local (year, month, day, hour, minute, 0);
|
||||||
date->minute == 0)
|
|
||||||
{
|
|
||||||
date->is_date = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return date;
|
return date;
|
||||||
}
|
}
|
||||||
|
|
||||||
icaltimetype*
|
GDateTime*
|
||||||
gcal_edit_dialog_get_end_date (GcalEditDialog *dialog)
|
gcal_edit_dialog_get_date_end (GcalEditDialog *dialog)
|
||||||
{
|
{
|
||||||
icaltimetype *date;
|
GDateTime *date;
|
||||||
|
gint year, month, day;
|
||||||
gint value1;
|
gint hour, minute;
|
||||||
gint value2;
|
|
||||||
gint value3;
|
|
||||||
|
|
||||||
date = g_new0 (icaltimetype, 1);
|
|
||||||
|
|
||||||
icaltime_set_timezone (date,
|
|
||||||
gcal_manager_get_system_timezone (dialog->manager));
|
|
||||||
|
|
||||||
gcal_date_selector_get_date (GCAL_DATE_SELECTOR (dialog->end_date_selector),
|
gcal_date_selector_get_date (GCAL_DATE_SELECTOR (dialog->end_date_selector),
|
||||||
&value1,
|
&day,
|
||||||
&value2,
|
&month,
|
||||||
&value3);
|
&year);
|
||||||
date->day = value1;
|
|
||||||
date->month = value2;
|
|
||||||
date->year = value3;
|
|
||||||
|
|
||||||
value1 = value2 = 0;
|
|
||||||
gcal_time_selector_get_time (GCAL_TIME_SELECTOR (dialog->end_time_selector),
|
gcal_time_selector_get_time (GCAL_TIME_SELECTOR (dialog->end_time_selector),
|
||||||
&value1,
|
&hour,
|
||||||
&value2);
|
&minute);
|
||||||
date->hour = value1;
|
|
||||||
date->minute = value2;
|
|
||||||
|
|
||||||
if (date->hour == 0 &&
|
date = g_date_time_new_local (year, month, day, hour, minute, 0);
|
||||||
date->minute == 0)
|
|
||||||
{
|
|
||||||
date->is_date = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return date;
|
return date;
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-12
@@ -40,25 +40,17 @@ GtkWidget* gcal_edit_dialog_new (gboolean format_2
|
|||||||
void gcal_edit_dialog_set_event_is_new (GcalEditDialog *dialog,
|
void gcal_edit_dialog_set_event_is_new (GcalEditDialog *dialog,
|
||||||
gboolean event_is_new);
|
gboolean event_is_new);
|
||||||
|
|
||||||
|
GcalEvent* gcal_edit_dialog_get_event (GcalEditDialog *dialog);
|
||||||
|
|
||||||
void gcal_edit_dialog_set_event (GcalEditDialog *dialog,
|
void gcal_edit_dialog_set_event (GcalEditDialog *dialog,
|
||||||
GcalEvent *event);
|
GcalEvent *event);
|
||||||
|
|
||||||
void gcal_edit_dialog_set_manager (GcalEditDialog *dialog,
|
void gcal_edit_dialog_set_manager (GcalEditDialog *dialog,
|
||||||
GcalManager *manager);
|
GcalManager *manager);
|
||||||
|
|
||||||
ECalComponent* gcal_edit_dialog_get_component (GcalEditDialog *dialog);
|
GDateTime* gcal_edit_dialog_get_date_end (GcalEditDialog *dialog);
|
||||||
|
|
||||||
ESource* gcal_edit_dialog_get_source (GcalEditDialog *dialog);
|
GDateTime* gcal_edit_dialog_get_date_start (GcalEditDialog *dialog);
|
||||||
|
|
||||||
const gchar* gcal_edit_dialog_peek_source_uid (GcalEditDialog *dialog);
|
|
||||||
|
|
||||||
const gchar* gcal_edit_dialog_peek_event_uid (GcalEditDialog *dialog);
|
|
||||||
|
|
||||||
gchar* gcal_edit_dialog_get_event_uuid (GcalEditDialog *dialog);
|
|
||||||
|
|
||||||
icaltimetype* gcal_edit_dialog_get_start_date (GcalEditDialog *dialog);
|
|
||||||
|
|
||||||
icaltimetype* gcal_edit_dialog_get_end_date (GcalEditDialog *dialog);
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|||||||
+14
-17
@@ -1148,36 +1148,32 @@ edit_dialog_closed (GtkDialog *dialog,
|
|||||||
GcalWindow *window;
|
GcalWindow *window;
|
||||||
|
|
||||||
GcalEditDialog *edit_dialog;
|
GcalEditDialog *edit_dialog;
|
||||||
ECalComponent *component;
|
GcalEvent *event;
|
||||||
GcalView *view;
|
GcalView *view;
|
||||||
|
|
||||||
GList *widgets;
|
GList *widgets;
|
||||||
gchar *uuid;
|
const gchar *uuid;
|
||||||
|
|
||||||
window = GCAL_WINDOW (user_data);
|
window = GCAL_WINDOW (user_data);
|
||||||
|
edit_dialog = GCAL_EDIT_DIALOG (dialog);
|
||||||
|
event = gcal_edit_dialog_get_event (edit_dialog);
|
||||||
|
view = GCAL_VIEW (window->views[window->active_view]);
|
||||||
|
|
||||||
gtk_widget_hide (GTK_WIDGET (dialog));
|
gtk_widget_hide (GTK_WIDGET (dialog));
|
||||||
|
|
||||||
view = GCAL_VIEW (window->views[window->active_view]);
|
|
||||||
edit_dialog = GCAL_EDIT_DIALOG (dialog);
|
|
||||||
|
|
||||||
switch (response)
|
switch (response)
|
||||||
{
|
{
|
||||||
case GCAL_RESPONSE_CREATE_EVENT:
|
case GCAL_RESPONSE_CREATE_EVENT:
|
||||||
/* retrieve the component from the dialog*/
|
|
||||||
gcal_manager_create_event (window->manager,
|
gcal_manager_create_event (window->manager,
|
||||||
gcal_edit_dialog_get_source (edit_dialog),
|
gcal_event_get_source (event),
|
||||||
gcal_edit_dialog_get_component (edit_dialog));
|
g_object_ref (gcal_event_get_component (event)));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GCAL_RESPONSE_SAVE_EVENT:
|
case GCAL_RESPONSE_SAVE_EVENT:
|
||||||
/* retrieve the component from the dialog*/
|
|
||||||
component = gcal_edit_dialog_get_component (edit_dialog);
|
|
||||||
|
|
||||||
gcal_manager_update_event (window->manager,
|
gcal_manager_update_event (window->manager,
|
||||||
gcal_edit_dialog_get_source (edit_dialog),
|
gcal_event_get_source (event),
|
||||||
component);
|
g_object_ref (gcal_event_get_component (event)));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1200,15 +1196,16 @@ edit_dialog_closed (GtkDialog *dialog,
|
|||||||
window->notification_timeout = g_timeout_add_seconds (5, hide_notification_scheduled, user_data);
|
window->notification_timeout = g_timeout_add_seconds (5, hide_notification_scheduled, user_data);
|
||||||
|
|
||||||
window->event_to_delete = g_new0 (GcalEventData, 1);
|
window->event_to_delete = g_new0 (GcalEventData, 1);
|
||||||
window->event_to_delete->source = gcal_edit_dialog_get_source (edit_dialog);
|
window->event_to_delete->source = gcal_event_get_source (event);
|
||||||
window->event_to_delete->event_component = gcal_edit_dialog_get_component (edit_dialog);
|
window->event_to_delete->event_component = gcal_event_get_component (event);
|
||||||
|
|
||||||
|
uuid = gcal_event_get_uid (event);
|
||||||
|
|
||||||
uuid = gcal_edit_dialog_get_event_uuid (edit_dialog);
|
|
||||||
/* hide widget of the event */
|
/* hide widget of the event */
|
||||||
widgets = gcal_view_get_children_by_uuid (view, uuid);
|
widgets = gcal_view_get_children_by_uuid (view, uuid);
|
||||||
|
|
||||||
g_list_foreach (widgets, (GFunc) gtk_widget_hide, NULL);
|
g_list_foreach (widgets, (GFunc) gtk_widget_hide, NULL);
|
||||||
g_list_free (widgets);
|
g_list_free (widgets);
|
||||||
g_free (uuid);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GTK_RESPONSE_CANCEL:
|
case GTK_RESPONSE_CANCEL:
|
||||||
|
|||||||
Reference in New Issue
Block a user