gpointer userdata);
static void update_branding (ModestMsgViewWindow *self);
-
/* list my signals */
enum {
MSG_CHANGED_SIGNAL,
save_state (ModestWindow *self)
{
modest_widget_memory_save (modest_runtime_get_conf (),
- G_OBJECT(self),
+ G_OBJECT(self),
MODEST_CONF_MSG_VIEW_WINDOW_KEY);
}
-static
-gboolean modest_msg_view_window_scroll_child (ModestMsgViewWindow *self,
- GtkScrollType scroll_type,
- gboolean horizontal,
- gpointer userdata)
+static gboolean
+modest_msg_view_window_scroll_child (ModestMsgViewWindow *self,
+ GtkScrollType scroll_type,
+ gboolean horizontal,
+ gpointer userdata)
{
ModestMsgViewWindowPrivate *priv;
- gboolean return_value;
+ gint step = 0;
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(self);
- g_signal_emit_by_name (priv->main_scroll, "scroll-child", scroll_type, horizontal, &return_value);
- return return_value;
+
+ switch (scroll_type) {
+ case GTK_SCROLL_STEP_UP:
+ step = -1;
+ break;
+ case GTK_SCROLL_STEP_DOWN:
+ step = +1;
+ break;
+ case GTK_SCROLL_PAGE_UP:
+ step = -6;
+ break;
+ case GTK_SCROLL_PAGE_DOWN:
+ step = +6;
+ break;
+ case GTK_SCROLL_START:
+ step = -100;
+ break;
+ case GTK_SCROLL_END:
+ step = +100;
+ break;
+ default:
+ step = 0;
+ }
+
+ if (step)
+ modest_maemo_utils_scroll_pannable((HildonPannableArea *) priv->main_scroll, 0, step);
+
+ return (gboolean) step;
}
static void
GtkScrollType scroll)
{
guint keypad_keyval = keyval - GDK_Left + GDK_KP_Left;
-
+
gtk_binding_entry_add_signal (binding_set, keyval, 0,
"scroll_child", 2,
GTK_TYPE_SCROLL_TYPE, scroll,
/* Setup row references and connect signals */
priv->header_model = g_object_ref (model);
- if (row_reference) {
+ if (row_reference && gtk_tree_row_reference_valid (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, priv->is_outbox);
priv->header_model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
g_object_ref (priv->header_model);
- if (row_reference) {
+ if (row_reference && gtk_tree_row_reference_valid (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 (priv->header_model, &(priv->next_row_reference), TRUE, priv->is_outbox);
tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), NULL);
update_branding (MODEST_MSG_VIEW_WINDOW (window));
- path = gtk_tree_row_reference_get_path (row_reference);
- if (gtk_tree_model_get_iter (priv->header_model, &iter, path)) {
- TnyHeader *header;
- gtk_tree_model_get (priv->header_model, &iter,
- TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
- &header, -1);
- message_reader (window, priv, header, NULL, NULL, row_reference);
- g_object_unref (header);
+ if (priv->row_reference) {
+ path = gtk_tree_row_reference_get_path (priv->row_reference);
+ if (gtk_tree_model_get_iter (priv->header_model, &iter, path)) {
+ TnyHeader *header;
+ gtk_tree_model_get (priv->header_model, &iter,
+ TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
+ &header, -1);
+ message_reader (window, priv, header, NULL, NULL, priv->row_reference);
+ g_object_unref (header);
+ }
+ gtk_tree_path_free (path);
}
- gtk_tree_path_free (path);
-
/* Check dimming rules */
modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (window));
modest_zoomable_set_zoom (MODEST_ZOOMABLE (priv->msg_view), zoom_level);
return TRUE;
-
}
static gboolean
gtk_widget_event (focus, copy);
gdk_event_free (copy);
return TRUE;
- } else
- return FALSE;
- }
- 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_PRESS) {
- 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 FALSE;
} else {
return FALSE;
}
- } else {
- return FALSE;
}
+ return FALSE;
}
gboolean
tree models and reports the deletion when the row is still
there */
if (!gtk_tree_row_reference_valid (priv->next_row_reference)) {
+ if (priv->next_row_reference) {
+ gtk_tree_row_reference_free (priv->next_row_reference);
+ }
if (gtk_tree_row_reference_valid (priv->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, priv->is_outbox);
+ } else {
+ priv->next_row_reference = NULL;
}
}
if (priv->next_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 && !gtk_tree_row_reference_valid (priv->row_reference)) {
+ gtk_tree_row_reference_free (priv->row_reference);
+ priv->row_reference = NULL;
+ }
+
/* Return inmediatly if there is no header model */
if (!priv->header_model || !priv->row_reference)
return FALSE;
/* Update the row reference */
if (priv->row_reference != NULL) {
gtk_tree_row_reference_free (priv->row_reference);
- priv->row_reference = row_reference?gtk_tree_row_reference_copy (row_reference):NULL;
+ priv->row_reference = (row_reference && gtk_tree_row_reference_valid (row_reference))?gtk_tree_row_reference_copy (row_reference):NULL;
if (priv->next_row_reference != NULL) {
gtk_tree_row_reference_free (priv->next_row_reference);
}
- if (row_reference) {
+ if (priv->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, priv->is_outbox);
} else {
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
- if (priv->header_model && priv->row_reference) {
+ if (priv->header_model && priv->row_reference && gtk_tree_row_reference_valid (priv->row_reference)) {
GtkTreeIter iter;
GtkTreePath *path = NULL;
decode_in_provider =
modest_account_protocol_decode_part_to_stream_async (
MODEST_ACCOUNT_PROTOCOL (protocol),
- mime_part,
+ mime_part,
+ NULL,
TNY_STREAM (temp_stream),
on_decode_to_stream_async_handler,
NULL,
modest_account_protocol_decode_part_to_stream (
MODEST_ACCOUNT_PROTOCOL (protocol),
pair->part,
+ pair->filename,
stream,
&written,
&error);
return;
msg_uid = modest_msg_view_window_get_message_uid (self);
- if (msg_uid)
- if (!message_reader (self, priv, NULL, msg_uid, folder, priv->row_reference))
+ if (msg_uid) {
+ GtkTreeRowReference *row_reference;
+
+ if (priv->row_reference && gtk_tree_row_reference_valid (priv->row_reference)) {
+ row_reference = priv->row_reference;
+ } else {
+ row_reference = NULL;
+ }
+ if (!message_reader (self, priv, NULL, msg_uid, folder, row_reference))
g_warning ("Shouldn't happen, trying to reload a message failed");
+ }
g_object_unref (folder);
}