[evolution] EMailReader: Support multiple action groups.
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] EMailReader: Support multiple action groups.
- Date: Fri, 20 May 2011 23:27:01 +0000 (UTC)
commit 7333f12087eb0b0271ff272c6643909a7803510b
Author: Matthew Barnes <mbarnes redhat com>
Date: Fri May 20 15:29:00 2011 -0400
EMailReader: Support multiple action groups.
Use an enum type to request different action groups. For now we just
have E_MAIL_READER_ACTION_GROUP_STANDARD. EMailReader implementations
should map the enum value to an appropriate GtkActionGroup.
mail/e-mail-browser.c | 10 ++++++++--
mail/e-mail-notebook-view.c | 16 +++++++++++++---
mail/e-mail-paned-view.c | 14 ++++++++++++--
mail/e-mail-reader-utils.c | 17 -----------------
mail/e-mail-reader-utils.h | 2 --
mail/e-mail-reader.c | 35 +++++++++++++++++++++++++----------
mail/e-mail-reader.h | 11 +++++++++--
modules/mail/e-mail-shell-content.c | 18 ++++++++++++++----
8 files changed, 81 insertions(+), 42 deletions(-)
---
diff --git a/mail/e-mail-browser.c b/mail/e-mail-browser.c
index 900ba63..6e0a18f 100644
--- a/mail/e-mail-browser.c
+++ b/mail/e-mail-browser.c
@@ -742,13 +742,19 @@ mail_browser_submit_alert (EAlertSink *alert_sink,
}
static GtkActionGroup *
-mail_browser_get_action_group (EMailReader *reader)
+mail_browser_get_action_group (EMailReader *reader,
+ EMailReaderActionGroup group)
{
EMailBrowserPrivate *priv;
priv = E_MAIL_BROWSER (reader)->priv;
- return priv->action_group;
+ switch (group) {
+ case E_MAIL_READER_ACTION_GROUP_STANDARD:
+ return priv->action_group;
+ default:
+ g_return_val_if_reached (NULL);
+ }
}
static EAlertSink *
diff --git a/mail/e-mail-notebook-view.c b/mail/e-mail-notebook-view.c
index 16e2fe3..d72016d 100644
--- a/mail/e-mail-notebook-view.c
+++ b/mail/e-mail-notebook-view.c
@@ -776,17 +776,27 @@ mail_notebook_view_set_preview_visible (EMailView *view,
}
static GtkActionGroup *
-mail_notebook_view_get_action_group (EMailReader *reader)
+mail_notebook_view_get_action_group (EMailReader *reader,
+ EMailReaderActionGroup group)
{
EMailView *view;
- EShellWindow *shell_window;
EShellView *shell_view;
+ EShellWindow *shell_window;
+ const gchar *group_name;
view = E_MAIL_VIEW (reader);
shell_view = e_mail_view_get_shell_view (view);
shell_window = e_shell_view_get_shell_window (shell_view);
- return E_SHELL_WINDOW_ACTION_GROUP_MAIL (shell_window);
+ switch (group) {
+ case E_MAIL_READER_ACTION_GROUP_STANDARD:
+ group_name = "mail";
+ break;
+ default:
+ g_return_val_if_reached (NULL);
+ }
+
+ return e_shell_window_get_action_group (shell_window, group_name);
}
static EAlertSink *
diff --git a/mail/e-mail-paned-view.c b/mail/e-mail-paned-view.c
index 8c79a82..d95fca1 100644
--- a/mail/e-mail-paned-view.c
+++ b/mail/e-mail-paned-view.c
@@ -366,17 +366,27 @@ mail_paned_view_dispose (GObject *object)
}
static GtkActionGroup *
-mail_paned_view_get_action_group (EMailReader *reader)
+mail_paned_view_get_action_group (EMailReader *reader,
+ EMailReaderActionGroup group)
{
EMailView *view;
EShellView *shell_view;
EShellWindow *shell_window;
+ const gchar *group_name;
view = E_MAIL_VIEW (reader);
shell_view = e_mail_view_get_shell_view (view);
shell_window = e_shell_view_get_shell_window (shell_view);
- return E_SHELL_WINDOW_ACTION_GROUP_MAIL (shell_window);
+ switch (group) {
+ case E_MAIL_READER_ACTION_GROUP_STANDARD:
+ group_name = "mail";
+ break;
+ default:
+ g_return_val_if_reached (NULL);
+ }
+
+ return e_shell_window_get_action_group (shell_window, group_name);
}
static EAlertSink *
diff --git a/mail/e-mail-reader-utils.c b/mail/e-mail-reader-utils.c
index 18f5df7..51eff2a 100644
--- a/mail/e-mail-reader-utils.c
+++ b/mail/e-mail-reader-utils.c
@@ -86,23 +86,6 @@ mail_reader_is_special_local_folder (const gchar *name)
strcmp (name, "Templates") == 0);
}
-void
-e_mail_reader_activate (EMailReader *reader,
- const gchar *action_name)
-{
- GtkActionGroup *action_group;
- GtkAction *action;
-
- g_return_if_fail (E_IS_MAIL_READER (reader));
- g_return_if_fail (action_name != NULL);
-
- action_group = e_mail_reader_get_action_group (reader);
- action = gtk_action_group_get_action (action_group, action_name);
- g_return_if_fail (action != NULL);
-
- gtk_action_activate (action);
-}
-
gboolean
e_mail_reader_confirm_delete (EMailReader *reader)
{
diff --git a/mail/e-mail-reader-utils.h b/mail/e-mail-reader-utils.h
index 95643e6..da27112 100644
--- a/mail/e-mail-reader-utils.h
+++ b/mail/e-mail-reader-utils.h
@@ -36,8 +36,6 @@ struct _EMailReaderHeader {
guint is_default:1;
};
-void e_mail_reader_activate (EMailReader *reader,
- const gchar *action_name);
gboolean e_mail_reader_confirm_delete (EMailReader *reader);
void e_mail_reader_delete_folder (EMailReader *reader,
CamelFolder *folder);
diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c
index 27096c4..1697db9 100644
--- a/mail/e-mail-reader.c
+++ b/mail/e-mail-reader.c
@@ -2350,17 +2350,21 @@ mail_reader_double_click_cb (EMailReader *reader,
gint col,
GdkEvent *event)
{
+ GtkAction *action;
+
/* Ignore double clicks on columns that handle their own state. */
if (MESSAGE_LIST_COLUMN_IS_ACTIVE (col))
return;
- e_mail_reader_activate (reader, "mail-message-open");
+ action = e_mail_reader_get_action (reader, "mail-message-open");
+ gtk_action_activate (action);
}
static gboolean
mail_reader_key_press_event_cb (EMailReader *reader,
GdkEventKey *event)
{
+ GtkAction *action;
const gchar *action_name;
if ((event->state & GDK_CONTROL_MASK) != 0)
@@ -2426,7 +2430,8 @@ ctrl:
}
exit:
- e_mail_reader_activate (reader, action_name);
+ action = e_mail_reader_get_action (reader, action_name);
+ gtk_action_activate (action);
return TRUE;
}
@@ -3201,7 +3206,8 @@ mail_reader_init_charset_actions (EMailReader *reader)
GtkRadioAction *default_action;
GSList *radio_group;
- action_group = e_mail_reader_get_action_group (reader);
+ action_group = e_mail_reader_get_action_group (
+ reader, E_MAIL_READER_ACTION_GROUP_STANDARD);
radio_group = e_charset_add_radio_actions (
action_group, "mail-charset-", NULL,
@@ -3377,7 +3383,8 @@ e_mail_reader_init (EMailReader *reader,
if (!init_actions)
goto connect_signals;
- action_group = e_mail_reader_get_action_group (reader);
+ action_group = e_mail_reader_get_action_group (
+ reader, E_MAIL_READER_ACTION_GROUP_STANDARD);
/* The "mail-forward" action is special: it uses a GtkMenuToolButton
* for its toolbar item type. So we have to create it separately. */
@@ -3812,14 +3819,21 @@ GtkAction *
e_mail_reader_get_action (EMailReader *reader,
const gchar *action_name)
{
- GtkActionGroup *action_group;
- GtkAction *action;
+ GtkAction *action = NULL;
+ gint ii;
g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL);
g_return_val_if_fail (action_name != NULL, NULL);
- action_group = e_mail_reader_get_action_group (reader);
- action = gtk_action_group_get_action (action_group, action_name);
+ for (ii = 0; ii < E_MAIL_READER_NUM_ACTION_GROUPS; ii++) {
+ GtkActionGroup *group;
+
+ group = e_mail_reader_get_action_group (reader, ii);
+ action = gtk_action_group_get_action (group, action_name);
+
+ if (action != NULL)
+ break;
+ }
if (action == NULL)
g_critical (
@@ -3829,7 +3843,8 @@ e_mail_reader_get_action (EMailReader *reader,
}
GtkActionGroup *
-e_mail_reader_get_action_group (EMailReader *reader)
+e_mail_reader_get_action_group (EMailReader *reader,
+ EMailReaderActionGroup group)
{
EMailReaderInterface *interface;
@@ -3838,7 +3853,7 @@ e_mail_reader_get_action_group (EMailReader *reader)
interface = E_MAIL_READER_GET_INTERFACE (reader);
g_return_val_if_fail (interface->get_action_group != NULL, NULL);
- return interface->get_action_group (reader);
+ return interface->get_action_group (reader, group);
}
EAlertSink *
diff --git a/mail/e-mail-reader.h b/mail/e-mail-reader.h
index 0e87460..ea6732a 100644
--- a/mail/e-mail-reader.h
+++ b/mail/e-mail-reader.h
@@ -60,6 +60,11 @@ G_BEGIN_DECLS
typedef struct _EMailReader EMailReader;
typedef struct _EMailReaderInterface EMailReaderInterface;
+typedef enum {
+ E_MAIL_READER_ACTION_GROUP_STANDARD,
+ E_MAIL_READER_NUM_ACTION_GROUPS
+} EMailReaderActionGroup;
+
enum {
E_MAIL_READER_HAVE_ENABLED_ACCOUNT = 1 << 0,
E_MAIL_READER_SELECTION_SINGLE = 1 << 1,
@@ -85,7 +90,8 @@ struct _EMailReaderInterface {
GTypeInterface parent_interface;
GtkActionGroup *
- (*get_action_group) (EMailReader *reader);
+ (*get_action_group) (EMailReader *reader,
+ EMailReaderActionGroup group);
EAlertSink * (*get_alert_sink) (EMailReader *reader);
EMailBackend * (*get_backend) (EMailReader *reader);
EMFormatHTML * (*get_formatter) (EMailReader *reader);
@@ -121,7 +127,8 @@ void e_mail_reader_update_actions (EMailReader *reader,
GtkAction * e_mail_reader_get_action (EMailReader *reader,
const gchar *action_name);
GtkActionGroup *
- e_mail_reader_get_action_group (EMailReader *reader);
+ e_mail_reader_get_action_group (EMailReader *reader,
+ EMailReaderActionGroup group);
EAlertSink * e_mail_reader_get_alert_sink (EMailReader *reader);
EMailBackend * e_mail_reader_get_backend (EMailReader *reader);
EMFormatHTML * e_mail_reader_get_formatter (EMailReader *reader);
diff --git a/modules/mail/e-mail-shell-content.c b/modules/mail/e-mail-shell-content.c
index 57d1663..30c8422 100644
--- a/modules/mail/e-mail-shell-content.c
+++ b/modules/mail/e-mail-shell-content.c
@@ -248,17 +248,27 @@ mail_shell_content_open_selected_mail (EMailReader *reader)
}
static GtkActionGroup *
-mail_shell_content_get_action_group (EMailReader *reader)
+mail_shell_content_get_action_group (EMailReader *reader,
+ EMailReaderActionGroup group)
{
- EShellContent *shell_content;
- EShellWindow *shell_window;
EShellView *shell_view;
+ EShellWindow *shell_window;
+ EShellContent *shell_content;
+ const gchar *group_name;
shell_content = E_SHELL_CONTENT (reader);
shell_view = e_shell_content_get_shell_view (shell_content);
shell_window = e_shell_view_get_shell_window (shell_view);
- return E_SHELL_WINDOW_ACTION_GROUP_MAIL (shell_window);
+ switch (group) {
+ case E_MAIL_READER_ACTION_GROUP_STANDARD:
+ group_name = "mail";
+ break;
+ default:
+ g_return_val_if_reached (NULL);
+ }
+
+ return e_shell_window_get_action_group (shell_window, group_name);
}
static EAlertSink *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]