static void modest_msg_edit_window_clipboard_owner_change (GtkClipboard *clipboard,
GdkEvent *event,
ModestMsgEditWindow *window);
+static void modest_msg_edit_window_clipboard_owner_handle_change_in_idle (ModestMsgEditWindow *window);
static void subject_field_move_cursor (GtkEntry *entry,
GtkMovementStep step,
gint a1,
gulong clipboard_change_handler_id;
gulong default_clipboard_change_handler_id;
gulong account_removed_handler_id;
+ guint clipboard_owner_idle;
gchar *clipboard_text;
TnyMsg *draft_msg;
priv->clipboard_change_handler_id = 0;
priv->default_clipboard_change_handler_id = 0;
priv->account_removed_handler_id = 0;
+ priv->clipboard_owner_idle = 0;
priv->clipboard_text = NULL;
priv->sent = FALSE;
G_CALLBACK (text_buffer_can_redo), obj);
g_signal_connect (G_OBJECT (priv->text_buffer), "changed",
G_CALLBACK (body_changed), obj);
+ g_signal_connect (G_OBJECT (priv->text_buffer), "modified-changed",
+ G_CALLBACK (body_changed), obj);
g_signal_connect (G_OBJECT (priv->text_buffer), "insert-text",
G_CALLBACK (text_buffer_insert_text), obj);
g_signal_connect (G_OBJECT (obj), "window-state-event",
g_source_remove (priv->scroll_drag_timeout_id);
priv->scroll_drag_timeout_id = 0;
}
+ if (priv->clipboard_owner_idle > 0) {
+ g_source_remove (priv->clipboard_owner_idle);
+ priv->clipboard_owner_idle = 0;
+ }
g_free (priv->msg_uid);
g_free (priv->last_search);
g_slist_free (priv->font_items_group);
tny_stream_reset (TNY_STREAM (stream));
while (!tny_stream_is_eos (TNY_STREAM (stream))) {
+ GError *error = NULL;
unsigned char read_buffer[128];
gint readed;
readed = tny_stream_read (TNY_STREAM (stream), (char *) read_buffer, 128);
size += readed;
- if (!gdk_pixbuf_loader_write (loader, read_buffer, readed, NULL))
+ if (!gdk_pixbuf_loader_write (loader, read_buffer, readed, &error)) {
break;
+ }
}
pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
- g_object_ref (pixbuf);
+ if (pixbuf)
+ g_object_ref (pixbuf);
gdk_pixbuf_loader_close (loader, NULL);
g_object_unref (loader);
+ if (!pixbuf)
+ return NULL;
+
if (gdk_pixbuf_get_width (pixbuf) > IMAGE_MAX_WIDTH) {
GdkPixbuf *new_pixbuf;
gint new_height;
const gchar *mime_type = tny_mime_part_get_content_type (part);
if ((cid != NULL)&&(mime_type != NULL)) {
guint64 stream_size;
- TnyStream *stream = tny_mime_part_get_stream (part);
+ TnyStream *stream = tny_mime_part_get_decoded_stream (part);
GdkPixbuf *pixbuf = pixbuf_from_stream (stream, mime_type, &stream_size);
g_object_unref (menu_rules_group);
g_object_unref (toolbar_rules_group);
g_object_unref (clipboard_rules_group);
- modest_msg_edit_window_clipboard_owner_change (NULL, NULL, MODEST_MSG_EDIT_WINDOW (obj));
-
set_msg (MODEST_MSG_EDIT_WINDOW (obj), msg, preserve_is_rich);
text_buffer_refresh_attributes (WP_TEXT_BUFFER (priv->text_buffer), MODEST_MSG_EDIT_WINDOW (obj));
"account_removed",
G_CALLBACK(on_account_removed),
obj);
-
+
+ modest_msg_edit_window_clipboard_owner_handle_change_in_idle (MODEST_MSG_EDIT_WINDOW (obj));
+
return (ModestWindow*) obj;
}
break;
}
modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
+ text_buffer_refresh_attributes (WP_TEXT_BUFFER (priv->text_buffer), window);
}
}
if (!GTK_WIDGET_VISIBLE (window))
return;
+ g_object_ref (window);
text = gtk_clipboard_wait_for_text (selection_clipboard);
if (priv->clipboard_text != NULL) {
}
priv->clipboard_text = text;
- modest_window_check_dimming_rules_group (MODEST_WINDOW (window), MODEST_DIMMING_RULES_CLIPBOARD);
+ if (GTK_WIDGET_VISIBLE (window)) {
+ modest_window_check_dimming_rules_group (MODEST_WINDOW (window), MODEST_DIMMING_RULES_CLIPBOARD);
+ }
+ g_object_unref (window);
}
+
+static gboolean clipboard_owner_change_idle (gpointer userdata)
+{
+ ModestMsgEditWindow *window = (ModestMsgEditWindow *) userdata;
+ ModestMsgEditWindowPrivate *priv;
+
+ gdk_threads_enter ();
+ g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window), FALSE);
+ priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window);
+
+ priv->clipboard_owner_idle = 0;
+ modest_msg_edit_window_clipboard_owner_change (NULL, NULL, window);
+ gdk_threads_leave ();
+
+ return FALSE;
+}
+
+static void
+modest_msg_edit_window_clipboard_owner_handle_change_in_idle (ModestMsgEditWindow *window)
+{
+ ModestMsgEditWindowPrivate *priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window);
+ if (priv->clipboard_owner_idle == 0) {
+ priv->clipboard_owner_idle = g_idle_add (clipboard_owner_change_idle, window);
+ }
+}
+
static void
subject_field_move_cursor (GtkEntry *entry,
GtkMovementStep step,