/* Init window */
init_window (MODEST_MSG_VIEW_WINDOW(obj));
+
/* Set window icon */
- window_icon = modest_platform_get_icon (MODEST_APP_MSG_VIEW_ICON);
+ window_icon = modest_platform_get_icon (MODEST_APP_MSG_VIEW_ICON, MODEST_ICON_SIZE_BIG);
if (window_icon) {
gtk_window_set_icon (GTK_WINDOW (obj), window_icon);
g_object_unref (window_icon);
- }
-
+ }
+
+ hildon_program_add_window (hildon_program_get_instance(),
+ HILDON_WINDOW(obj));
modest_window_mgr_register_help_id (modest_runtime_get_window_mgr(),
GTK_WINDOW(obj),"applications_email_viewer");
}
-static GtkWidget *
-menubar_to_menu (GtkUIManager *ui_manager)
-{
- GtkWidget *main_menu;
-
- /* Get the menubar from the UI manager */
- main_menu = gtk_ui_manager_get_widget (ui_manager, "/MenuBar");
-
- return main_menu;
-}
-
static void
init_window (ModestMsgViewWindow *obj)
{
priv->msg_uid = g_strdup (msg_uid);
/* Menubar */
- parent_priv->menubar = menubar_to_menu (parent_priv->ui_manager);
+ parent_priv->menubar = modest_maemo_utils_get_manager_menubar_as_menu (parent_priv->ui_manager, "/MenuBar");
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();
* and change the list selection when necessary: */
main_window = modest_window_mgr_get_main_window(mgr, FALSE); /* don't create */
- if (!main_window) {
- g_warning ("%s: BUG: no main window", __FUNCTION__);
- return NULL;
+ if (main_window) {
+ header_view = MODEST_HEADER_VIEW(modest_main_window_get_child_widget(
+ MODEST_MAIN_WINDOW(main_window),
+ MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW));
}
- header_view = MODEST_HEADER_VIEW(modest_main_window_get_child_widget(
- MODEST_MAIN_WINDOW(main_window),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW));
if (header_view != NULL){
header_folder = modest_header_view_get_folder(header_view);
priv->is_outbox = (modest_tny_folder_guess_folder_type (header_folder) == TNY_FOLDER_TYPE_OUTBOX);
}
priv->header_model = g_object_ref(model);
- priv->row_reference = gtk_tree_row_reference_copy (row_reference);
- priv->next_row_reference = gtk_tree_row_reference_copy (row_reference);
- select_next_valid_row (model, &(priv->next_row_reference), TRUE);
+ if (row_reference) {
+ priv->row_reference = gtk_tree_row_reference_copy (row_reference);
+ priv->next_row_reference = gtk_tree_row_reference_copy (row_reference);
+ select_next_valid_row (model, &(priv->next_row_reference), TRUE);
+ } else {
+ priv->row_reference = NULL;
+ priv->next_row_reference = NULL;
+ }
priv->row_changed_handler = g_signal_connect(
GTK_TREE_MODEL(model), "row-changed",
priv->is_search_result = TRUE;
tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
+
update_window_title (window);
+ modest_msg_view_window_update_priority (window);
return MODEST_WINDOW(window);
}
* msg-view is in it, and thus we do not need any actions but
* to check the dimming rules.*/
if(priv->header_model != NULL){
- gtk_tree_row_reference_free(priv->next_row_reference);
- priv->next_row_reference = gtk_tree_row_reference_copy(
+ if (priv->row_reference) {
+ gtk_tree_row_reference_free(priv->next_row_reference);
+ priv->next_row_reference = gtk_tree_row_reference_copy(
priv->row_reference);
- select_next_valid_row (priv->header_model,
- &(priv->next_row_reference), FALSE);
+ select_next_valid_row (priv->header_model,
+ &(priv->next_row_reference), FALSE);
+ }
modest_ui_actions_check_toolbar_dimming_rules (
MODEST_WINDOW (window));
return;
gtk_tree_model_get (new_model, tree_iter,
TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN, &header, -1);
uid = modest_tny_folder_get_header_unique_id(header);
- g_object_unref(G_OBJECT(header));
- header = NULL;
if(!g_str_equal(priv->msg_uid, uid)){
g_free(uid);
+ g_object_unref(G_OBJECT(header));
+ header = NULL;
return;
}
+ if (!(tny_header_get_flags (header) & TNY_HEADER_FLAG_SEEN))
+ tny_header_set_flag (header, TNY_HEADER_FLAG_SEEN);
+ g_object_unref(G_OBJECT(header));
+ header = NULL;
g_free(uid);
/* Setup row_reference for the actual msg. */
priv->rows_reordered_handler = 0;
g_object_unref(priv->header_model);
priv->header_model = NULL;
- g_object_unref(priv->row_reference);
+ if (priv->row_reference)
+ g_object_unref(priv->row_reference);
priv->row_reference = NULL;
- g_object_unref(priv->next_row_reference);
+ if (priv->next_row_reference)
+ g_object_unref(priv->next_row_reference);
priv->next_row_reference = NULL;
modest_ui_actions_check_toolbar_dimming_rules(MODEST_WINDOW(window));
/* If the message was not obtained from a treemodel,
* for instance if it was opened directly by the search UI:
*/
- if (priv->header_model == NULL) {
+ if (priv->header_model == NULL || priv->row_reference == NULL) {
msg = modest_msg_view_window_get_message (self);
if (msg) {
header = tny_msg_get_header (msg);
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
/*if no model (so no rows at all), then virtually we are the last*/
- if (!priv->header_model)
+ if (!priv->header_model || !priv->row_reference)
return TRUE;
path = gtk_tree_row_reference_get_path (priv->row_reference);
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
/*if no model (so no rows at all), then virtually we are the first*/
- if (!priv->header_model)
+ if (!priv->header_model || !priv->row_reference)
return TRUE;
path = gtk_tree_row_reference_get_path (priv->row_reference);
g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window), FALSE);
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
+ if (!priv->row_reference)
+ return FALSE;
+
/* Update the next row reference if it's not valid. This could
happen if for example the header which it was pointing to,
was deleted. The best place to do it is in the row-deleted
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
/* Return inmediatly if there is no header model */
- if (!priv->header_model)
+ if (!priv->header_model || !priv->row_reference)
return FALSE;
path = gtk_tree_row_reference_get_path (priv->row_reference);
ModestMsgViewWindowPrivate *priv = NULL;
GtkTreeRowReference *row_reference = NULL;
+ if (canceled) {
+ g_object_unref (self);
+ return;
+ }
+
/* If there was any error */
row_reference = (GtkTreeRowReference *) user_data;
if (!modest_ui_actions_msg_retrieval_check (mail_op, header, msg)) {
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
/* Update the row reference */
- gtk_tree_row_reference_free (priv->row_reference);
- priv->row_reference = gtk_tree_row_reference_copy (row_reference);
- priv->next_row_reference = gtk_tree_row_reference_copy (priv->row_reference);
- select_next_valid_row (priv->header_model, &(priv->next_row_reference), TRUE);
- gtk_tree_row_reference_free (row_reference);
+ if (priv->row_reference != NULL) {
+ gtk_tree_row_reference_free (priv->row_reference);
+ priv->row_reference = gtk_tree_row_reference_copy (row_reference);
+ priv->next_row_reference = gtk_tree_row_reference_copy (priv->row_reference);
+ select_next_valid_row (priv->header_model, &(priv->next_row_reference), TRUE);
+ gtk_tree_row_reference_free (row_reference);
+ }
/* Mark header as read */
if (!(tny_header_get_flags (header) & TNY_HEADER_FLAG_SEEN))
tny_header_set_flag (header, TNY_HEADER_FLAG_SEEN);
/* Set new message */
- tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
- modest_msg_view_window_update_priority (self);
- update_window_title (MODEST_MSG_VIEW_WINDOW (self));
- modest_msg_view_grab_focus (MODEST_MSG_VIEW (priv->msg_view));
+ if (priv->msg_view != NULL && TNY_IS_MSG_VIEW (priv->msg_view)) {
+ tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
+ modest_msg_view_window_update_priority (self);
+ update_window_title (MODEST_MSG_VIEW_WINDOW (self));
+ modest_msg_view_grab_focus (MODEST_MSG_VIEW (priv->msg_view));
+ }
/* Set the new message uid of the window */
if (priv->msg_uid) {
modest_msg_view_window_update_priority (ModestMsgViewWindow *window)
{
ModestMsgViewWindowPrivate *priv;
+ TnyHeader *header = NULL;
TnyHeaderFlags flags = 0;
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
- if (priv->header_model) {
- TnyHeader *header;
+ if (priv->header_model && priv->row_reference) {
GtkTreeIter iter;
GtkTreePath *path = NULL;
gtk_tree_model_get (priv->header_model, &iter, TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
&header, -1);
- if (header) {
- flags = tny_header_get_flags (header);
- g_object_unref(G_OBJECT(header));
- }
gtk_tree_path_free (path);
+ } else {
+ TnyMsg *msg;
+ msg = tny_msg_view_get_msg (TNY_MSG_VIEW (priv->msg_view));
+ if (msg) {
+ header = tny_msg_get_header (msg);
+ g_object_unref (msg);
+ }
+ }
+
+ if (header) {
+ flags = tny_header_get_flags (header);
+ g_object_unref(G_OBJECT(header));
}
modest_msg_view_set_priority (MODEST_MSG_VIEW(priv->msg_view), flags);
}
+static void
+toolbar_resize (ModestMsgViewWindow *self)
+{
+ ModestMsgViewWindowPrivate *priv = NULL;
+ ModestWindowPrivate *parent_priv = NULL;
+ GtkWidget *widget;
+ gint static_button_size;
+ ModestWindowMgr *mgr;
+
+ g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self));
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+ parent_priv = MODEST_WINDOW_GET_PRIVATE(self);
+
+ mgr = modest_runtime_get_window_mgr ();
+ static_button_size = modest_window_mgr_get_fullscreen_mode (mgr)?118:108;
+
+ if (parent_priv->toolbar) {
+ /* left size buttons */
+ widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageReply");
+ gtk_tool_item_set_expand (GTK_TOOL_ITEM (widget), FALSE);
+ gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (widget), FALSE);
+ gtk_widget_set_size_request (GTK_WIDGET (widget), static_button_size, -1);
+ widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageMoveTo");
+ gtk_tool_item_set_expand (GTK_TOOL_ITEM (widget), FALSE);
+ gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (widget), FALSE);
+ gtk_widget_set_size_request (GTK_WIDGET (widget), static_button_size, -1);
+ widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarDeleteMessage");
+ gtk_tool_item_set_expand (GTK_TOOL_ITEM (widget), FALSE);
+ gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (widget), FALSE);
+ gtk_widget_set_size_request (GTK_WIDGET (widget), static_button_size, -1);
+ widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/FindInMessage");
+ gtk_tool_item_set_expand (GTK_TOOL_ITEM (widget), FALSE);
+ gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (widget), FALSE);
+ gtk_widget_set_size_request (GTK_WIDGET (widget), static_button_size, -1);
+
+ gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->progress_toolitem), FALSE);
+ gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), TRUE);
+ gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->cancel_toolitem), FALSE);
+ gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->cancel_toolitem), FALSE);
+ gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->next_toolitem), TRUE);
+ gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->next_toolitem), TRUE);
+ gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->prev_toolitem), TRUE);
+ gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->prev_toolitem), TRUE);
+ }
+
+}
+
static gboolean
modest_msg_view_window_window_state_event (GtkWidget *widget, GdkEventWindowState *event, gpointer userdata)
{
if (is_fullscreen != active) {
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (fs_toggle_action), is_fullscreen);
}
+ toolbar_resize (MODEST_MSG_VIEW_WINDOW (widget));
}
return FALSE;
}
static void
-set_homogeneous (GtkWidget *widget,
- gpointer data)
-{
- if (GTK_IS_TOOL_ITEM (widget)) {
- gtk_tool_item_set_expand (GTK_TOOL_ITEM (widget), TRUE);
- gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (widget), TRUE);
- }
-}
-
-static void
modest_msg_view_window_show_toolbar (ModestWindow *self,
gboolean show_toolbar)
{
"/ToolBar");
gtk_widget_set_no_show_all (parent_priv->toolbar, TRUE);
- /* Set homogeneous toolbar */
- gtk_container_foreach (GTK_CONTAINER (parent_priv->toolbar),
- set_homogeneous, NULL);
-
priv->progress_toolitem = GTK_WIDGET (gtk_tool_item_new ());
priv->cancel_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarCancel");
priv->next_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageNext");
priv->prev_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageBack");
- gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), TRUE);
- gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->progress_toolitem), TRUE);
- gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->cancel_toolitem), FALSE);
- gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->cancel_toolitem), FALSE);
+ toolbar_resize (MODEST_MSG_VIEW_WINDOW (self));
/* Add ProgressBar (Transfer toolbar) */
priv->progress_bar = modest_progress_bar_widget_new ();
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);
+ if (G_OBJECT (self) == modest_mail_operation_get_source(mail_op)) {
+ 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);
+ }
}
}
+ g_object_unref (G_OBJECT (mail_op));
}
static void