2005-05-05 [paul] 1.9.6cvs54
[claws.git] / src / compose.c
index 7424c73cf12cba473d7a159a41708623085e4b89..08aace8ae77133cdeb0e5ec428210222336a6deb 100644 (file)
@@ -389,8 +389,6 @@ static void compose_advanced_action_cb      (Compose                   *compose,
 
 static void compose_grab_focus_cb      (GtkWidget      *widget,
                                         Compose        *compose);
-static void compose_grab_focus_before_cb(GtkWidget     *widget,
-                                        Compose        *compose);
 
 static void compose_changed_cb         (GtkTextBuffer  *textbuf,
                                         Compose        *compose);
@@ -775,7 +773,7 @@ Compose *compose_generic_new(PrefsAccount *account, const gchar *mailto, FolderI
                        compose_entry_mark_default_to(compose, item->prefs->default_to);
                }
                if (item && item->ret_rcpt) {
-                       menu_set_active(ifactory, "/Message/Request Return Receipt", TRUE);
+                       menu_set_active(ifactory, "/Options/Request Return Receipt", TRUE);
                }
        } else {
                if (mailto) {
@@ -785,7 +783,7 @@ Compose *compose_generic_new(PrefsAccount *account, const gchar *mailto, FolderI
                 * CLAWS: just don't allow return receipt request, even if the user
                 * may want to send an email. simple but foolproof.
                 */
-               menu_set_sensitive(ifactory, "/Message/Request Return Receipt", FALSE); 
+               menu_set_sensitive(ifactory, "/Options/Request Return Receipt", FALSE); 
        }
        compose_add_field_list( compose, listAddress );
 
@@ -992,7 +990,7 @@ static void compose_generic_reply(MsgInfo *msginfo, gboolean quote,
                compose->replyinfo = procmsg_msginfo_copy(msginfo);
 
        if (msginfo->folder && msginfo->folder->ret_rcpt)
-               menu_set_active(ifactory, "/Message/Request Return Receipt", TRUE);
+               menu_set_active(ifactory, "/Options/Request Return Receipt", TRUE);
 
        /* Set save folder */
        if (msginfo->folder && msginfo->folder->prefs && msginfo->folder->prefs->save_copy_to_folder) {
@@ -1345,10 +1343,14 @@ void compose_reedit(MsgInfo *msginfo)
        if ((fp = procmime_get_first_text_content(msginfo)) == NULL)
                g_warning("Can't get text part\n");
        else {
+               gboolean prev_autowrap = compose->autowrap;
+
+               compose->autowrap = FALSE;
                while (fgets(buf, sizeof(buf), fp) != NULL) {
                        strcrchomp(buf);
                        gtk_text_buffer_insert(textbuf, &iter, buf, -1);
                }
+               compose->autowrap = prev_autowrap;
                fclose(fp);
        }
        
@@ -1615,6 +1617,9 @@ static void compose_entries_set(Compose *compose, const gchar *mailto)
                GtkTextBuffer *buffer = gtk_text_view_get_buffer(text);
                GtkTextMark *mark;
                GtkTextIter iter;
+               gboolean prev_autowrap = compose->autowrap;
+
+               compose->autowrap = FALSE;
 
                mark = gtk_text_buffer_get_insert(buffer);
                gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
@@ -1627,6 +1632,10 @@ static void compose_entries_set(Compose *compose, const gchar *mailto)
                        gtk_text_buffer_insert(buffer, &iter, body, -1);
                }
                gtk_text_buffer_insert(buffer, &iter, "\n", 1);
+
+               compose->autowrap = prev_autowrap;
+               if (compose->autowrap)
+                       compose_wrap_all(compose);
        }
 
        g_free(to);
@@ -1669,16 +1678,13 @@ static gint compose_parse_header(Compose *compose, MsgInfo *msginfo)
        fclose(fp);
 
        if (hentry[H_REPLY_TO].body != NULL) {
-               compose->replyto =
-                       conv_unmime_header(hentry[H_REPLY_TO].body, NULL);
+               if (hentry[H_REPLY_TO].body[0] != '\0') {
+                       compose->replyto =
+                               conv_unmime_header(hentry[H_REPLY_TO].body,
+                                                  NULL);
+               }
                g_free(hentry[H_REPLY_TO].body);
                hentry[H_REPLY_TO].body = NULL;
-               /* if empty replyto, let sylpheed figure it out, i.e.
-                 * neglect the reply-to header. */
-                if (*(compose->replyto) == 0) {
-                        g_free(compose->replyto);
-                        compose->replyto = NULL;
-                }
        }
        if (hentry[H_CC].body != NULL) {
                compose->cc = conv_unmime_header(hentry[H_CC].body, NULL);
@@ -1707,8 +1713,11 @@ static gint compose_parse_header(Compose *compose, MsgInfo *msginfo)
                hentry[H_NEWSGROUPS].body = NULL;
        }
        if (hentry[H_FOLLOWUP_TO].body != NULL) {
-               compose->followup_to =
-                       conv_unmime_header(hentry[H_FOLLOWUP_TO].body, NULL);
+               if (hentry[H_FOLLOWUP_TO].body[0] != '\0') {
+                       compose->followup_to =
+                               conv_unmime_header(hentry[H_FOLLOWUP_TO].body,
+                                                  NULL);
+               }
                g_free(hentry[H_FOLLOWUP_TO].body);
                hentry[H_FOLLOWUP_TO].body = NULL;
        }
@@ -1745,13 +1754,17 @@ static gint compose_parse_header(Compose *compose, MsgInfo *msginfo)
                        compose->priority =  priority;
                }
  
-       if (compose->mode == COMPOSE_REEDIT && msginfo->inreplyto)
-               compose->inreplyto = g_strdup(msginfo->inreplyto);
-       else if (compose->mode != COMPOSE_REEDIT &&
-                msginfo->msgid && *msginfo->msgid) {
+       if (compose->mode == COMPOSE_REEDIT) {
+               if (msginfo->inreplyto && *msginfo->inreplyto)
+                       compose->inreplyto = g_strdup(msginfo->inreplyto);
+               return 0;
+       }
+
+       if (msginfo->msgid && *msginfo->msgid)
                compose->inreplyto = g_strdup(msginfo->msgid);
 
-               if (!compose->references) {
+       if (!compose->references) {
+               if (msginfo->msgid && *msginfo->msgid) {
                        if (msginfo->inreplyto && *msginfo->inreplyto)
                                compose->references =
                                        g_strdup_printf("<%s>\n\t<%s>",
@@ -1761,6 +1774,10 @@ static gint compose_parse_header(Compose *compose, MsgInfo *msginfo)
                                compose->references =
                                        g_strconcat("<", msginfo->msgid, ">",
                                                    NULL);
+               } else if (msginfo->inreplyto && *msginfo->inreplyto) {
+                       compose->references =
+                               g_strconcat("<", msginfo->inreplyto, ">",
+                                           NULL);
                }
        }
 
@@ -1826,6 +1843,7 @@ static gchar *compose_quote_fmt(Compose *compose, MsgInfo *msginfo,
        gchar *buf;
        gchar *p, *lastp;
        gint len;
+       gboolean prev_autowrap;
        const gchar *trimmed_body = body;
        
        if (!msginfo)
@@ -1860,6 +1878,9 @@ static gchar *compose_quote_fmt(Compose *compose, MsgInfo *msginfo,
        } else
                buf = "";
 
+       prev_autowrap = compose->autowrap;
+       compose->autowrap = FALSE;
+
        for (p = buf; *p != '\0'; ) {
                GtkTextView *text = GTK_TEXT_VIEW(compose->text);
                GtkTextBuffer *buffer = gtk_text_view_get_buffer(text);
@@ -1894,6 +1915,10 @@ static gchar *compose_quote_fmt(Compose *compose, MsgInfo *msginfo,
                        break;
        }
 
+       compose->autowrap = prev_autowrap;
+       if (compose->autowrap)
+               compose_wrap_all(compose);
+
        return buf;
 }
 
@@ -2070,10 +2095,14 @@ static void compose_insert_sig(Compose *compose, gboolean replace)
        GtkTextMark *mark;
        GtkTextIter iter;
        gint cur_pos;
+       gboolean prev_autowrap;
 
        
        g_return_if_fail(compose->account != NULL);
 
+       prev_autowrap = compose->autowrap;
+       compose->autowrap = FALSE;
+
        g_signal_handlers_block_by_func(G_OBJECT(buffer),
                                        G_CALLBACK(compose_changed_cb),
                                        compose);
@@ -2122,6 +2151,9 @@ static void compose_insert_sig(Compose *compose, gboolean replace)
                                        G_CALLBACK(compose_changed_cb),
                                        compose);
        
+       compose->autowrap = prev_autowrap;
+       if (compose->autowrap)
+               compose_wrap_all(compose);
 }
 
 static gchar *compose_get_signature_str(Compose *compose)
@@ -2194,6 +2226,9 @@ static ComposeInsertResult compose_insert_file(Compose *compose, const gchar *fi
                return COMPOSE_INSERT_READ_ERROR;
        }
 
+       prev_autowrap = compose->autowrap;
+       compose->autowrap = FALSE;
+
        text = GTK_TEXT_VIEW(compose->text);
        buffer = gtk_text_view_get_buffer(text);
        mark = gtk_text_buffer_get_insert(buffer);
@@ -2205,9 +2240,6 @@ static ComposeInsertResult compose_insert_file(Compose *compose, const gchar *fi
 
        cur_encoding = conv_get_locale_charset_str();
 
-       prev_autowrap = compose->autowrap;
-       compose->autowrap = FALSE;
-
        while (fgets(buf, sizeof(buf), fp) != NULL) {
                gchar *str;
 
@@ -2550,6 +2582,44 @@ static gchar *compose_get_quote_str(GtkTextBuffer *buffer,
        return NULL;
 }
 
+/* return TRUE if the line is itemized */
+static gboolean compose_is_itemized(GtkTextBuffer *buffer,
+                                   const GtkTextIter *start)
+{
+       GtkTextIter iter = *start;
+       gunichar wc;
+       gchar ch[6];
+       gint clen;
+
+       if (gtk_text_iter_ends_line(&iter))
+               return FALSE;
+
+       while (1) {
+               wc = gtk_text_iter_get_char(&iter);
+               if (!g_unichar_isspace(wc))
+                       break;
+               gtk_text_iter_forward_char(&iter);
+               if (gtk_text_iter_ends_line(&iter))
+                       return FALSE;
+       }
+
+       clen = g_unichar_to_utf8(wc, ch);
+       if (clen != 1)
+               return FALSE;
+
+       if (!strchr("*-+", ch[0]))
+               return FALSE;
+
+       gtk_text_iter_forward_char(&iter);
+       if (gtk_text_iter_ends_line(&iter))
+               return FALSE;
+       wc = gtk_text_iter_get_char(&iter);
+       if (g_unichar_isspace(wc))
+               return TRUE;
+
+       return FALSE;
+}
+
 static gboolean compose_get_line_break_pos(GtkTextBuffer *buffer,
                                           const GtkTextIter *start,
                                           GtkTextIter *break_pos,
@@ -2642,7 +2712,7 @@ static gboolean compose_get_line_break_pos(GtkTextBuffer *buffer,
        return do_break;
 }
 
-static gboolean is_sig_separator(Compose *compose, GtkTextBuffer *textbuf, GtkTextIter *iter) 
+static gboolean compose_is_sig_separator(Compose *compose, GtkTextBuffer *textbuf, GtkTextIter *iter) 
 {
        char *text = NULL;
        GtkTextIter start = *iter;
@@ -2678,7 +2748,7 @@ static gboolean compose_join_next_line(Compose *compose,
                                       GtkTextIter *iter,
                                       const gchar *quote_str)
 {
-       GtkTextIter iter_ = *iter, cur, prev, next;
+       GtkTextIter iter_ = *iter, cur, prev, next, end;
        PangoLogAttr attrs[3];
        gchar *str;
        gchar *next_quote_str;
@@ -2699,20 +2769,25 @@ static gboolean compose_join_next_line(Compose *compose,
        }
        g_free(next_quote_str);
 
-       /* delete quote str */
+       end = iter_;
        if (quote_len > 0) {
-               GtkTextIter end = iter_;
-
                gtk_text_iter_forward_chars(&end, quote_len);
                if (gtk_text_iter_ends_line(&end))
                        return FALSE;
-               gtk_text_buffer_delete(buffer, &iter_, &end);
        }
 
-       /* don't join if next line is sig separator */
-       if (is_sig_separator(compose, buffer, &iter_))
+       /* don't join itemized lines */
+       if (compose_is_itemized(buffer, &end))
                return FALSE;
 
+       /* don't join signature separator */
+       if (compose_is_sig_separator(compose, buffer, &iter_))
+               return FALSE;
+
+       /* delete quote str */
+       if (quote_len > 0)
+               gtk_text_buffer_delete(buffer, &iter_, &end);
+
        /* delete linebreak and extra spaces */
        prev = cur = iter_;
        while (gtk_text_iter_backward_char(&cur)) {
@@ -2729,7 +2804,6 @@ static gboolean compose_join_next_line(Compose *compose,
                gtk_text_iter_forward_char(&cur);
                next = cur;
        }
-       
        if (!gtk_text_iter_equal(&prev, &next)) {
                GtkTextMark *mark;
 
@@ -2770,6 +2844,9 @@ static void compose_wrap_paragraph(Compose *compose, GtkTextIter *par_iter)
        gchar *quote_str = NULL;
        gint quote_len;
        gboolean wrap_quote = prefs_common.linewrap_quote;
+       gboolean prev_autowrap = compose->autowrap;
+
+       compose->autowrap = FALSE;
 
        buffer = gtk_text_view_get_buffer(text);
 
@@ -2796,13 +2873,8 @@ static void compose_wrap_paragraph(Compose *compose, GtkTextIter *par_iter)
                }
        }
 
-       if (gtk_text_iter_is_end(&iter)) {
-               if (par_iter)
-                       *par_iter = iter;
-               return;
-       }
-
-       do {
+       /* go until paragraph end (empty line) */
+       while (!gtk_text_iter_ends_line(&iter)) {
                quote_str = compose_get_quote_str(buffer, &iter, &quote_len);
                if (quote_str) {
                        if (!wrap_quote) {
@@ -2855,11 +2927,12 @@ static void compose_wrap_paragraph(Compose *compose, GtkTextIter *par_iter)
                }
 
                g_free(quote_str);
-       } while (!gtk_text_iter_ends_line(&iter));
-       /* stop if paragraph end (empty line) */
+       }
 
        if (par_iter)
                *par_iter = iter;
+
+       compose->autowrap = prev_autowrap;
 }
 
 static void compose_wrap_all(Compose *compose)
@@ -3166,13 +3239,11 @@ static gint compose_redirect_write_headers_from_headerlist(Compose *compose,
        to_hdr = prefs_common.trans_hdr ? _("To:") : "To:";
 
        first_to_address = TRUE;
-       first_cc_address = TRUE;
        for (list = compose->header_list; list; list = list->next) {
                headerentry = ((ComposeHeaderEntry *)list->data);
                headerentryname = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(headerentry->combo)->entry));
 
-               if (g_utf8_collate(headerentryname, cc_hdr) == 0 
-                  || g_utf8_collate(headerentryname, to_hdr) == 0) {
+               if (g_utf8_collate(headerentryname, to_hdr) == 0) {
                        const gchar *entstr = gtk_entry_get_text(GTK_ENTRY(headerentry->entry));
                        Xstrdup_a(str, entstr, return -1);
                        g_strstrip(str);
@@ -3180,32 +3251,49 @@ static gint compose_redirect_write_headers_from_headerlist(Compose *compose,
                                compose_convert_header
                                        (buf, sizeof(buf), str,
                                        strlen("Resent-To") + 2, TRUE);
-                               if (g_utf8_collate(headerentryname, to_hdr) == 0) {
-                                       if (first_to_address) {
-                                               fprintf(fp, "Resent-To: ");
-                                               first_to_address = FALSE;
-                                       } else {
-                                               fprintf(fp, ",");
-                                       }
-                               }
-                               if (g_utf8_collate(headerentryname, cc_hdr) == 0) {
-                                       if (first_cc_address) {
-                                               fprintf(fp, "\n");
-                                               fprintf(fp, "Resent-Cc: ");
-                                               first_cc_address = FALSE;
-                                       } else {
-                                               fprintf(fp, ",");
-                                       }
-                               }
-                               
+
+                               if (first_to_address) {
+                                       fprintf(fp, "Resent-To: ");
+                                       first_to_address = FALSE;
+                               } else {
+                                       fprintf(fp, ",");
+                                }
                                fprintf(fp, "%s", buf);
                        }
                }
        }
-       /* if (!first_address) { */
-       fprintf(fp, "\n");
-       /* } */
+       if (!first_to_address) {
+               fprintf(fp, "\n");
+       }
+
+       first_cc_address = TRUE;
+       for (list = compose->header_list; list; list = list->next) {
+               headerentry = ((ComposeHeaderEntry *)list->data);
+               headerentryname = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(headerentry->combo)->entry));
 
+               if (g_utf8_collate(headerentryname, cc_hdr) == 0) {
+                       const gchar *strg = gtk_entry_get_text(GTK_ENTRY(headerentry->entry));
+                       Xstrdup_a(str, strg, return -1);
+                       g_strstrip(str);
+                       if (str[0] != '\0') {
+                               compose_convert_header
+                                       (buf, sizeof(buf), str,
+                                       strlen("Resent-Cc") + 2, TRUE);
+
+                                if (first_cc_address) {
+                                        fprintf(fp, "Resent-Cc: ");
+                                        first_cc_address = FALSE;
+                                } else {
+                                        fprintf(fp, ",");
+                                }
+                               fprintf(fp, "%s", buf);
+                       }
+               }
+       }
+       if (!first_cc_address) {
+               fprintf(fp, "\n");
+        }
+       
        return(0);
 }
 
@@ -4205,8 +4293,6 @@ static void compose_create_header_entry(Compose *compose)
        if (header)
                gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), header);
 
-       g_signal_connect(G_OBJECT(GTK_COMBO(combo)->entry), "grab_focus",
-                        G_CALLBACK(compose_grab_focus_before_cb), compose);
        g_signal_connect_after(G_OBJECT(GTK_COMBO(combo)->entry), "grab_focus",
                         G_CALLBACK(compose_grab_focus_cb), compose);
 
@@ -4221,8 +4307,6 @@ static void compose_create_header_entry(Compose *compose)
        g_signal_connect(G_OBJECT(entry), "changed", 
                         G_CALLBACK(compose_headerentry_changed_cb), 
                         headerentry);
-       g_signal_connect(G_OBJECT(entry), "grab_focus",
-                        G_CALLBACK(compose_grab_focus_before_cb), compose);
        g_signal_connect_after(G_OBJECT(entry), "grab_focus",
                         G_CALLBACK(compose_grab_focus_cb), compose);
                         
@@ -4503,8 +4587,6 @@ static GtkWidget *compose_create_others(Compose *compose)
        gtk_widget_show(savemsg_entry);
        gtk_table_attach_defaults(GTK_TABLE(table), savemsg_entry, 1, 2, rowcount, rowcount + 1);
        gtk_editable_set_editable(GTK_EDITABLE(savemsg_entry), prefs_common.savemsg);
-       g_signal_connect(G_OBJECT(savemsg_entry), "grab_focus",
-                        G_CALLBACK(compose_grab_focus_before_cb), compose);
        g_signal_connect_after(G_OBJECT(savemsg_entry), "grab_focus",
                         G_CALLBACK(compose_grab_focus_cb), compose);
        if (account_get_special_folder(compose->account, F_OUTBOX)) {
@@ -4684,8 +4766,6 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode)
 
        subject_entry = gtk_entry_new();
        gtk_box_pack_start(GTK_BOX(subject), subject_entry, TRUE, TRUE, 2);
-       g_signal_connect(G_OBJECT(subject_entry), "grab_focus",
-                        G_CALLBACK(compose_grab_focus_before_cb), compose);
        g_signal_connect_after(G_OBJECT(subject_entry), "grab_focus",
                         G_CALLBACK(compose_grab_focus_cb), compose);
        gtk_widget_show(subject_entry);
@@ -5061,11 +5141,7 @@ static void compose_set_privacy_system_cb(GtkWidget *widget, gpointer data)
 
        ifactory = gtk_item_factory_from_widget(compose->menubar);
        menu_set_sensitive(ifactory, "/Options/Sign", can_sign);
-       if (!can_sign)
-               menu_set_active(ifactory, "/Options/Sign", FALSE);
        menu_set_sensitive(ifactory, "/Options/Encrypt", can_encrypt);
-       if (!can_encrypt)
-               menu_set_active(ifactory, "/Options/Encrypt", FALSE);
 }
 
 static void compose_update_privacy_system_menu_item(Compose * compose)
@@ -5147,7 +5223,6 @@ void compose_update_actions_menu(Compose *compose)
 void compose_update_privacy_systems_menu(Compose *compose)
 {
        static gchar *branch_path = "/Options/Privacy System";
-       static gboolean connected = FALSE;
        GtkItemFactory *ifactory;
        GtkWidget *menuitem;
        GSList *systems, *cur;
@@ -5171,11 +5246,9 @@ void compose_update_privacy_systems_menu(Compose *compose)
 
        system_none = gtk_item_factory_get_widget(ifactory,
                "/Options/Privacy System/None");
-       if (!connected) {
-               g_signal_connect(G_OBJECT(system_none), "activate",
-                       G_CALLBACK(compose_set_privacy_system_cb), compose);
-               connected = TRUE;
-       }
+
+       g_signal_connect(G_OBJECT(system_none), "activate",
+               G_CALLBACK(compose_set_privacy_system_cb), compose);
 
        systems = privacy_get_system_ids();
        for (cur = systems; cur != NULL; cur = g_slist_next(cur)) {
@@ -5332,7 +5405,9 @@ static void compose_destroy(Compose *compose)
        prefs_common.compose_width = compose->scrolledwin->allocation.width;
        prefs_common.compose_height = compose->window->allocation.height;
 
-       gtk_widget_destroy(compose->paned);
+       if (!gtk_widget_get_parent(compose->paned))
+               gtk_widget_destroy(compose->paned);
+       gtk_widget_destroy(compose->popupmenu);
 
        toolbar_destroy(compose->toolbar);
        g_free(compose->toolbar);
@@ -6195,9 +6270,11 @@ static void compose_draft_cb(gpointer data, guint action, GtkWidget *widget)
                fprintf(fp, "SCF:%s\n", savefolderid);
                g_free(savefolderid);
        }
-       fprintf(fp, "X-Sylpheed-Sign:%d\n", compose->use_signing);
-       fprintf(fp, "X-Sylpheed-Encrypt:%d\n", compose->use_encryption);
-       fprintf(fp, "X-Sylpheed-Privacy-System:%s\n", compose->privacy_system);
+       if (compose->privacy_system) {
+               fprintf(fp, "X-Sylpheed-Sign:%d\n", compose->use_signing);
+               fprintf(fp, "X-Sylpheed-Encrypt:%d\n", compose->use_encryption);
+               fprintf(fp, "X-Sylpheed-Privacy-System:%s\n", compose->privacy_system);
+       }
        fprintf(fp, "\n");
 
        if (compose_write_to_file(compose, fp, COMPOSE_WRITE_FOR_STORE) < 0) {
@@ -6449,7 +6526,7 @@ static void entry_cut_clipboard(GtkWidget *entry)
        else if (GTK_IS_TEXT_VIEW(entry))
                gtk_text_buffer_cut_clipboard(
                        gtk_text_view_get_buffer(GTK_TEXT_VIEW(entry)),
-                       gtk_clipboard_get(GDK_NONE),
+                       gtk_clipboard_get(GDK_SELECTION_CLIPBOARD),
                        TRUE);
 }
 
@@ -6460,7 +6537,7 @@ static void entry_copy_clipboard(GtkWidget *entry)
        else if (GTK_IS_TEXT_VIEW(entry))
                gtk_text_buffer_copy_clipboard(
                        gtk_text_view_get_buffer(GTK_TEXT_VIEW(entry)),
-                       gtk_clipboard_get(GDK_NONE));
+                       gtk_clipboard_get(GDK_SELECTION_CLIPBOARD));
 }
 
 static void entry_paste_clipboard(GtkWidget *entry)
@@ -6470,7 +6547,7 @@ static void entry_paste_clipboard(GtkWidget *entry)
        else if (GTK_IS_TEXT_VIEW(entry))
                gtk_text_buffer_paste_clipboard(
                        gtk_text_view_get_buffer(GTK_TEXT_VIEW(entry)),
-                       gtk_clipboard_get(GDK_NONE),
+                       gtk_clipboard_get(GDK_SELECTION_CLIPBOARD),
                        NULL, TRUE);
 }
 
@@ -6823,25 +6900,9 @@ static void compose_advanced_action_cb(Compose *compose,
        }
 }
 
-static gchar *cliptext = NULL;
-
-static void compose_grab_focus_before_cb(GtkWidget *widget, Compose *compose)
-{
-       gchar *str = NULL;
-       GtkClipboard *clip = gtk_clipboard_get(gdk_atom_intern("PRIMARY", FALSE));
-       if (cliptext) {
-               g_free(cliptext);
-               cliptext = NULL;
-       }
-
-       if (gtk_clipboard_wait_is_text_available(clip))
-               cliptext = gtk_clipboard_wait_for_text(clip);
-}
-
 static void compose_grab_focus_cb(GtkWidget *widget, Compose *compose)
 {
        gchar *str = NULL;
-       GtkClipboard *clip = gtk_clipboard_get(gdk_atom_intern("PRIMARY", FALSE));
        
        if (GTK_IS_EDITABLE(widget)) {
                str = gtk_editable_get_chars(GTK_EDITABLE(widget), 0, -1);
@@ -6849,8 +6910,6 @@ static void compose_grab_focus_cb(GtkWidget *widget, Compose *compose)
                        strlen(str));
                g_free(str);
        }
-       if (cliptext)
-               gtk_clipboard_set_text(clip, cliptext, -1);
 
        if (GTK_IS_EDITABLE(widget) || GTK_IS_TEXT_VIEW(widget))
                compose->focused_editable = widget;