X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fgnome%2Fmodest-main-window.c;fp=src%2Fgnome%2Fmodest-main-window.c;h=0000000000000000000000000000000000000000;hp=ef483e652539d72ed1a3b46774bbe6c2039838b5;hb=2e02e9c88c3d02f03aab2c80af9413fd57cc725e;hpb=c854f31db5a75af96de548314eae83434a8012fc diff --git a/src/gnome/modest-main-window.c b/src/gnome/modest-main-window.c deleted file mode 100644 index ef483e6..0000000 --- a/src/gnome/modest-main-window.c +++ /dev/null @@ -1,903 +0,0 @@ -/* Copyright (c) 2006, Nokia Corporation - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the Nokia Corporation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include "widgets/modest-progress-bar.h" - -#include -#include "modest-widget-memory.h" -#include "modest-ui-actions.h" -#include "modest-main-window-ui.h" -#include "modest-main-window-ui-dimming.h" -#include "modest-account-mgr.h" -#include "modest-defs.h" -#include -#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 restore_settings (ModestMainWindow *self); - -static gboolean on_header_view_button_press_event (ModestHeaderView *header_view, - GdkEventButton *event, - ModestMainWindow *self); - -static gboolean on_folder_view_button_press_event (ModestFolderView *folder_view, - GdkEventButton *event, - ModestMainWindow *self); - -static gboolean show_context_popup_menu (ModestMainWindow *window, - GtkTreeView *tree_view, - GdkEventButton *event, - GtkWidget *menu); - -static void connect_signals (ModestMainWindow *self); -static void setup_toolbar (ModestMainWindow *window); - -static void on_queue_changed (ModestMailOperationQueue *queue, - ModestMailOperation *mail_op, - ModestMailOperationQueueNotification type, - ModestMainWindow *self); - -static void on_header_selected (ModestHeaderView *header_view, - TnyHeader *header, - ModestMainWindow *main_window); - -static void save_state (ModestWindow *window); - -/* list my signals */ -enum { - /* MY_SIGNAL_1, */ - /* MY_SIGNAL_2, */ - LAST_SIGNAL -}; - -typedef struct _ModestMainWindowPrivate ModestMainWindowPrivate; -struct _ModestMainWindowPrivate { - - GtkWidget *folder_paned; - GtkWidget *msg_paned; - GtkWidget *main_paned; - GtkWidget *main_vbox; - GtkWidget *header_win; - - GtkWidget *online_toggle; - GtkWidget *folder_info_label; - - ModestHeaderView *header_view; - ModestFolderView *folder_view; - ModestMsgView *msg_preview; - - ModestMainWindowStyle style; - - GtkWidget *status_bar; - GtkWidget *progress_bar; - - GSList *progress_widgets; - GtkWidget *main_bar; -}; - - -#define MODEST_MAIN_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ - MODEST_TYPE_MAIN_WINDOW, \ - ModestMainWindowPrivate)) - -/* globals */ -static GtkWindowClass *parent_class = NULL; - -static const GtkActionEntry modest_folder_view_action_entries [] = { - - /* Folder View CSM actions */ - { "FolderViewCSMNewFolder", NULL, N_("mcen_ti_new_folder"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_new_folder) }, - { "FolderViewCSMRenameFolder", NULL, N_("mcen_me_user_renamefolder"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_rename_folder) }, - { "FolderViewCSMPasteMsgs", NULL, N_("mcen_me_inbox_paste"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_paste)}, - { "FolderViewCSMDeleteFolder", NULL, N_("mcen_me_inbox_delete"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_delete_folder) }, - { "FolderViewCSMSearchMessages", NULL, N_("mcen_me_inbox_search"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_search_messages) }, - { "FolderViewCSMHelp", NULL, N_("mcen_me_inbox_help"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_csm_help) }, -}; - -static const GtkActionEntry modest_header_view_action_entries [] = { - - /* Header View CSM actions */ - { "HeaderViewCSMOpen", NULL, N_("mcen_me_inbox_open"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_open) }, - { "HeaderViewCSMReply", NULL, N_("mcen_me_inbox_reply"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_reply) }, - { "HeaderViewCSMReplyAll", NULL, N_("mcen_me_inbox_replytoall"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_reply_all) }, - { "HeaderViewCSMForward", NULL, N_("mcen_me_inbox_forward"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_forward) }, - { "HeaderViewCSMCut", NULL, N_("mcen_me_inbox_cut"), "X", NULL, G_CALLBACK (modest_ui_actions_on_cut) }, - { "HeaderViewCSMCopy", NULL, N_("mcen_me_inbox_copy"), "C", NULL, G_CALLBACK (modest_ui_actions_on_copy) }, - { "HeaderViewCSMPaste", NULL, N_("mcen_me_inbox_paste"), "V", NULL, G_CALLBACK (modest_ui_actions_on_paste) }, - { "HeaderViewCSMDelete", NULL, N_("mcen_me_inbox_delete"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_delete_message) }, - { "HeaderViewCSMCancelSending", NULL, N_("mcen_me_outbox_cancelsend"), NULL, NULL, G_CALLBACK (modest_ui_actions_cancel_send) }, - { "HeaderViewCSMHelp", NULL, N_("mcen_me_inbox_help"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_help) }, -}; - -static const GtkToggleActionEntry modest_main_window_toggle_action_entries [] = { - { "ToggleFolders", MODEST_STOCK_SPLIT_VIEW, N_("mcen_me_inbox_hidefolders"), "t", NULL, G_CALLBACK (modest_ui_actions_toggle_folders_view), TRUE }, -}; - - -/* uncomment the following if you have defined any signals */ -/* static guint signals[LAST_SIGNAL] = {0}; */ - -GType -modest_main_window_get_type (void) -{ - static GType my_type = 0; - if (!my_type) { - static const GTypeInfo my_info = { - sizeof(ModestMainWindowClass), - NULL, /* base init */ - NULL, /* base finalize */ - (GClassInitFunc) modest_main_window_class_init, - NULL, /* class finalize */ - NULL, /* class data */ - sizeof(ModestMainWindow), - 1, /* n_preallocs */ - (GInstanceInitFunc) modest_main_window_init, - NULL - }; - my_type = g_type_register_static (MODEST_TYPE_WINDOW, - "ModestMainWindow", - &my_info, 0); - } - return my_type; -} - -static void -modest_main_window_class_init (ModestMainWindowClass *klass) -{ - GObjectClass *gobject_class; - gobject_class = (GObjectClass*) klass; - - parent_class = g_type_class_peek_parent (klass); - gobject_class->finalize = modest_main_window_finalize; - - ((ModestWindowClass *)(klass))->save_state_func = save_state; - - g_type_class_add_private (gobject_class, sizeof(ModestMainWindowPrivate)); -} - -static GtkWidget * -create_main_bar (GtkWidget *progress_bar) -{ - GtkWidget *status_bar, *main_bar; - - main_bar = gtk_hbox_new (FALSE, 6); - - /* Status bar */ - status_bar = gtk_statusbar_new (); - gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (status_bar), FALSE); - - /* Pack */ - gtk_box_pack_start (GTK_BOX (main_bar), status_bar, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (main_bar), progress_bar, FALSE, FALSE, 0); - - return main_bar; -} - -static void -modest_main_window_init (ModestMainWindow *obj) -{ - TnyAccountStore *account_store; - ModestMainWindowPrivate *priv; - TnyFolderStoreQuery *query; - GtkWidget *icon; - gboolean online; - GtkWidget *progress_bar; - - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj); - - priv->folder_paned = NULL; - priv->msg_paned = NULL; - priv->main_paned = NULL; - priv->progress_widgets = NULL; - - account_store = TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()); - - /* online/offline toggle */ - priv->online_toggle = gtk_toggle_button_new (); - online = tny_device_is_online (modest_runtime_get_device()); - icon = gtk_image_new_from_icon_name (online ? GTK_STOCK_CONNECT : GTK_STOCK_DISCONNECT, - GTK_ICON_SIZE_BUTTON); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(priv->online_toggle), online); - gtk_button_set_image (GTK_BUTTON(priv->online_toggle),icon); - - priv->style = MODEST_MAIN_WINDOW_STYLE_SPLIT; - - /* Paned */ - priv->folder_paned = gtk_vpaned_new (); - priv->main_paned = gtk_hpaned_new (); - priv->msg_paned = gtk_vpaned_new (); - - /* Main bar */ - priv->folder_info_label = gtk_label_new (NULL); - progress_bar = modest_progress_bar_new (); - priv->main_bar = create_main_bar (progress_bar); - priv->progress_widgets = g_slist_prepend (priv->progress_widgets, - progress_bar); - - /* msg preview */ - priv->msg_preview = MODEST_MSG_VIEW(tny_platform_factory_new_msg_view - (modest_tny_platform_factory_get_instance ())); - if (!priv->msg_preview) - g_printerr ("modest: cannot instantiate msgpreiew\n"); - - /* header view */ - priv->header_view = - MODEST_HEADER_VIEW(modest_header_view_new (NULL, MODEST_HEADER_VIEW_STYLE_TWOLINES)); - if (!priv->header_view) - g_printerr ("modest: cannot instantiate header view\n"); - - /* 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)); - gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (priv->folder_view), FALSE); - if (!priv->folder_view) - g_printerr ("modest: cannot instantiate folder view\n"); - g_object_unref (G_OBJECT (query)); -} - -static void -modest_main_window_finalize (GObject *obj) -{ - G_OBJECT_CLASS(parent_class)->finalize (obj); -} - - -GtkWidget* -modest_main_window_get_child_widget (ModestMainWindow *self, - ModestMainWindowWidgetType widget_type) -{ - ModestMainWindowPrivate *priv; - GtkWidget *widget; - - g_return_val_if_fail (self, NULL); - g_return_val_if_fail (widget_type >= 0 && widget_type < MODEST_MAIN_WINDOW_WIDGET_TYPE_NUM, - NULL); - - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); - - switch (widget_type) { - case MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW: - widget = (GtkWidget*)priv->header_view; break; - case MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW: - widget = (GtkWidget*)priv->folder_view; break; - case MODEST_MAIN_WINDOW_WIDGET_TYPE_MSG_PREVIEW: - widget = (GtkWidget*)priv->msg_preview; break; - default: - g_return_val_if_reached (NULL); - return NULL; - } - - return widget ? GTK_WIDGET(widget) : NULL; -} - - -static void -restore_settings (ModestMainWindow *self) -{ - ModestConf *conf; - ModestMainWindowPrivate *priv; - ModestWindowPrivate *parent_priv; - - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); - parent_priv = MODEST_WINDOW_GET_PRIVATE(self); - - conf = modest_runtime_get_conf (); - - modest_widget_memory_restore (conf, G_OBJECT(priv->folder_paned), - MODEST_CONF_FOLDER_PANED_KEY); - modest_widget_memory_restore (conf, G_OBJECT(priv->msg_paned), - MODEST_CONF_MSG_PANED_KEY); - modest_widget_memory_restore (conf, G_OBJECT(priv->main_paned), - MODEST_CONF_MAIN_PANED_KEY); - modest_widget_memory_restore (conf, G_OBJECT(priv->header_view), - MODEST_CONF_HEADER_VIEW_KEY); - modest_widget_memory_restore (conf, G_OBJECT(self), - MODEST_CONF_MAIN_WINDOW_KEY); -} - -void -on_online_toggle_toggled (GtkToggleButton *toggle, ModestMainWindow *self) -{ - gboolean online; - TnyDevice *device; - ModestMainWindowPrivate *priv; - - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); - - device = modest_runtime_get_device (); - online = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->online_toggle)); - - if (online) { - /* TODO: Just attempt to go online, instead of forcing the online status: */ - tny_device_force_online (device); - } - else - tny_device_force_offline (device); -} - -static void -modest_main_window_on_show (GtkWidget *widget, gpointer user_data) -{ - ModestMainWindow *self = MODEST_MAIN_WINDOW (widget); - - /* Connect signals */ - connect_signals (self); - - /* Restore window & widget settings */ - restore_settings (self); -} - -static void -connect_signals (ModestMainWindow *self) -{ - ModestWindowPrivate *parent_priv; - ModestMainWindowPrivate *priv; - ModestTnyAccountStore *account_store; - - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); - parent_priv = MODEST_WINDOW_GET_PRIVATE(self); - - account_store = modest_runtime_get_account_store (); - - /* folder view */ - g_signal_connect (G_OBJECT(priv->folder_view), "button-press-event", - G_CALLBACK (on_folder_view_button_press_event),self); - g_signal_connect (G_OBJECT(priv->folder_view), "folder_selection_changed", - G_CALLBACK(modest_ui_actions_on_folder_selection_changed), self); - g_signal_connect (G_OBJECT(priv->folder_view), "folder-display-name-changed", - G_CALLBACK(modest_ui_actions_on_folder_display_name_changed), self); - - /* header view */ - 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_selected", - G_CALLBACK(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); - g_signal_connect (G_OBJECT(priv->header_view), "button-press-event", - G_CALLBACK (on_header_view_button_press_event), self); - g_signal_connect (G_OBJECT(priv->header_view),"popup-menu", - G_CALLBACK (on_header_view_button_press_event), self); - - /* msg preview */ - g_signal_connect (G_OBJECT(priv->msg_preview), "link_clicked", - G_CALLBACK(modest_ui_actions_on_msg_link_clicked), self); - g_signal_connect (G_OBJECT(priv->msg_preview), "link_hover", - G_CALLBACK(modest_ui_actions_on_msg_link_hover), self); - g_signal_connect (G_OBJECT(priv->msg_preview), "attachment_clicked", - G_CALLBACK(modest_ui_actions_on_msg_attachment_clicked), self); - g_signal_connect (G_OBJECT(priv->msg_preview), "recpt-activated", - G_CALLBACK(modest_ui_actions_on_msg_recpt_activated), self); - - /* Device */ - g_signal_connect (G_OBJECT(priv->online_toggle), "toggled", - G_CALLBACK(on_online_toggle_toggled), self); - - /* Mail Operation Queue */ - g_signal_connect (G_OBJECT (modest_runtime_get_mail_operation_queue ()), - "queue-changed", - G_CALLBACK (on_queue_changed), - self); -} - - -static GtkWidget* -wrapped_in_scrolled_window (GtkWidget *widget, gboolean needs_viewport) -{ - GtkWidget *win; - - win = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy - (GTK_SCROLLED_WINDOW (win),GTK_POLICY_NEVER, - GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (win), - GTK_SHADOW_IN); - - if (needs_viewport) - gtk_scrolled_window_add_with_viewport - (GTK_SCROLLED_WINDOW(win), widget); - else - gtk_container_add (GTK_CONTAINER(win), - widget); - - return win; -} - -static void -setup_toolbar (ModestMainWindow *self) -{ - ModestMainWindowPrivate *priv; - ModestWindowPrivate *parent_priv; - GtkWidget *item; - - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); - parent_priv = MODEST_WINDOW_GET_PRIVATE(self); - - item = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageNew"); - gtk_tool_item_set_is_important (GTK_TOOL_ITEM (item), TRUE); - item = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageReply"); - gtk_tool_item_set_is_important (GTK_TOOL_ITEM (item), TRUE); - item = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarSendReceive"); - gtk_tool_item_set_is_important (GTK_TOOL_ITEM (item), TRUE); - -} - - -ModestWindow * -modest_main_window_new (void) -{ - GObject *obj; - ModestMainWindow *self; - ModestMainWindowPrivate *priv; - ModestWindowPrivate *parent_priv; - GtkWidget *status_hbox; - GtkWidget *folder_win; - GtkWidget *preview_scroll; - GtkActionGroup *action_group; - GError *error = NULL; - ModestDimmingRulesGroup *menu_rules_group = NULL; - ModestDimmingRulesGroup *toolbar_rules_group = NULL; - - obj = g_object_new(MODEST_TYPE_MAIN_WINDOW, NULL); - self = MODEST_MAIN_WINDOW(obj); - - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); - parent_priv = MODEST_WINDOW_GET_PRIVATE(self); - - - parent_priv->ui_manager = gtk_ui_manager_new(); - parent_priv->ui_dimming_manager = modest_ui_dimming_manager_new (); - action_group = gtk_action_group_new ("ModestMainWindowActions"); - gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE); - - menu_rules_group = modest_dimming_rules_group_new (MODEST_DIMMING_RULES_MENU, FALSE); - toolbar_rules_group = modest_dimming_rules_group_new (MODEST_DIMMING_RULES_TOOLBAR, TRUE); - - /* Add common actions */ - gtk_action_group_add_actions (action_group, - modest_action_entries, - G_N_ELEMENTS (modest_action_entries), - obj); - - gtk_action_group_add_actions (action_group, - modest_header_view_action_entries, - G_N_ELEMENTS (modest_header_view_action_entries), - self); - - gtk_action_group_add_actions (action_group, - modest_folder_view_action_entries, - G_N_ELEMENTS (modest_folder_view_action_entries), - self); - - gtk_action_group_add_toggle_actions (action_group, - modest_toggle_action_entries, - G_N_ELEMENTS (modest_toggle_action_entries), - self); - gtk_action_group_add_toggle_actions (action_group, - modest_main_window_toggle_action_entries, - G_N_ELEMENTS (modest_toggle_action_entries), - self); - - 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_printerr ("modest: could not merge modest-main-window-ui.xml: %s", error->message); - g_error_free (error); - error = NULL; - } - - /* Add common dimming rules */ - modest_dimming_rules_group_add_rules (menu_rules_group, - modest_main_window_menu_dimming_entries, - G_N_ELEMENTS (modest_main_window_menu_dimming_entries), - MODEST_WINDOW (self)); - modest_dimming_rules_group_add_rules (toolbar_rules_group, - modest_main_window_toolbar_dimming_entries, - G_N_ELEMENTS (modest_main_window_toolbar_dimming_entries), - MODEST_WINDOW (self)); - - /* Insert dimming rules group for this window */ - modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, menu_rules_group); - modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, toolbar_rules_group); - g_object_unref (menu_rules_group); - g_object_unref (toolbar_rules_group); - - /* Add accelerators */ - gtk_window_add_accel_group (GTK_WINDOW (obj), - gtk_ui_manager_get_accel_group (parent_priv->ui_manager)); - - /* Toolbar / Menubar */ - parent_priv->toolbar = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar"); - parent_priv->menubar = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/MenuBar"); - - setup_toolbar (MODEST_MAIN_WINDOW (obj)); - gtk_toolbar_set_tooltips (GTK_TOOLBAR (parent_priv->toolbar), TRUE); - folder_win = wrapped_in_scrolled_window (GTK_WIDGET(priv->folder_view), FALSE); - priv->header_win = wrapped_in_scrolled_window (GTK_WIDGET(priv->header_view), FALSE); - - /* Paned */ - preview_scroll = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (preview_scroll), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - 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), priv->header_win); - gtk_container_add (GTK_CONTAINER (preview_scroll), - GTK_WIDGET(priv->msg_preview)); - gtk_paned_add2 (GTK_PANED(priv->msg_paned), preview_scroll); - - /* Main Bar */ - status_hbox = gtk_hbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX(status_hbox), priv->folder_info_label, FALSE,FALSE, 6); - gtk_box_pack_start (GTK_BOX(status_hbox), priv->main_bar, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX(status_hbox), priv->online_toggle,FALSE, FALSE, 0); - - /* putting it all together... */ - priv->main_vbox = gtk_vbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX(priv->main_vbox), parent_priv->menubar, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX(priv->main_vbox), parent_priv->toolbar, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX(priv->main_vbox), priv->main_paned, TRUE, TRUE,0); - gtk_box_pack_start (GTK_BOX(priv->main_vbox), status_hbox, FALSE, FALSE, 0); - gtk_container_add (GTK_CONTAINER(obj), priv->main_vbox); - - gtk_window_set_title (GTK_WINDOW(obj), _("Modest")); - gtk_window_set_icon_from_file (GTK_WINDOW(obj), MODEST_APP_ICON, NULL); - gtk_widget_show_all (priv->main_vbox); - - /* Do some tasks on show */ - g_signal_connect (G_OBJECT(self), "show", G_CALLBACK (modest_main_window_on_show), NULL); - - /* 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 ())); - - gtk_window_set_default_size (GTK_WINDOW (obj), 800, 600); - - return (ModestWindow *) obj; -} - -static gboolean -on_header_view_button_press_event (ModestHeaderView *header_view, - GdkEventButton *event, - ModestMainWindow *self) -{ - if (event->type == GDK_BUTTON_PRESS && event->button == 3) { - GtkWidget *menu; - ModestWindowPrivate *parent_priv; - - parent_priv = MODEST_WINDOW_GET_PRIVATE (self); - menu = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/HeaderViewCSM"); - - return show_context_popup_menu (self, - GTK_TREE_VIEW (header_view), - event, - menu); - } - - return FALSE; -} - -static gboolean -on_folder_view_button_press_event (ModestFolderView *folder_view, - GdkEventButton *event, - ModestMainWindow *self) -{ - if (event->type == GDK_BUTTON_PRESS && event->button == 3) { - GtkWidget *menu; - ModestWindowPrivate *parent_priv; - - parent_priv = MODEST_WINDOW_GET_PRIVATE (self); - menu = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/FolderViewCSM"); - - return show_context_popup_menu (self, - GTK_TREE_VIEW (folder_view), - event, - menu); - } - - return FALSE; -} - -static gboolean -show_context_popup_menu (ModestMainWindow *window, - GtkTreeView *tree_view, - GdkEventButton *event, - GtkWidget *menu) -{ - g_return_val_if_fail (menu, FALSE); - - if (event != NULL) { - /* Ensure that the header is selected */ - GtkTreeSelection *selection; - - selection = gtk_tree_view_get_selection (tree_view); - - if (gtk_tree_selection_count_selected_rows (selection) <= 1) { - GtkTreePath *path; - - /* Get tree path for row that was clicked */ - if (gtk_tree_view_get_path_at_pos (tree_view, - (gint) event->x, - (gint) event->y, - &path, - NULL, NULL, NULL)) { - gtk_tree_selection_unselect_all (selection); - gtk_tree_selection_select_path (selection, path); - gtk_tree_path_free (path); - } - } - - /* Show popup */ - if (gtk_tree_selection_count_selected_rows(selection) == 1) - gtk_menu_popup (GTK_MENU (menu), NULL, NULL, - NULL, NULL, - event->button, event->time); - } - return TRUE; -} - -static void -on_queue_changed (ModestMailOperationQueue *queue, - ModestMailOperation *mail_op, - ModestMailOperationQueueNotification type, - ModestMainWindow *self) -{ - GSList *tmp; - ModestMainWindowPrivate *priv; - - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); - - tmp = priv->progress_widgets; - - switch (type) { - case MODEST_MAIL_OPERATION_QUEUE_OPERATION_ADDED: - while (tmp) { - modest_progress_object_add_operation (MODEST_PROGRESS_OBJECT (tmp->data), - mail_op); - tmp = g_slist_next (tmp); - } - break; - case MODEST_MAIL_OPERATION_QUEUE_OPERATION_REMOVED: - while (tmp) { - modest_progress_object_remove_operation (MODEST_PROGRESS_OBJECT (tmp->data), - mail_op); - tmp = g_slist_next (tmp); - } - break; - } -} - -void -modest_main_window_set_style (ModestMainWindow *self, - ModestMainWindowStyle style) -{ - ModestMainWindowPrivate *priv; - ModestWindowPrivate *parent_priv; - GtkAction *action; - gboolean active; - - g_return_if_fail (MODEST_IS_MAIN_WINDOW (self)); - - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); - parent_priv = MODEST_WINDOW_GET_PRIVATE(self); - - /* no change -> nothing to do */ - if (priv->style == style) - return; - - /* Get toggle button and update the state if needed. This will - happen only when the set_style is not invoked from the UI, - for example when it's called from widget memory */ - action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToggleFolders"); - active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); - if ((active && style == MODEST_MAIN_WINDOW_STYLE_SIMPLE) || - (!active && style == MODEST_MAIN_WINDOW_STYLE_SPLIT)) { - g_signal_handlers_block_by_func (action, modest_ui_actions_toggle_folders_view, self); - gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), !active); - g_signal_handlers_unblock_by_func (action, modest_ui_actions_toggle_folders_view, self); - } - - priv->style = style; - switch (style) { - case MODEST_MAIN_WINDOW_STYLE_SIMPLE: - /* Remove main paned */ - g_object_ref (priv->main_paned); - gtk_container_remove (GTK_CONTAINER (priv->main_vbox), priv->main_paned); - - /* Reparent the contents widget to the main vbox */ - gtk_widget_reparent (priv->header_win, priv->main_vbox); - - break; - case MODEST_MAIN_WINDOW_STYLE_SPLIT: - /* Remove header view */ - g_object_ref (priv->header_win); - gtk_container_remove (GTK_CONTAINER (priv->main_vbox), priv->header_win); - - /* Reparent the main paned */ - gtk_paned_add2 (GTK_PANED (priv->main_paned), priv->header_win); - gtk_container_add (GTK_CONTAINER (priv->main_vbox), priv->main_paned); - - break; - default: - g_return_if_reached (); - } - -/* /\* Let header view grab the focus if it's being shown *\/ */ -/* if (priv->contents_style == MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS) */ -/* gtk_widget_grab_focus (GTK_WIDGET (priv->header_view)); */ -/* else */ -/* gtk_widget_grab_focus (GTK_WIDGET (priv->contents_widget)); */ - - /* Show changes */ - gtk_widget_show_all (GTK_WIDGET (priv->main_vbox)); -} - - -ModestMainWindowStyle -modest_main_window_get_style (ModestMainWindow *self) -{ - /* TODO */ - return MODEST_MAIN_WINDOW_STYLE_SPLIT; -} - -void -modest_main_window_set_contents_style (ModestMainWindow *self, - ModestMainWindowContentsStyle style) -{ - /* TODO */ -} - -ModestMainWindowContentsStyle -modest_main_window_get_contents_style (ModestMainWindow *self) -{ - /* TODO */ - return MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS; -} - - -static void -get_msg_callback (TnyFolder *folder, - gboolean cancelled, - TnyMsg *msg, - GError **err, - gpointer user_data) -{ - if (!err ||!(*err)) { - ModestMsgView *msg_preview; - - msg_preview = MODEST_MSG_VIEW (user_data); - tny_msg_view_set_msg (TNY_MSG_VIEW (msg_preview), msg); - } - - /* Frees */ - g_object_unref (folder); -} - -static void -on_header_selected (ModestHeaderView *header_view, - TnyHeader *header, - ModestMainWindow *main_window) -{ - TnyFolder *folder; - ModestMainWindowPrivate *priv; - - priv = MODEST_MAIN_WINDOW_GET_PRIVATE (main_window); - - if (!header) - return; - - folder = tny_header_get_folder (header); - - /* FIXME: do not use this directly. Use a mail operation - instead in order to get progress info */ - tny_folder_get_msg_async (folder, - header, - (TnyGetMsgCallback) get_msg_callback, - NULL, - priv->msg_preview); -} - -void -modest_main_window_notify_send_receive_initied (ModestMainWindow *self) -{ - g_warning("NOT IMPLEMENTED %s", __FUNCTION__); -} -void -modest_main_window_notify_send_receive_completed (ModestMainWindow *self) -{ - g_warning("NOT IMPLEMENTED %s", __FUNCTION__); -} - -gboolean -modest_main_window_transfer_mode_enabled (ModestMainWindow *self) -{ - g_warning("NOT IMPLEMENTED %s", __FUNCTION__); - return FALSE; -} - -gboolean -modest_main_window_on_msg_view_window_msg_changed (ModestMsgViewWindow *view_window, - GtkTreeModel *model, - GtkTreeRowReference *row_reference, - ModestMainWindow *self) -{ - g_warning("NOT IMPLEMENTED %s", __FUNCTION__); - return FALSE; -} - -gboolean -modest_main_window_screen_is_on (ModestMainWindow *self) -{ - g_warning("NOT IMPLEMENTED %s", __FUNCTION__); - return TRUE; -} - -static void -save_state (ModestWindow *window) -{ - ModestConf *conf; - ModestMainWindow* self = MODEST_MAIN_WINDOW(window); - ModestMainWindowPrivate *priv; - - priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); - conf = modest_runtime_get_conf (); - - modest_widget_memory_save (conf, G_OBJECT(self), - MODEST_CONF_MAIN_WINDOW_KEY); - modest_widget_memory_save (conf, G_OBJECT(priv->main_paned), - MODEST_CONF_MAIN_PANED_KEY); - modest_widget_memory_save (conf, G_OBJECT(priv->msg_paned), - MODEST_CONF_MSG_PANED_KEY); - modest_widget_memory_save (conf, G_OBJECT(priv->folder_view), - MODEST_CONF_FOLDER_VIEW_KEY); -}