Commit 3ec164d1 authored by Milan Crha's avatar Milan Crha

Bug #668482 - Edit account properties from menu on folder store

parent 02cbfd83
......@@ -76,6 +76,7 @@ struct _EMailShellBackendPrivate {
gint mail_sync_in_progress;
guint mail_sync_source_id;
gpointer assistant; /* weak pointer, when adding new mail account */
gpointer editor; /* weak pointer, when editing a mail account */
};
static void mbox_create_preview_cb (GObject *preview, GtkWidget **preview_widget);
......@@ -165,7 +166,6 @@ action_mail_account_new_cb (GtkAction *action,
{
EShell *shell;
EShellBackend *shell_backend;
EMailShellBackend *backend;
g_return_if_fail (shell_window != NULL);
......@@ -173,37 +173,9 @@ action_mail_account_new_cb (GtkAction *action,
shell_backend = e_shell_get_backend_by_name (shell, BACKEND_NAME);
g_return_if_fail (E_IS_MAIL_SHELL_BACKEND (shell_backend));
backend = E_MAIL_SHELL_BACKEND (shell_backend);
if (backend->priv->assistant) {
gtk_window_present (GTK_WINDOW (backend->priv->assistant));
} else {
EMAccountEditor *emae;
GtkWindow *parent = GTK_WINDOW (shell_window);
if (!e_shell_get_express_mode (shell)) {
/** @HookPoint-EMConfig: New Mail Account Assistant
* @Id: org.gnome.evolution.mail.config.accountAssistant
* @Type: E_CONFIG_ASSISTANT
* @Class: org.gnome.evolution.mail.config:1.0
* @Target: EMConfigTargetAccount
*
* The new mail account assistant.
*/
emae = em_account_editor_new (
NULL, EMAE_ASSISTANT, E_MAIL_BACKEND (backend),
"org.gnome.evolution.mail.config.accountAssistant");
e_config_create_window (
E_CONFIG (emae->config), NULL,
_("Evolution Account Assistant"));
backend->priv->assistant = E_CONFIG (emae->config)->window;
} else {
backend->priv->assistant = mail_capplet_shell_new (0, TRUE, FALSE);
}
g_object_add_weak_pointer (G_OBJECT (backend->priv->assistant), &backend->priv->assistant);
gtk_window_set_transient_for (GTK_WINDOW (backend->priv->assistant), parent);
gtk_widget_show (backend->priv->assistant);
}
e_mail_shell_backend_new_account (
E_MAIL_SHELL_BACKEND (shell_backend),
GTK_WINDOW (shell_window));
}
static void
......@@ -640,6 +612,29 @@ mail_shell_backend_empty_trash_policy_decision (EMailBackend *backend)
return empty_trash;
}
static void
mail_shell_backend_dispose (GObject *object)
{
EMailShellBackendPrivate *priv;
priv = E_MAIL_SHELL_BACKEND (object)->priv;
if (priv->assistant != NULL) {
g_object_remove_weak_pointer (
G_OBJECT (priv->assistant), &priv->assistant);
priv->assistant = NULL;
}
if (priv->editor != NULL) {
g_object_remove_weak_pointer (
G_OBJECT (priv->editor), &priv->editor);
priv->editor = NULL;
}
/* Chain up to parent's dispose() method. */
G_OBJECT_CLASS (e_mail_shell_backend_parent_class)->dispose (object);
}
static void
e_mail_shell_backend_class_init (EMailShellBackendClass *class)
{
......@@ -651,6 +646,7 @@ e_mail_shell_backend_class_init (EMailShellBackendClass *class)
object_class = G_OBJECT_CLASS (class);
object_class->constructed = mail_shell_backend_constructed;
object_class->dispose = mail_shell_backend_dispose;
shell_backend_class = E_SHELL_BACKEND_CLASS (class);
shell_backend_class->shell_view_type = E_TYPE_MAIL_SHELL_VIEW;
......@@ -689,6 +685,95 @@ e_mail_shell_backend_type_register (GTypeModule *type_module)
e_mail_shell_backend_register_type (type_module);
}
void
e_mail_shell_backend_new_account (EMailShellBackend *mail_shell_backend,
GtkWindow *parent)
{
EMailShellBackendPrivate *priv;
g_return_if_fail (mail_shell_backend != NULL);
g_return_if_fail (E_IS_MAIL_SHELL_BACKEND (mail_shell_backend));
priv = mail_shell_backend->priv;
if (priv->assistant) {
gtk_window_present (GTK_WINDOW (priv->assistant));
} else {
EMAccountEditor *emae;
EShell *shell;
shell = e_shell_backend_get_shell (E_SHELL_BACKEND (mail_shell_backend));
if (!e_shell_get_express_mode (shell)) {
/** @HookPoint-EMConfig: New Mail Account Assistant
* @Id: org.gnome.evolution.mail.config.accountAssistant
* @Type: E_CONFIG_ASSISTANT
* @Class: org.gnome.evolution.mail.config:1.0
* @Target: EMConfigTargetAccount
*
* The new mail account assistant.
*/
emae = em_account_editor_new (
NULL, EMAE_ASSISTANT, E_MAIL_BACKEND (mail_shell_backend),
"org.gnome.evolution.mail.config.accountAssistant");
e_config_create_window (
E_CONFIG (emae->config), NULL,
_("Evolution Account Assistant"));
priv->assistant = E_CONFIG (emae->config)->window;
g_object_set_data_full (
G_OBJECT (priv->assistant), "AccountEditor",
emae, (GDestroyNotify) g_object_unref);
} else {
priv->assistant = mail_capplet_shell_new (0, TRUE, FALSE);
}
g_object_add_weak_pointer (G_OBJECT (priv->assistant), &priv->assistant);
gtk_window_set_transient_for (GTK_WINDOW (priv->assistant), parent);
gtk_widget_show (priv->assistant);
}
}
void
e_mail_shell_backend_edit_account (EMailShellBackend *mail_shell_backend,
GtkWindow *parent,
EAccount *account)
{
EMailShellBackendPrivate *priv;
EMAccountEditor *emae;
g_return_if_fail (mail_shell_backend != NULL);
g_return_if_fail (E_IS_MAIL_SHELL_BACKEND (mail_shell_backend));
g_return_if_fail (account != NULL);
priv = mail_shell_backend->priv;
if (priv->editor != NULL) {
gtk_window_present (GTK_WINDOW (priv->editor));
return;
}
/** @HookPoint-EMConfig: Mail Account Editor
* @Id: org.gnome.evolution.mail.config.accountEditor
* @Type: E_CONFIG_BOOK
* @Class: org.gnome.evolution.mail.config:1.0
* @Target: EMConfigTargetAccount
*
* The account editor window.
*/
emae = em_account_editor_new (
account, EMAE_NOTEBOOK, E_MAIL_BACKEND (mail_shell_backend),
"org.gnome.evolution.mail.config.accountEditor");
e_config_create_window (
E_CONFIG (emae->config), parent, _("Account Editor"));
priv->editor = E_CONFIG (emae->config)->window;
g_object_set_data_full (
G_OBJECT (priv->editor), "AccountEditor",
emae, (GDestroyNotify) g_object_unref);
g_object_add_weak_pointer (G_OBJECT (priv->editor), &priv->editor);
gtk_widget_show (priv->editor);
}
/******************* Code below here belongs elsewhere. *******************/
#include "filter/e-filter-option.h"
......
......@@ -22,6 +22,7 @@
#ifndef E_MAIL_SHELL_BACKEND_H
#define E_MAIL_SHELL_BACKEND_H
#include <libedataserver/e-account.h>
#include <mail/e-mail-backend.h>
/* Standard GObject macros */
......@@ -58,9 +59,14 @@ struct _EMailShellBackendClass {
EMailBackendClass parent_class;
};
GType e_mail_shell_backend_get_type (void);
void e_mail_shell_backend_type_register
(GTypeModule *type_module);
GType e_mail_shell_backend_get_type (void);
void e_mail_shell_backend_type_register (GTypeModule *type_module);
void e_mail_shell_backend_new_account (EMailShellBackend *mail_shell_backend,
GtkWindow *parent);
void e_mail_shell_backend_edit_account (EMailShellBackend *mail_shell_backend,
GtkWindow *parent,
EAccount *account);
/* XXX Find a better place for this function. */
GSList * e_mail_labels_get_filter_options (void);
......
......@@ -113,6 +113,37 @@ action_mail_account_disable_cb (GtkAction *action,
e_shell_view_update_actions (shell_view);
}
static void
action_mail_account_properties_cb (GtkAction *action,
EMailShellView *mail_shell_view)
{
EMailShellSidebar *mail_shell_sidebar;
EShellView *shell_view;
EShellWindow *shell_window;
EShellBackend *shell_backend;
EMFolderTree *folder_tree;
CamelService *service;
CamelStore *store;
const gchar *uid;
mail_shell_sidebar = mail_shell_view->priv->mail_shell_sidebar;
shell_view = E_SHELL_VIEW (mail_shell_view);
shell_backend = e_shell_view_get_shell_backend (shell_view);
shell_window = e_shell_view_get_shell_window (shell_view);
folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar);
store = em_folder_tree_get_selected_store (folder_tree);
g_return_if_fail (store != NULL);
service = CAMEL_SERVICE (store);
uid = camel_service_get_uid (service);
e_mail_shell_backend_edit_account (E_MAIL_SHELL_BACKEND (shell_backend),
GTK_WINDOW (shell_window),
e_get_account_by_uid (uid));
}
static void
action_mail_create_search_folder_cb (GtkAction *action,
EMailShellView *mail_shell_view)
......@@ -1158,6 +1189,13 @@ static GtkActionEntry mail_entries[] = {
N_("Permanently remove all the deleted messages from all folders"),
G_CALLBACK (action_mail_folder_expunge_cb) },
{ "mail-account-properties",
GTK_STOCK_PROPERTIES,
N_("_Properties"),
NULL,
N_("Edit properties of this account"),
G_CALLBACK (action_mail_account_properties_cb) },
{ "mail-download",
NULL,
N_("_Download Messages for Offline Usage"),
......@@ -1421,6 +1459,10 @@ static EPopupActionEntry mail_popup_entries[] = {
NULL,
"mail-account-expunge" },
{ "mail-popup-account-properties",
NULL,
"mail-account-properties" },
{ "mail-popup-flush-outbox",
NULL,
"mail-flush-outbox" },
......
......@@ -29,6 +29,8 @@
E_SHELL_WINDOW_ACTION ((window), "mail-account-disable")
#define E_SHELL_WINDOW_ACTION_MAIL_ACCOUNT_EXPUNGE(window) \
E_SHELL_WINDOW_ACTION ((window), "mail-account-expunge")
#define E_SHELL_WINDOW_ACTION_MAIL_ACCOUNT_PROPERTIES(window) \
E_SHELL_WINDOW_ACTION ((window), "mail-account-properties")
#define E_SHELL_WINDOW_ACTION_MAIL_ADD_SENDER(window) \
E_SHELL_WINDOW_ACTION ((window), "mail-add-sender")
#define E_SHELL_WINDOW_ACTION_MAIL_CARET_MODE(window) \
......
......@@ -952,6 +952,10 @@ mail_shell_view_update_actions (EShellView *shell_view)
sensitive = folder_is_trash;
gtk_action_set_sensitive (action, sensitive);
action = ACTION (MAIL_ACCOUNT_PROPERTIES);
sensitive = account != NULL;
gtk_action_set_sensitive (action, sensitive);
action = ACTION (MAIL_FLUSH_OUTBOX);
sensitive = folder_is_outbox;
gtk_action_set_sensitive (action, sensitive);
......
......@@ -30,6 +30,7 @@
#endif
#include "em-account-prefs.h"
#include "e-mail-shell-backend.h"
#include <glib/gi18n.h>
......@@ -54,8 +55,6 @@
struct _EMAccountPrefsPrivate {
EMailBackend *backend;
gpointer assistant; /* weak pointer */
gpointer editor; /* weak pointer */
};
enum {
......@@ -142,18 +141,6 @@ account_prefs_dispose (GObject *object)
priv->backend = NULL;
}
if (priv->assistant != NULL) {
g_object_remove_weak_pointer (
G_OBJECT (priv->assistant), &priv->assistant);
priv->assistant = NULL;
}
if (priv->editor != NULL) {
g_object_remove_weak_pointer (
G_OBJECT (priv->editor), &priv->editor);
priv->editor = NULL;
}
/* Chain up to parent's dispose() method. */
G_OBJECT_CLASS (em_account_prefs_parent_class)->dispose (object);
}
......@@ -179,45 +166,14 @@ static void
account_prefs_add_account (EMailAccountManager *manager)
{
EMAccountPrefsPrivate *priv;
EMAccountEditor *emae;
gpointer parent;
priv = EM_ACCOUNT_PREFS_GET_PRIVATE (manager);
if (priv->assistant != NULL) {
gtk_window_present (GTK_WINDOW (priv->assistant));
return;
}
parent = gtk_widget_get_toplevel (GTK_WIDGET (manager));
parent = gtk_widget_is_toplevel (parent) ? parent : NULL;
if (!e_shell_get_express_mode (e_shell_get_default ())) {
/** @HookPoint-EMConfig: New Mail Account Assistant
* @Id: org.gnome.evolution.mail.config.accountAssistant
* @Type: E_CONFIG_ASSISTANT
* @Class: org.gnome.evolution.mail.config:1.0
* @Target: EMConfigTargetAccount
*
* The new mail account assistant.
*/
emae = em_account_editor_new (
NULL, EMAE_ASSISTANT, priv->backend,
"org.gnome.evolution.mail.config.accountAssistant");
e_config_create_window (
E_CONFIG (emae->config), NULL,
_("Evolution Account Assistant"));
priv->assistant = E_CONFIG (emae->config)->window;
g_object_set_data_full (
G_OBJECT (priv->assistant), "AccountEditor",
emae, (GDestroyNotify) g_object_unref);
} else {
priv->assistant = mail_capplet_shell_new (0, TRUE, FALSE);
}
g_object_add_weak_pointer (G_OBJECT (priv->assistant), &priv->assistant);
gtk_window_set_transient_for (GTK_WINDOW (priv->assistant), parent);
gtk_widget_show (priv->assistant);
e_mail_shell_backend_new_account (E_MAIL_SHELL_BACKEND (priv->backend), parent);
}
static void
......@@ -225,39 +181,14 @@ account_prefs_edit_account (EMailAccountManager *manager,
EAccount *account)
{
EMAccountPrefsPrivate *priv;
EMAccountEditor *emae;
gpointer parent;
priv = EM_ACCOUNT_PREFS_GET_PRIVATE (manager);
if (priv->editor != NULL) {
gtk_window_present (GTK_WINDOW (priv->editor));
return;
}
parent = gtk_widget_get_toplevel (GTK_WIDGET (manager));
parent = gtk_widget_is_toplevel (parent) ? parent : NULL;
/** @HookPoint-EMConfig: Mail Account Editor
* @Id: org.gnome.evolution.mail.config.accountEditor
* @Type: E_CONFIG_BOOK
* @Class: org.gnome.evolution.mail.config:1.0
* @Target: EMConfigTargetAccount
*
* The account editor window.
*/
emae = em_account_editor_new (
account, EMAE_NOTEBOOK, priv->backend,
"org.gnome.evolution.mail.config.accountEditor");
e_config_create_window (
E_CONFIG (emae->config), parent, _("Account Editor"));
priv->editor = E_CONFIG (emae->config)->window;
g_object_set_data_full (
G_OBJECT (priv->editor), "AccountEditor",
emae, (GDestroyNotify) g_object_unref);
g_object_add_weak_pointer (G_OBJECT (priv->editor), &priv->editor);
gtk_widget_show (priv->editor);
e_mail_shell_backend_edit_account (E_MAIL_SHELL_BACKEND (priv->backend), parent, account);
}
static void
......
......@@ -99,6 +99,7 @@
<separator/>
<menuitem action='mail-popup-folder-unsubscribe'/>
<separator/>
<menuitem action='mail-popup-account-properties'/>
<menuitem action='mail-popup-folder-properties'/>
</popup>
<popup name='mail-message-popup'>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment