[evolution] Require a parent window when creating an EMFolderSelector.
- From: Matthew Barnes <mbarnes src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [evolution] Require a parent window when creating an EMFolderSelector.
- Date: Thu, 10 Sep 2009 18:13:25 +0000 (UTC)
commit 881792fadc8a200acd193369f842e46aef0e56e5
Author: Matthew Barnes <mbarnes redhat com>
Date: Thu Sep 10 11:58:00 2009 -0500
Require a parent window when creating an EMFolderSelector.
mail/Makefile.am | 2 -
mail/e-mail-reader.c | 8 ++-
mail/em-composer-utils.c | 6 ++-
mail/em-folder-selection-button.c | 6 ++-
mail/em-folder-selection.c | 77 ------------------------------
mail/em-folder-selection.h | 40 ---------------
mail/em-folder-selector.c | 25 +++++++---
mail/em-folder-selector.h | 52 +++++++++++++-------
mail/em-folder-tree.c | 1 -
mail/em-folder-utils.c | 45 ++++++++++++-----
mail/em-folder-utils.h | 3 +-
mail/em-vfolder-rule.c | 10 +++-
modules/mail/e-mail-shell-view-actions.c | 16 +++++-
13 files changed, 120 insertions(+), 171 deletions(-)
---
diff --git a/mail/Makefile.am b/mail/Makefile.am
index 043ffee..9bcc6ef 100644
--- a/mail/Makefile.am
+++ b/mail/Makefile.am
@@ -58,7 +58,6 @@ mailinclude_HEADERS = \
em-filter-rule.h \
em-filter-source-element.h \
em-folder-properties.h \
- em-folder-selection.h \
em-folder-selector.h \
em-folder-selection-button.h \
em-folder-tree.h \
@@ -116,7 +115,6 @@ libevolution_mail_la_SOURCES = \
em-filter-rule.c \
em-filter-source-element.c \
em-folder-properties.c \
- em-folder-selection.c \
em-folder-selector.c \
em-folder-selection-button.c \
em-folder-tree.c \
diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c
index 175a01e..eb3fe06 100644
--- a/mail/e-mail-reader.c
+++ b/mail/e-mail-reader.c
@@ -192,9 +192,11 @@ action_mail_copy_cb (GtkAction *action,
CamelFolder *folder;
GtkWidget *folder_tree;
GtkWidget *dialog;
+ GtkWindow *parent;
GPtrArray *selected;
const gchar *uri;
+ parent = e_mail_reader_get_window (reader);
message_list = e_mail_reader_get_message_list (reader);
folder_tree = em_folder_tree_new ();
@@ -208,7 +210,7 @@ action_mail_copy_cb (GtkAction *action,
EMFT_EXCLUDE_VTRASH);
dialog = em_folder_selector_new (
- EM_FOLDER_TREE (folder_tree),
+ parent, EM_FOLDER_TREE (folder_tree),
EM_FOLDER_SELECTOR_CAN_CREATE,
_("Select Folder"), NULL, _("C_opy"));
@@ -579,9 +581,11 @@ action_mail_move_cb (GtkAction *action,
CamelFolder *folder;
GtkWidget *folder_tree;
GtkWidget *dialog;
+ GtkWindow *parent;
GPtrArray *selected;
const gchar *uri;
+ parent = e_mail_reader_get_window (reader);
message_list = e_mail_reader_get_message_list (reader);
folder_tree = em_folder_tree_new ();
@@ -595,7 +599,7 @@ action_mail_move_cb (GtkAction *action,
EMFT_EXCLUDE_VTRASH);
dialog = em_folder_selector_new (
- EM_FOLDER_TREE (folder_tree),
+ parent, EM_FOLDER_TREE (folder_tree),
EM_FOLDER_SELECTOR_CAN_CREATE,
_("Select Folder"), NULL, _("_Move"));
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index f268b14..739297f 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -2405,7 +2405,8 @@ em_utils_reply_to_message(CamelFolder *folder, const gchar *uid, CamelMimeMessag
}
static void
-post_header_clicked_cb (EComposerPostHeader *header)
+post_header_clicked_cb (EComposerPostHeader *header,
+ EMsgComposer *composer)
{
GtkTreeSelection *selection;
GtkWidget *folder_tree;
@@ -2424,6 +2425,7 @@ post_header_clicked_cb (EComposerPostHeader *header)
EMFT_EXCLUDE_VTRASH);
dialog = em_folder_selector_new (
+ GTK_WINDOW (composer),
EM_FOLDER_TREE (folder_tree),
EM_FOLDER_SELECTOR_CAN_CREATE,
_("Posting destination"),
@@ -2503,5 +2505,5 @@ em_configure_new_composer (EMsgComposer *composer)
* the folder selector dialog. See the handler function. */
g_signal_connect (
header, "clicked",
- G_CALLBACK (post_header_clicked_cb), NULL);
+ G_CALLBACK (post_header_clicked_cb), composer);
}
diff --git a/mail/em-folder-selection-button.c b/mail/em-folder-selection-button.c
index ec81822..d3d44e5 100644
--- a/mail/em-folder-selection-button.c
+++ b/mail/em-folder-selection-button.c
@@ -208,9 +208,13 @@ folder_selection_button_clicked (GtkButton *button)
GtkWidget *dialog;
GtkTreeSelection *selection;
GtkSelectionMode mode;
+ gpointer parent;
priv = EM_FOLDER_SELECTION_BUTTON_GET_PRIVATE (button);
+ parent = gtk_widget_get_toplevel (GTK_WIDGET (button));
+ parent = GTK_WIDGET_TOPLEVEL (parent) ? parent : NULL;
+
emft = (EMFolderTree *) em_folder_tree_new ();
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (emft));
@@ -225,7 +229,7 @@ folder_selection_button_clicked (GtkButton *button)
EMFT_EXCLUDE_VIRTUAL | EMFT_EXCLUDE_VTRASH);
dialog = em_folder_selector_new (
- emft, EM_FOLDER_SELECTOR_CAN_CREATE,
+ parent, emft, EM_FOLDER_SELECTOR_CAN_CREATE,
priv->title, priv->caption, NULL);
if (priv->multiple_select)
diff --git a/mail/em-folder-selector.c b/mail/em-folder-selector.c
index 198264e..693c096 100644
--- a/mail/em-folder-selector.c
+++ b/mail/em-folder-selector.c
@@ -124,8 +124,7 @@ emfs_response (GtkWidget *dialog, gint response, EMFolderSelector *emfs)
g_object_set_data ((GObject *)emfs->emft, "select", GUINT_TO_POINTER (1));
- /* FIXME Pass a parent window. */
- em_folder_utils_create_folder (NULL, emfs->emft, NULL);
+ em_folder_utils_create_folder (NULL, emfs->emft, GTK_WINDOW (dialog));
g_signal_stop_emission_by_name (emfs, "response");
}
@@ -167,7 +166,6 @@ em_folder_selector_construct (EMFolderSelector *emfs, EMFolderTree *emft, guint3
{
GtkWidget *widget;
- gtk_window_set_modal (GTK_WINDOW (emfs), FALSE);
gtk_window_set_default_size (GTK_WINDOW (emfs), 350, 300);
gtk_window_set_title (GTK_WINDOW (emfs), title);
gtk_container_set_border_width (GTK_CONTAINER (emfs), 6);
@@ -216,11 +214,18 @@ em_folder_selector_construct (EMFolderSelector *emfs, EMFolderTree *emft, guint3
}
GtkWidget *
-em_folder_selector_new (EMFolderTree *emft, guint32 flags, const gchar *title, const gchar *text, const gchar *oklabel)
+em_folder_selector_new (GtkWindow *parent,
+ EMFolderTree *emft,
+ guint32 flags,
+ const gchar *title,
+ const gchar *text,
+ const gchar *oklabel)
{
EMFolderSelector *emfs;
- emfs = g_object_new (em_folder_selector_get_type (), NULL);
+ emfs = g_object_new (
+ EM_TYPE_FOLDER_SELECTOR,
+ "transient-for", parent, NULL);
em_folder_selector_construct (emfs, emft, flags, title, text, oklabel);
return (GtkWidget *) emfs;
@@ -243,7 +248,11 @@ emfs_create_name_activate (GtkEntry *entry, EMFolderSelector *emfs)
}
GtkWidget *
-em_folder_selector_create_new (EMFolderTree *emft, guint32 flags, const gchar *title, const gchar *text)
+em_folder_selector_create_new (GtkWindow *parent,
+ EMFolderTree *emft,
+ guint32 flags,
+ const gchar *title,
+ const gchar *text)
{
EMFolderSelector *emfs;
GtkWidget *hbox, *w;
@@ -252,7 +261,9 @@ em_folder_selector_create_new (EMFolderTree *emft, guint32 flags, const gchar *t
* whole purpose of this dialog */
flags &= ~EM_FOLDER_SELECTOR_CAN_CREATE;
- emfs = g_object_new (em_folder_selector_get_type (), NULL);
+ emfs = g_object_new (
+ EM_TYPE_FOLDER_SELECTOR,
+ "transient-for", parent, NULL);
em_folder_selector_construct (emfs, emft, flags, title, text, _("C_reate"));
em_folder_tree_set_excluded(emft, EMFT_EXCLUDE_NOINFERIORS);
diff --git a/mail/em-folder-selector.h b/mail/em-folder-selector.h
index 131c4a4..ca31d21 100644
--- a/mail/em-folder-selector.h
+++ b/mail/em-folder-selector.h
@@ -25,6 +25,7 @@
#define EM_FOLDER_SELECTOR_H
#include <gtk/gtk.h>
+#include <mail/em-folder-tree.h>
/* Standard GObject macros */
#define EM_TYPE_FOLDER_SELECTOR \
@@ -55,7 +56,7 @@ struct _EMFolderSelector {
GtkDialog parent;
guint32 flags;
- struct _EMFolderTree *emft;
+ EMFolderTree *emft;
GtkEntry *name_entry;
gchar *selected_path;
@@ -78,24 +79,37 @@ enum {
EM_FOLDER_SELECTOR_RESPONSE_NEW = 1
};
-GType em_folder_selector_get_type (void);
-
-void em_folder_selector_construct (EMFolderSelector *emfs, struct _EMFolderTree *emft, guint32 flags, const gchar *title, const gchar *text, const gchar *oklabel);
-
-/* for selecting folders */
-GtkWidget *em_folder_selector_new (struct _EMFolderTree *emft, guint32 flags, const gchar *title, const gchar *text, const gchar *oklabel);
-
-/* for creating folders */
-GtkWidget *em_folder_selector_create_new (struct _EMFolderTree *emft, guint32 flags, const gchar *title, const gchar *text);
-
-void em_folder_selector_set_selected (EMFolderSelector *emfs, const gchar *uri);
-void em_folder_selector_set_selected_list (EMFolderSelector *emfs, GList *list);
-
-const gchar *em_folder_selector_get_selected_uri (EMFolderSelector *emfs);
-const gchar *em_folder_selector_get_selected_path (EMFolderSelector *emfs);
-
-GList *em_folder_selector_get_selected_uris (EMFolderSelector *emfs);
-GList *em_folder_selector_get_selected_paths (EMFolderSelector *emfs);
+GType em_folder_selector_get_type (void);
+void em_folder_selector_construct (EMFolderSelector *emfs,
+ EMFolderTree *emft,
+ guint32 flags,
+ const gchar *title,
+ const gchar *text,
+ const gchar *oklabel);
+GtkWidget * em_folder_selector_new (GtkWindow *parent,
+ EMFolderTree *emft,
+ guint32 flags,
+ const gchar *title,
+ const gchar *text,
+ const gchar *oklabel);
+GtkWidget * em_folder_selector_create_new (GtkWindow *parent,
+ EMFolderTree *emft,
+ guint32 flags,
+ const gchar *title,
+ const gchar *text);
+void em_folder_selector_set_selected (EMFolderSelector *emfs,
+ const gchar *uri);
+void em_folder_selector_set_selected_list
+ (EMFolderSelector *emfs,
+ GList *list);
+const gchar * em_folder_selector_get_selected_uri
+ (EMFolderSelector *emfs);
+const gchar * em_folder_selector_get_selected_path
+ (EMFolderSelector *emfs);
+GList * em_folder_selector_get_selected_uris
+ (EMFolderSelector *emfs);
+GList * em_folder_selector_get_selected_paths
+ (EMFolderSelector *emfs);
G_END_DECLS
diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c
index 568bf49..5772378 100644
--- a/mail/em-folder-tree.c
+++ b/mail/em-folder-tree.c
@@ -68,7 +68,6 @@
#include "em-folder-tree.h"
#include "em-folder-utils.h"
#include "em-folder-selector.h"
-#include "em-folder-selection.h"
#include "em-folder-properties.h"
#include "em-event.h"
diff --git a/mail/em-folder-utils.c b/mail/em-folder-utils.c
index 0379607..3a4636a 100644
--- a/mail/em-folder-utils.c
+++ b/mail/em-folder-utils.c
@@ -65,7 +65,6 @@
#include "em-folder-tree-model.h"
#include "em-folder-utils.h"
#include "em-folder-selector.h"
-#include "em-folder-selection.h"
#include "em-folder-properties.h"
#include "e-mail-local.h"
@@ -365,9 +364,13 @@ emfu_copy_folder_exclude(EMFolderTree *tree, GtkTreeModel *model, GtkTreeIter *i
/* FIXME: this interface references the folderinfo without copying it */
/* FIXME: these functions must be documented */
void
-em_folder_utils_copy_folder (CamelFolderInfo *folderinfo,
+em_folder_utils_copy_folder (GtkWindow *parent,
+ CamelFolderInfo *folderinfo,
gint delete)
{
+ GtkWidget *dialog;
+ EMFolderTree *emft;
+ const gchar *label;
struct _copy_folder_data *cfd;
g_return_if_fail (folderinfo != NULL);
@@ -376,11 +379,28 @@ em_folder_utils_copy_folder (CamelFolderInfo *folderinfo,
cfd->fi = folderinfo;
cfd->delete = delete;
- em_select_folder (
- _("Select folder"),
- delete ? _("_Move") : _("C_opy"),
- NULL, emfu_copy_folder_exclude,
- emfu_copy_folder_selected, cfd);
+ /* XXX Do we leak this reference. */
+ emft = (EMFolderTree *) em_folder_tree_new ();
+
+ em_folder_tree_set_excluded_func (
+ emft, emfu_copy_folder_exclude, cfd);
+
+ label = delete ? _("_Move") : _("C_opy");
+
+ dialog = em_folder_selector_new (
+ parent, emft,
+ EM_FOLDER_SELECTOR_CAN_CREATE,
+ _("Select Folder"), NULL, label);
+
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) {
+ const gchar *uri;
+
+ uri = em_folder_selector_get_selected_uri (
+ EM_FOLDER_SELECTOR (dialog));
+ emfu_copy_folder_selected (uri, cfd);
+ }
+
+ gtk_widget_destroy (dialog);
}
static void
@@ -732,15 +752,12 @@ em_folder_utils_create_folder (CamelFolderInfo *folderinfo, EMFolderTree *emft,
folder_tree = (EMFolderTree *) em_folder_tree_new ();
- dialog = em_folder_selector_create_new (folder_tree, 0, _("Create Folder"), _("Specify where to create the folder:"));
+ dialog = em_folder_selector_create_new (
+ parent, folder_tree, 0,
+ _("Create Folder"),
+ _("Specify where to create the folder:"));
if (folderinfo != NULL)
em_folder_selector_set_selected ((EMFolderSelector *) dialog, folderinfo->uri);
- if (parent) {
- gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
- gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
- if (gtk_window_get_modal (parent))
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
- }
g_signal_connect (dialog, "response", G_CALLBACK (emfu_popup_new_folder_response), emft);
gtk_widget_show (dialog);
}
diff --git a/mail/em-folder-utils.h b/mail/em-folder-utils.h
index d0db789..78c2f81 100644
--- a/mail/em-folder-utils.h
+++ b/mail/em-folder-utils.h
@@ -40,7 +40,8 @@ gint em_folder_utils_copy_folders (CamelStore *fromstore,
/* FIXME These API's are really busted. There is no consistency and
* most rely on the wrong data. */
-void em_folder_utils_copy_folder (CamelFolderInfo *folderinfo,
+void em_folder_utils_copy_folder (GtkWindow *parent,
+ CamelFolderInfo *folderinfo,
gboolean delete);
void em_folder_utils_delete_folder (CamelFolder *folder);
void em_folder_utils_rename_folder (CamelFolder *folder);
diff --git a/mail/em-vfolder-rule.c b/mail/em-vfolder-rule.c
index c357065..5f58c1e 100644
--- a/mail/em-vfolder-rule.c
+++ b/mail/em-vfolder-rule.c
@@ -506,13 +506,17 @@ source_add(GtkWidget *widget, struct _source_data *data)
{
EMFolderTree *emft;
GtkWidget *dialog;
+ gpointer parent;
+
+ parent = gtk_widget_get_toplevel (widget);
+ parent = GTK_WIDGET_TOPLEVEL (parent) ? parent : NULL;
emft =(EMFolderTree *) em_folder_tree_new ();
em_folder_tree_set_excluded (emft, EMFT_EXCLUDE_NOSELECT);
- dialog = em_folder_selector_new(emft, EM_FOLDER_SELECTOR_CAN_CREATE, _("Select Folder"), NULL, _("_Add"));
- gtk_window_set_transient_for ((GtkWindow *)dialog, (GtkWindow *)gtk_widget_get_toplevel(widget));
- gtk_window_set_modal((GtkWindow *)dialog, TRUE);
+ dialog = em_folder_selector_new (
+ parent, emft, EM_FOLDER_SELECTOR_CAN_CREATE,
+ _("Select Folder"), NULL, _("_Add"));
g_signal_connect(dialog, "response", G_CALLBACK(vfr_folder_response), data);
gtk_widget_show(dialog);
}
diff --git a/modules/mail/e-mail-shell-view-actions.c b/modules/mail/e-mail-shell-view-actions.c
index 9c79164..00579ed 100644
--- a/modules/mail/e-mail-shell-view-actions.c
+++ b/modules/mail/e-mail-shell-view-actions.c
@@ -122,17 +122,23 @@ static void
action_mail_folder_copy_cb (GtkAction *action,
EMailShellView *mail_shell_view)
{
+ EShellView *shell_view;
+ EShellWindow *shell_window;
EMailShellSidebar *mail_shell_sidebar;
CamelFolderInfo *folder_info;
EMFolderTree *folder_tree;
+ shell_view = E_SHELL_VIEW (mail_shell_view);
+ shell_window = e_shell_view_get_shell_window (shell_view);
+
mail_shell_sidebar = mail_shell_view->priv->mail_shell_sidebar;
folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar);
folder_info = em_folder_tree_get_selected_folder_info (folder_tree);
g_return_if_fail (folder_info != NULL);
/* XXX Leaking folder_info? */
- em_folder_utils_copy_folder (folder_info, FALSE);
+ em_folder_utils_copy_folder (
+ GTK_WINDOW (shell_window), folder_info, FALSE);
}
static void
@@ -217,17 +223,23 @@ static void
action_mail_folder_move_cb (GtkAction *action,
EMailShellView *mail_shell_view)
{
+ EShellView *shell_view;
+ EShellWindow *shell_window;
EMailShellSidebar *mail_shell_sidebar;
CamelFolderInfo *folder_info;
EMFolderTree *folder_tree;
+ shell_view = E_SHELL_VIEW (mail_shell_view);
+ shell_window = e_shell_view_get_shell_window (shell_view);
+
mail_shell_sidebar = mail_shell_view->priv->mail_shell_sidebar;
folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar);
folder_info = em_folder_tree_get_selected_folder_info (folder_tree);
g_return_if_fail (folder_info != NULL);
/* XXX Leaking folder_info? */
- em_folder_utils_copy_folder (folder_info, TRUE);
+ em_folder_utils_copy_folder (
+ GTK_WINDOW (shell_window), folder_info, TRUE);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]