GtkWidget *checkbtn_forward_account_autosel;
GtkWidget *checkbtn_reedit_account_autosel;
+ GtkWidget *spinbtn_undolevels;
+ GtkObject *spinbtn_undolevels_adj;
+
GtkWidget *spinbtn_linewrap;
GtkObject *spinbtn_linewrap_adj;
GtkWidget *checkbtn_wrapquote;
&compose.checkbtn_autoextedit,
prefs_set_data_from_toggle, prefs_set_toggle},
+ {"undolevels", "50", &prefs_common.undolevels, P_INT,
+ &compose.spinbtn_undolevels,
+ prefs_set_data_from_spinbtn, prefs_set_spinbtn},
+
{"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
- &compose.spinbtn_linewrap,
+ &compose.spinbtn_linewrap,
prefs_set_data_from_spinbtn, prefs_set_spinbtn},
{"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
&compose.checkbtn_wrapquote,
GtkWidget *checkbtn_forward_account_autosel;
GtkWidget *checkbtn_reedit_account_autosel;
- GtkWidget *vbox_linewrap;
+ GtkWidget *hbox_undolevels;
+ GtkWidget *label_undolevels;
+ GtkObject *spinbtn_undolevels_adj;
+ GtkWidget *spinbtn_undolevels;
+
+ GtkWidget *vbox_linewrap;
GtkWidget *hbox3;
GtkWidget *hbox4;
PACK_CHECK_BUTTON (vbox1, checkbtn_block_cursor,
_("Block cursor"));
+ PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
+
+ hbox_undolevels = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox3);
+ gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevels, FALSE, FALSE, 0);
+
+ label_undolevels = gtk_label_new (_("Undo levels"));
+ gtk_widget_show (label_undolevels);
+ gtk_box_pack_start (GTK_BOX (hbox_undolevels), label_undolevels, FALSE, FALSE, 0);
+
+ spinbtn_undolevels_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
+ spinbtn_undolevels = gtk_spin_button_new
+ (GTK_ADJUSTMENT (spinbtn_undolevels_adj), 1, 0);
+ gtk_widget_show (spinbtn_undolevels);
+ gtk_box_pack_start (GTK_BOX (hbox_undolevels), spinbtn_undolevels, FALSE, FALSE, 0);
+ gtk_widget_set_usize (spinbtn_undolevels, 64, -1);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevels), TRUE);
+
#if USE_PSPELL
/* spell checker defaults */
PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
+ compose.spinbtn_undolevels = spinbtn_undolevels;
+ compose.spinbtn_undolevels_adj = spinbtn_undolevels_adj;
+
compose.spinbtn_linewrap = spinbtn_linewrap;
compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
compose.checkbtn_wrapquote = checkbtn_wrapquote;
#include "undo.h"
#include "utils.h"
#include "gtkstext.h"
+#include "prefs_common.h"
typedef struct _UndoInfo UndoInfo;
{
gint n;
UndoInfo *nth_undo;
- gint undo_levels = 50;
- if (undo_levels < 1)
+ if (prefs_common.undolevels < 1)
return;
/* No need to check for the redo list size since the undo
list gets freed on any call to compose_undo_add */
- if (g_list_length(undostruct->undo) >= undo_levels && undo_levels > 0) {
+ if (g_list_length(undostruct->undo) >= prefs_common.undolevels && prefs_common.undolevels > 0) {
nth_undo = g_list_nth_data(undostruct->undo, g_list_length(undostruct->undo) - 1);
undostruct->undo = g_list_remove(undostruct->undo, nth_undo);
g_free (nth_undo->text);
{
guchar *text_to_insert;
- text_to_insert = g_strndup(new_text, new_text_length);
- undo_add(text_to_insert, *position, (*position + new_text_length),
- UNDO_ACTION_INSERT, undostruct);
- g_free (text_to_insert);
+ if (prefs_common.undolevels > 0){
+ text_to_insert = g_strndup(new_text, new_text_length);
+
+ undo_add(text_to_insert, *position, (*position + new_text_length),
+ UNDO_ACTION_INSERT, undostruct);
+ g_free (text_to_insert);
+ }
}
void undo_delete_text_cb(GtkEditable *editable, gint start_pos,
{
guchar *text_to_delete;
- if (start_pos == end_pos )
- return;
-
- text_to_delete = gtk_editable_get_chars(GTK_EDITABLE(editable),
+ if (prefs_common.undolevels > 0){
+ if (start_pos == end_pos )
+ return;
+
+ text_to_delete = gtk_editable_get_chars(GTK_EDITABLE(editable),
start_pos, end_pos);
- undo_add(text_to_delete, start_pos, end_pos, UNDO_ACTION_DELETE, undostruct);
- g_free (text_to_delete);
+ undo_add(text_to_delete, start_pos, end_pos, UNDO_ACTION_DELETE, undostruct);
+ g_free (text_to_delete);
+ }
}
void undo_paste_clipboard_cb (GtkEditable *editable, UndoMain *undostruct)
{
debug_print("befor Paste: %d\n", undostruct->paste);
- if (undo_get_selection(editable, NULL, NULL))
- undostruct->paste = TRUE;
+ if (prefs_common.undolevels > 0)
+ if (undo_get_selection(editable, NULL, NULL))
+ undostruct->paste = TRUE;
debug_print("after Paste: %d\n", undostruct->paste);
}