static gdouble modest_msg_view_window_get_zoom (ModestWindow *window);
static gboolean modest_msg_view_window_zoom_minus (ModestWindow *window);
static gboolean modest_msg_view_window_zoom_plus (ModestWindow *window);
-static gboolean modest_msg_view_window_key_release_event (GtkWidget *window,
- GdkEventKey *event,
- gpointer userdata);
+static gboolean modest_msg_view_window_key_event (GtkWidget *window,
+ GdkEventKey *event,
+ gpointer userdata);
static gboolean modest_msg_view_window_window_state_event (GtkWidget *widget,
GdkEventWindowState *event,
gpointer userdata);
-static void modest_msg_view_window_scroll_up (ModestWindow *window);
-static void modest_msg_view_window_scroll_down (ModestWindow *window);
static void modest_msg_view_window_update_priority (ModestMsgViewWindow *window);
static void modest_msg_view_window_show_toolbar (ModestWindow *window,
TnyAccount *account,
gpointer user_data);
-static void on_move_focus (ModestMsgViewWindow *window,
+static void on_move_focus (GtkWidget *widget,
GtkDirectionType direction,
gpointer userdata);
guint progress_bar_timeout;
gchar *msg_uid;
+
+ GSList *sighandlers;
};
#define MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
static void
restore_settings (ModestMsgViewWindow *self)
{
- modest_widget_memory_restore (modest_runtime_get_conf (),
+ ModestConf *conf;
+ ModestWindowPrivate *parent_priv = MODEST_WINDOW_GET_PRIVATE (self);
+ GtkAction *action;
+
+ conf = modest_runtime_get_conf ();
+ action = gtk_ui_manager_get_action (parent_priv->ui_manager,
+ "/MenuBar/ViewMenu/ViewShowToolbarMenu/ViewShowToolbarNormalScreenMenu");
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ modest_conf_get_bool (conf, MODEST_CONF_MSG_VIEW_WINDOW_SHOW_TOOLBAR, NULL));
+ action = gtk_ui_manager_get_action (parent_priv->ui_manager,
+ "/MenuBar/ViewMenu/ViewShowToolbarMenu/ViewShowToolbarFullScreenMenu");
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ modest_conf_get_bool (conf, MODEST_CONF_MSG_VIEW_WINDOW_SHOW_TOOLBAR_FULLSCREEN, NULL));
+ modest_widget_memory_restore (conf,
G_OBJECT(self),
MODEST_CONF_MSG_VIEW_WINDOW_KEY);
}
priv->remove_attachment_banner = NULL;
priv->msg_uid = NULL;
+ priv->sighandlers = NULL;
+
/* Init window */
init_window (MODEST_MSG_VIEW_WINDOW(obj));
/* Set window icon */
switch (mode) {
case TOOLBAR_MODE_NORMAL:
-/* widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarMessageReply"); */
-/* gtk_action_set_sensitive (widget, TRUE); */
-/* widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarDeleteMessage"); */
-/* gtk_action_set_sensitive (widget, TRUE); */
-/* widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarMessageMoveTo"); */
-/* gtk_action_set_sensitive (widget, TRUE); */
-/* widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/FindInMessage"); */
-/* gtk_action_set_sensitive (widget, TRUE); */
-
- if (priv->prev_toolitem)
- gtk_widget_show (priv->prev_toolitem);
-
- if (priv->next_toolitem)
- gtk_widget_show (priv->next_toolitem);
-
- if (priv->progress_toolitem)
+ if (priv->progress_toolitem) {
gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), FALSE);
+ gtk_widget_hide (priv->progress_toolitem);
+ }
+
if (priv->progress_bar)
gtk_widget_hide (priv->progress_bar);
if (priv->cancel_toolitem)
gtk_widget_hide (priv->cancel_toolitem);
+ if (priv->prev_toolitem)
+ gtk_widget_show (priv->prev_toolitem);
+
+ if (priv->next_toolitem)
+ gtk_widget_show (priv->next_toolitem);
+
/* Hide toolbar if optimized view is enabled */
if (priv->optimized_view) {
gtk_widget_set_no_show_all (parent_priv->toolbar, TRUE);
break;
case TOOLBAR_MODE_TRANSFER:
-/* widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarMessageReply"); */
-/* gtk_action_set_sensitive (widget, FALSE); */
-/* widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarDeleteMessage"); */
-/* gtk_action_set_sensitive (widget, FALSE); */
-/* widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarMessageMoveTo"); */
-/* gtk_action_set_sensitive (widget, FALSE); */
-/* widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/FindInMessage"); */
-/* gtk_action_set_sensitive (widget, FALSE); */
-
if (priv->prev_toolitem)
gtk_widget_hide (priv->prev_toolitem);
if (priv->next_toolitem)
gtk_widget_hide (priv->next_toolitem);
- if (priv->progress_toolitem)
- gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), TRUE);
if (priv->progress_bar)
gtk_widget_show (priv->progress_bar);
+
+ if (priv->progress_toolitem) {
+ gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), TRUE);
+ gtk_widget_show (priv->progress_toolitem);
+ }
if (priv->cancel_toolitem)
gtk_widget_show (priv->cancel_toolitem);
menubar_to_menu (GtkUIManager *ui_manager)
{
GtkWidget *main_menu;
- GtkWidget *menubar;
- GList *iter, *children;
-
- /* Create new main menu */
- main_menu = gtk_menu_new();
/* Get the menubar from the UI manager */
- menubar = gtk_ui_manager_get_widget (ui_manager, "/MenuBar");
-
- iter = children = gtk_container_get_children (GTK_CONTAINER (menubar));
- while (iter) {
- GtkWidget *menu;
+ main_menu = gtk_ui_manager_get_widget (ui_manager, "/MenuBar");
- menu = GTK_WIDGET (iter->data);
- gtk_widget_reparent(menu, main_menu);
-
- iter = g_list_next (iter);
- }
- g_list_free (children);
-
return main_menu;
}
GtkWidget *main_vbox;
ModestMsgViewWindowPrivate *priv;
ModestWindowPrivate *parent_priv;
- ModestConf *conf;
- GtkAction *action = NULL;
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(obj);
parent_priv = MODEST_WINDOW_GET_PRIVATE(obj);
modest_msg_view_set_shadow_type (MODEST_MSG_VIEW (priv->msg_view), GTK_SHADOW_NONE);
main_vbox = gtk_vbox_new (FALSE, 6);
- /* Menubar */
- parent_priv->menubar = menubar_to_menu (parent_priv->ui_manager);
- conf = modest_runtime_get_conf ();
- action = gtk_ui_manager_get_action (parent_priv->ui_manager,
- "/MenuBar/ViewMenu/ViewShowToolbarMenu/ViewShowToolbarNormalScreenMenu");
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
- modest_conf_get_bool (conf, MODEST_CONF_MSG_VIEW_WINDOW_SHOW_TOOLBAR, NULL));
- action = gtk_ui_manager_get_action (parent_priv->ui_manager,
- "/MenuBar/ViewMenu/ViewShowToolbarMenu/ViewShowToolbarFullScreenMenu");
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
- modest_conf_get_bool (conf, MODEST_CONF_MSG_VIEW_WINDOW_SHOW_TOOLBAR_FULLSCREEN, NULL));
- hildon_window_set_menu (HILDON_WINDOW(obj), GTK_MENU(parent_priv->menubar));
- gtk_widget_show (GTK_WIDGET(parent_priv->menubar));
-
#ifdef MODEST_USE_MOZEMBED
priv->main_scroll = priv->msg_view;
gtk_widget_set_size_request (priv->msg_view, -1, 1600);
priv->find_toolbar = hildon_find_toolbar_new (NULL);
hildon_window_add_toolbar (HILDON_WINDOW (obj), GTK_TOOLBAR (priv->find_toolbar));
gtk_widget_set_no_show_all (priv->find_toolbar, TRUE);
- g_signal_connect (G_OBJECT (priv->find_toolbar), "close", G_CALLBACK (modest_msg_view_window_find_toolbar_close), obj);
- g_signal_connect (G_OBJECT (priv->find_toolbar), "search", G_CALLBACK (modest_msg_view_window_find_toolbar_search), obj);
gtk_widget_show_all (GTK_WIDGET(main_vbox));
}
priv->rows_reordered_handler);
}
+ modest_signal_mgr_disconnect_all_and_destroy (priv->sighandlers);
+ priv->sighandlers = NULL;
+
main_window = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr(),
FALSE); /* don't create */
if (!main_window)
priv->msg_uid = g_strdup (msg_uid);
+ /* Menubar */
+ parent_priv->menubar = menubar_to_menu (parent_priv->ui_manager);
+ hildon_window_set_menu (HILDON_WINDOW(obj), GTK_MENU(parent_priv->menubar));
+ gtk_widget_show (parent_priv->menubar);
parent_priv->ui_dimming_manager = modest_ui_dimming_manager_new();
menu_rules_group = modest_dimming_rules_group_new ("ModestMenuDimmingRules", FALSE);
G_CALLBACK (modest_ui_actions_on_msg_link_contextual), obj);
g_signal_connect (G_OBJECT (obj), "key-release-event",
- G_CALLBACK (modest_msg_view_window_key_release_event),
+ G_CALLBACK (modest_msg_view_window_key_event),
+ NULL);
+
+ g_signal_connect (G_OBJECT (obj), "key-press-event",
+ G_CALLBACK (modest_msg_view_window_key_event),
NULL);
g_signal_connect (G_OBJECT (obj), "window-state-event",
modest_window_set_active_account (MODEST_WINDOW(obj), modest_account_name);
+ g_signal_connect (G_OBJECT (priv->find_toolbar), "close", G_CALLBACK (modest_msg_view_window_find_toolbar_close), obj);
+ g_signal_connect (G_OBJECT (priv->find_toolbar), "search", G_CALLBACK (modest_msg_view_window_find_toolbar_search), obj);
priv->last_search = NULL;
/* Init the clipboard actions dim status */
}
static gboolean
-modest_msg_view_window_key_release_event (GtkWidget *window,
- GdkEventKey *event,
- gpointer userdata)
+modest_msg_view_window_key_event (GtkWidget *window,
+ GdkEventKey *event,
+ gpointer userdata)
{
- if (event->type == GDK_KEY_RELEASE) {
- switch (event->keyval) {
- case GDK_Up:
- modest_msg_view_window_scroll_up (MODEST_WINDOW (window));
- return TRUE;
- break;
- case GDK_Down:
- modest_msg_view_window_scroll_down (MODEST_WINDOW (window));
+
+ if (event->keyval == GDK_Up || event->keyval == GDK_KP_Up ||
+ event->keyval == GDK_Down || event->keyval == GDK_KP_Down ||
+ event->keyval == GDK_Page_Up || event->keyval == GDK_KP_Page_Up ||
+ event->keyval == GDK_Page_Down || event->keyval == GDK_KP_Page_Down ||
+ event->keyval == GDK_Home || event->keyval == GDK_KP_Home ||
+ event->keyval == GDK_End || event->keyval == GDK_KP_End) {
+ ModestMsgViewWindowPrivate *priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
+ gboolean return_value;
+
+ if (event->type == GDK_KEY_RELEASE) {
+ GtkScrollType scroll_type;
+
+ switch (event->keyval) {
+ case GDK_Up:
+ case GDK_KP_Up:
+ scroll_type = GTK_SCROLL_STEP_UP; break;
+ case GDK_Down:
+ case GDK_KP_Down:
+ scroll_type = GTK_SCROLL_STEP_DOWN; break;
+ case GDK_Page_Up:
+ case GDK_KP_Page_Up:
+ scroll_type = GTK_SCROLL_PAGE_UP; break;
+ case GDK_Page_Down:
+ case GDK_KP_Page_Down:
+ scroll_type = GTK_SCROLL_PAGE_DOWN; break;
+ case GDK_Home:
+ case GDK_KP_Home:
+ scroll_type = GTK_SCROLL_START; break;
+ case GDK_End:
+ case GDK_KP_End:
+ scroll_type = GTK_SCROLL_END; break;
+ default: scroll_type = GTK_SCROLL_NONE;
+ }
+
+ g_signal_emit_by_name (G_OBJECT (priv->main_scroll), "scroll-child",
+ scroll_type, FALSE, &return_value);
return TRUE;
- break;
- default:
+ } else {
return FALSE;
- break;
- };
+ }
} else {
return FALSE;
}
}
-static void
-modest_msg_view_window_scroll_up (ModestWindow *window)
-{
- ModestMsgViewWindowPrivate *priv;
- gboolean return_value;
-
- priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
- g_signal_emit_by_name (G_OBJECT (priv->main_scroll), "scroll-child", GTK_SCROLL_STEP_UP, FALSE, &return_value);
-}
-
-static void
-modest_msg_view_window_scroll_down (ModestWindow *window)
-{
- ModestMsgViewWindowPrivate *priv;
- gboolean return_value;
-
- priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
- g_signal_emit_by_name (G_OBJECT (priv->main_scroll), "scroll-child", GTK_SCROLL_STEP_DOWN, FALSE, &return_value);
-}
-
gboolean
modest_msg_view_window_last_message_selected (ModestMsgViewWindow *window)
{
GtkTreeRowReference *row_reference)
{
ModestMailOperation *mail_op = NULL;
- ModestMailOperationTypeOperation op_type;
gboolean already_showing = FALSE;
ModestWindow *msg_window = NULL;
ModestWindowMgr *mgr;
}
/* Msg download completed */
- if (tny_header_get_flags (header) & TNY_HEADER_FLAG_CACHED) {
- op_type = MODEST_MAIL_OPERATION_TYPE_OPEN;
- } else {
- op_type = MODEST_MAIL_OPERATION_TYPE_RECEIVE;
-
+ if (!(tny_header_get_flags (header) & TNY_HEADER_FLAG_CACHED)) {
/* Ask the user if he wants to download the message if
we're not online */
if (!tny_device_is_online (modest_runtime_get_device())) {
hildon_window_add_toolbar (HILDON_WINDOW (self),
GTK_TOOLBAR (parent_priv->toolbar));
-
/* Set reply button tap and hold menu */
reply_button = gtk_ui_manager_get_widget (parent_priv->ui_manager,
"/ToolBar/ToolbarMessageReply");
}
}
+static void
+on_mail_operation_started (ModestMailOperation *mail_op,
+ gpointer user_data)
+{
+ ModestMsgViewWindow *self;
+ ModestMailOperationTypeOperation op_type;
+ GSList *tmp;
+ ModestMsgViewWindowPrivate *priv;
+
+ self = MODEST_MSG_VIEW_WINDOW (user_data);
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+ op_type = modest_mail_operation_get_type_operation (mail_op);
+ tmp = priv->progress_widgets;
+
+ if (op_type == MODEST_MAIL_OPERATION_TYPE_RECEIVE || op_type == MODEST_MAIL_OPERATION_TYPE_OPEN ) {
+ set_toolbar_transfer_mode(self);
+ while (tmp) {
+ modest_progress_object_add_operation (
+ MODEST_PROGRESS_OBJECT (tmp->data),
+ mail_op);
+ tmp = g_slist_next (tmp);
+ }
+ }
+}
+
+static void
+on_mail_operation_finished (ModestMailOperation *mail_op,
+ gpointer user_data)
+{
+ ModestMsgViewWindow *self;
+ ModestMailOperationTypeOperation op_type;
+ GSList *tmp;
+ ModestMsgViewWindowPrivate *priv;
+
+ self = MODEST_MSG_VIEW_WINDOW (user_data);
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+ op_type = modest_mail_operation_get_type_operation (mail_op);
+ tmp = priv->progress_widgets;
+
+ if (op_type == MODEST_MAIL_OPERATION_TYPE_RECEIVE || op_type == MODEST_MAIL_OPERATION_TYPE_OPEN ) {
+ while (tmp) {
+ modest_progress_object_remove_operation (
+ MODEST_PROGRESS_OBJECT (tmp->data),
+ mail_op);
+ tmp = g_slist_next (tmp);
+ }
+
+ /* If no more operations are being observed, NORMAL mode is enabled again */
+ if (observers_empty (self)) {
+ set_toolbar_mode (self, TOOLBAR_MODE_NORMAL);
+ }
+ }
+}
+
static void
on_queue_changed (ModestMailOperationQueue *queue,
ModestMailOperation *mail_op,
ModestMailOperationQueueNotification type,
ModestMsgViewWindow *self)
-{
- GSList *tmp;
+{
ModestMsgViewWindowPrivate *priv;
- ModestMailOperationTypeOperation op_type;
- ModestToolBarModes mode;
-
- g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self));
- priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(self);
+
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
/* If this operations was created by another window, do nothing */
if (!modest_mail_operation_is_mine (mail_op, G_OBJECT(self)))
return;
- /* Get toolbar mode from operation id*/
- op_type = modest_mail_operation_get_type_operation (mail_op);
- switch (op_type) {
-/* case MODEST_MAIL_OPERATION_TYPE_SEND: */
- case MODEST_MAIL_OPERATION_TYPE_RECEIVE:
- case MODEST_MAIL_OPERATION_TYPE_OPEN:
- mode = TOOLBAR_MODE_TRANSFER;
- break;
- default:
- mode = TOOLBAR_MODE_NORMAL;
-
- }
-
- /* Add operation observers and change toolbar if neccessary*/
- tmp = priv->progress_widgets;
- switch (type) {
- case MODEST_MAIL_OPERATION_QUEUE_OPERATION_ADDED:
- if (mode == TOOLBAR_MODE_TRANSFER) {
- /* Enable transfer toolbar mode */
- set_toolbar_transfer_mode(self);
- 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:
- if (mode == TOOLBAR_MODE_TRANSFER) {
- while (tmp) {
- modest_progress_object_remove_operation (MODEST_PROGRESS_OBJECT (tmp->data),
- mail_op);
- tmp = g_slist_next (tmp);
-
- }
-
- /* If no more operations are being observed, NORMAL mode is enabled again */
- if (observers_empty (self)) {
- set_toolbar_mode (self, TOOLBAR_MODE_NORMAL);
- }
- }
- break;
+ if (type == MODEST_MAIL_OPERATION_QUEUE_OPERATION_ADDED) {
+ priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers,
+ G_OBJECT (mail_op),
+ "operation-started",
+ G_CALLBACK (on_mail_operation_started),
+ self);
+ priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers,
+ G_OBJECT (mail_op),
+ "operation-finished",
+ G_CALLBACK (on_mail_operation_finished),
+ self);
+ } else if (type == MODEST_MAIL_OPERATION_QUEUE_OPERATION_REMOVED) {
+ priv->sighandlers = modest_signal_mgr_disconnect (priv->sighandlers,
+ G_OBJECT (mail_op),
+ "operation-started");
+ priv->sighandlers = modest_signal_mgr_disconnect (priv->sighandlers,
+ G_OBJECT (mail_op),
+ "operation-finished");
}
}
if (!TNY_IS_MSG (mime_part)) {
gchar *filepath = NULL;
const gchar *att_filename = tny_mime_part_get_filename (mime_part);
+ const gchar *content_type;
TnyFsStream *temp_stream = NULL;
temp_stream = modest_maemo_utils_create_temp_stream (att_filename, attachment_uid,
&filepath);
- if (temp_stream) {
- const gchar *content_type;
+ if (temp_stream != NULL) {
content_type = tny_mime_part_get_content_type (mime_part);
tny_mime_part_decode_to_stream (mime_part, TNY_STREAM (temp_stream));
g_free (filepath);
/* NOTE: files in the temporary area will be automatically
* cleaned after some time if they are no longer in use */
+ } else if (filepath != NULL) {
+ /* the file may already exist but it isn't writable,
+ * let's try to open it anyway */
+ content_type = tny_mime_part_get_content_type (mime_part);
+ modest_platform_activate_file (filepath, content_type);
+ g_free (filepath);
}
} else {
/* message attachment */
}
-static void on_move_focus (ModestMsgViewWindow *window,
+static void on_move_focus (GtkWidget *widget,
GtkDirectionType direction,
gpointer userdata)
{
- GtkWidget *current_focus = NULL;
-
- current_focus = gtk_window_get_focus (GTK_WINDOW (window));
- if ((current_focus != NULL) &&
- MODEST_IS_ATTACHMENTS_VIEW (current_focus)) {
- g_signal_stop_emission_by_name (G_OBJECT (window), "move-focus");
- }
+ g_signal_stop_emission_by_name (G_OBJECT (widget), "move-focus");
}