[gnome-calendar/gbsneto/gtk4: 45/46] event-editor-dialog: Port to new callback-based ask API
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar/gbsneto/gtk4: 45/46] event-editor-dialog: Port to new callback-based ask API
- Date: Sat, 12 Feb 2022 16:25:52 +0000 (UTC)
commit 47a72f815605bce2e607eb0863f484a67a49a110
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Sat Feb 12 13:08:19 2022 -0300
event-editor-dialog: Port to new callback-based ask API
src/gui/event-editor/gcal-event-editor-dialog.c | 61 +++++++++++++----
src/utils/gcal-utils.c | 91 -------------------------
src/utils/gcal-utils.h | 4 --
3 files changed, 46 insertions(+), 110 deletions(-)
---
diff --git a/src/gui/event-editor/gcal-event-editor-dialog.c b/src/gui/event-editor/gcal-event-editor-dialog.c
index 83a26c27..e4a91c51 100644
--- a/src/gui/event-editor/gcal-event-editor-dialog.c
+++ b/src/gui/event-editor/gcal-event-editor-dialog.c
@@ -280,27 +280,58 @@ on_cancel_button_clicked_cb (GtkButton *button,
GCAL_EXIT;
}
+static void
+on_ask_recurrence_response_delete_cb (GcalEvent *event,
+ GcalRecurrenceModType mod_type,
+ gpointer user_data)
+{
+ GcalEventEditorDialog *self = GCAL_EVENT_EDITOR_DIALOG (user_data);
+
+ g_signal_emit (self, signals[REMOVE_EVENT], 0, event, mod_type);
+ clear_and_hide_dialog (self);
+}
+
static void
on_delete_button_clicked_cb (GtkButton *button,
GcalEventEditorDialog *self)
{
GcalRecurrenceModType mod = GCAL_RECURRENCE_MOD_THIS_ONLY;
- GcalCalendar *calendar;
GCAL_ENTRY;
- calendar = gcal_event_get_calendar (self->event);
- if (!gcal_event_has_recurrence (self->event) ||
- ask_recurrence_modification_type (GTK_WIDGET (self), &mod, calendar))
+ if (gcal_event_has_recurrence (self->event))
+ {
+ gcal_utils_ask_recurrence_modification_type (GTK_WIDGET (self),
+ self->event,
+ on_ask_recurrence_response_delete_cb,
+ self);
+ }
+ else
{
g_signal_emit (self, signals[REMOVE_EVENT], 0, self->event, mod);
+ clear_and_hide_dialog (self);
}
- clear_and_hide_dialog (self);
-
GCAL_EXIT;
}
+static void
+on_ask_recurrence_response_save_cb (GcalEvent *event,
+ GcalRecurrenceModType mod_type,
+ gpointer user_data)
+{
+ GcalEventEditorDialog *self = GCAL_EVENT_EDITOR_DIALOG (user_data);
+
+ if (mod_type != GCAL_RECURRENCE_MOD_NONE)
+ {
+ GcalManager *manager = gcal_context_get_manager (self->context);
+
+ gcal_manager_update_event (manager, self->event, GCAL_RECURRENCE_MOD_THIS_ONLY);
+ }
+
+ clear_and_hide_dialog (self);
+}
+
static void
on_done_button_clicked_cb (GtkButton *button,
GcalEventEditorDialog *self)
@@ -339,17 +370,17 @@ on_done_button_clicked_cb (GtkButton *button,
{
gcal_manager_create_event (manager, self->event);
}
+ else if (gcal_event_has_recurrence (self->event))
+ {
+ gcal_utils_ask_recurrence_modification_type (GTK_WIDGET (self),
+ self->event,
+ on_ask_recurrence_response_save_cb,
+ self);
+ return;
+ }
else
{
- GcalRecurrenceModType mod = GCAL_RECURRENCE_MOD_THIS_ONLY;
-
- if (gcal_event_has_recurrence (self->event) &&
- !ask_recurrence_modification_type (GTK_WIDGET (self), &mod, calendar))
- {
- goto out;
- }
-
- gcal_manager_update_event (manager, self->event, mod);
+ gcal_manager_update_event (manager, self->event, GCAL_RECURRENCE_MOD_THIS_ONLY);
}
out:
diff --git a/src/utils/gcal-utils.c b/src/utils/gcal-utils.c
index 576cef06..0fd61262 100644
--- a/src/utils/gcal-utils.c
+++ b/src/utils/gcal-utils.c
@@ -943,97 +943,6 @@ is_source_enabled (ESource *source)
return e_source_selectable_get_selected (selectable);
}
-static void
-on_dialog_response_cb (GtkDialog *dialog,
- gint response,
- gint *out_response)
-{
- *out_response = response;
-}
-
-/**
- * ask_recurrence_modification_type:
- * @parent: a #GtkWidget
- * @modtype: an #ECalObjModType
- * @source: an #ESource
- *
- * Assigns the appropriate modtype while modifying an event
- * based on user's choice in the GtkMessageDialog that pops up.
- * The modtype helps the user choose the part of recurrent events
- * to modify. Such as Only This Event, Subsequent events
- * or All events.
- *
- * Returns: %TRUE if user chooses appropriate option and
- * @modtype is assigned, %FALSE otherwise.
- */
-gboolean
-ask_recurrence_modification_type (GtkWidget *parent,
- GcalRecurrenceModType *modtype,
- GcalCalendar *calendar)
-{
- GtkDialogFlags flags;
- ECalClient *client;
- GtkWidget *dialog;
- gboolean is_set;
- gint result = 0;
-
- flags = GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT;
- *modtype = GCAL_RECURRENCE_MOD_THIS_ONLY;
-
- dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_native (parent)),
- flags,
- GTK_MESSAGE_QUESTION,
- GTK_BUTTONS_NONE,
- _("The event you are trying to modify is recurring. The changes you have
selected should be applied to:"));
-
- gtk_dialog_add_buttons (GTK_DIALOG (dialog),
- _("_Cancel"),
- GTK_RESPONSE_CANCEL,
- _("_Only This Event"),
- GTK_RESPONSE_ACCEPT,
- NULL);
-
- client = gcal_calendar_get_client (calendar);
-
- if (!e_client_check_capability (E_CLIENT (client), E_CAL_STATIC_CAPABILITY_NO_THISANDFUTURE))
- gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Subsequent events"), GTK_RESPONSE_OK);
-
- gtk_dialog_add_button (GTK_DIALOG (dialog), _("_All events"), GTK_RESPONSE_YES);
- gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (gtk_widget_get_native (parent)));
- g_signal_connect (dialog, "response", G_CALLBACK (on_dialog_response_cb), &result);
-
- gtk_window_present (GTK_WINDOW (dialog));
-
- while (result == 0)
- g_main_context_iteration (NULL, TRUE);
-
- switch (result)
- {
- case GTK_RESPONSE_CANCEL:
- is_set = FALSE;
- break;
- case GTK_RESPONSE_ACCEPT:
- *modtype = GCAL_RECURRENCE_MOD_THIS_ONLY;
- is_set = TRUE;
- break;
- case GTK_RESPONSE_OK:
- *modtype = GCAL_RECURRENCE_MOD_THIS_AND_FUTURE;
- is_set = TRUE;
- break;
- case GTK_RESPONSE_YES:
- *modtype = GCAL_RECURRENCE_MOD_ALL;
- is_set = TRUE;
- break;
- default:
- is_set = FALSE;
- break;
- }
-
- gtk_window_destroy (GTK_WINDOW (dialog));
-
- return is_set;
-}
-
struct
{
const gchar *territory;
diff --git a/src/utils/gcal-utils.h b/src/utils/gcal-utils.h
index 0985b8c2..42931afc 100644
--- a/src/utils/gcal-utils.h
+++ b/src/utils/gcal-utils.h
@@ -114,10 +114,6 @@ gboolean should_change_date_for_scroll (gdouble
gboolean is_source_enabled (ESource *source);
-gboolean ask_recurrence_modification_type (GtkWidget *parent,
- GcalRecurrenceModType *modtype,
- GcalCalendar *calendar);
-
gboolean is_workday (guint day);
GList* filter_children_by_uid_and_modtype (GtkWidget *widget,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]