2005-08-19 [paul] 1.9.13cvs41

* src/compose.c
	* src/prefs_common.c
	* src/prefs_common.h
	* src/prefs_wrapping.c
		paste with or without wrapping.
		patch by Colin
This commit is contained in:
Paul Mangan 2005-08-19 11:01:47 +00:00
parent 6e931f8c3a
commit 2d096e5fbc
7 changed files with 131 additions and 12 deletions

View file

@ -1,3 +1,12 @@
2005-08-19 [paul] 1.9.13cvs41
* src/compose.c
* src/prefs_common.c
* src/prefs_common.h
* src/prefs_wrapping.c
paste with or without wrapping.
patch by Colin
2005-08-19 [paul] 1.9.13cvs40
* src/prefs_common.c

View file

@ -726,3 +726,4 @@
( cvs diff -u -r 1.61.2.36 -r 1.61.2.37 src/account.c; cvs diff -u -r 1.12.2.24 -r 1.12.2.25 src/action.c; cvs diff -u -r 1.22.2.3 -r 1.22.2.4 src/addrbook.c; cvs diff -u -r 1.15.2.3 -r 1.15.2.4 src/addrcache.c; cvs diff -u -r 1.6.10.7 -r 1.6.10.8 src/addrharvest.c; cvs diff -u -r 1.28.2.7 -r 1.28.2.8 src/addrindex.c; cvs diff -u -r 1.65.2.34 -r 1.65.2.35 src/codeconv.c; cvs diff -u -r 1.382.2.151 -r 1.382.2.152 src/compose.c; cvs diff -u -r 1.23.2.11 -r 1.23.2.12 src/crash.c; cvs diff -u -r 1.5.2.5 -r 1.5.2.6 src/exporthtml.c; cvs diff -u -r 1.1.4.5 -r 1.1.4.6 src/exportldif.c; cvs diff -u -r 1.213.2.51 -r 1.213.2.52 src/folder.c; cvs diff -u -r 1.1.2.4 -r 1.1.2.5 src/image_viewer.c; cvs diff -u -r 1.149.2.30 -r 1.149.2.31 src/inc.c; cvs diff -u -r 1.29.2.4 -r 1.29.2.5 src/inc.h; cvs diff -u -r 1.18.2.10 -r 1.18.2.11 src/jpilot.c; cvs diff -u -r 1.12.2.2 -r 1.12.2.3 src/ldif.c; cvs diff -u -r 1.115.2.49 -r 1.115.2.50 src/main.c; cvs diff -u -r 1.75.2.7 -r 1.75.2.8 src/matcher.c; cvs diff -u -r 1.28.2.6 -r 1.28.2.7 src/mbox.c; cvs diff -u -r 1.94.2.61 -r 1.94.2.62 src/messageview.c; cvs diff -u -r 1.79.2.16 -r 1.79.2.17 src/mh.c; cvs diff -u -r 1.83.2.35 -r 1.83.2.36 src/mimeview.c; cvs diff -u -r 1.16.2.25 -r 1.16.2.26 src/msgcache.c; cvs diff -u -r 1.6.10.2 -r 1.6.10.3 src/mutt.c; cvs diff -u -r 1.101.2.12 -r 1.101.2.13 src/news.c; cvs diff -u -r 1.1.2.6 -r 1.1.2.7 src/partial_download.c; cvs diff -u -r 1.6.2.2 -r 1.6.2.3 src/pine.c; cvs diff -u -r 1.56.2.37 -r 1.56.2.38 src/pop.c; cvs diff -u -r 1.60.2.19 -r 1.60.2.20 src/prefs_actions.c; cvs diff -u -r 1.204.2.50 -r 1.204.2.51 src/prefs_common.c; cvs diff -u -r 1.16.2.11 -r 1.16.2.12 src/prefs_customheader.c; cvs diff -u -r 1.16.2.11 -r 1.16.2.12 src/prefs_display_header.c; cvs diff -u -r 1.10.2.12 -r 1.10.2.13 src/prefs_gtk.c; cvs diff -u -r 1.3.2.23 -r 1.3.2.24 src/prefs_themes.c; cvs diff -u -r 1.47.2.22 -r 1.47.2.23 src/procheader.c; cvs diff -u -r 1.49.2.53 -r 1.49.2.54 src/procmime.c; cvs diff -u -r 1.150.2.38 -r 1.150.2.39 src/procmsg.c; cvs diff -u -r 1.17.2.4 -r 1.17.2.5 src/recv.c; cvs diff -u -r 1.17.2.16 -r 1.17.2.17 src/send_message.c; cvs diff -u -r 1.1 -r 1.2 src/simple-gettext.c; cvs diff -u -r 1.9.2.13 -r 1.9.2.14 src/sourcewindow.c; cvs diff -u -r 1.96.2.69 -r 1.96.2.70 src/textview.c; cvs diff -u -r 1.14.2.3 -r 1.14.2.4 src/vcard.c; cvs diff -u -r 1.9.2.12 -r 1.9.2.13 src/common/defs.h; cvs diff -u -r 1.6.2.3 -r 1.6.2.4 src/common/log.c; cvs diff -u -r 1.13.2.5 -r 1.13.2.6 src/common/plugin.c; cvs diff -u -r 1.5.2.1 -r 1.5.2.2 src/common/prefs.c; cvs diff -u -r 1.23.2.5 -r 1.23.2.6 src/common/session.c; cvs diff -u -r 1.8.2.3 -r 1.8.2.4 src/common/session.h; cvs diff -u -r 1.13.2.13 -r 1.13.2.14 src/common/socket.c; cvs diff -u -r 1.13.2.1 -r 1.13.2.2 src/common/socket.h; cvs diff -u -r 1.4.2.1 -r 1.4.2.2 src/common/ssl_certificate.c; cvs diff -u -r 1.2.4.11 -r 1.2.4.12 src/common/template.c; cvs diff -u -r 1.36.2.39 -r 1.36.2.40 src/common/utils.c; cvs diff -u -r 1.20.2.21 -r 1.20.2.22 src/common/utils.h; cvs diff -u -r 1.1.4.9 -r 1.1.4.10 src/common/xml.c; cvs diff -u -r 1.4.2.16 -r 1.4.2.17 src/gtk/about.c; ) > 1.9.13cvs38.patchset
( cvs diff -u -r 1.654.2.765 -r 1.654.2.766 configure.ac; cvs diff -u -r 1.14.2.8 -r 1.14.2.9 src/editaddress.c; cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/gedit-print.c; cvs diff -u -r 1.6.10.3 -r 1.6.10.4 src/mutt.c; cvs diff -u -r 1.1.4.3 -r 1.1.4.4 src/etpan/etpan-log.c; cvs diff -u -r 1.1.4.15 -r 1.1.4.16 src/etpan/imap-thread.c; cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/gtk/gtksourceprintjob.c; ) > 1.9.13cvs39.patchset
( cvs diff -u -r 1.204.2.51 -r 1.204.2.52 src/prefs_common.c; cvs diff -u -r 1.103.2.24 -r 1.103.2.25 src/prefs_common.h; cvs diff -u -r 1.22.2.11 -r 1.22.2.12 src/quote_fmt_parse.y; cvs diff -u -r 1.395.2.114 -r 1.395.2.115 src/summaryview.c; cvs diff -u -r 1.13.2.7 -r 1.13.2.8 src/plugins/clamav/clamav_plugin.c; cvs diff -u -r 1.12.2.4 -r 1.12.2.5 src/plugins/dillo_viewer/dillo_viewer.c; cvs diff -u -r 1.9.2.3 -r 1.9.2.4 src/plugins/mathml_viewer/mathml_viewer.c; cvs diff -u -r 1.1.2.4 -r 1.1.2.5 src/plugins/pgpcore/sgpgme.c; cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/plugins/pgpinline/pgpinline.c; cvs diff -u -r 1.1.2.21 -r 1.1.2.22 src/plugins/pgpmime/pgpmime.c; ) > 1.9.13cvs40.patchset
( cvs diff -u -r 1.382.2.152 -r 1.382.2.153 src/compose.c; cvs diff -u -r 1.204.2.52 -r 1.204.2.53 src/prefs_common.c; cvs diff -u -r 1.103.2.25 -r 1.103.2.26 src/prefs_common.h; cvs diff -u -r 1.1.2.6 -r 1.1.2.7 src/prefs_wrapping.c; ) > 1.9.13cvs41.patchset

View file

@ -11,7 +11,7 @@ MINOR_VERSION=9
MICRO_VERSION=13
INTERFACE_AGE=0
BINARY_AGE=0
EXTRA_VERSION=40
EXTRA_VERSION=41
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=

View file

@ -388,6 +388,8 @@ static void compose_cut_cb (Compose *compose);
static void compose_copy_cb (Compose *compose);
static void compose_paste_cb (Compose *compose);
static void compose_paste_as_quote_cb (Compose *compose);
static void compose_paste_no_wrap_cb (Compose *compose);
static void compose_paste_wrap_cb (Compose *compose);
static void compose_allsel_cb (Compose *compose);
static void compose_advanced_action_cb (Compose *compose,
@ -525,8 +527,12 @@ static GtkItemFactoryEntry compose_entries[] =
{N_("/_Edit/Cu_t"), "<control>X", compose_cut_cb, 0, NULL},
{N_("/_Edit/_Copy"), "<control>C", compose_copy_cb, 0, NULL},
{N_("/_Edit/_Paste"), "<control>V", compose_paste_cb, 0, NULL},
{N_("/_Edit/Paste as _quotation"),
{N_("/_Edit/Special paste/as _quotation"),
NULL, compose_paste_as_quote_cb, 0, NULL},
{N_("/_Edit/Special paste/_wrapped"),
NULL, compose_paste_wrap_cb, 0, NULL},
{N_("/_Edit/Special paste/_unwrapped"),
NULL, compose_paste_no_wrap_cb, 0, NULL},
{N_("/_Edit/Select _all"), "<control>A", compose_allsel_cb, 0, NULL},
{N_("/_Edit/A_dvanced"), NULL, NULL, 0, "<Branch>"},
{N_("/_Edit/A_dvanced/Move a character backward"),
@ -779,6 +785,8 @@ static GdkColor uri_color = {
(gushort)0
};
static GtkTextTag *no_wrap_tag = NULL;
static void compose_create_tags(GtkTextView *text, Compose *compose)
{
GtkTextBuffer *buffer;
@ -807,6 +815,7 @@ static void compose_create_tags(GtkTextView *text, Compose *compose)
gtk_text_buffer_create_tag(buffer, "link",
"foreground-gdk", &uri_color,
NULL);
no_wrap_tag = gtk_text_buffer_create_tag(buffer, "no_wrap", NULL);
}
Compose *compose_new(PrefsAccount *account, const gchar *mailto,
@ -3039,6 +3048,9 @@ static void compose_wrap_paragraph(Compose *compose, GtkTextIter *par_iter, gboo
gint n;
gchar *o_walk, *walk, *bp, *ep;
gint walk_pos;
if (gtk_text_iter_has_tag(&iter, no_wrap_tag) && !force)
goto colorize;
uri_start = uri_stop = -1;
quote_str = compose_get_quote_str(buffer, &iter, &quote_len);
@ -6725,15 +6737,36 @@ static void entry_copy_clipboard(GtkWidget *entry)
gtk_clipboard_get(GDK_SELECTION_CLIPBOARD));
}
static void entry_paste_clipboard(GtkWidget *entry)
static void entry_paste_clipboard(GtkWidget *entry, gboolean wrap)
{
if (GTK_IS_EDITABLE(entry))
gtk_editable_paste_clipboard (GTK_EDITABLE(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_SELECTION_CLIPBOARD),
NULL, TRUE);
else if (GTK_IS_TEXT_VIEW(entry)) {
GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(entry));
GtkTextMark *mark_start = gtk_text_buffer_get_insert(buffer);
GtkTextIter start_iter, end_iter;
gint start, end;
gchar *contents = gtk_clipboard_wait_for_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD));
if (contents == NULL)
return;
gtk_text_buffer_delete_selection(buffer, FALSE, TRUE);
gtk_text_buffer_get_iter_at_mark(buffer, &start_iter, mark_start);
start = gtk_text_iter_get_offset(&start_iter);
gtk_text_buffer_insert(buffer, &start_iter, contents, strlen(contents));
if (!wrap) {
end = start + strlen(contents);
gtk_text_buffer_get_iter_at_offset(buffer, &start_iter, start);
gtk_text_buffer_get_iter_at_offset(buffer, &end_iter, end);
gtk_text_buffer_apply_tag_by_name(buffer, "no_wrap", &start_iter, &end_iter);
}
}
}
static void entry_allsel(GtkWidget *entry)
@ -6769,15 +6802,46 @@ static void compose_copy_cb(Compose *compose)
entry_copy_clipboard(compose->focused_editable);
}
#define BLOCK_WRAP() { \
prev_autowrap = compose->autowrap; \
buffer = gtk_text_view_get_buffer( \
GTK_TEXT_VIEW(compose->text)); \
compose->autowrap = FALSE; \
\
g_signal_handlers_block_by_func(G_OBJECT(buffer), \
G_CALLBACK(compose_changed_cb), \
compose); \
g_signal_handlers_block_by_func(G_OBJECT(buffer), \
G_CALLBACK(text_inserted), \
compose); \
}
#define UNBLOCK_WRAP() { \
compose->autowrap = prev_autowrap; \
if (compose->autowrap) \
compose_wrap_all(compose); \
\
g_signal_handlers_unblock_by_func(G_OBJECT(buffer), \
G_CALLBACK(compose_changed_cb), \
compose); \
g_signal_handlers_unblock_by_func(G_OBJECT(buffer), \
G_CALLBACK(text_inserted), \
compose); \
}
static void compose_paste_cb(Compose *compose)
{
gint prev_autowrap;
GtkTextBuffer *buffer;
BLOCK_WRAP();
if (compose->focused_editable &&
GTK_WIDGET_HAS_FOCUS(compose->focused_editable))
entry_paste_clipboard(compose->focused_editable);
entry_paste_clipboard(compose->focused_editable, prefs_common.linewrap_pastes);
UNBLOCK_WRAP();
}
static void compose_paste_as_quote_cb(Compose *compose)
{
gint wrap_quote = prefs_common.linewrap_quote;
if (compose->focused_editable &&
GTK_WIDGET_HAS_FOCUS(compose->focused_editable)) {
/* let text_insert() (called directly or at a later time
@ -6790,10 +6854,34 @@ static void compose_paste_as_quote_cb(Compose *compose)
g_object_set_data(G_OBJECT(compose->focused_editable),
"paste_as_quotation",
GINT_TO_POINTER(paste_as_quotation + 1));
entry_paste_clipboard(compose->focused_editable);
prefs_common.linewrap_quote = prefs_common.linewrap_pastes;
entry_paste_clipboard(compose->focused_editable, prefs_common.linewrap_pastes);
prefs_common.linewrap_quote = wrap_quote;
}
}
static void compose_paste_no_wrap_cb(Compose *compose)
{
gint prev_autowrap;
GtkTextBuffer *buffer;
BLOCK_WRAP();
if (compose->focused_editable &&
GTK_WIDGET_HAS_FOCUS(compose->focused_editable))
entry_paste_clipboard(compose->focused_editable, FALSE);
UNBLOCK_WRAP();
}
static void compose_paste_wrap_cb(Compose *compose)
{
gint prev_autowrap;
GtkTextBuffer *buffer;
BLOCK_WRAP();
if (compose->focused_editable &&
GTK_WIDGET_HAS_FOCUS(compose->focused_editable))
entry_paste_clipboard(compose->focused_editable, TRUE);
UNBLOCK_WRAP();
}
static void compose_allsel_cb(Compose *compose)
{
if (compose->focused_editable &&
@ -7380,11 +7468,16 @@ static void text_inserted(GtkTextBuffer *buffer, GtkTextIter *iter,
qmark = prefs_common.quotemark;
else
qmark = "> ";
mark = gtk_text_buffer_create_mark(buffer, NULL, iter, FALSE);
gtk_text_buffer_place_cursor(buffer, iter);
compose_quote_fmt(compose, NULL, "%Q", qmark, new_text);
g_free(new_text);
g_object_set_data(G_OBJECT(compose->text), "paste_as_quotation",
GINT_TO_POINTER(paste_as_quotation - 1));
gtk_text_buffer_get_iter_at_mark(buffer, iter, mark);
} else
gtk_text_buffer_insert(buffer, iter, text, len);

View file

@ -135,6 +135,8 @@ static PrefParam param[] = {
NULL, NULL, NULL},
{"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
NULL, NULL, NULL},
{"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
NULL, NULL, NULL},
{"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
NULL, NULL, NULL},
{"linewrap_before_sending", "FALSE", &prefs_common.linewrap_at_send, P_BOOL,

View file

@ -96,6 +96,7 @@ struct _PrefsCommon
gint undolevels;
gint linewrap_len;
gboolean linewrap_quote;
gboolean linewrap_pastes;
gboolean autowrap;
gboolean linewrap_at_send;
gboolean auto_exteditor;

View file

@ -47,6 +47,7 @@ typedef struct _WrappingPage
GtkWidget *spinbtn_linewrap;
GtkWidget *checkbtn_wrapquote;
GtkWidget *checkbtn_wrappastes;
GtkWidget *checkbtn_autowrap;
GtkWidget *checkbtn_wrapatsend;
} WrappingPage;
@ -61,11 +62,12 @@ void prefs_wrapping_create_widget(PrefsPage *_page, GtkWindow *window,
GtkObject *spinbtn_linewrap_adj;
GtkWidget *spinbtn_linewrap;
GtkWidget *checkbtn_wrapquote;
GtkWidget *checkbtn_wrappastes;
GtkWidget *checkbtn_autowrap;
GtkWidget *checkbtn_wrapatsend;
GtkWidget *hbox1;
table = gtk_table_new(8, 3, FALSE);
table = gtk_table_new(10, 3, FALSE);
gtk_widget_show(table);
gtk_container_set_border_width(GTK_CONTAINER(table), 8);
gtk_table_set_row_spacings(GTK_TABLE(table), 4);
@ -89,9 +91,15 @@ void prefs_wrapping_create_widget(PrefsPage *_page, GtkWindow *window,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
checkbtn_wrappastes = gtk_check_button_new_with_label(_("Wrap pasted text"));
gtk_widget_show (checkbtn_wrappastes);
gtk_table_attach (GTK_TABLE (table), checkbtn_wrappastes, 0, 1, 5, 6,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
hbox1 = gtk_hbox_new (FALSE, 0);
gtk_widget_show (hbox1);
gtk_table_attach (GTK_TABLE (table), hbox1, 0, 1, 5, 6,
gtk_table_attach (GTK_TABLE (table), hbox1, 0, 1, 7, 8,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (GTK_FILL), 0, 0);
@ -115,12 +123,15 @@ void prefs_wrapping_create_widget(PrefsPage *_page, GtkWindow *window,
prefs_common.linewrap_at_send);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_wrapquote),
prefs_common.linewrap_quote);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_wrappastes),
prefs_common.linewrap_pastes);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbtn_linewrap),
prefs_common.linewrap_len);
prefs_wrapping->window = GTK_WIDGET(window);
prefs_wrapping->spinbtn_linewrap = spinbtn_linewrap;
prefs_wrapping->checkbtn_wrapquote = checkbtn_wrapquote;
prefs_wrapping->checkbtn_wrappastes = checkbtn_wrappastes;
prefs_wrapping->checkbtn_autowrap = checkbtn_autowrap;
prefs_wrapping->checkbtn_wrapatsend = checkbtn_wrapatsend;
@ -135,6 +146,8 @@ void prefs_wrapping_save(PrefsPage *_page)
gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(page->spinbtn_linewrap));
prefs_common.linewrap_quote =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->checkbtn_wrapquote));
prefs_common.linewrap_pastes =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->checkbtn_wrappastes));
prefs_common.autowrap =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->checkbtn_autowrap));
prefs_common.linewrap_at_send =