From 2cfe57ee3609ed5ce81739adf2a00c28a68d158f Mon Sep 17 00:00:00 2001 From: Sergio Villar Senin Date: Tue, 10 Apr 2007 17:45:18 +0000 Subject: [PATCH] * Added window manager calls * Commented some code in the mail operations that should be reviewed * Added support to automatically unregister windows when destroyed pmo-trunk-r1533 --- src/maemo/easysetup/modest-easysetup-wizard.c | 3 +- src/maemo/modest-main-window.c | 9 +++--- src/modest-mail-operation.c | 41 ++++++++++++------------- src/modest-main.c | 3 ++ src/modest-ui-actions.c | 21 +++++++++++-- src/widgets/modest-window-mgr.c | 13 ++++++++ 6 files changed, 60 insertions(+), 30 deletions(-) diff --git a/src/maemo/easysetup/modest-easysetup-wizard.c b/src/maemo/easysetup/modest-easysetup-wizard.c index c9c13b4..12a8a50 100644 --- a/src/maemo/easysetup/modest-easysetup-wizard.c +++ b/src/maemo/easysetup/modest-easysetup-wizard.c @@ -596,10 +596,11 @@ on_button_outgoing_smtp_servers (GtkButton *button, gpointer user_data) * so we can supply them when creating the connection somehow. */ GtkWidget *window = GTK_WIDGET (modest_connection_specific_smtp_window_new ()); + gtk_window_set_transient_for (GTK_WINDOW (self), GTK_WINDOW (window)); g_signal_connect (G_OBJECT (window), "hide", G_CALLBACK (on_smtp_servers_window_hide), self); - gtk_widget_show (window); + gtk_widget_show (window); } static GtkWidget* create_page_custom_outgoing (ModestEasysetupWizardDialog *self) diff --git a/src/maemo/modest-main-window.c b/src/maemo/modest-main-window.c index 1d621fb..079111d 100644 --- a/src/maemo/modest-main-window.c +++ b/src/maemo/modest-main-window.c @@ -295,14 +295,15 @@ get_toolbar (ModestMainWindow *self) /* Toolbar */ toolbar = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar"); - reply_button = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageReply"); - - menu = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolbarReplyContextMenu"); - gtk_widget_tap_and_hold_setup (GTK_WIDGET (reply_button), menu, NULL, 0); /* Set homogeneous toolbar */ gtk_container_foreach (GTK_CONTAINER (toolbar), set_homogeneous, NULL); + /* Set reply message tap and hold menu */ + reply_button = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageReply"); + menu = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolbarReplyContextMenu"); + gtk_widget_tap_and_hold_setup (GTK_WIDGET (reply_button), menu, NULL, 0); + return toolbar; } diff --git a/src/modest-mail-operation.c b/src/modest-mail-operation.c index f57bd80..c0bf798 100644 --- a/src/modest-mail-operation.c +++ b/src/modest-mail-operation.c @@ -758,30 +758,24 @@ on_refresh_folder (TnyFolder *folder, modest_mail_operation_queue_remove (modest_runtime_get_mail_operation_queue (), self); } -static void -on_refresh_folder_status_update (TnyFolder *folder, const gchar *msg, - gint num, gint total, gpointer user_data) -{ - ModestMailOperation *self; - ModestMailOperationPrivate *priv; - - /* TODO: if tinymail issues a status update before the - callback call then this could happen. If this is true the - we must review the design */ - if (!G_IS_OBJECT (user_data)) - return; +/* static void */ +/* on_refresh_folder_status_update (TnyFolder *folder, const gchar *msg, */ +/* gint num, gint total, gpointer user_data) */ +/* { */ +/* ModestMailOperation *self; */ +/* ModestMailOperationPrivate *priv; */ - self = MODEST_MAIL_OPERATION (user_data); - priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self); +/* self = MODEST_MAIL_OPERATION (user_data); */ +/* priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self); */ - priv->done = num; - priv->total = total; +/* priv->done = num; */ +/* priv->total = total; */ - if (num == 1 && total == 100) - return; +/* if (num == 1 && total == 100) */ +/* return; */ - g_signal_emit (G_OBJECT (self), signals[PROGRESS_CHANGED_SIGNAL], 0, NULL); -} +/* g_signal_emit (G_OBJECT (self), signals[PROGRESS_CHANGED_SIGNAL], 0, NULL); */ +/* } */ void modest_mail_operation_refresh_folder (ModestMailOperation *self, @@ -796,10 +790,13 @@ modest_mail_operation_refresh_folder (ModestMailOperation *self, priv->status = MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS; - /* Refresh the folder */ + /* Refresh the folder. TODO: tinymail could issue a status + updates before the callback call then this could happen. We + must review the design */ tny_folder_refresh_async (folder, on_refresh_folder, - on_refresh_folder_status_update, +/* on_refresh_folder_status_update, */ + NULL, self); } diff --git a/src/modest-main.c b/src/modest-main.c index dc211c7..925b84c 100644 --- a/src/modest-main.c +++ b/src/modest-main.c @@ -220,6 +220,9 @@ start_ui (const gchar *account_name, const gchar* mailto, const gchar *cc, const if (!win) { g_printerr ("modest: failed to create window\n"); return MODEST_ERR_UI; + } else { + ModestWindowMgr *mgr = modest_runtime_get_window_mgr (); + modest_window_mgr_register_window (mgr, win); } gtk_widget_show (GTK_WIDGET (win)); diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index e44c0c6..d1e3baa 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -271,6 +271,7 @@ modest_ui_actions_on_new_msg (GtkAction *action, ModestWindow *win) gchar *from_str = NULL; GError *err = NULL; TnyAccount *account; + ModestWindowMgr *mgr; account_name = g_strdup(modest_window_get_active_account (win)); if (!account_name) @@ -306,7 +307,11 @@ modest_ui_actions_on_new_msg (GtkAction *action, ModestWindow *win) goto cleanup; } + /* Create and register edit window */ msg_win = modest_msg_edit_window_new (msg, account_name); + mgr = modest_runtime_get_window_mgr (); + modest_window_mgr_register_window (mgr, msg_win); + if (win) gtk_window_set_transient_for (GTK_WINDOW (msg_win), GTK_WINDOW (win)); @@ -344,6 +349,7 @@ reply_forward_func (gpointer data, gpointer user_data) GError *err = NULL; TnyFolder *folder = NULL; TnyAccount *account = NULL; + ModestWindowMgr *mgr; msg = TNY_MSG (data); helper = (GetMsgAsyncHelper *) user_data; @@ -401,9 +407,13 @@ reply_forward_func (gpointer data, gpointer user_data) g_error_free (err); goto cleanup; } - - /* Show edit window */ + + /* Create and register the windows */ msg_win = modest_msg_edit_window_new (new_msg, rf_helper->account_name); + mgr = modest_runtime_get_window_mgr (); + modest_window_mgr_register_window (mgr, msg_win); + + /* Show edit window */ gtk_widget_show_all (GTK_WIDGET (msg_win)); cleanup: @@ -756,6 +766,7 @@ modest_ui_actions_on_header_activated (ModestHeaderView *folder_view, TnyHeader TnyFolder *folder = NULL; TnyMsg *msg = NULL; gchar *account = NULL; + ModestWindowMgr *mgr; g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); @@ -778,8 +789,12 @@ modest_ui_actions_on_header_activated (ModestHeaderView *folder_view, TnyHeader account = g_strdup(modest_window_get_active_account(MODEST_WINDOW(main_window))); if (!account) account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr()); - + + /* Create and register message view window */ win = modest_msg_view_window_new (msg, account); + mgr = modest_runtime_get_window_mgr (); + modest_window_mgr_register_window (mgr, win); + gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW (main_window)); diff --git a/src/widgets/modest-window-mgr.c b/src/widgets/modest-window-mgr.c index 1e40676..64a2dcb 100644 --- a/src/widgets/modest-window-mgr.c +++ b/src/widgets/modest-window-mgr.c @@ -34,6 +34,10 @@ static void modest_window_mgr_class_init (ModestWindowMgrClass *klass); static void modest_window_mgr_init (ModestWindowMgr *obj); static void modest_window_mgr_finalize (GObject *obj); + +static void on_window_destroy (ModestWindow *window, + ModestWindowMgr *self); + /* list my signals */ enum { /* MY_SIGNAL_1, */ @@ -145,6 +149,15 @@ modest_window_mgr_register_window (ModestWindowMgr *self, /* Add to list. Keep a reference to the window */ g_object_ref (window); priv->window_list = g_list_prepend (priv->window_list, window); + + /* Listen to object destruction */ + g_signal_connect (window, "destroy", G_CALLBACK (on_window_destroy), self); +} + +static void +on_window_destroy (ModestWindow *window, ModestWindowMgr *self) +{ + modest_window_mgr_unregister_window (self, window); } void -- 1.7.9.5