From: Dirk-Jan C. Binnema Date: Mon, 7 Aug 2006 12:38:29 +0000 (+0000) Subject: * add the new toolbar to main-window and edit-msg-window X-Git-Tag: git_migration_finished~4418 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=903aa76315017b3d16f96e2906812b91218e7b80 * add the new toolbar to main-window and edit-msg-window * better deal with closing app * fix saving of settings pmo-trunk-r460 --- diff --git a/src/gtk2/modest-edit-msg-window.c b/src/gtk2/modest-edit-msg-window.c index 86c86d2..b3b62b8 100644 --- a/src/gtk2/modest-edit-msg-window.c +++ b/src/gtk2/modest-edit-msg-window.c @@ -30,8 +30,9 @@ #include "modest-edit-msg-window.h" #include #include +#include +#include "modest-icon-names.h" -/* 'private'/'protected' functions */ static void modest_edit_msg_window_class_init (ModestEditMsgWindowClass *klass); static void modest_edit_msg_window_init (ModestEditMsgWindow *obj); static void modest_edit_msg_window_finalize (GObject *obj); @@ -47,10 +48,12 @@ typedef struct _ModestEditMsgWindowPrivate ModestEditMsgWindowPrivate; struct _ModestEditMsgWindowPrivate { ModestConf *conf; + ModestWidgetFactory *factory; - GtkWidget *msg_body; - GtkWidget *to_field, *cc_field, *bcc_field, - *subject_field; + GtkWidget *toolbar, *menubar; + GtkWidget *msg_body; + GtkWidget *to_field, *cc_field, *bcc_field, + *subject_field; }; #define MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ MODEST_TYPE_EDIT_MSG_WINDOW, \ @@ -76,6 +79,7 @@ modest_edit_msg_window_get_type (void) sizeof(ModestEditMsgWindow), 1, /* n_preallocs */ (GInstanceInitFunc) modest_edit_msg_window_init, + NULL }; my_type = g_type_register_static (GTK_TYPE_WINDOW, "ModestEditMsgWindow", @@ -106,6 +110,122 @@ modest_edit_msg_window_class_init (ModestEditMsgWindowClass *klass) static void modest_edit_msg_window_init (ModestEditMsgWindow *obj) { + ModestEditMsgWindowPrivate *priv; + priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(obj); + + priv->factory = NULL; + priv->toolbar = NULL; + priv->menubar = NULL; + +} + + + + +/* Our menu, an array of GtkItemFactoryEntry structures that defines each menu item */ +static GtkItemFactoryEntry menu_items[] = { + { "/_File", NULL, NULL, 0, "" }, + { "/File/_New", "N", NULL, 0, "", GTK_STOCK_NEW }, + { "/File/_Open", "O", NULL, 0, "", GTK_STOCK_OPEN }, + { "/File/_Save", "S", NULL, 0, "", GTK_STOCK_SAVE }, + { "/File/Save _As", NULL, NULL, 0, "" }, + { "/File/Save Draft", "S", NULL, 0, "" }, + + + { "/File/sep1", NULL, NULL, 0, "" }, + { "/File/_Quit", "Q", NULL, 0, "", GTK_STOCK_QUIT }, + + { "/_Edit", NULL, NULL, 0, "" }, + { "/Edit/_Undo", "Z", NULL, 0, "", GTK_STOCK_UNDO }, + { "/Edit/_Redo", "Z", NULL, 0, "", GTK_STOCK_REDO }, + { "/File/sep1", NULL, NULL, 0, "" }, + { "/Edit/Cut", "X", NULL, 0, "", GTK_STOCK_CUT }, + { "/Edit/Copy", "C", NULL, 0, "", GTK_STOCK_COPY }, + { "/Edit/Paste", NULL, NULL, 0, "", GTK_STOCK_PASTE}, + { "/Edit/sep1", NULL, NULL, 0, "" }, + { "/Edit/Delete", "Q", NULL, 0, "" }, + { "/Edit/Select all", "A", NULL, 0, "" }, + { "/Edit/Deselect all", "A", NULL, 0, "" }, + + { "/_View", NULL, NULL, 0, "" }, + { "/View/To-field", NULL, NULL, 0, "" }, + + { "/View/Cc-field:", NULL, NULL, 0, "" }, + { "/View/Bcc-field:", NULL, NULL, 0, "" }, + + + { "/_Insert", NULL, NULL, 0, "" }, +/* { "/Actions/_Reply", NULL, NULL, 0, "" }, */ +/* { "/Actions/_Forward", NULL, NULL, 0, "" }, */ +/* { "/Actions/_Bounce", NULL, NULL, 0, "" }, */ + + { "/_Format", NULL, NULL, 0, "" } +/* { "/Options/_Accounts", NULL, on_menu_accounts,0, "" }, */ +/* { "/Options/_Contacts", NULL, NULL, 0, "" }, */ + + +/* { "/_Help", NULL, NULL, 0, "" }, */ +/* { "/_Help/About", NULL, on_menu_about, 0, "", GTK_STOCK_ABOUT}, */ +}; + +static gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); + + +static GtkWidget * +menubar_new (ModestEditMsgWindow *self) +{ + GtkItemFactory *item_factory; + GtkAccelGroup *accel_group; + + /* Make an accelerator group (shortcut keys) */ + accel_group = gtk_accel_group_new (); + + /* Make an ItemFactory (that makes a menubar) */ + item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "
", + accel_group); + + /* This function generates the menu items. Pass the item factory, + the number of items in the array, the array itself, and any + callback data for the the menu items. */ + gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, self); + + ///* Attach the new accelerator group to the window. */ + gtk_window_add_accel_group (GTK_WINDOW (self), accel_group); + + /* Finally, return the actual menu bar created by the item factory. */ + return gtk_item_factory_get_widget (item_factory, "
"); +} + + + + +static ModestToolbar* +toolbar_new (ModestEditMsgWindow *self) +{ + int i; + ModestToolbar *toolbar; + GSList *buttons = NULL; + ModestEditMsgWindowPrivate *priv; + + ModestToolbarButton button_ids[] = { + MODEST_TOOLBAR_BUTTON_MAIL_SEND + }; + + priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(self); + + for (i = 0 ; i != sizeof(button_ids) / sizeof(ModestToolbarButton); ++i) + buttons = g_slist_append (buttons, GINT_TO_POINTER(button_ids[i])); + + toolbar = modest_widget_factory_get_edit_toolbar (priv->factory, buttons); + g_slist_free (buttons); + + return toolbar; +} + + +static void +init_window (ModestEditMsgWindow *obj) +{ GtkWidget *to_button, *cc_button, *bcc_button, *subject_label; GtkWidget *header_table; GtkWidget *main_vbox; @@ -142,12 +262,19 @@ modest_edit_msg_window_init (ModestEditMsgWindow *obj) main_vbox = gtk_vbox_new (FALSE, 6); - gtk_box_pack_start (GTK_BOX(main_vbox), header_table, FALSE, FALSE, 6); + priv->menubar = menubar_new (obj); + priv->toolbar = GTK_WIDGET(toolbar_new (obj)); + + gtk_box_pack_start (GTK_BOX(main_vbox), priv->menubar, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX(main_vbox), priv->toolbar, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX(main_vbox), header_table, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(main_vbox), priv->msg_body, TRUE, TRUE, 6); gtk_widget_show_all (GTK_WIDGET(main_vbox)); gtk_container_add (GTK_CONTAINER(obj), main_vbox); } + + static void modest_edit_msg_window_finalize (GObject *obj) @@ -159,47 +286,58 @@ modest_edit_msg_window_finalize (GObject *obj) g_object_unref (G_OBJECT(priv->conf)); priv->conf = NULL; + g_object_unref (G_OBJECT(priv->factory)); + priv->factory = NULL; + G_OBJECT_CLASS(parent_class)->finalize (obj); } + + static gboolean on_delete_event (GtkWidget *widget, GdkEvent *event, ModestEditMsgWindow *self) { ModestEditMsgWindowPrivate *priv; priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(self); - + modest_widget_memory_save_settings (priv->conf, GTK_WIDGET(priv->msg_body), "modest-edit-msg-body"); - gtk_widget_destroy (GTK_WIDGET(self)); - return TRUE; + return FALSE; } - - GtkWidget* -modest_edit_msg_window_new (ModestConf *conf, ModestEditType type, - TnyMsgIface *msg) +modest_edit_msg_window_new (ModestConf *conf, ModestWidgetFactory *factory, + ModestEditType type, TnyMsgIface *msg) { GObject *obj; ModestEditMsgWindowPrivate *priv; g_return_val_if_fail (conf, NULL); + g_return_val_if_fail (factory, NULL); g_return_val_if_fail (type >= 0 && type < MODEST_EDIT_TYPE_NUM, NULL); g_return_val_if_fail (!(type==MODEST_EDIT_TYPE_NEW && msg), NULL); - g_return_val_if_fail (!(type!=MODEST_EDIT_TYPE_NEW && !msg), NULL); - + g_return_val_if_fail (!(type!=MODEST_EDIT_TYPE_NEW && !msg), NULL); obj = g_object_new(MODEST_TYPE_EDIT_MSG_WINDOW, NULL); priv = MODEST_EDIT_MSG_WINDOW_GET_PRIVATE(obj); g_object_ref (G_OBJECT(conf)); priv->conf = conf; + + g_object_ref (factory); + priv->factory = factory; + + init_window (obj); - modest_widget_memory_restore_settings (priv->conf, GTK_WIDGET(priv->msg_body), + modest_widget_memory_restore_settings (priv->conf, GTK_WIDGET(obj), "modest-edit-msg-body"); + + gtk_window_set_title (GTK_WINDOW(obj), "Modest"); + gtk_window_set_icon (GTK_WINDOW(obj), + modest_icon_factory_get_icon (MODEST_APP_ICON)); g_signal_connect (G_OBJECT(obj), "delete-event", G_CALLBACK(on_delete_event), obj); diff --git a/src/gtk2/modest-edit-msg-window.h b/src/gtk2/modest-edit-msg-window.h index e17a76a..422e0d3 100644 --- a/src/gtk2/modest-edit-msg-window.h +++ b/src/gtk2/modest-edit-msg-window.h @@ -33,6 +33,7 @@ #include #include #include +#include #include @@ -76,6 +77,7 @@ typedef enum _ModestEditType ModestEditType; GType modest_edit_msg_window_get_type (void) G_GNUC_CONST; GtkWidget* modest_edit_msg_window_new (ModestConf *conf, + ModestWidgetFactory *factory, ModestEditType type, TnyMsgIface *msg); G_END_DECLS diff --git a/src/gtk2/modest-icon-names.h b/src/gtk2/modest-icon-names.h index 3c5a42b..fc39ad5 100644 --- a/src/gtk2/modest-icon-names.h +++ b/src/gtk2/modest-icon-names.h @@ -64,6 +64,16 @@ #define MODEST_FOLDER_ICON_NOTES PIXMAP_PREFIX "qgn_list_messagin_viewer.png" #define MODEST_FOLDER_ICON_CALENDAR PIXMAP_PREFIX "qgn_widg_datedit.png" - +/* toolbar */ +#define MODEST_TOOLBAR_ICON_MAIL_SEND PIXMAP_PREFIX "gnome-stock-mail-new.svg" +#define MODEST_TOOLBAR_ICON_NEW_MAIL PIXMAP_PREFIX "gnome-stock-mail-new.svg" +#define MODEST_TOOLBAR_ICON_SEND_RECEIVE PIXMAP_PREFIX "gtk-refresh.svg" +#define MODEST_TOOLBAR_ICON_REPLY PIXMAP_PREFIX "gnome-stock-mail-rpl.svg" +#define MODEST_TOOLBAR_ICON_REPLY_ALL PIXMAP_PREFIX "mail-reply-all.svg" +#define MODEST_TOOLBAR_ICON_FORWARD PIXMAP_PREFIX "forward.svg" +#define MODEST_TOOLBAR_ICON_DELETE PIXMAP_PREFIX "edit-delete.svg" +#define MODEST_TOOLBAR_ICON_NEXT PIXMAP_PREFIX "back.svg" +#define MODEST_TOOLBAR_ICON_PREV PIXMAP_PREFIX "forward.svg" +#define MODEST_TOOLBAR_ICON_STOP PIXMAP_PREFIX "stock-stop.svg" #endif /*__MODEST_TNY_ICON_NAMES_H__*/ diff --git a/src/gtk2/modest-main-window.c b/src/gtk2/modest-main-window.c index 087af94..c0e8376 100644 --- a/src/gtk2/modest-main-window.c +++ b/src/gtk2/modest-main-window.c @@ -30,6 +30,8 @@ #include #include +#include + #include "modest-main-window.h" #include "modest-account-view-window.h" #include "modest-edit-msg-window.h" @@ -61,7 +63,7 @@ struct _ModestMainWindowPrivate { GtkWidget *msg_paned; GtkWidget *main_paned; - ModestWidgetFactory *widget_factory; + ModestWidgetFactory *factory; ModestConf *conf; ModestAccountMgr *account_mgr; @@ -130,7 +132,7 @@ modest_main_window_init (ModestMainWindow *obj) priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj); - priv->widget_factory = NULL; + priv->factory = NULL; priv->conf = NULL; priv->account_mgr = NULL; } @@ -140,9 +142,9 @@ modest_main_window_finalize (GObject *obj) { ModestMainWindowPrivate *priv; priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj); - if (priv->widget_factory) { - g_object_unref (G_OBJECT(priv->widget_factory)); - priv->widget_factory = NULL; + if (priv->factory) { + g_object_unref (G_OBJECT(priv->factory)); + priv->factory = NULL; } if (priv->conf) { g_object_unref (G_OBJECT(priv->conf)); @@ -197,7 +199,7 @@ on_menu_accounts (ModestMainWindow *self, guint action, GtkWidget *widget) priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); account_win = modest_account_view_window_new (priv->account_mgr, - priv->widget_factory); + priv->factory); gtk_window_set_transient_for (GTK_WINDOW(account_win), GTK_WINDOW(self)); @@ -215,6 +217,7 @@ on_menu_new_message (ModestMainWindow *self, guint action, GtkWidget *widget) priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); msg_win = modest_edit_msg_window_new (priv->conf, + priv->factory, MODEST_EDIT_TYPE_NEW, NULL); gtk_widget_show (msg_win); @@ -223,11 +226,11 @@ on_menu_new_message (ModestMainWindow *self, guint action, GtkWidget *widget) static void on_menu_quit (ModestMainWindow *self, guint action, GtkWidget *widget) { - gtk_main_quit (); + save_sizes (self); + gtk_widget_destroy (GTK_WIDGET(self)); } - /* Our menu, an array of GtkItemFactoryEntry structures that defines each menu item */ static GtkItemFactoryEntry menu_items[] = { { "/_File", NULL, NULL, 0, "" }, @@ -307,26 +310,61 @@ header_view_new (ModestMainWindow *self) MODEST_HEADER_VIEW_COLUMN_MSGTYPE, MODEST_HEADER_VIEW_COLUMN_ATTACH, MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER +/* MODEST_HEADER_VIEW_COLUMN_FROM, */ +/* MODEST_HEADER_VIEW_COLUMN_SUBJECT, */ +/* MODEST_HEADER_VIEW_COLUMN_RECEIVED_DATE */ }; - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); for (i = 0 ; i != sizeof(cols) / sizeof(ModestHeaderViewColumn); ++i) columns = g_slist_append (columns, GINT_TO_POINTER(cols[i])); - header_view = modest_widget_factory_get_header_view (priv->widget_factory); + header_view = modest_widget_factory_get_header_view (priv->factory); modest_header_view_set_columns (header_view, columns); g_slist_free (columns); return header_view; } +static ModestToolbar* +toolbar_new (ModestMainWindow *self) +{ + int i; + ModestToolbar *toolbar; + GSList *buttons = NULL; + ModestMainWindowPrivate *priv; + + ModestToolbarButton button_ids[] = { + MODEST_TOOLBAR_BUTTON_NEW_MAIL, + MODEST_TOOLBAR_BUTTON_REPLY, + MODEST_TOOLBAR_BUTTON_REPLY_ALL, + MODEST_TOOLBAR_BUTTON_FORWARD, + MODEST_TOOLBAR_SEPARATOR, + MODEST_TOOLBAR_BUTTON_SEND_RECEIVE, + MODEST_TOOLBAR_SEPARATOR, + MODEST_TOOLBAR_BUTTON_NEXT, + MODEST_TOOLBAR_BUTTON_PREV, + MODEST_TOOLBAR_SEPARATOR, + MODEST_TOOLBAR_BUTTON_DELETE + }; + + priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); + + for (i = 0 ; i != sizeof(button_ids) / sizeof(ModestToolbarButton); ++i) + buttons = g_slist_append (buttons, GINT_TO_POINTER(button_ids[i])); + + toolbar = modest_widget_factory_get_main_toolbar (priv->factory, buttons); + g_slist_free (buttons); + + return toolbar; +} + + static void restore_sizes (ModestMainWindow *self) { - ModestMainWindowPrivate *priv; - + ModestMainWindowPrivate *priv; priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); modest_widget_memory_restore_settings (priv->conf,GTK_WIDGET(self), @@ -337,7 +375,6 @@ restore_sizes (ModestMainWindow *self) "modest-msg-paned"); modest_widget_memory_restore_settings (priv->conf, GTK_WIDGET(priv->main_paned), "modest-main-paned"); - } @@ -356,12 +393,8 @@ save_sizes (ModestMainWindow *self) "modest-msg-paned"); modest_widget_memory_save_settings (priv->conf, GTK_WIDGET(priv->main_paned), "modest-main-paned"); - - - } - static GtkWidget* wrapped_in_scrolled_window (GtkWidget *widget, gboolean needs_viewport) { @@ -387,11 +420,29 @@ static gboolean on_delete_event (GtkWidget *widget, GdkEvent *event, ModestMainWindow *self) { save_sizes (self); - gtk_widget_destroy (GTK_WIDGET(self)); - - return TRUE; + return FALSE; } +static GtkWidget* +favorites_view () +{ + GtkWidget *favorites; + GtkTreeStore *store; + GtkTreeViewColumn *col; + + store = gtk_tree_store_new (1, G_TYPE_STRING); + favorites = gtk_tree_view_new_with_model (GTK_TREE_MODEL(store)); + col = gtk_tree_view_column_new_with_attributes (_("Favorites"), + gtk_cell_renderer_text_new(), + "text", 0, NULL); + + gtk_tree_view_append_column (GTK_TREE_VIEW(favorites), col); + gtk_widget_show_all (favorites); + + g_object_unref (G_OBJECT(store)); + + return favorites; +} @@ -404,7 +455,7 @@ modest_main_window_new (ModestConf *conf, ModestAccountMgr *account_mgr, GtkWidget *main_vbox; GtkWidget *status_hbox; - GtkWidget *header_win, *folder_win; + GtkWidget *header_win, *folder_win, *favorites_win; g_return_val_if_fail (factory, NULL); g_return_val_if_fail (conf, NULL); @@ -413,7 +464,7 @@ modest_main_window_new (ModestConf *conf, ModestAccountMgr *account_mgr, priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj); g_object_ref (factory); - priv->widget_factory = factory; + priv->factory = factory; g_object_ref (conf); priv->conf = conf; @@ -421,19 +472,20 @@ modest_main_window_new (ModestConf *conf, ModestAccountMgr *account_mgr, g_object_ref (account_mgr); priv->account_mgr = account_mgr; - /* widgets from factory */ priv->folder_view = modest_widget_factory_get_folder_view (factory); priv->header_view = header_view_new (MODEST_MAIN_WINDOW(obj)); priv->msg_preview = modest_widget_factory_get_msg_preview (factory); - + folder_win = wrapped_in_scrolled_window (GTK_WIDGET(priv->folder_view), FALSE); header_win = wrapped_in_scrolled_window (GTK_WIDGET(priv->header_view), FALSE); + favorites_win = wrapped_in_scrolled_window (favorites_view(),FALSE); + /* tool/menubar */ priv->menubar = menubar_new (MODEST_MAIN_WINDOW(obj)); - priv->toolbar = gtk_toolbar_new (); + priv->toolbar = GTK_WIDGET(toolbar_new (MODEST_MAIN_WINDOW(obj))); /* paned */ priv->folder_paned = gtk_vpaned_new (); @@ -441,8 +493,7 @@ modest_main_window_new (ModestConf *conf, ModestAccountMgr *account_mgr, priv->main_paned = gtk_hpaned_new (); gtk_paned_add1 (GTK_PANED(priv->main_paned), priv->folder_paned); gtk_paned_add2 (GTK_PANED(priv->main_paned), priv->msg_paned); -// gtk_paned_add1 (GTK_PANED(priv->folder_paned), -// gtk_label_new (_("Favorites"))); + gtk_paned_add1 (GTK_PANED(priv->folder_paned), favorites_win); gtk_paned_add2 (GTK_PANED(priv->folder_paned), folder_win); gtk_paned_add1 (GTK_PANED(priv->msg_paned), header_win); gtk_paned_add2 (GTK_PANED(priv->msg_paned), GTK_WIDGET(priv->msg_preview)); @@ -454,6 +505,9 @@ modest_main_window_new (ModestConf *conf, ModestAccountMgr *account_mgr, /* status bar / progress */ status_hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX(status_hbox), + modest_widget_factory_get_folder_info_label (factory), + FALSE,FALSE, 6); + gtk_box_pack_start (GTK_BOX(status_hbox), modest_widget_factory_get_status_bar(factory), TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX(status_hbox), @@ -478,7 +532,7 @@ modest_main_window_new (ModestConf *conf, ModestAccountMgr *account_mgr, modest_icon_factory_get_icon (MODEST_APP_ICON)); gtk_widget_show_all (main_vbox); - + g_signal_connect (G_OBJECT(obj), "delete-event", G_CALLBACK(on_delete_event), obj); diff --git a/src/gtk2/modest-transport-widget.c b/src/gtk2/modest-transport-widget.c index c1ef272..9aeb080 100644 --- a/src/gtk2/modest-transport-widget.c +++ b/src/gtk2/modest-transport-widget.c @@ -52,6 +52,7 @@ modest_transport_widget_get_type (void) sizeof(ModestTransportWidget), 1, /* n_preallocs */ (GInstanceInitFunc) modest_transport_widget_init, + NULL }; my_type = g_type_register_static (GTK_TYPE_VBOX, "ModestTransportWidget", diff --git a/src/gtk2/modest-ui.c b/src/gtk2/modest-ui.c index 9c221dc..180e3dd 100644 --- a/src/gtk2/modest-ui.c +++ b/src/gtk2/modest-ui.c @@ -56,6 +56,8 @@ struct _ModestUIPrivate { ModestAccountMgr *account_mgr; ModestWidgetFactory *widget_factory; ModestTnyAccountStore *account_store; + + GtkWidget *main_window; }; #define MODEST_UI_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ @@ -124,6 +126,8 @@ modest_ui_init (ModestUI *obj) priv->account_mgr = NULL; priv->conf = NULL; priv->widget_factory = NULL; + + priv->main_window = NULL; } @@ -192,6 +196,13 @@ modest_ui_new (ModestConf *modest_conf) return MODEST_UI(obj); } +static gboolean +on_main_window_delete_event (GtkWidget *widget, GdkEvent *event, ModestUI *self) +{ + gtk_main_quit (); + return FALSE; +} + GtkWidget* modest_ui_main_window (ModestUI *modest_ui) @@ -202,12 +213,16 @@ modest_ui_main_window (ModestUI *modest_ui) g_return_val_if_fail (modest_ui, NULL); priv = MODEST_UI_GET_PRIVATE(modest_ui); - win = modest_main_window_new (priv->conf, priv->account_mgr, - priv->widget_factory); - if (!win) + if (!priv->main_window) { + priv->main_window = + modest_main_window_new (priv->conf, priv->account_mgr, + priv->widget_factory); + g_signal_connect (G_OBJECT(priv->main_window), "delete-event", + G_CALLBACK(on_main_window_delete_event), modest_ui); + } + + if (!priv->main_window) g_printerr ("modest: could not create main window\n"); - - return win; + + return priv->main_window; } - -