X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmaemo%2Fmodest-main-window.c;h=68319732256482a73e0112f4a0592dbfcdd9ac41;hb=3266fbf87e009daf846687835198f80ae3a2d923;hp=8658f96fafe4725469f83ff83516cd5ed6ef1a27;hpb=c13e46ffecf4a7fb3c4d23cb7b9c235ffadfc1ec;p=modest diff --git a/src/maemo/modest-main-window.c b/src/maemo/modest-main-window.c index 8658f96..6831973 100644 --- a/src/maemo/modest-main-window.c +++ b/src/maemo/modest-main-window.c @@ -27,31 +27,36 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include + #include -#include -#include #include +#include +#include +#include -#include -#include +#include +#include +#include -#include -#include "modest-main-window.h" -#include "modest-account-view-window.h" +#include "modest-widget-memory.h" +#include "modest-window-priv.h" +#include "modest-main-window-ui.h" #include "modest-account-mgr.h" #include "modest-conf.h" -#include "modest-edit-msg-window.h" -#include "modest-icon-names.h" +#include #include "modest-tny-platform-factory.h" -#include "modest-tny-msg-actions.h" +#include "modest-tny-msg.h" #include "modest-mail-operation.h" +#include "modest-icon-names.h" /* 'private'/'protected' functions */ static void modest_main_window_class_init (ModestMainWindowClass *klass); static void modest_main_window_init (ModestMainWindow *obj); static void modest_main_window_finalize (GObject *obj); +static void connect_signals (ModestMainWindow *self); static void restore_sizes (ModestMainWindow *self); static void save_sizes (ModestMainWindow *self); @@ -64,28 +69,29 @@ enum { typedef struct _ModestMainWindowPrivate ModestMainWindowPrivate; struct _ModestMainWindowPrivate { - - GtkUIManager *ui_manager; - - GtkWidget *toolbar; - GtkWidget *menu; - - //GtkWidget *folder_paned; GtkWidget *msg_paned; GtkWidget *main_paned; - - ModestWidgetFactory *widget_factory; - TnyPlatformFactory *factory; - + GtkWidget *progress_bar; + ModestHeaderView *header_view; ModestFolderView *folder_view; - ModestMsgView *msg_preview; + }; #define MODEST_MAIN_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ MODEST_TYPE_MAIN_WINDOW, \ ModestMainWindowPrivate)) + +typedef struct _GetMsgAsyncHelper { + ModestMainWindowPrivate *main_window_private; + guint action; + ModestTnyMsgReplyType reply_type; + ModestTnyMsgForwardType forward_type; + gchar *from; + TnyIterator *iter; +} GetMsgAsyncHelper; + /* globals */ static GtkWindowClass *parent_class = NULL; @@ -109,7 +115,7 @@ modest_main_window_get_type (void) (GInstanceInitFunc) modest_main_window_init, NULL }; - my_type = g_type_register_static (HILDON_TYPE_WINDOW, + my_type = g_type_register_static (MODEST_TYPE_WINDOW, "ModestMainWindow", &my_info, 0); } @@ -126,403 +132,87 @@ modest_main_window_class_init (ModestMainWindowClass *klass) gobject_class->finalize = modest_main_window_finalize; g_type_class_add_private (gobject_class, sizeof(ModestMainWindowPrivate)); - - /* signal definitions go here, e.g.: */ -/* signals[MY_SIGNAL_1] = */ -/* g_signal_new ("my_signal_1",....); */ -/* signals[MY_SIGNAL_2] = */ -/* g_signal_new ("my_signal_2",....); */ -/* etc. */ -} - -static void -modest_main_window_init (ModestMainWindow *obj) -{ - ModestMainWindowPrivate *priv; - - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj); - - priv->factory = modest_tny_platform_factory_get_instance (); -} - -static void -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; - } - - G_OBJECT_CLASS(parent_class)->finalize (obj); -} - - -static void -on_menu_about (GtkWidget *widget, gpointer data) -{ - GtkWidget *about; - const gchar *authors[] = { - "Dirk-Jan C. Binnema ", - NULL - }; - about = gtk_about_dialog_new (); - gtk_about_dialog_set_name (GTK_ABOUT_DIALOG(about), PACKAGE_NAME); - gtk_about_dialog_set_version (GTK_ABOUT_DIALOG(about),PACKAGE_VERSION); - gtk_about_dialog_set_copyright ( - GTK_ABOUT_DIALOG(about), - _("Copyright (c) 2006, Nokia Corporation\n" - "All rights reserved.")); - gtk_about_dialog_set_comments ( GTK_ABOUT_DIALOG(about), - _("a modest e-mail client\n\n" - "design and implementation: Dirk-Jan C. Binnema\n" - "contributions from the fine people at KernelConcepts\n\n" - "uses the tinymail email framework written by Philip van Hoof")); - gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG(about), authors); - gtk_about_dialog_set_website (GTK_ABOUT_DIALOG(about), "http://modest.garage.maemo.org"); - - gtk_dialog_run (GTK_DIALOG (about)); - gtk_widget_destroy(about); } static void -on_menu_accounts (ModestMainWindow *self, guint action, GtkWidget *widget) +on_key_changed (ModestConf* conf, const gchar *key, ModestConfEvent event, ModestMainWindow *win) { - GtkWidget *account_win; - ModestMainWindowPrivate *priv; - - g_return_if_fail (widget); - g_return_if_fail (self); + TnyAccount *account; - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); - account_win = modest_account_view_window_new (priv->widget_factory); - - gtk_window_set_transient_for (GTK_WINDOW(account_win), - GTK_WINDOW(self)); - - gtk_widget_show (account_win); -} - - -static void -on_menu_new_message (ModestMainWindow *self, guint action, GtkWidget *widget) -{ - GtkWidget *msg_win; - ModestMainWindowPrivate *priv; - - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); + if (!key || strcmp (key, MODEST_CONF_DEVICE_NAME) != 0) + return; /* wrong key */ + + /* ok, the device name changed; thus, we have to update the + * local folder account name*/ + account = + modest_tny_account_store_get_tny_account_by_account (modest_runtime_get_account_store(), + MODEST_LOCAL_FOLDERS_ACCOUNT_ID, + TNY_ACCOUNT_TYPE_STORE); + if (!account) { + g_printerr ("modest: could not get account\n"); + return; + } - msg_win = modest_edit_msg_window_new (priv->widget_factory, - MODEST_EDIT_TYPE_NEW, - NULL); - gtk_widget_show (msg_win); + if (event == MODEST_CONF_EVENT_KEY_UNSET) + tny_account_set_name (account, MODEST_LOCAL_FOLDERS_DEFAULT_DISPLAY_NAME); + else { + gchar *device_name = modest_conf_get_string (modest_runtime_get_conf(), + MODEST_CONF_DEVICE_NAME, NULL); + tny_account_set_name (account, device_name); + g_free (device_name); + } + g_object_unref (G_OBJECT(account)); } static void -on_menu_reply_forward (ModestMainWindow *self, guint action, GtkWidget *widget) +modest_main_window_init (ModestMainWindow *obj) { - GtkWidget *msg_win; ModestMainWindowPrivate *priv; - ModestHeaderView *header_view; - TnyList *header_list; - TnyIterator *iter; - const gchar *from; - gchar *reply_key, *forward_key; - ModestMailOperationReplyType reply_type; - ModestMailOperationForwardType forward_type; - ModestConf *conf; - GError *error; - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); - conf = modest_tny_platform_factory_get_modest_conf_instance (priv->factory); + priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj); - header_view = modest_widget_factory_get_header_view (priv->widget_factory); - header_list = modest_header_view_get_selected_headers (header_view); + priv->msg_paned = NULL; + priv->main_paned = NULL; + priv->header_view = NULL; + priv->folder_view = NULL; - /* Get reply and forward types */ - error = NULL; - reply_key = g_strdup_printf ("%s/%s", MODEST_CONF_NAMESPACE, MODEST_CONF_REPLY_TYPE); - reply_type = modest_conf_get_int (conf, reply_key, &error); - if (error) { - g_warning ("key %s not defined", reply_key); - reply_type = MODEST_MAIL_OPERATION_REPLY_TYPE_CITE; - g_error_free (error); - error = NULL; - } - g_free (reply_key); - - forward_key = g_strdup_printf ("%s/%s", MODEST_CONF_NAMESPACE, MODEST_CONF_FORWARD_TYPE); - forward_type = modest_conf_get_int (conf, forward_key, NULL); - if (error) { - g_warning ("key %s not defined", forward_key); - reply_type = MODEST_MAIL_OPERATION_FORWARD_TYPE_INLINE; - g_error_free (error); - } - g_free (forward_key); - - if (header_list) { - iter = tny_list_create_iterator (header_list); - do { - TnyHeader *header, *new_header; - TnyFolder *folder; - TnyMsg *msg, *new_msg; - ModestEditType edit_type; - - /* Get msg from header */ - header = TNY_HEADER (tny_iterator_get_current (iter)); - folder = tny_header_get_folder (header); - msg = tny_folder_get_msg (folder, header, NULL); /* FIXME */ - - from = modest_folder_view_get_selected_account (priv->folder_view); - - /* FIXME: select proper action */ - switch (action) { - case 1: - new_msg = - modest_mail_operation_create_reply_mail (msg, from, reply_type, - MODEST_MAIL_OPERATION_REPLY_MODE_SENDER); - edit_type = MODEST_EDIT_TYPE_REPLY; - break; - case 2: - new_msg = - modest_mail_operation_create_reply_mail (msg, from, reply_type, - MODEST_MAIL_OPERATION_REPLY_MODE_ALL); - edit_type = MODEST_EDIT_TYPE_REPLY; - break; - case 3: - new_msg = - modest_mail_operation_create_forward_mail (msg, from, forward_type); - edit_type = MODEST_EDIT_TYPE_FORWARD; - break; - default: - g_warning ("unexpected action type: %d", action); - } - - /* Set from */ - new_header = tny_msg_get_header (new_msg); - tny_header_set_from (new_header, - modest_folder_view_get_selected_account (priv->folder_view)); - - /* Show edit window */ - msg_win = modest_edit_msg_window_new (priv->widget_factory, - edit_type, - new_msg); - gtk_widget_show (msg_win); - - /* Clean and go on */ - g_object_unref (new_msg); - tny_iterator_next (iter); - - } while (!tny_iterator_is_done (iter)); - } + /* progress bar */ + priv->progress_bar = gtk_progress_bar_new (); + gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(priv->progress_bar), 1.0); + gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR(priv->progress_bar), + PANGO_ELLIPSIZE_END); } static void -on_menu_quit (ModestMainWindow *self, guint action, GtkWidget *widget) +modest_main_window_finalize (GObject *obj) { - save_sizes (self); - gtk_widget_destroy (GTK_WIDGET(self)); + G_OBJECT_CLASS(parent_class)->finalize (obj); } -static void -on_menu_delete (ModestMainWindow *self, guint action, GtkWidget *widget) +GtkWidget* +modest_main_window_get_child_widget (ModestMainWindow *self, + ModestWidgetType widget_type) { ModestMainWindowPrivate *priv; - ModestHeaderView *header_view; - TnyList *header_list; - TnyIterator *iter; - GtkTreeModel *model; - - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); - - header_view = modest_widget_factory_get_header_view (priv->widget_factory); - header_list = modest_header_view_get_selected_headers (header_view); + GtkWidget *widget; - if (header_list) { - iter = tny_list_create_iterator (header_list); - model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view)); - if (GTK_IS_TREE_MODEL_SORT (model)) - model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (model)); - do { - TnyHeader *header; - ModestMailOperation *mail_op; - - header = TNY_HEADER (tny_iterator_get_current (iter)); - /* TODO: thick grain mail operation involving - a list of objects. Composite pattern ??? */ - mail_op = modest_mail_operation_new (); - - /* Move to trash */ - modest_mail_operation_remove_msg (mail_op, header, TRUE); - - /* Remove from tree model */ - tny_list_remove (TNY_LIST (model), G_OBJECT (header)); - - g_object_unref (G_OBJECT (mail_op)); - g_object_unref (header); - tny_iterator_next (iter); - - } while (!tny_iterator_is_done (iter)); - } -} - - -/* Our menu, an array of GtkItemFactoryEntry structures that defines each menu item */ -static const gchar* UI_DEF= - "" - "" - " " - " " - " " - " " -// " " -// " " -// " " -// " " -// " " -// " " - " " - ""; - -static GtkMenu * -get_menu (ModestMainWindow *self) -{ - GtkWidget *w; - int i = 0; + g_return_val_if_fail (self, NULL); + g_return_val_if_fail (widget_type >= 0 && widget_type < MODEST_WIDGET_TYPE_NUM, + NULL); - ModestMainWindowPrivate *priv; priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); - priv->ui_manager = gtk_ui_manager_new (); - - gtk_ui_manager_add_ui_from_string (priv->ui_manager, - UI_DEF, strlen(UI_DEF), - NULL); - - w = gtk_ui_manager_get_widget (priv->ui_manager, "/popup"); - g_warning ("==> GtkMenu? ==> %s", GTK_IS_MENU(w) ? "yes" : "no"); - - return GTK_MENU(w); -} - - - -static ModestHeaderView* -header_view_new (ModestMainWindow *self) -{ - int i; - GList *columns = NULL; - ModestHeaderView *header_view; - ModestMainWindowPrivate *priv; - ModestHeaderViewColumn cols[] = { - 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_list_append (columns, GINT_TO_POINTER(cols[i])); - - header_view = modest_widget_factory_get_header_view (priv->widget_factory); - modest_header_view_set_columns (header_view, columns); - g_list_free (columns); - - return header_view; -} - - -static void -on_toolbar_button_clicked (ModestToolbar *toolbar, ModestToolbarButton button_id, - ModestMainWindow *self) -{ - GtkTreeSelection *sel; - GtkTreeIter iter; - GtkTreeModel *model; - ModestMainWindowPrivate *priv; - - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); - - switch (button_id) { - case MODEST_TOOLBAR_BUTTON_NEW_MAIL: - on_menu_new_message (self, 0, NULL); - break; - case MODEST_TOOLBAR_BUTTON_REPLY: - on_menu_reply_forward (self, 1, NULL); - break; - case MODEST_TOOLBAR_BUTTON_REPLY_ALL: - on_menu_reply_forward (self, 2, NULL); - break; - case MODEST_TOOLBAR_BUTTON_FORWARD: - on_menu_reply_forward (self, 3, NULL); - break; - case MODEST_TOOLBAR_BUTTON_SEND_RECEIVE: - - - case MODEST_TOOLBAR_BUTTON_NEXT: - sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(priv->header_view)); - if (sel) { - gtk_tree_selection_get_selected (sel, &model, &iter); - gtk_tree_model_iter_next (model, &iter); - gtk_tree_selection_select_iter (sel, &iter); - } - - case MODEST_TOOLBAR_BUTTON_PREV: - /* if (sel) { */ -/* gtk_tree_selection_get_selected (sel, &model, &iter); */ -/* gtk_tree_model_iter_prev (model, &iter); */ -/* gtk_tree_selection_select_iter (sel, &iter); */ -/* } */ - - break; - case MODEST_TOOLBAR_BUTTON_DELETE: - on_menu_delete (self, 0, GTK_WIDGET (toolbar)); - break; - + switch (widget_type) { + case MODEST_WIDGET_TYPE_HEADER_VIEW: + widget = (GtkWidget*)priv->header_view; break; + case MODEST_WIDGET_TYPE_FOLDER_VIEW: + widget = (GtkWidget*)priv->folder_view; break; default: - g_printerr ("modest: key %d pressed\n", button_id); + return NULL; } -} - -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_PREV, - MODEST_TOOLBAR_BUTTON_NEXT, - 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->widget_factory, buttons); - g_slist_free (buttons); - - g_signal_connect (G_OBJECT(toolbar), "button_clicked", - G_CALLBACK(on_toolbar_button_clicked), self); - - return toolbar; + return widget ? GTK_WIDGET(widget) : NULL; } @@ -532,34 +222,31 @@ restore_sizes (ModestMainWindow *self) { ModestConf *conf; ModestMainWindowPrivate *priv; - + priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); - conf = modest_tny_platform_factory_get_modest_conf_instance (priv->factory); - - modest_widget_memory_restore_settings (conf,GTK_WIDGET(self), - "modest-main-window"); - modest_widget_memory_restore_settings (conf, GTK_WIDGET(priv->msg_paned), - "modest-msg-paned"); - modest_widget_memory_restore_settings (conf, GTK_WIDGET(priv->main_paned), - "modest-main-paned"); + + conf = modest_runtime_get_conf (); + + modest_widget_memory_restore (conf, G_OBJECT(priv->main_paned), + "modest-main-paned"); + modest_widget_memory_restore (conf, G_OBJECT(priv->header_view), + "header-view"); } static void save_sizes (ModestMainWindow *self) { - ModestMainWindowPrivate *priv; ModestConf *conf; - + ModestMainWindowPrivate *priv; + priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); - conf = modest_tny_platform_factory_get_modest_conf_instance (priv->factory); + conf = modest_runtime_get_conf (); - modest_widget_memory_save_settings (conf,GTK_WIDGET(self), - "modest-main-window"); - modest_widget_memory_save_settings (conf, GTK_WIDGET(priv->msg_paned), - "modest-msg-paned"); - modest_widget_memory_save_settings (conf, GTK_WIDGET(priv->main_paned), - "modest-main-paned"); + modest_widget_memory_save (conf,G_OBJECT(self), "modest-main-window"); + modest_widget_memory_save (conf, G_OBJECT(priv->main_paned), + "modest-main-paned"); + modest_widget_memory_save (conf, G_OBJECT(priv->header_view), "header-view"); } static GtkWidget* @@ -590,85 +277,187 @@ on_delete_event (GtkWidget *widget, GdkEvent *event, ModestMainWindow *self) return FALSE; } +static GtkWidget* +get_toolbar (ModestMainWindow *self) +{ + GtkWidget *toolbar, *reply_button, *menu; + ModestWindowPrivate *parent_priv; + + parent_priv = MODEST_WINDOW_GET_PRIVATE(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"); -GtkWidget* -modest_main_window_new (ModestWidgetFactory *widget_factory) + 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; +} + + +static void +on_destroy (GtkWidget *widget, GdkEvent *event, ModestMainWindow *self) { - GObject *obj; + gtk_main_quit(); +} + +static void +connect_signals (ModestMainWindow *self) +{ + ModestWindowPrivate *parent_priv; ModestMainWindowPrivate *priv; + GtkWidget *menu; - GtkWidget *main_vbox; - GtkWidget *status_hbox; - GtkWidget *header_win, *folder_win, *favorites_win; + priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); + parent_priv = MODEST_WINDOW_GET_PRIVATE(self); - g_return_val_if_fail (widget_factory, NULL); + /* folder view */ + g_signal_connect (G_OBJECT(priv->folder_view), "folder_selection_changed", + G_CALLBACK(modest_ui_actions_on_folder_selection_changed), self); + + menu = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/FolderViewContextMenu"); + gtk_widget_tap_and_hold_setup (GTK_WIDGET (priv->folder_view), menu, NULL, 0); + + /* header view */ +/* g_signal_connect (G_OBJECT(priv->header_view), "status_update", */ +/* G_CALLBACK(modest_ui_actions_on_header_status_update), self); */ + g_signal_connect (G_OBJECT(priv->header_view), "header_selected", + G_CALLBACK(modest_ui_actions_on_header_selected), self); + g_signal_connect (G_OBJECT(priv->header_view), "header_activated", + G_CALLBACK(modest_ui_actions_on_header_activated), self); + g_signal_connect (G_OBJECT(priv->header_view), "item_not_found", + G_CALLBACK(modest_ui_actions_on_item_not_found), self); + + /* window */ + g_signal_connect (G_OBJECT(self), "destroy", G_CALLBACK(on_destroy), NULL); + g_signal_connect (G_OBJECT(self), "delete-event", G_CALLBACK(on_delete_event), self); - obj = g_object_new(MODEST_TYPE_MAIN_WINDOW, NULL); - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj); + + /* modest_maemo_utils_get_device_name will probably change + * MODEST_CONF_DEVICE_NAME. If that happens, we update the local folders + * account name in the callback + */ + g_signal_connect (G_OBJECT(modest_runtime_get_conf()), "key_changed", + G_CALLBACK(on_key_changed), self); + + g_signal_connect (G_OBJECT(self), "delete-event", G_CALLBACK(on_delete_event), self); +} - g_object_ref (widget_factory); - priv->widget_factory = widget_factory; - /* widgets from factory */ - priv->folder_view = modest_widget_factory_get_folder_view (widget_factory); - priv->header_view = header_view_new (MODEST_MAIN_WINDOW(obj)); - priv->msg_preview = modest_widget_factory_get_msg_preview (widget_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); - /*menu */ - priv->menu = get_menu (MODEST_MAIN_WINDOW(obj)); - hildon_window_set_menu (HILDON_WINDOW(obj), GTK_MENU(priv->menu)); +gboolean +sync_accounts_cb (ModestMainWindow *win) +{ + modest_ui_actions_on_send_receive (NULL, MODEST_WINDOW(win)); + return FALSE; +} + + +ModestWindow* +modest_main_window_new (void) +{ + ModestMainWindow *self; + ModestMainWindowPrivate *priv; + ModestWindowPrivate *parent_priv; + GtkWidget *main_vbox; + GtkWidget *header_win, *folder_win; + GtkActionGroup *action_group; + GError *error = NULL; + TnyFolderStoreQuery *query; + + self = MODEST_MAIN_WINDOW(g_object_new(MODEST_TYPE_MAIN_WINDOW, NULL)); + priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); + parent_priv = MODEST_WINDOW_GET_PRIVATE(self); + + parent_priv->ui_manager = gtk_ui_manager_new(); + action_group = gtk_action_group_new ("ModestMainWindowActions"); + + /* Add common actions */ + gtk_action_group_add_actions (action_group, + modest_action_entries, + G_N_ELEMENTS (modest_action_entries), + self); - priv->toolbar = GTK_WIDGET(toolbar_new (MODEST_MAIN_WINDOW(obj))); + gtk_ui_manager_insert_action_group (parent_priv->ui_manager, action_group, 0); + g_object_unref (action_group); + + /* Load the UI definition */ + gtk_ui_manager_add_ui_from_file (parent_priv->ui_manager, + MODEST_UIDIR "modest-main-window-ui.xml", &error); + if (error != NULL) { + g_warning ("Could not merge modest-ui.xml: %s", error->message); + g_error_free (error); + error = NULL; + } + + /* Add accelerators */ + gtk_window_add_accel_group (GTK_WINDOW (self), + gtk_ui_manager_get_accel_group (parent_priv->ui_manager)); + + /* add the toolbar */ + parent_priv->toolbar = get_toolbar(self); + hildon_window_add_toolbar (HILDON_WINDOW (self), GTK_TOOLBAR (parent_priv->toolbar)); + + + /* Menubar */ + parent_priv->menubar = modest_maemo_utils_menubar_to_menu (parent_priv->ui_manager); + hildon_window_set_menu (HILDON_WINDOW (self), GTK_MENU (parent_priv->menubar)); + + /* folder view */ + query = tny_folder_store_query_new (); + tny_folder_store_query_add_item (query, NULL, + TNY_FOLDER_STORE_QUERY_OPTION_SUBSCRIBED); + priv->folder_view = MODEST_FOLDER_VIEW(modest_folder_view_new (query)); + if (!priv->folder_view) + g_printerr ("modest: cannot instantiate folder view\n"); + g_object_unref (G_OBJECT (query)); + modest_maemo_utils_get_device_name (); + + /* header view */ + priv->header_view = + MODEST_HEADER_VIEW(modest_header_view_new (NULL, MODEST_HEADER_VIEW_STYLE_DETAILS)); + if (!priv->header_view) + g_printerr ("modest: cannot instantiate header view\n"); + modest_header_view_set_style (priv->header_view, MODEST_HEADER_VIEW_STYLE_TWOLINES); + folder_win = wrapped_in_scrolled_window (GTK_WIDGET(priv->folder_view), FALSE); + header_win = wrapped_in_scrolled_window (GTK_WIDGET(priv->header_view), FALSE); /* paned */ - priv->msg_paned = gtk_vpaned_new (); priv->main_paned = gtk_hpaned_new (); - gtk_paned_add1 (GTK_PANED(priv->main_paned), folder_win); - gtk_paned_add2 (GTK_PANED(priv->main_paned), priv->msg_paned); - - gtk_paned_add1 (GTK_PANED(priv->msg_paned), header_win); - gtk_paned_add2 (GTK_PANED(priv->msg_paned), GTK_WIDGET(priv->msg_preview)); - + gtk_paned_add2 (GTK_PANED(priv->main_paned), header_win); gtk_widget_show (GTK_WIDGET(priv->header_view)); gtk_tree_view_columns_autosize (GTK_TREE_VIEW(priv->header_view)); - /* 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 (widget_factory), - FALSE,FALSE, 6); - gtk_box_pack_start (GTK_BOX(status_hbox), - modest_widget_factory_get_status_bar(widget_factory), - TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX(status_hbox), - modest_widget_factory_get_progress_bar(widget_factory), - FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX(status_hbox), - modest_widget_factory_get_online_toggle(widget_factory), - FALSE, FALSE, 0); - /* putting it all together... */ main_vbox = gtk_vbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX(main_vbox), priv->main_paned, TRUE, TRUE,0); - gtk_box_pack_start (GTK_BOX(main_vbox), priv->toolbar, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX(main_vbox), status_hbox, FALSE, FALSE, 0); - - gtk_container_add (GTK_CONTAINER(obj), main_vbox); - restore_sizes (MODEST_MAIN_WINDOW(obj)); - gtk_window_set_title (GTK_WINDOW(obj), "Modest"); - gtk_window_set_icon (GTK_WINDOW(obj), - modest_icon_factory_get_icon (MODEST_APP_ICON)); + gtk_container_add (GTK_CONTAINER(self), main_vbox); + restore_sizes (MODEST_MAIN_WINDOW(self)); + gtk_window_set_title (GTK_WINDOW(self), _("Modest")); + gtk_window_set_icon_from_file (GTK_WINDOW(self), MODEST_APP_ICON, NULL); gtk_widget_show_all (main_vbox); - g_signal_connect (G_OBJECT(obj), "delete-event", - G_CALLBACK(on_delete_event), obj); - - return GTK_WIDGET(obj); +/* /\* should we hide the toolbar? *\/ */ +/* if (!modest_conf_get_bool (modest_runtime_get_conf (), MODEST_CONF_SHOW_TOOLBAR, NULL)) */ +/* gtk_widget_hide (parent_priv->toolbar); */ + + /* Connect signals */ + connect_signals (self); + + /* Set account store */ + tny_account_store_view_set_account_store (TNY_ACCOUNT_STORE_VIEW (priv->folder_view), + TNY_ACCOUNT_STORE (modest_runtime_get_account_store ())); + g_idle_add ((GSourceFunc)sync_accounts_cb, self); + /* do send & receive when we are idle */ + + g_message ("online? %s", + tny_device_is_online (modest_runtime_get_device()) ? "yes" : "no"); + + /* Needed to show the contents of the toolbar */ + gtk_widget_show_all (GTK_WIDGET (self)); + + return MODEST_WINDOW(self); }