[evolution] Provide e_alert_bar_submit_alert() to avoid code duplication



commit 293abcbd7d135eedb4b57e56d67303ff038e94e6
Author: Milan Crha <mcrha redhat com>
Date:   Tue Jul 25 15:46:17 2017 +0200

    Provide e_alert_bar_submit_alert() to avoid code duplication
    
    Most of the EAlertSink implementors use EAlertBar to present those
    alerts and all of these had almost identical code to deal with it.
    The added function is for these implementations to share the code.

 src/calendar/gui/e-comp-editor.c                   |    2 +-
 src/e-util/e-alert-bar.c                           |   43 ++++++++++++++++++++
 src/e-util/e-alert-bar.h                           |    2 +
 src/e-util/e-html-editor.c                         |   24 +----------
 src/e-util/e-preview-pane.c                        |   22 +---------
 src/e-util/e-source-config-dialog.c                |   19 +--------
 src/mail/e-mail-config-activity-page.c             |   21 +---------
 src/mail/e-mail-config-window.c                    |   19 +--------
 src/mail/em-folder-selector.c                      |   19 +--------
 .../backup-restore/e-mail-config-restore-page.c    |   21 +---------
 src/shell/e-shell-content.c                        |   27 +-----------
 src/shell/e-shell-window.c                         |   17 +-------
 12 files changed, 58 insertions(+), 178 deletions(-)
---
diff --git a/src/calendar/gui/e-comp-editor.c b/src/calendar/gui/e-comp-editor.c
index c6e7703..391b910 100644
--- a/src/calendar/gui/e-comp-editor.c
+++ b/src/calendar/gui/e-comp-editor.c
@@ -1743,7 +1743,7 @@ e_comp_editor_submit_alert (EAlertSink *alert_sink,
 
        comp_editor = E_COMP_EDITOR (alert_sink);
 
-       e_alert_bar_add_alert (comp_editor->priv->alert_bar, alert);
+       e_alert_bar_submit_alert (comp_editor->priv->alert_bar, alert);
 }
 
 static void
diff --git a/src/e-util/e-alert-bar.c b/src/e-util/e-alert-bar.c
index 9acd9dd..51346dd 100644
--- a/src/e-util/e-alert-bar.c
+++ b/src/e-util/e-alert-bar.c
@@ -20,6 +20,7 @@
 #include <glib/gi18n-lib.h>
 
 #include "e-dialog-widgets.h"
+#include "e-alert-dialog.h"
 #include "e-alert-bar.h"
 
 #define E_ALERT_BAR_GET_PRIVATE(obj) \
@@ -453,3 +454,45 @@ e_alert_bar_close_alert (EAlertBar *alert_bar)
 
        return alert_closed;
 }
+
+/**
+ * e_alert_bar_submit_alert:
+ * @alert_bar: an #EAlertBar
+ * @alert: an #EAlert
+ *
+ * Depending on the @alert type either shows a dialog or adds
+ * the alert into the @alert_bar. This is meant to be used
+ * by #EAlertSink implementations which use the #EAlertBar.
+ *
+ * Since: 3.26
+ **/
+void
+e_alert_bar_submit_alert (EAlertBar *alert_bar,
+                         EAlert *alert)
+{
+       GtkWidget *toplevel;
+       GtkWidget *widget;
+       GtkWindow *parent;
+
+       g_return_if_fail (E_IS_ALERT_BAR (alert_bar));
+       g_return_if_fail (E_IS_ALERT (alert));
+
+       switch (e_alert_get_message_type (alert)) {
+               case GTK_MESSAGE_INFO:
+               case GTK_MESSAGE_WARNING:
+               case GTK_MESSAGE_QUESTION:
+               case GTK_MESSAGE_ERROR:
+                       e_alert_bar_add_alert (alert_bar, alert);
+                       break;
+
+               default:
+                       toplevel = gtk_widget_get_toplevel (GTK_WIDGET (alert_bar));
+                       if (GTK_IS_WINDOW (toplevel))
+                               parent = GTK_WINDOW (toplevel);
+                       else
+                               parent = NULL;
+                       widget = e_alert_dialog_new (parent, alert);
+                       gtk_dialog_run (GTK_DIALOG (widget));
+                       gtk_widget_destroy (widget);
+       }
+}
diff --git a/src/e-util/e-alert-bar.h b/src/e-util/e-alert-bar.h
index ffb7cb1..b510bec 100644
--- a/src/e-util/e-alert-bar.h
+++ b/src/e-util/e-alert-bar.h
@@ -66,6 +66,8 @@ void          e_alert_bar_clear               (EAlertBar *alert_bar);
 void           e_alert_bar_add_alert           (EAlertBar *alert_bar,
                                                 EAlert *alert);
 gboolean       e_alert_bar_close_alert         (EAlertBar *alert_bar);
+void           e_alert_bar_submit_alert        (EAlertBar *alert_bar,
+                                                EAlert *alert);
 
 G_END_DECLS
 
diff --git a/src/e-util/e-html-editor.c b/src/e-util/e-html-editor.c
index 363f911..a405459 100644
--- a/src/e-util/e-html-editor.c
+++ b/src/e-util/e-html-editor.c
@@ -786,32 +786,10 @@ html_editor_submit_alert (EAlertSink *alert_sink,
                           EAlert *alert)
 {
        EHTMLEditorPrivate *priv;
-       EAlertBar *alert_bar;
-       GtkWidget *toplevel;
-       GtkWidget *widget;
-       GtkWindow *parent;
 
        priv = E_HTML_EDITOR_GET_PRIVATE (alert_sink);
 
-       switch (e_alert_get_message_type (alert)) {
-               case GTK_MESSAGE_INFO:
-               case GTK_MESSAGE_WARNING:
-               case GTK_MESSAGE_ERROR:
-                       alert_bar = E_ALERT_BAR (priv->alert_bar);
-                       e_alert_bar_add_alert (alert_bar, alert);
-                       break;
-
-               default:
-                       widget = GTK_WIDGET (alert_sink);
-                       toplevel = gtk_widget_get_toplevel (widget);
-                       if (GTK_IS_WINDOW (toplevel))
-                               parent = GTK_WINDOW (toplevel);
-                       else
-                               parent = NULL;
-                       widget = e_alert_dialog_new (parent, alert);
-                       gtk_dialog_run (GTK_DIALOG (widget));
-                       gtk_widget_destroy (widget);
-       }
+       e_alert_bar_submit_alert (E_ALERT_BAR (priv->alert_bar), alert);
 }
 
 static void
diff --git a/src/e-util/e-preview-pane.c b/src/e-util/e-preview-pane.c
index aaa2589..272c896 100644
--- a/src/e-util/e-preview-pane.c
+++ b/src/e-util/e-preview-pane.c
@@ -218,28 +218,10 @@ preview_pane_submit_alert (EAlertSink *alert_sink,
                            EAlert *alert)
 {
        EPreviewPane *preview_pane;
-       EAlertBar *alert_bar;
-       GtkWidget *dialog;
-       GtkWindow *parent;
 
        preview_pane = E_PREVIEW_PANE (alert_sink);
-       alert_bar = E_ALERT_BAR (preview_pane->priv->alert_bar);
-
-       switch (e_alert_get_message_type (alert)) {
-               case GTK_MESSAGE_INFO:
-               case GTK_MESSAGE_WARNING:
-               case GTK_MESSAGE_QUESTION:
-               case GTK_MESSAGE_ERROR:
-                       e_alert_bar_add_alert (alert_bar, alert);
-                       break;
-
-               default:
-                       parent = GTK_WINDOW (alert_sink);
-                       dialog = e_alert_dialog_new (parent, alert);
-                       gtk_dialog_run (GTK_DIALOG (dialog));
-                       gtk_widget_destroy (dialog);
-                       break;
-       }
+
+       e_alert_bar_submit_alert (E_ALERT_BAR (preview_pane->priv->alert_bar), alert);
 }
 
 static void
diff --git a/src/e-util/e-source-config-dialog.c b/src/e-util/e-source-config-dialog.c
index 1f48d10..59807ac 100644
--- a/src/e-util/e-source-config-dialog.c
+++ b/src/e-util/e-source-config-dialog.c
@@ -308,27 +308,10 @@ source_config_dialog_submit_alert (EAlertSink *alert_sink,
                                    EAlert *alert)
 {
        ESourceConfigDialogPrivate *priv;
-       EAlertBar *alert_bar;
-       GtkWidget *dialog;
-       GtkWindow *parent;
 
        priv = E_SOURCE_CONFIG_DIALOG_GET_PRIVATE (alert_sink);
 
-       switch (e_alert_get_message_type (alert)) {
-               case GTK_MESSAGE_INFO:
-               case GTK_MESSAGE_WARNING:
-               case GTK_MESSAGE_ERROR:
-                       alert_bar = E_ALERT_BAR (priv->alert_bar);
-                       e_alert_bar_add_alert (alert_bar, alert);
-                       break;
-
-               default:
-                       parent = GTK_WINDOW (alert_sink);
-                       dialog = e_alert_dialog_new (parent, alert);
-                       gtk_dialog_run (GTK_DIALOG (dialog));
-                       gtk_widget_destroy (dialog);
-                       break;
-       }
+       e_alert_bar_submit_alert (E_ALERT_BAR (priv->alert_bar), alert);
 }
 
 static void
diff --git a/src/mail/e-mail-config-activity-page.c b/src/mail/e-mail-config-activity-page.c
index 75f0362..d1ea1a5 100644
--- a/src/mail/e-mail-config-activity-page.c
+++ b/src/mail/e-mail-config-activity-page.c
@@ -94,29 +94,10 @@ mail_config_activity_page_submit_alert (EAlertSink *alert_sink,
                                         EAlert *alert)
 {
        EMailConfigActivityPagePrivate *priv;
-       EAlertBar *alert_bar;
-       GtkWidget *dialog;
-       gpointer parent;
 
        priv = E_MAIL_CONFIG_ACTIVITY_PAGE_GET_PRIVATE (alert_sink);
 
-       parent = gtk_widget_get_toplevel (GTK_WIDGET (alert_sink));
-       parent = gtk_widget_is_toplevel (parent) ? parent : NULL;
-
-       switch (e_alert_get_message_type (alert)) {
-               case GTK_MESSAGE_INFO:
-               case GTK_MESSAGE_WARNING:
-               case GTK_MESSAGE_ERROR:
-                       alert_bar = E_ALERT_BAR (priv->alert_bar);
-                       e_alert_bar_add_alert (alert_bar, alert);
-                       break;
-
-               default:
-                       dialog = e_alert_dialog_new (parent, alert);
-                       gtk_dialog_run (GTK_DIALOG (dialog));
-                       gtk_widget_destroy (dialog);
-                       break;
-       }
+       e_alert_bar_submit_alert (E_ALERT_BAR (priv->alert_bar), alert);
 }
 
 static void
diff --git a/src/mail/e-mail-config-window.c b/src/mail/e-mail-config-window.c
index 2b1b0fa..568847e 100644
--- a/src/mail/e-mail-config-window.c
+++ b/src/mail/e-mail-config-window.c
@@ -435,27 +435,10 @@ mail_config_window_submit_alert (EAlertSink *alert_sink,
                                  EAlert *alert)
 {
        EMailConfigWindowPrivate *priv;
-       EAlertBar *alert_bar;
-       GtkWidget *dialog;
-       GtkWindow *parent;
 
        priv = E_MAIL_CONFIG_WINDOW_GET_PRIVATE (alert_sink);
 
-       switch (e_alert_get_message_type (alert)) {
-               case GTK_MESSAGE_INFO:
-               case GTK_MESSAGE_WARNING:
-               case GTK_MESSAGE_ERROR:
-                       alert_bar = E_ALERT_BAR (priv->alert_bar);
-                       e_alert_bar_add_alert (alert_bar, alert);
-                       break;
-
-               default:
-                       parent = GTK_WINDOW (alert_sink);
-                       dialog = e_alert_dialog_new (parent, alert);
-                       gtk_dialog_run (GTK_DIALOG (dialog));
-                       gtk_widget_destroy (dialog);
-                       break;
-       }
+       e_alert_bar_submit_alert (E_ALERT_BAR (priv->alert_bar), alert);
 }
 
 static void
diff --git a/src/mail/em-folder-selector.c b/src/mail/em-folder-selector.c
index 67cac64..12daad1 100644
--- a/src/mail/em-folder-selector.c
+++ b/src/mail/em-folder-selector.c
@@ -419,27 +419,10 @@ folder_selector_submit_alert (EAlertSink *alert_sink,
                               EAlert *alert)
 {
        EMFolderSelectorPrivate *priv;
-       EAlertBar *alert_bar;
-       GtkWidget *dialog;
-       GtkWindow *parent;
 
        priv = EM_FOLDER_SELECTOR_GET_PRIVATE (alert_sink);
 
-       switch (e_alert_get_message_type (alert)) {
-               case GTK_MESSAGE_INFO:
-               case GTK_MESSAGE_WARNING:
-               case GTK_MESSAGE_ERROR:
-                       alert_bar = E_ALERT_BAR (priv->alert_bar);
-                       e_alert_bar_add_alert (alert_bar, alert);
-                       break;
-
-               default:
-                       parent = GTK_WINDOW (alert_sink);
-                       dialog = e_alert_dialog_new (parent, alert);
-                       gtk_dialog_run (GTK_DIALOG (dialog));
-                       gtk_widget_destroy (dialog);
-                       break;
-       }
+       e_alert_bar_submit_alert (E_ALERT_BAR (priv->alert_bar), alert);
 }
 
 static void
diff --git a/src/modules/backup-restore/e-mail-config-restore-page.c 
b/src/modules/backup-restore/e-mail-config-restore-page.c
index bfa90a0..abf4162 100644
--- a/src/modules/backup-restore/e-mail-config-restore-page.c
+++ b/src/modules/backup-restore/e-mail-config-restore-page.c
@@ -226,29 +226,10 @@ mail_config_restore_page_submit_alert (EAlertSink *alert_sink,
                                        EAlert *alert)
 {
        EMailConfigRestorePagePrivate *priv;
-       EAlertBar *alert_bar;
-       GtkWidget *dialog;
-       gpointer parent;
 
        priv = E_MAIL_CONFIG_RESTORE_PAGE_GET_PRIVATE (alert_sink);
 
-       parent = gtk_widget_get_toplevel (GTK_WIDGET (alert_sink));
-       parent = gtk_widget_is_toplevel (parent) ? parent : NULL;
-
-       switch (e_alert_get_message_type (alert)) {
-               case GTK_MESSAGE_INFO:
-               case GTK_MESSAGE_WARNING:
-               case GTK_MESSAGE_ERROR:
-                       alert_bar = E_ALERT_BAR (priv->alert_bar);
-                       e_alert_bar_add_alert (alert_bar, alert);
-                       break;
-
-               default:
-                       dialog = e_alert_dialog_new (parent, alert);
-                       gtk_dialog_run (GTK_DIALOG (dialog));
-                       gtk_widget_destroy (dialog);
-                       break;
-       }
+       e_alert_bar_submit_alert (E_ALERT_BAR (priv->alert_bar), alert);
 }
 
 static gboolean
diff --git a/src/shell/e-shell-content.c b/src/shell/e-shell-content.c
index 662b458..aee5707 100644
--- a/src/shell/e-shell-content.c
+++ b/src/shell/e-shell-content.c
@@ -394,32 +394,11 @@ static void
 shell_content_submit_alert (EAlertSink *alert_sink,
                             EAlert *alert)
 {
-       EShellView *shell_view;
-       EShellWindow *shell_window;
-       EShellContent *shell_content;
        GtkWidget *alert_bar;
-       GtkWidget *dialog;
 
-       shell_content = E_SHELL_CONTENT (alert_sink);
-       shell_view = e_shell_content_get_shell_view (shell_content);
-       shell_window = e_shell_view_get_shell_window (shell_view);
-       alert_bar = e_shell_content_get_alert_bar (shell_content);
-
-       switch (e_alert_get_message_type (alert)) {
-               case GTK_MESSAGE_INFO:
-               case GTK_MESSAGE_WARNING:
-               case GTK_MESSAGE_ERROR:
-                       e_alert_bar_add_alert (
-                               E_ALERT_BAR (alert_bar), alert);
-                       break;
-
-               default:
-                       dialog = e_alert_dialog_new (
-                               GTK_WINDOW (shell_window), alert);
-                       gtk_dialog_run (GTK_DIALOG (dialog));
-                       gtk_widget_destroy (dialog);
-                       break;
-       }
+       alert_bar = e_shell_content_get_alert_bar (E_SHELL_CONTENT (alert_sink));
+
+       e_alert_bar_submit_alert (E_ALERT_BAR (alert_bar), alert);
 }
 
 static void
diff --git a/src/shell/e-shell-window.c b/src/shell/e-shell-window.c
index e04be83..829535d 100644
--- a/src/shell/e-shell-window.c
+++ b/src/shell/e-shell-window.c
@@ -841,7 +841,6 @@ shell_window_submit_alert (EAlertSink *alert_sink,
 {
        EShellWindow *shell_window;
        GtkWidget *alert_bar;
-       GtkWidget *dialog;
 
        shell_window = E_SHELL_WINDOW (alert_sink);
 
@@ -854,21 +853,7 @@ shell_window_submit_alert (EAlertSink *alert_sink,
 
        alert_bar = e_shell_window_get_alert_bar (shell_window);
 
-       switch (e_alert_get_message_type (alert)) {
-               case GTK_MESSAGE_INFO:
-               case GTK_MESSAGE_WARNING:
-               case GTK_MESSAGE_ERROR:
-                       e_alert_bar_add_alert (
-                               E_ALERT_BAR (alert_bar), alert);
-                       break;
-
-               default:
-                       dialog = e_alert_dialog_new (
-                               GTK_WINDOW (shell_window), alert);
-                       gtk_dialog_run (GTK_DIALOG (dialog));
-                       gtk_widget_destroy (dialog);
-                       break;
-       }
+       e_alert_bar_submit_alert (E_ALERT_BAR (alert_bar), alert);
 }
 
 static gboolean


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]