[evolution-ews] Do not save unchanged Out-Of-Office settings
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-ews] Do not save unchanged Out-Of-Office settings
- Date: Fri, 3 Aug 2012 14:09:50 +0000 (UTC)
commit ea6d3ce87d445386a51cd3e32905a67660255877
Author: Milan Crha <mcrha redhat com>
Date: Fri Aug 3 16:09:13 2012 +0200
Do not save unchanged Out-Of-Office settings
src/configuration/e-mail-config-ews-ooo-page.c | 43 ++++++++++++++++++++----
src/server/e-ews-oof-settings.c | 26 ++++++++++++++
2 files changed, 62 insertions(+), 7 deletions(-)
---
diff --git a/src/configuration/e-mail-config-ews-ooo-page.c b/src/configuration/e-mail-config-ews-ooo-page.c
index 62ea848..382f6b7 100644
--- a/src/configuration/e-mail-config-ews-ooo-page.c
+++ b/src/configuration/e-mail-config-ews-ooo-page.c
@@ -53,6 +53,9 @@ struct _EMailConfigEwsOooPagePrivate {
EEwsOofSettings *oof_settings;
GMutex *oof_settings_lock;
+ /* to not save unchanged state */
+ gboolean changed;
+
GtkWidget *enabled_radio_button; /* not referenced */
GtkWidget *disabled_radio_button; /* not referenced */
GtkWidget *scheduled_radio_button; /* not referenced */
@@ -673,6 +676,14 @@ mail_config_ews_ooo_page_submit_cb (GObject *source_object,
}
static void
+ews_oof_settings_changed (gboolean *pchanged)
+{
+ g_return_if_fail (pchanged != NULL);
+
+ *pchanged = TRUE;
+}
+
+static void
mail_config_ews_ooo_page_submit (EMailConfigPage *page,
GCancellable *cancellable,
GAsyncReadyCallback callback,
@@ -686,6 +697,7 @@ mail_config_ews_ooo_page_submit (EMailConfigPage *page,
GDateTime *date_time;
gchar *text;
time_t tm;
+ gulong signal_id;
priv = E_MAIL_CONFIG_EWS_OOO_PAGE_GET_PRIVATE (page);
@@ -696,20 +708,30 @@ mail_config_ews_ooo_page_submit (EMailConfigPage *page,
* are obviously no changes to submit. */
if (priv->oof_settings == NULL) {
g_mutex_unlock (priv->oof_settings_lock);
+
+ simple = g_simple_async_result_new (
+ G_OBJECT (page), callback, user_data,
+ mail_config_ews_ooo_page_submit);
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+
return;
}
+ signal_id = g_signal_connect_swapped (priv->oof_settings, "notify",
+ G_CALLBACK (ews_oof_settings_changed), &priv->changed);
+
toggle_button = GTK_TOGGLE_BUTTON (priv->enabled_radio_button);
if (gtk_toggle_button_get_active (toggle_button))
e_ews_oof_settings_set_state (
priv->oof_settings,
- E_EWS_OOF_STATE_DISABLED);
+ E_EWS_OOF_STATE_ENABLED);
toggle_button = GTK_TOGGLE_BUTTON (priv->disabled_radio_button);
if (gtk_toggle_button_get_active (toggle_button))
e_ews_oof_settings_set_state (
priv->oof_settings,
- E_EWS_OOF_STATE_ENABLED);
+ E_EWS_OOF_STATE_DISABLED);
toggle_button = GTK_TOGGLE_BUTTON (priv->scheduled_radio_button);
if (gtk_toggle_button_get_active (toggle_button))
@@ -743,12 +765,18 @@ mail_config_ews_ooo_page_submit (EMailConfigPage *page,
G_OBJECT (page), callback, user_data,
mail_config_ews_ooo_page_submit);
- g_simple_async_result_set_check_cancellable (simple, cancellable);
+ g_signal_handler_disconnect (priv->oof_settings, signal_id);
+
+ if (priv->changed) {
+ g_simple_async_result_set_check_cancellable (simple, cancellable);
- e_ews_oof_settings_submit (
- priv->oof_settings, cancellable,
- mail_config_ews_ooo_page_submit_cb,
- g_object_ref (simple));
+ e_ews_oof_settings_submit (
+ priv->oof_settings, cancellable,
+ mail_config_ews_ooo_page_submit_cb,
+ g_object_ref (simple));
+ } else {
+ g_simple_async_result_complete (simple);
+ }
g_object_unref (simple);
@@ -815,6 +843,7 @@ mail_config_ews_ooo_page_try_password_sync (ESourceAuthenticator *auth,
if (page->priv->oof_settings != NULL)
g_object_unref (oof_settings);
page->priv->oof_settings = oof_settings;
+ page->priv->changed = FALSE;
g_mutex_unlock (page->priv->oof_settings_lock);
} else if (g_error_matches (local_error, SOUP_HTTP_ERROR, SOUP_STATUS_UNAUTHORIZED)) {
diff --git a/src/server/e-ews-oof-settings.c b/src/server/e-ews-oof-settings.c
index e2135e8..3138271 100644
--- a/src/server/e-ews-oof-settings.c
+++ b/src/server/e-ews-oof-settings.c
@@ -697,6 +697,9 @@ e_ews_oof_settings_set_state (EEwsOofSettings *settings,
{
g_return_if_fail (E_IS_EWS_OOF_SETTINGS (settings));
+ if (settings->priv->state == state)
+ return;
+
settings->priv->state = state;
g_object_notify (G_OBJECT (settings), "state");
@@ -718,6 +721,9 @@ e_ews_oof_settings_set_external_audience (EEwsOofSettings *settings,
{
g_return_if_fail (E_IS_EWS_OOF_SETTINGS (settings));
+ if (settings->priv->external_audience == external_audience)
+ return;
+
settings->priv->external_audience = external_audience;
g_object_notify (G_OBJECT (settings), "external-audience");
@@ -740,6 +746,11 @@ e_ews_oof_settings_set_start_time (EEwsOofSettings *settings,
g_mutex_lock (settings->priv->property_lock);
+ if (g_date_time_compare (settings->priv->start_time, start_time) == 0) {
+ g_mutex_unlock (settings->priv->property_lock);
+ return;
+ }
+
if (start_time != settings->priv->start_time) {
g_date_time_unref (settings->priv->start_time);
settings->priv->start_time = g_date_time_ref (start_time);
@@ -767,6 +778,11 @@ e_ews_oof_settings_set_end_time (EEwsOofSettings *settings,
g_mutex_lock (settings->priv->property_lock);
+ if (g_date_time_compare (settings->priv->end_time, end_time) == 0) {
+ g_mutex_unlock (settings->priv->property_lock);
+ return;
+ }
+
if (end_time != settings->priv->end_time) {
g_date_time_unref (settings->priv->end_time);
settings->priv->end_time = g_date_time_ref (end_time);
@@ -811,6 +827,11 @@ e_ews_oof_settings_set_internal_reply (EEwsOofSettings *settings,
g_mutex_lock (settings->priv->property_lock);
+ if (g_strcmp0 (internal_reply, settings->priv->internal_reply) == 0) {
+ g_mutex_unlock (settings->priv->property_lock);
+ return;
+ }
+
g_free (settings->priv->internal_reply);
settings->priv->internal_reply = g_strdup (internal_reply);
@@ -853,6 +874,11 @@ e_ews_oof_settings_set_external_reply (EEwsOofSettings *settings,
g_mutex_lock (settings->priv->property_lock);
+ if (g_strcmp0 (external_reply, settings->priv->external_reply) == 0) {
+ g_mutex_unlock (settings->priv->property_lock);
+ return;
+ }
+
g_free (settings->priv->external_reply);
settings->priv->external_reply = g_strdup (external_reply);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]