Define a new interface called EMailReader, which implements operations

common to both the main shell window and the message browser.  Replaces
EMFolderView.  Also begin to define EMailBrowser (GtkWindow subclass),
which implements EMailReader and replaces EMMessageBrowser.

svn path=/branches/kill-bonobo/; revision=36933
This commit is contained in:
Matthew Barnes
2008-12-27 15:14:29 +00:00
parent 780c042e12
commit 8e2b445e9d
23 changed files with 2735 additions and 2646 deletions

View File

@ -52,6 +52,11 @@ EShellView
</para>
<!-- ##### ARG EShellView:shell-module ##### -->
<para>
</para>
<!-- ##### ARG EShellView:shell-sidebar ##### -->
<para>

View File

@ -38,6 +38,11 @@ EShellWindow
</para>
<!-- ##### ARG EShellWindow:ui-manager ##### -->
<para>
</para>
<!-- ##### FUNCTION e_shell_window_new ##### -->
<para>

View File

@ -344,29 +344,29 @@ e_file_dialog_save_folder (const char *title)
* no signals connected and is not shown.
**/
GtkWidget *
e_file_get_save_filesel (GtkWidget *parent, const char *title, const char *name, GtkFileChooserAction action)
e_file_get_save_filesel (GtkWindow *parent, const char *title, const char *name, GtkFileChooserAction action)
{
GtkWidget *filesel;
char *uri;
filesel = gtk_file_chooser_dialog_new (title,
NULL,
action,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
(action == GTK_FILE_CHOOSER_ACTION_OPEN) ? GTK_STOCK_OPEN:GTK_STOCK_SAVE, GTK_RESPONSE_OK,
NULL);
g_return_val_if_fail (GTK_IS_WINDOW (parent), NULL);
filesel = gtk_file_chooser_dialog_new (
title, parent, action,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
(action == GTK_FILE_CHOOSER_ACTION_OPEN) ?
GTK_STOCK_OPEN : GTK_STOCK_SAVE, GTK_RESPONSE_OK, NULL);
gtk_dialog_set_default_response (GTK_DIALOG (filesel), GTK_RESPONSE_OK);
gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (filesel), FALSE);
if (parent)
e_dialog_set_transient_for((GtkWindow *)filesel, parent);
uri = e_file_get_save_path ();
uri = e_file_get_save_path();
gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (filesel), uri);
gtk_file_chooser_set_current_folder_uri (
GTK_FILE_CHOOSER (filesel), uri);
if (name && name[0])
gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (filesel), name);
gtk_file_chooser_set_current_name (
GTK_FILE_CHOOSER (filesel), name);
g_free (uri);

View File

@ -43,7 +43,7 @@ char *e_file_dialog_save (const char *title, const char *fname)
char *e_file_dialog_save_folder (const char *title);
GtkWidget * e_file_get_save_filesel (GtkWidget *parent, const char *title, const char *name, GtkFileChooserAction action);
GtkWidget * e_file_get_save_filesel (GtkWindow *parent, const char *title, const char *name, GtkFileChooserAction action);
gboolean e_file_can_save(GtkWindow *parent, const char *uri);
gboolean e_file_check_local(const char *name);

View File

@ -35,6 +35,12 @@ module_LTLIBRARIES = \
libevolution-module-mail.la
libevolution_module_mail_la_SOURCES = \
e-mail-browser.c \
e-mail-browser.h \
e-mail-reader.c \
e-mail-reader.h \
e-mail-reader-utils.c \
e-mail-reader-utils.h \
e-mail-shell-module.c \
e-mail-shell-module.h \
e-mail-shell-module-migrate.c \

291
mail/e-mail-browser.c Normal file
View File

@ -0,0 +1,291 @@
/*
* e-mail-browser.c
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with the program; if not, see <http://www.gnu.org/licenses/>
*
*
* Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
*
*/
#include "e-mail-browser.h"
#include <glib/gi18n.h>
#include <camel/camel-folder.h>
#include "mail/e-mail-reader.h"
#include "mail/e-mail-shell-module.h"
#include "mail/em-folder-tree-model.h"
#include "mail/em-format-html-display.h"
#include "mail/message-list.h"
#define E_MAIL_BROWSER_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE \
((obj), E_TYPE_MAIL_BROWSER, EMailBrowserPrivate))
struct _EMailBrowserPrivate {
GtkUIManager *ui_manager;
EShellModule *shell_module;
GtkActionGroup *action_group;
};
enum {
PROP_0,
PROP_SHELL_MODULE,
PROP_UI_MANAGER
};
static gpointer parent_class;
static void
mail_browser_set_shell_module (EMailBrowser *browser,
EShellModule *shell_module)
{
g_return_if_fail (browser->priv->shell_module == NULL);
browser->priv->shell_module = g_object_ref (shell_module);
}
static void
mail_browser_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
switch (property_id) {
case PROP_SHELL_MODULE:
mail_browser_set_shell_module (
E_MAIL_BROWSER (object),
g_value_get_object (value));
return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
static void
mail_browser_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
{
switch (property_id) {
case PROP_SHELL_MODULE:
g_value_set_object (
value, e_mail_browser_get_shell_module (
E_MAIL_BROWSER (object)));
return;
case PROP_UI_MANAGER:
g_value_set_object (
value, e_mail_browser_get_ui_manager (
E_MAIL_BROWSER (object)));
return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
static void
mail_browser_dispose (GObject *object)
{
EMailBrowserPrivate *priv;
priv = E_MAIL_BROWSER_GET_PRIVATE (object);
if (priv->ui_manager != NULL) {
g_object_unref (priv->ui_manager);
priv->ui_manager = NULL;
}
if (priv->shell_module != NULL) {
g_object_unref (priv->shell_module);
priv->shell_module = NULL;
}
if (priv->action_group != NULL) {
g_object_unref (priv->action_group);
priv->action_group = NULL;
}
/* Chain up to parent's dispose() method. */
G_OBJECT_CLASS (parent_class)->dispose (object);
}
static void
mail_browser_constructed (GObject *object)
{
}
static GtkActionGroup *
mail_browser_get_action_group (EMailReader *reader)
{
EMailBrowserPrivate *priv;
priv = E_MAIL_BROWSER_GET_PRIVATE (reader);
return priv->action_group;
}
static EMFormatHTMLDisplay *
mail_browser_get_display (EMailReader *reader)
{
}
static CamelFolder *
mail_browser_get_folder (EMailReader *reader)
{
}
static const gchar *
mail_browser_get_folder_uri (EMailReader *reader)
{
}
static gboolean
mail_browser_get_hide_deleted (EMailReader *reader)
{
}
static MessageList *
mail_browser_get_message_list (EMailReader *reader)
{
}
static EMFolderTreeModel *
mail_browser_get_tree_model (EMailReader *reader)
{
EMailBrowserPrivate *priv;
EShellModule *shell_module;
priv = E_MAIL_BROWSER_GET_PRIVATE (reader);
shell_module = priv->shell_module;
return e_mail_shell_module_get_folder_tree_model (shell_module);
}
static GtkWindow *
mail_browser_get_window (EMailReader *reader)
{
return GTK_WINDOW (reader);
}
static void
mail_browser_class_init (EMailBrowserClass *class)
{
GObjectClass *object_class;
parent_class = g_type_class_peek_parent (class);
g_type_class_add_private (class, sizeof (EMailBrowserPrivate));
object_class = G_OBJECT_CLASS (class);
object_class->set_property = mail_browser_set_property;
object_class->get_property = mail_browser_get_property;
object_class->dispose = mail_browser_dispose;
object_class->constructed = mail_browser_constructed;
g_object_class_install_property (
object_class,
PROP_SHELL_MODULE,
g_param_spec_object (
"shell-module",
_("Shell Module"),
_("The mail shell module"),
E_TYPE_SHELL_MODULE,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
}
static void
mail_browser_iface_init (EMailReaderIface *iface)
{
iface->get_action_group = mail_browser_get_action_group;
iface->get_display = mail_browser_get_display;
iface->get_folder = mail_browser_get_folder;
iface->get_folder_uri = mail_browser_get_folder_uri;
iface->get_hide_deleted = mail_browser_get_hide_deleted;
iface->get_message_list = mail_browser_get_message_list;
iface->get_tree_model = mail_browser_get_tree_model;
iface->get_window = mail_browser_get_window;
}
static void
mail_browser_init (EMailBrowser *browser)
{
browser->priv = E_MAIL_BROWSER_GET_PRIVATE (browser);
browser->priv->ui_manager = gtk_ui_manager_new ();
browser->priv->action_group = gtk_action_group_new ("mail-browser");
}
GType
e_mail_browser_get_type (void)
{
static GType type = 0;
if (G_UNLIKELY (type == 0)) {
static const GTypeInfo type_info = {
sizeof (EMailBrowserClass),
(GBaseInitFunc) NULL,
(GBaseFinalizeFunc) NULL,
(GClassInitFunc) mail_browser_class_init,
(GClassFinalizeFunc) NULL,
NULL, /* class_data */
sizeof (EMailBrowser),
0, /* n_preallocs */
(GInstanceInitFunc) mail_browser_init,
NULL /* value_table */
};
static const GInterfaceInfo iface_info = {
(GInterfaceInitFunc) mail_browser_iface_init,
(GInterfaceFinalizeFunc) NULL,
NULL /* interface_data */
};
type = g_type_register_static (
GTK_TYPE_WINDOW, "EMailBrowser", &type_info, 0);
g_type_add_interface_static (
type, E_TYPE_MAIL_BROWSER, &iface_info);
}
return type;
}
GtkWidget *
e_mail_browser_new (EShellModule *shell_module)
{
g_return_val_if_fail (E_IS_SHELL_MODULE (shell_module), NULL);
return g_object_new (
E_TYPE_MAIL_BROWSER,
"shell-module", shell_module, NULL);
}
EShellModule *
e_mail_browser_get_shell_module (EMailBrowser *browser)
{
g_return_val_if_fail (E_IS_MAIL_BROWSER (browser), NULL);
return browser->priv->shell_module;
}
GtkUIManager *
e_mail_browser_get_ui_manager (EMailBrowser *browser)
{
g_return_val_if_fail (E_IS_MAIL_BROWSER (browser), NULL);
return browser->priv->ui_manager;
}

69
mail/e-mail-browser.h Normal file
View File

@ -0,0 +1,69 @@
/*
* e-mail-browser.h
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with the program; if not, see <http://www.gnu.org/licenses/>
*
*
* Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
*
*/
#ifndef E_MAIL_BROWSER_H
#define E_MAIL_BROWSER_H
#include <gtk/gtk.h>
#include <shell/e-shell-module.h>
/* Standard GObject macros */
#define E_TYPE_MAIL_BROWSER \
(e_mail_browser_get_type ())
#define E_MAIL_BROWSER(obj) \
(G_TYPE_CHECK_INSTANCE_CAST \
((obj), E_TYPE_MAIL_BROWSER, EMailBrowser))
#define E_MAIL_BROWSER_CLASS(cls) \
(G_TYPE_CHECK_CLASS_CAST \
((cls), E_TYPE_MAIL_BROWSER, EMailBrowserClass))
#define E_IS_MAIL_BROWSER(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE \
((obj), E_TYPE_MAIL_BROWSER))
#define E_IS_MAIL_BROWSER_CLASS(cls) \
(G_TYPE_CHECK_CLASS_CAST \
((cls), E_TYPE_MAIL_BROWSER))
#define E_MAIL_BROWSER_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS \
((obj), E_TYPE_MAIL_BROWSER, EMailBrowserClass))
G_BEGIN_DECLS
typedef struct _EMailBrowser EMailBrowser;
typedef struct _EMailBrowserClass EMailBrowserClass;
typedef struct _EMailBrowserPrivate EMailBrowserPrivate;
struct _EMailBrowser {
GtkWindow parent;
EMailBrowserPrivate *priv;
};
struct _EMailBrowserClass {
GtkWindowClass parent_class;
};
GType e_mail_browser_get_type (void);
GtkWidget * e_mail_browser_new (EShellModule *shell_module);
EShellModule * e_mail_browser_get_shell_module (EMailBrowser *browser);
GtkUIManager * e_mail_browser_get_ui_manager (EMailBrowser *browser);
G_END_DECLS
#endif /* E_MAIL_BROWSER_H */

1653
mail/e-mail-reader.c Normal file

File diff suppressed because it is too large Load Diff

85
mail/e-mail-reader.h Normal file
View File

@ -0,0 +1,85 @@
/*
* e-mail-reader.h
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with the program; if not, see <http://www.gnu.org/licenses/>
*
*
* Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
*
*/
#ifndef E_MAIL_READER_H
#define E_MAIL_READER_H
#include <gtk/gtk.h>
#include <camel/camel-folder.h>
#include <mail/em-folder-tree-model.h>
#include <mail/em-format-html-display.h>
#include <mail/message-list.h>
#include <shell/e-shell-settings.h>
/* Standard GObject macros */
#define E_TYPE_MAIL_READER \
(e_mail_reader_get_type ())
#define E_MAIL_READER(obj) \
(G_TYPE_CHECK_INSTANCE_CAST \
((obj), E_TYPE_MAIL_READER, EMailReader))
#define E_IS_MAIL_READER(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE \
((obj), E_TYPE_MAIL_READER))
#define E_MAIL_READER_GET_IFACE(obj) \
(G_TYPE_INSTANCE_GET_INTERFACE \
((obj), E_TYPE_MAIL_READER, EMailReaderIface))
G_BEGIN_DECLS
typedef struct _EMailReader EMailReader;
typedef struct _EMailReaderIface EMailReaderIface;
struct _EMailReaderIface {
GTypeInterface parent_iface;
/* XXX This is getting kinda bloated. Try to reduce. */
GtkActionGroup *
(*get_action_group) (EMailReader *reader);
EMFormatHTMLDisplay *
(*get_display) (EMailReader *reader);
CamelFolder * (*get_folder) (EMailReader *reader);
const gchar * (*get_folder_uri) (EMailReader *reader);
gboolean (*get_hide_deleted) (EMailReader *reader);
MessageList * (*get_message_list) (EMailReader *reader);
EShellSettings *(*get_shell_settings) (EMailReader *reader);
EMFolderTreeModel *
(*get_tree_model) (EMailReader *reader);
GtkWindow * (*get_window) (EMailReader *reader);
};
GType e_mail_reader_get_type (void);
void e_mail_reader_init (EMailReader *reader);
GtkActionGroup *
e_mail_reader_get_action_group (EMailReader *reader);
EMFormatHTMLDisplay *
e_mail_reader_get_display (EMailReader *reader);
CamelFolder * e_mail_reader_get_folder (EMailReader *reader);
const gchar * e_mail_reader_get_folder_uri (EMailReader *reader);
gboolean e_mail_reader_get_hide_deleted (EMailReader *reader);
MessageList * e_mail_reader_get_message_list (EMailReader *reader);
EShellSettings *e_mail_reader_get_shell_settings(EMailReader *reader);
EMFolderTreeModel *
e_mail_reader_get_tree_model (EMailReader *reader);
GtkWindow * e_mail_reader_get_window (EMailReader *reader);
G_END_DECLS
#endif /* E_MAIL_READER_H */

View File

@ -34,6 +34,9 @@
#include "em-utils.h"
#include "mail-config.h"
#include "e-mail-reader.h"
#include "e-mail-shell-module.h"
#define E_MAIL_SHELL_CONTENT_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE \
((obj), E_TYPE_MAIL_SHELL_CONTENT, EMailShellContentPrivate))
@ -359,6 +362,101 @@ mail_shell_content_check_state (EShellContent *shell_content)
return state;
}
static GtkActionGroup *
mail_shell_content_get_action_group (EMailReader *reader)
{
EShellContent *shell_content;
EShellWindow *shell_window;
EShellView *shell_view;
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_get_action_group (shell_window, "mail");
}
static EMFormatHTMLDisplay *
mail_shell_content_get_display (EMailReader *reader)
{
EMailShellContent *mail_shell_content;
mail_shell_content = E_MAIL_SHELL_CONTENT (reader);
return e_mail_shell_content_get_preview_format (mail_shell_content);
}
static CamelFolder *
mail_shell_content_get_folder (EMailReader *reader)
{
EMailShellContent *mail_shell_content;
EMFolderView *folder_view;
mail_shell_content = E_MAIL_SHELL_CONTENT (reader);
folder_view = e_mail_shell_content_get_folder_view (mail_shell_content);
return folder_view->folder;
}
static const gchar *
mail_shell_content_get_folder_uri (EMailReader *reader)
{
EMailShellContent *mail_shell_content;
EMFolderView *folder_view;
mail_shell_content = E_MAIL_SHELL_CONTENT (reader);
folder_view = e_mail_shell_content_get_folder_view (mail_shell_content);
return folder_view->folder_uri;
}
static gboolean
mail_shell_content_get_hide_deleted (EMailReader *reader)
{
/* FIXME */
return TRUE;
}
static MessageList *
mail_shell_content_get_message_list (EMailReader *reader)
{
EMailShellContent *mail_shell_content;
EMFolderView *folder_view;
mail_shell_content = E_MAIL_SHELL_CONTENT (reader);
folder_view = e_mail_shell_content_get_folder_view (mail_shell_content);
return folder_view->list;
}
static EMFolderTreeModel *
mail_shell_content_get_tree_model (EMailReader *reader)
{
EShellContent *shell_content;
EShellModule *shell_module;
EShellView *shell_view;
shell_content = E_SHELL_CONTENT (reader);
shell_view = e_shell_content_get_shell_view (shell_content);
shell_module = e_shell_view_get_shell_module (shell_view);
return e_mail_shell_module_get_folder_tree_model (shell_module);
}
static GtkWindow *
mail_shell_content_get_window (EMailReader *reader)
{
EShellContent *shell_content;
EShellWindow *shell_window;
EShellView *shell_view;
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 GTK_WINDOW (shell_window);
}
static void
mail_shell_content_class_init (EMailShellContentClass *class)
{
@ -400,6 +498,19 @@ mail_shell_content_class_init (EMailShellContentClass *class)
G_PARAM_READWRITE));
}
static void
mail_shell_content_iface_init (EMailReaderIface *iface)
{
iface->get_action_group = mail_shell_content_get_action_group;
iface->get_display = mail_shell_content_get_display;
iface->get_folder = mail_shell_content_get_folder;
iface->get_folder_uri = mail_shell_content_get_folder_uri;
iface->get_hide_deleted = mail_shell_content_get_hide_deleted;
iface->get_message_list = mail_shell_content_get_message_list;
iface->get_tree_model = mail_shell_content_get_tree_model;
iface->get_window = mail_shell_content_get_window;
}
static void
mail_shell_content_init (EMailShellContent *mail_shell_content)
{
@ -430,9 +541,18 @@ e_mail_shell_content_get_type (void)
NULL /* value_table */
};
static const GInterfaceInfo iface_info = {
(GInterfaceInitFunc) mail_shell_content_iface_init,
(GInterfaceFinalizeFunc) NULL,
NULL /* interface_data */
};
type = g_type_register_static (
E_TYPE_SHELL_CONTENT, "EMailShellContent",
&type_info, 0);
g_type_add_interface_static (
type, E_TYPE_MAIL_READER, &iface_info);
}
return type;

View File

@ -243,6 +243,18 @@ e_mail_shell_module_init_settings (EShell *shell)
shell_settings, "mail-only-local-photos",
"/apps/evolution/mail/display/photo_local");
e_shell_settings_install_property (
g_param_spec_boolean (
"mail-prompt-delete-in-vfolder",
NULL,
NULL,
FALSE,
G_PARAM_READWRITE));
e_shell_settings_bind_to_gconf (
shell_settings, "mail-prompt-delete-in-vfolder",
"/apps/evolution/mail/prompts/delete_in_vfolder");
e_shell_settings_install_property (
g_param_spec_boolean (
"mail-show-animated-images",

View File

@ -38,9 +38,11 @@
#include "em-account-prefs.h"
#include "em-composer-prefs.h"
#include "em-composer-utils.h"
#include "em-config.h"
#include "em-event.h"
#include "em-folder-tree-model.h"
#include "em-folder-utils.h"
#include "em-format-hook.h"
#include "em-format-html-display.h"
#include "em-junk-hook.h"
@ -399,14 +401,58 @@ static void
action_mail_folder_new_cb (GtkAction *action,
EShellWindow *shell_window)
{
/* FIXME */
EMFolderTree *folder_tree = NULL;
EMailShellSidebar *mail_shell_sidebar;
EShellSidebar *shell_sidebar;
EShellView *shell_view;
const gchar *view_name;
/* Take care not to unnecessarily load the mail shell view. */
view_name = e_shell_window_get_active_view (shell_window);
if (g_strcmp0 (view_name, MODULE_NAME) != 0)
goto exit;
shell_view = e_shell_window_get_shell_view (shell_window, view_name);
shell_sidebar = e_shell_view_get_shell_sidebar (shell_view);
mail_shell_sidebar = E_MAIL_SHELL_SIDEBAR (shell_sidebar);
folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar);
exit:
em_folder_utils_create_folder (NULL, folder_tree);
}
static void
action_mail_message_new_cb (GtkAction *action,
EShellWindow *shell_window)
{
/* FIXME */
GtkWindow *window = GTK_WINDOW (shell_window);
EMailShellSidebar *mail_shell_sidebar;
EShellSidebar *shell_sidebar;
EShellView *shell_view;
EMFolderTree *folder_tree;
const gchar *view_name;
gchar *uri = NULL;
if (!em_utils_check_user_can_send_mail (window))
return;
/* Take care not to unnecessarily load the mail shell view. */
view_name = e_shell_window_get_active_view (shell_window);
if (g_strcmp0 (view_name, MODULE_NAME) != 0)
goto exit;
shell_view = e_shell_window_get_shell_view (shell_window, view_name);
shell_sidebar = e_shell_view_get_shell_sidebar (shell_view);
mail_shell_sidebar = E_MAIL_SHELL_SIDEBAR (shell_sidebar);
folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar);
uri = em_folder_tree_get_selected_uri (folder_tree);
exit:
em_utils_compose_new_message (uri);
g_free (uri);
}
static GtkActionEntry item_entries[] = {
@ -842,11 +888,65 @@ fail:
return NULL;
}
/* Helper for e_mail_shell_module_remove_store() */
static void
mail_shell_module_remove_store_cb (CamelStore *store,
gpointer event_data,
gpointer user_data)
{
camel_service_disconnect (CAMEL_SERVICE (store), TRUE, NULL);
camel_object_unref (store);
}
void
e_mail_shell_module_remove_store (EShellModule *shell_module,
CamelStore *store)
{
g_return_if_fail (E_IS_SHELL_MODULE (shell_module));
g_return_if_fail (CAMEL_IS_STORE (store));
/* Because the store hash holds a reference to each store used
* as a key in it, none of them will ever be gc'ed, meaning any
* call to camel_session_get_{service,store} with the same URL
* will always return the same object. So this works. */
if (g_hash_table_lookup (store_hash, store) == NULL)
return;
camel_object_ref (store);
g_hash_table_remove (store_hash, store);
mail_note_store_remove (store);
em_folder_tree_model_remove_store (folder_tree_model, store);
mail_async_event_emit (
async_event, MAIL_ASYNC_THREAD,
(MailAsyncFunc) mail_shell_module_remove_store_cb,
store, NULL, NULL);
}
void
e_mail_shell_module_remove_store_by_uri (EShellModule *shell_module,
const gchar *uri)
{
/* FIXME */
CamelStore *store;
CamelProvider *provider;
g_return_if_fail (E_IS_SHELL_MODULE (shell_module));
g_return_if_fail (uri != NULL);
provider = camel_provider_get (uri, NULL);
if (provider == NULL)
return;
if (!(provider->flags & CAMEL_PROVIDER_IS_STORAGE))
return;
store = (CamelStore *) camel_session_get_service (
session, uri, CAMEL_PROVIDER_STORE, NULL);
if (store != NULL) {
e_mail_shell_module_remove_store (shell_module, store);
camel_object_unref (store);
}
}
void

View File

@ -66,6 +66,8 @@ CamelStore * e_mail_shell_module_load_store_by_uri
(EShellModule *shell_module,
const gchar *uri,
const gchar *name);
void e_mail_shell_module_remove_store(EShellModule *shell_module,
CamelStore *store);
void e_mail_shell_module_remove_store_by_uri
(EShellModule *shell_module,
const gchar *uri);

File diff suppressed because it is too large Load Diff

View File

@ -125,6 +125,8 @@ e_mail_shell_view_private_init (EMailShellView *mail_shell_view,
{
EMailShellViewPrivate *priv = mail_shell_view->priv;
/* Note: EMailShellContent retrieves the "mail" action group
* by name to satisfy its EMailReader interface. */
priv->mail_actions = gtk_action_group_new ("mail");
priv->filter_actions = gtk_action_group_new ("mail-filter");
@ -186,6 +188,7 @@ e_mail_shell_view_private_constructed (EMailShellView *mail_shell_view)
mail_shell_view);
e_mail_shell_view_actions_init (mail_shell_view);
e_mail_reader_init (E_MAIL_READER (mail_shell_content));
/* Restore the previously selected folder. */
folder_tree_model = em_folder_tree_get_model (folder_tree);

View File

@ -31,6 +31,7 @@
#include "e-util/gconf-bridge.h"
#include "widgets/menus/gal-view-instance.h"
#include "e-mail-reader.h"
#include "em-composer-utils.h"
#include "em-folder-properties.h"
#include "em-folder-selector.h"

File diff suppressed because it is too large Load Diff

View File

@ -96,7 +96,7 @@ emmb_set_message (EMFolderView *emfv,
folder_view_class = EM_FOLDER_VIEW_CLASS (parent_class);
folder_view_class->set_message (emfv, uid, nomarkseen);
f (uid == NULL) {
if (uid == NULL) {
gtk_widget_destroy (GTK_WIDGET (emfv));
return;
}

View File

@ -193,13 +193,14 @@ druid_destroy_cb (gpointer user_data, GObject *deadbeef)
* otherwise.
**/
gboolean
em_utils_configure_account (GtkWidget *parent)
em_utils_configure_account (GtkWindow *parent)
{
EMAccountEditor *emae;
g_return_val_if_fail (GTK_IS_WINDOW (parent), FALSE);
emae = em_account_editor_new(NULL, EMAE_DRUID, "org.gnome.evolution.mail.config.accountDruid");
if (parent != NULL)
e_dialog_set_transient_for((GtkWindow *)emae->editor, parent);
gtk_window_set_transient_for (GTK_WINDOW (emae->editor), parent);
g_object_weak_ref((GObject *)emae->editor, (GWeakNotify) druid_destroy_cb, NULL);
gtk_widget_show(emae->editor);
@ -223,10 +224,12 @@ em_utils_configure_account (GtkWidget *parent)
* or %FALSE otherwise.
**/
gboolean
em_utils_check_user_can_send_mail (GtkWidget *parent)
em_utils_check_user_can_send_mail (GtkWindow *parent)
{
EAccount *account;
g_return_val_if_fail (GTK_IS_WINDOW (parent), FALSE);
if (!mail_config_is_configured ()) {
if (!em_utils_configure_account (parent))
return FALSE;
@ -387,12 +390,14 @@ emu_save_get_filename_for_part (CamelMimePart *part)
* Saves a mime part to disk (prompting the user for filename).
**/
void
em_utils_save_part (GtkWidget *parent, const char *prompt, CamelMimePart *part)
em_utils_save_part (GtkWindow *parent, const char *prompt, CamelMimePart *part)
{
GtkWidget *file_chooser;
const gchar *utf8_filename;
gchar *uri = NULL, *filename;
g_return_if_fail (GTK_IS_WINDOW (parent));
utf8_filename = emu_save_get_filename_for_part (part);
filename = g_filename_from_utf8 (utf8_filename, -1, NULL, NULL, NULL);
em_filename_make_safe (filename);
@ -502,7 +507,7 @@ get_unique_file_names (GSList *parts)
}
void
em_utils_save_parts (GtkWidget *parent, const gchar *prompt, GSList *parts)
em_utils_save_parts (GtkWindow *parent, const gchar *prompt, GSList *parts)
{
GtkWidget *file_chooser;
gchar *path_uri;
@ -558,7 +563,7 @@ exit:
* Returns %TRUE if saving succeeded, %FALSE otherwise
**/
gboolean
em_utils_save_part_to_file(GtkWidget *parent, const char *filename, CamelMimePart *part)
em_utils_save_part_to_file(GtkWindow *parent, const char *filename, CamelMimePart *part)
{
int done;
char *dirname;
@ -569,7 +574,7 @@ em_utils_save_part_to_file(GtkWidget *parent, const char *filename, CamelMimePar
dirname = g_path_get_dirname(filename);
if (g_mkdir_with_parents(dirname, 0777) == -1) {
GtkWidget *w = e_error_new((GtkWindow *)parent, "mail:no-create-path", filename, g_strerror(errno), NULL);
GtkWidget *w = e_error_new(parent, "mail:no-create-path", filename, g_strerror(errno), NULL);
g_free(dirname);
em_utils_show_error_silent (w);
return FALSE;
@ -578,13 +583,13 @@ em_utils_save_part_to_file(GtkWidget *parent, const char *filename, CamelMimePar
if (g_access(filename, F_OK) == 0) {
if (g_access(filename, W_OK) != 0) {
e_error_run((GtkWindow *)parent, E_ERROR_ASK_FILE_EXISTS_OVERWRITE, filename, NULL);
e_error_run(parent, E_ERROR_ASK_FILE_EXISTS_OVERWRITE, filename, NULL);
return FALSE;
}
}
if (g_stat(filename, &st) != -1 && !S_ISREG(st.st_mode)) {
GtkWidget *w = e_error_new((GtkWindow *)parent, "mail:no-write-path-notfile", filename, NULL);
GtkWidget *w = e_error_new(parent, "mail:no-write-path-notfile", filename, NULL);
em_utils_show_error_silent (w);
return FALSE;
}
@ -637,13 +642,14 @@ emu_save_messages_response(GtkWidget *filesel, int response, struct _save_messag
* user for filename).
**/
void
em_utils_save_messages (GtkWidget *parent, CamelFolder *folder, GPtrArray *uids)
em_utils_save_messages (GtkWindow *parent, CamelFolder *folder, GPtrArray *uids)
{
struct _save_messages_data *data;
GtkWidget *filesel;
char *filename = NULL;
CamelMessageInfo *info = NULL;
g_return_if_fail (GTK_IS_WINDOW (parent));
g_return_if_fail (CAMEL_IS_FOLDER (folder));
g_return_if_fail (uids != NULL);
@ -683,7 +689,7 @@ emu_add_address_cb(BonoboListener *listener, const char *name, const CORBA_any *
/* one of email or vcard should be always NULL, never both of them */
static void
emu_add_address_or_vcard (struct _GtkWidget *parent, const char *email, const char *vcard)
emu_add_address_or_vcard (GtkWindow *parent, const char *email, const char *vcard)
{
GtkWidget *win;
GtkWidget *control;
@ -706,14 +712,7 @@ emu_add_address_or_vcard (struct _GtkWidget *parent, const char *email, const ch
win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title((GtkWindow *)win, _("Add address"));
if (parent && !GTK_IS_WINDOW (parent)) {
parent = gtk_widget_get_toplevel (parent);
if (!parent || !(GTK_WIDGET_TOPLEVEL (parent)))
parent = NULL;
}
if (parent)
gtk_window_set_transient_for((GtkWindow *)win, ((GtkWindow *)parent));
gtk_window_set_transient_for((GtkWindow *)win, parent);
gtk_window_set_position((GtkWindow *)win, GTK_WIN_POS_CENTER_ON_PARENT);
gtk_window_set_type_hint((GtkWindow *)win, GDK_WINDOW_TYPE_HINT_DIALOG);
@ -744,8 +743,10 @@ emu_add_address_or_vcard (struct _GtkWidget *parent, const char *email, const ch
* Add address @email to the addressbook.
**/
void
em_utils_add_address (struct _GtkWidget *parent, const char *email)
em_utils_add_address (GtkWindow *parent, const char *email)
{
g_return_if_fail (GTK_IS_WINDOW (parent));
emu_add_address_or_vcard (parent, email, NULL);
}
@ -754,8 +755,10 @@ em_utils_add_address (struct _GtkWidget *parent, const char *email)
* Adds whole vCard to the addressbook.
**/
void
em_utils_add_vcard (struct _GtkWidget *parent, const char *vcard)
em_utils_add_vcard (GtkWindow *parent, const char *vcard)
{
g_return_if_fail (GTK_IS_WINDOW (parent));
emu_add_address_or_vcard (parent, NULL, vcard);
}
@ -822,19 +825,18 @@ tag_editor_response (GtkWidget *dialog, int button, struct ted_t *ted)
* @folder and @uids.
**/
void
em_utils_flag_for_followup (GtkWidget *parent, CamelFolder *folder, GPtrArray *uids)
em_utils_flag_for_followup (GtkWindow *parent, CamelFolder *folder, GPtrArray *uids)
{
GtkWidget *editor;
struct ted_t *ted;
int i;
g_return_if_fail (GTK_IS_WINDOW (parent));
g_return_if_fail (CAMEL_IS_FOLDER (folder));
g_return_if_fail (uids != NULL);
editor = (GtkWidget *) message_tag_followup_new ();
if (parent != NULL)
e_dialog_set_transient_for ((GtkWindow *) editor, parent);
gtk_window_set_transient_for (GTK_WINDOW (editor), parent);
camel_object_ref (folder);
@ -886,10 +888,11 @@ em_utils_flag_for_followup (GtkWidget *parent, CamelFolder *folder, GPtrArray *u
* @folder and @uids.
**/
void
em_utils_flag_for_followup_clear (GtkWidget *parent, CamelFolder *folder, GPtrArray *uids)
em_utils_flag_for_followup_clear (GtkWindow *parent, CamelFolder *folder, GPtrArray *uids)
{
int i;
g_return_if_fail (GTK_IS_WINDOW (parent));
g_return_if_fail (CAMEL_IS_FOLDER (folder));
g_return_if_fail (uids != NULL);
@ -920,11 +923,12 @@ em_utils_flag_for_followup_clear (GtkWidget *parent, CamelFolder *folder, GPtrAr
* Flag-for-Followup.
**/
void
em_utils_flag_for_followup_completed (GtkWidget *parent, CamelFolder *folder, GPtrArray *uids)
em_utils_flag_for_followup_completed (GtkWindow *parent, CamelFolder *folder, GPtrArray *uids)
{
char *now;
int i;
g_return_if_fail (GTK_IS_WINDOW (parent));
g_return_if_fail (CAMEL_IS_FOLDER (folder));
g_return_if_fail (uids != NULL);

View File

@ -23,79 +23,71 @@
#ifndef __EM_UTILS_H__
#define __EM_UTILS_H__
#include <glib.h>
#ifdef __cplusplus
extern "C" {
#pragma }
#endif /* __cplusplus */
#include <gtk/gtk.h>
#include <sys/types.h>
#include <camel/camel-exception.h>
#include <camel/camel-folder.h>
#include <camel/camel-internet-address.h>
#include <camel/camel-mime-message.h>
#include <camel/camel-mime-part.h>
#include <camel/camel-stream.h>
G_BEGIN_DECLS
struct _GtkWidget;
struct _GtkWindow;
struct _CamelFolder;
struct _CamelInternetAddress;
struct _CamelStream;
struct _CamelMimeMessage;
struct _CamelMimePart;
struct _GtkSelectionData;
struct _GtkAdjustment;
struct _CamelException;
struct _EMFormat;
gboolean em_utils_prompt_user(struct _GtkWindow *parent, const char *promptkey, const char *tag, const char *arg0, ...);
gboolean em_utils_prompt_user(GtkWindow *parent, const char *promptkey, const char *tag, const char *arg0, ...);
GPtrArray *em_utils_uids_copy (GPtrArray *uids);
void em_utils_uids_free (GPtrArray *uids);
gboolean em_utils_configure_account (struct _GtkWidget *parent);
gboolean em_utils_check_user_can_send_mail (struct _GtkWidget *parent);
gboolean em_utils_configure_account (GtkWindow *parent);
gboolean em_utils_check_user_can_send_mail (GtkWindow *parent);
void em_utils_edit_filters (struct _GtkWidget *parent);
void em_utils_edit_filters (GtkWidget *parent);
void em_filename_make_safe (gchar *string);
void em_utils_edit_vfolders (struct _GtkWidget *parent);
void em_utils_edit_vfolders (GtkWidget *parent);
void em_utils_save_part(struct _GtkWidget *parent, const char *prompt, struct _CamelMimePart *part);
gboolean em_utils_save_part_to_file(struct _GtkWidget *parent, const char *filename, struct _CamelMimePart *part);
void em_utils_save_messages (struct _GtkWidget *parent, struct _CamelFolder *folder, GPtrArray *uids);
void em_utils_save_part(GtkWindow *parent, const char *prompt, CamelMimePart *part);
gboolean em_utils_save_part_to_file(GtkWindow *parent, const char *filename, CamelMimePart *part);
void em_utils_save_messages (GtkWindow *parent, CamelFolder *folder, GPtrArray *uids);
void em_utils_add_address(struct _GtkWidget *parent, const char *email);
void em_utils_add_vcard(struct _GtkWidget *parent, const char *vcard);
void em_utils_add_address(GtkWindow *parent, const char *email);
void em_utils_add_vcard(GtkWindow *parent, const char *vcard);
void em_utils_flag_for_followup (struct _GtkWidget *parent, struct _CamelFolder *folder, GPtrArray *uids);
void em_utils_flag_for_followup_clear (struct _GtkWidget *parent, struct _CamelFolder *folder, GPtrArray *uids);
void em_utils_flag_for_followup_completed (struct _GtkWidget *parent, struct _CamelFolder *folder, GPtrArray *uids);
void em_utils_flag_for_followup (GtkWindow *parent, CamelFolder *folder, GPtrArray *uids);
void em_utils_flag_for_followup_clear (GtkWindow *parent, CamelFolder *folder, GPtrArray *uids);
void em_utils_flag_for_followup_completed (GtkWindow *parent, CamelFolder *folder, GPtrArray *uids);
/* This stuff that follows probably doesn't belong here, then again, the stuff above probably belongs elsewhere */
void em_utils_selection_set_mailbox(struct _GtkSelectionData *data, struct _CamelFolder *folder, GPtrArray *uids);
void em_utils_selection_get_mailbox(struct _GtkSelectionData *data, struct _CamelFolder *folder);
void em_utils_selection_get_message(struct _GtkSelectionData *data, struct _CamelFolder *folder);
/* FIXME: be nice if these also worked on struct _CamelFolder's, no easy way to get uri from folder yet tho */
void em_utils_selection_set_uidlist(struct _GtkSelectionData *data, const char *uri, GPtrArray *uids);
void em_utils_selection_get_uidlist(struct _GtkSelectionData *data, struct _CamelFolder *dest, int move, struct _CamelException *ex);
void em_utils_selection_set_urilist(struct _GtkSelectionData *data, struct _CamelFolder *folder, GPtrArray *uids);
void em_utils_selection_get_urilist(struct _GtkSelectionData *data, struct _CamelFolder *folder);
void em_utils_selection_set_mailbox(GtkSelectionData *data, CamelFolder *folder, GPtrArray *uids);
void em_utils_selection_get_mailbox(GtkSelectionData *data, CamelFolder *folder);
void em_utils_selection_get_message(GtkSelectionData *data, CamelFolder *folder);
/* FIXME: be nice if these also worked on CamelFolder's, no easy way to get uri from folder yet tho */
void em_utils_selection_set_uidlist(GtkSelectionData *data, const char *uri, GPtrArray *uids);
void em_utils_selection_get_uidlist(GtkSelectionData *data, CamelFolder *dest, int move, CamelException *ex);
void em_utils_selection_set_urilist(GtkSelectionData *data, CamelFolder *folder, GPtrArray *uids);
void em_utils_selection_get_urilist(GtkSelectionData *data, CamelFolder *folder);
char *em_utils_temp_save_part(struct _GtkWidget *parent, struct _CamelMimePart *part, gboolean mode);
void em_utils_save_parts (struct _GtkWidget *parent, const char *prompt, GSList * parts);
char *em_utils_temp_save_part(GtkWidget *parent, CamelMimePart *part, gboolean mode);
void em_utils_save_parts (GtkWindow *parent, const char *prompt, GSList * parts);
gboolean em_utils_folder_is_drafts(struct _CamelFolder *folder, const char *uri);
gboolean em_utils_folder_is_templates(struct _CamelFolder *folder, const char *uri);
gboolean em_utils_folder_is_sent(struct _CamelFolder *folder, const char *uri);
gboolean em_utils_folder_is_outbox(struct _CamelFolder *folder, const char *uri);
gboolean em_utils_folder_is_drafts(CamelFolder *folder, const char *uri);
gboolean em_utils_folder_is_templates(CamelFolder *folder, const char *uri);
gboolean em_utils_folder_is_sent(CamelFolder *folder, const char *uri);
gboolean em_utils_folder_is_outbox(CamelFolder *folder, const char *uri);
void em_utils_adjustment_page(struct _GtkAdjustment *adj, gboolean down);
void em_utils_adjustment_page(GtkAdjustment *adj, gboolean down);
char *em_utils_get_proxy_uri(void);
/* FIXME: should this have an override charset? */
char *em_utils_part_to_html(struct _CamelMimePart *part, ssize_t *len, struct _EMFormat *source);
char *em_utils_message_to_html(struct _CamelMimeMessage *msg, const char *credits, guint32 flags, ssize_t *len, struct _EMFormat *source, const char *append);
char *em_utils_part_to_html(CamelMimePart *part, ssize_t *len, struct _EMFormat *source);
char *em_utils_message_to_html(CamelMimeMessage *msg, const char *credits, guint32 flags, ssize_t *len, struct _EMFormat *source, const char *append);
void em_utils_expunge_folder (struct _GtkWidget *parent, struct _CamelFolder *folder);
void em_utils_empty_trash (struct _GtkWidget *parent);
void em_utils_expunge_folder (GtkWidget *parent, CamelFolder *folder);
void em_utils_empty_trash (GtkWidget *parent);
/* returns the folder name portion of an URI */
char *em_utils_folder_name_from_uri (const char *uri);
@ -105,20 +97,18 @@ char *em_uri_from_camel (const char *curi);
char *em_uri_to_camel (const char *euri);
/* Run errors silently on the status bar */
void em_utils_show_error_silent (struct _GtkWidget *widget);
void em_utils_show_info_silent (struct _GtkWidget *widget);
void em_utils_show_error_silent (GtkWidget *widget);
void em_utils_show_info_silent (GtkWidget *widget);
/* is this address in the addressbook? caches results */
gboolean em_utils_in_addressbook (struct _CamelInternetAddress *addr, gboolean local_only);
struct _CamelMimePart *em_utils_contact_photo (struct _CamelInternetAddress *addr, gboolean local);
gboolean em_utils_in_addressbook (CamelInternetAddress *addr, gboolean local_only);
CamelMimePart *em_utils_contact_photo (CamelInternetAddress *addr, gboolean local);
const char *em_utils_snoop_type(struct _CamelMimePart *part);
const char *em_utils_snoop_type(CamelMimePart *part);
/* clears flag 'get_password_canceled' at every known accounts, so if needed, get_password will show dialog */
void em_utils_clear_get_password_canceled_accounts_flag (void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
G_END_DECLS
#endif /* __EM_UTILS_H__ */

View File

@ -97,7 +97,6 @@
#define d(x)
static void create_local_item_cb(EUserCreatableItemsHandler *handler, const char *item_type_name, void *data);
static void view_changed_timeout_remove (EComponentView *component_view);
#define MAIL_COMPONENT_DEFAULT(mc) if (mc == NULL) mc = mail_component_peek();
@ -942,44 +941,44 @@ impl_quit(PortableServer_Servant servant, CORBA_Environment *ev)
// return list;
//}
static int
create_item(const char *type, EMFolderTreeModel *model, const char *uri, gpointer tree)
{
if (strcmp(type, "message") == 0) {
if (!em_utils_check_user_can_send_mail(NULL))
return 0;
//static int
//create_item(const char *type, EMFolderTreeModel *model, const char *uri, gpointer tree)
//{
// if (strcmp(type, "message") == 0) {
// if (!em_utils_check_user_can_send_mail(NULL))
// return 0;
//
// em_utils_compose_new_message(uri);
// } else if (strcmp(type, "folder") == 0) {
// em_folder_utils_create_folder(NULL, tree);
// } else
// return -1;
//
// return 0;
//}
em_utils_compose_new_message(uri);
} else if (strcmp(type, "folder") == 0) {
em_folder_utils_create_folder(NULL, tree);
} else
return -1;
//static void
//create_local_item_cb(EUserCreatableItemsHandler *handler, const char *item_type_name, void *data)
//{
// EMFolderTree *tree = data;
// char *uri = em_folder_tree_get_selected_uri(tree);
//
// create_item(item_type_name, em_folder_tree_get_model(tree), uri, (gpointer) tree);
// g_free(uri);
//}
return 0;
}
static void
create_local_item_cb(EUserCreatableItemsHandler *handler, const char *item_type_name, void *data)
{
EMFolderTree *tree = data;
char *uri = em_folder_tree_get_selected_uri(tree);
create_item(item_type_name, em_folder_tree_get_model(tree), uri, (gpointer) tree);
g_free(uri);
}
static void
impl_requestCreateItem (PortableServer_Servant servant,
const CORBA_char *item_type_name,
CORBA_Environment *ev)
{
MailComponent *mc = MAIL_COMPONENT(bonobo_object_from_servant(servant));
if (create_item(item_type_name, mc->priv->model, NULL, NULL) == -1) {
CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
ex_GNOME_Evolution_Component_UnknownType, NULL);
}
}
//static void
//impl_requestCreateItem (PortableServer_Servant servant,
// const CORBA_char *item_type_name,
// CORBA_Environment *ev)
//{
// MailComponent *mc = MAIL_COMPONENT(bonobo_object_from_servant(servant));
//
// if (create_item(item_type_name, mc->priv->model, NULL, NULL) == -1) {
// CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
// ex_GNOME_Evolution_Component_UnknownType, NULL);
// }
//}
static void
handleuri_got_folder(char *uri, CamelFolder *folder, void *data)
@ -1258,12 +1257,12 @@ mail_component_class_init (MailComponentClass *class)
mepv->test = impl_mail_test;
}
static void
store_hash_free (struct _store_info *si)
{
si->removed = 1;
store_info_unref(si);
}
//static void
//store_hash_free (struct _store_info *si)
//{
// si->removed = 1;
// store_info_unref(si);
//}
static void
mail_component_init (MailComponent *component)
@ -1417,63 +1416,63 @@ struct _CamelSession *mail_component_peek_session(MailComponent *component)
// return store;
//}
static void
store_disconnect (CamelStore *store, void *event_data, void *user_data)
{
camel_service_disconnect (CAMEL_SERVICE (store), TRUE, NULL);
camel_object_unref (store);
}
//static void
//store_disconnect (CamelStore *store, void *event_data, void *user_data)
//{
// camel_service_disconnect (CAMEL_SERVICE (store), TRUE, NULL);
// camel_object_unref (store);
//}
void
mail_component_remove_store (MailComponent *component, CamelStore *store)
{
MailComponentPrivate *priv;
//void
//mail_component_remove_store (MailComponent *component, CamelStore *store)
//{
// MailComponentPrivate *priv;
//
// MAIL_COMPONENT_DEFAULT(component);
//
// priv = component->priv;
//
// /* Because the store_hash holds a reference to each store
// * used as a key in it, none of them will ever be gc'ed, meaning
// * any call to camel_session_get_{service,store} with the same
// * URL will always return the same object. So this works.
// */
//
// if (g_hash_table_lookup (priv->store_hash, store) == NULL)
// return;
//
// camel_object_ref (store);
// g_hash_table_remove (priv->store_hash, store);
//
// /* so i guess potentially we could have a race, add a store while one
// being removed. ?? */
// mail_note_store_remove (store);
//
// em_folder_tree_model_remove_store (priv->model, store);
//
// mail_async_event_emit (priv->async_event, MAIL_ASYNC_THREAD, (MailAsyncFunc) store_disconnect, store, NULL, NULL);
//}
MAIL_COMPONENT_DEFAULT(component);
priv = component->priv;
/* Because the store_hash holds a reference to each store
* used as a key in it, none of them will ever be gc'ed, meaning
* any call to camel_session_get_{service,store} with the same
* URL will always return the same object. So this works.
*/
if (g_hash_table_lookup (priv->store_hash, store) == NULL)
return;
camel_object_ref (store);
g_hash_table_remove (priv->store_hash, store);
/* so i guess potentially we could have a race, add a store while one
being removed. ?? */
mail_note_store_remove (store);
em_folder_tree_model_remove_store (priv->model, store);
mail_async_event_emit (priv->async_event, MAIL_ASYNC_THREAD, (MailAsyncFunc) store_disconnect, store, NULL, NULL);
}
void
mail_component_remove_store_by_uri (MailComponent *component, const char *uri)
{
CamelProvider *prov;
CamelStore *store;
MAIL_COMPONENT_DEFAULT(component);
if (!(prov = camel_provider_get(uri, NULL)))
return;
if (!(prov->flags & CAMEL_PROVIDER_IS_STORAGE))
return;
store = (CamelStore *) camel_session_get_service (session, uri, CAMEL_PROVIDER_STORE, NULL);
if (store != NULL) {
mail_component_remove_store (component, store);
camel_object_unref (store);
}
}
//void
//mail_component_remove_store_by_uri (MailComponent *component, const char *uri)
//{
// CamelProvider *prov;
// CamelStore *store;
//
// MAIL_COMPONENT_DEFAULT(component);
//
// if (!(prov = camel_provider_get(uri, NULL)))
// return;
//
// if (!(prov->flags & CAMEL_PROVIDER_IS_STORAGE))
// return;
//
// store = (CamelStore *) camel_session_get_service (session, uri, CAMEL_PROVIDER_STORE, NULL);
// if (store != NULL) {
// mail_component_remove_store (component, store);
// camel_object_unref (store);
// }
//}
// [KILL-BONOBO] Unused.
//int

View File

@ -59,6 +59,7 @@ enum {
PROP_PAGE_NUM,
PROP_TITLE,
PROP_SHELL_CONTENT,
PROP_SHELL_MODULE,
PROP_SHELL_SIDEBAR,
PROP_SHELL_TASKBAR,
PROP_SHELL_WINDOW,
@ -231,6 +232,11 @@ shell_view_get_property (GObject *object,
E_SHELL_VIEW (object)));
return;
case PROP_SHELL_MODULE:
g_value_set_object (
value, e_shell_view_get_shell_module (
E_SHELL_VIEW (object)));
case PROP_SHELL_SIDEBAR:
g_value_set_object (
value, e_shell_view_get_shell_sidebar (
@ -445,6 +451,21 @@ shell_view_class_init (EShellViewClass *class)
E_TYPE_SHELL_CONTENT,
G_PARAM_READABLE));
/**
* EShellView::shell-module
*
* The #EShellModule for this shell view.
**/
g_object_class_install_property (
object_class,
PROP_SHELL_MODULE,
g_param_spec_object (
"shell-module",
_("Shell Module"),
_("The EShellModule for this shell view"),
E_TYPE_SHELL_MODULE,
G_PARAM_READABLE));
/**
* EShellView:shell-sidebar
*

View File

@ -32,7 +32,8 @@ enum {
PROP_0,
PROP_ACTIVE_VIEW,
PROP_SAFE_MODE,
PROP_SHELL
PROP_SHELL,
PROP_UI_MANAGER
};
static gpointer parent_class;
@ -195,6 +196,12 @@ shell_window_get_property (GObject *object,
value, e_shell_window_get_shell (
E_SHELL_WINDOW (object)));
return;
case PROP_UI_MANAGER:
g_value_set_object (
value, e_shell_window_get_ui_manager (
E_SHELL_WINDOW (object)));
return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@ -285,6 +292,21 @@ shell_window_class_init (EShellWindowClass *class)
E_TYPE_SHELL,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* EShellWindow:ui-manager
*
* The shell window's #GtkUIManager.
**/
g_object_class_install_property (
object_class,
PROP_UI_MANAGER,
g_param_spec_object (
"ui-manager",
_("UI Manager"),
_("The shell window's GtkUIManager"),
GTK_TYPE_UI_MANAGER,
G_PARAM_READABLE));
}
static void