From 3993c17be8839f7adda132270e8d9238d9f49b95 Mon Sep 17 00:00:00 2001 From: Nalin Dahyabhai Date: Thu, 29 Aug 2002 20:19:51 +0000 Subject: Clean up bookkeeping for mouse autoscrolling and adjustment change * src/vte.c: Clean up bookkeeping for mouse autoscrolling and adjustment change notifications. Reset the scrolling and insertion deltas when clearing the history. * src/interpret.c: Don't dump data on incomplete conversion errors, which we're going to retry anyway. * src/iso2022.txt: Add iso-2022-kr examples (no workee -- uses GR). * src/vte.c, src/vte.h: Add vte_terminal_copy_primary and vte_terminal_paste_primary(), because I really want to let profterm decide default values for key bindings. --- ChangeLog | 17 +++++++++++++- src/interpret.c | 23 +++++++++++------- src/iso2022.txt | 9 +++---- src/vte.c | 73 ++++++++++++++++++++++++++++++++++++++++----------------- src/vte.h | 2 ++ vte.spec | 6 ++++- 6 files changed, 94 insertions(+), 36 deletions(-) diff --git a/ChangeLog b/ChangeLog index d31fd256..ea6d2a86 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,14 +1,29 @@ -2002-08-28 Gustavo Noronha Silva +2002-08-29 nalin + * src/vte.c: Clean up bookkeeping for mouse autoscrolling and adjustment + change notifications. Reset the scrolling and insertion deltas when + clearing the history. + * src/interpret.c: Don't dump data on incomplete conversion errors, + which we're going to retry anyway. + * src/iso2022.txt: Add iso-2022-kr examples (no workee -- uses GR). + +2002-08-28 nalin + * src/vte.c, src/vte.h: Add vte_terminal_copy_primary and + vte_terminal_paste_primary(), because I really want to let + profterm decide default values for key bindings. +2002-08-28 Gustavo Noronha Silva * configure.in (ALL_LINGUAS): added pt_BR 2002-08-27 nalin * src/vte.c: Stop autoscrolling on button release. + 2002-08-27 nalin * src/vte.c: When autoscrolling, clamp the new boundary to what the user can see. + 2002-08-27 nalin * src/vte.c: Implement autoscroll (Red Hat #70481). + 2002-08-27 nalin * src/vte.c: Only perform cr-lf substitutions when pasting text, not when inputting from a live user (Red Hat #72639). Bind GDK_ISO_Left_Tab diff --git a/src/interpret.c b/src/interpret.c index 7fc2671d..3a476bee 100644 --- a/src/interpret.c +++ b/src/interpret.c @@ -117,17 +117,22 @@ main(int argc, char **argv) "UTF-8", NULL, &ubuflen, &error); if (error != NULL) { - g_print("%s\n", - error->message ? error->message : "?"); - g_clear_error(&error); - g_print("Data: "); - for (j = 0; j < array->len; j++) { - if (j > 0) { - g_print(", "); + if (error->code != + G_CONVERT_ERROR_PARTIAL_INPUT) { + g_print("%s\n", + error->message ? + error->message : + "?"); + g_print("Data: "); + for (j = 0; j < array->len; j++) { + if (j > 0) { + g_print(", "); + } + g_print("0x%x", array->data[j]); } - g_print("0x%x", array->data[j]); + g_print("\n"); } - g_print("\n"); + g_clear_error(&error); continue; } tmpsubst = vte_iso2022_copy(substitutions); diff --git a/src/iso2022.txt b/src/iso2022.txt index e67fae91..d5b3ff57 100644 --- a/src/iso2022.txt +++ b/src/iso2022.txt @@ -1,11 +1,12 @@ # # Sample text from Ken Lunde's CJKV Information Processing. # -ISO-2022-JP/156: $B$+$J4A;z(B -ISO-2022-KR/158: $)C1hD!)B +ISO-2022-JP/156: [$B$+$J4A;z(B] [かな漢字] +ISO-2022-KR/158: [$)C1hD!)B] [ㅨ䐡] # # Sample text based on XTerm's specs and random other docs. # -British : (A$(B$ -ISO-2022-JP : (J~(B~ +British: [(A$(B$] [£$] +ISO-2022-JP: [(J~(B~] [¥~] +ISO-2022-KR: [$)C>o^-] [억嚬] diff --git a/src/vte.c b/src/vte.c index cb9783f3..eeb05492 100644 --- a/src/vte.c +++ b/src/vte.c @@ -277,7 +277,6 @@ struct _VteTerminalPrivate { guint mouse_last_button; gdouble mouse_last_x, mouse_last_y; gboolean mouse_autohide; - gboolean mouse_autoscrolling; guint mouse_autoscroll_tag; /* State variables for handling match checks. */ @@ -334,7 +333,6 @@ struct _VteTerminalPrivate { AtkObject *accessible; /* Adjustment updates pending. */ - gboolean adjustment_changed_pending; gboolean adjustment_changed_tag; /* Background images/"transparency". */ @@ -1292,13 +1290,12 @@ vte_terminal_emit_adjustment_changed(gpointer data) { VteTerminal *terminal; terminal = VTE_TERMINAL(data); - if (terminal->pvt->adjustment_changed_pending) { + if (terminal->pvt->adjustment_changed_tag != -1) { #ifdef VTE_DEBUG if (vte_debug_on(VTE_DEBUG_EVENTS)) { fprintf(stderr, "Emitting adjustment_changed.\n"); } #endif - terminal->pvt->adjustment_changed_pending = FALSE; terminal->pvt->adjustment_changed_tag = -1; gtk_adjustment_changed(terminal->adjustment); } @@ -1309,8 +1306,7 @@ vte_terminal_emit_adjustment_changed(gpointer data) static void vte_terminal_queue_adjustment_changed(VteTerminal *terminal) { - if (!terminal->pvt->adjustment_changed_pending) { - terminal->pvt->adjustment_changed_pending = TRUE; + if (terminal->pvt->adjustment_changed_tag != -1) { terminal->pvt->adjustment_changed_tag = g_idle_add_full(VTE_ADJUSTMENT_PRIORITY, vte_terminal_emit_adjustment_changed, @@ -2262,6 +2258,7 @@ vte_terminal_ensure_cursor(VteTerminal *terminal, gboolean current) GArray *array; VteScreen *screen; struct vte_charcell cell, *cells; + gboolean readjust = FALSE; long add, i; /* Must make sure we're in a sane area. */ @@ -2273,8 +2270,11 @@ vte_terminal_ensure_cursor(VteTerminal *terminal, gboolean current) /* Create a new row. */ array = vte_new_row_data(); vte_ring_append(screen->row_data, array); + readjust = TRUE; + } + if (readjust) { + vte_terminal_adjust_adjustments(terminal, FALSE); } - vte_terminal_adjust_adjustments(terminal, FALSE); /* Find the row the cursor is in. */ array = vte_ring_index(screen->row_data, @@ -2331,8 +2331,6 @@ vte_terminal_scroll_insertion(VteTerminal *terminal) if (delta != screen->insert_delta) { vte_terminal_ensure_cursor(terminal, FALSE); screen->insert_delta = delta; - /* Update scroll bar adjustments. */ - vte_terminal_adjust_adjustments(terminal, FALSE); } } @@ -7666,6 +7664,7 @@ vte_terminal_autoscroll(gpointer data) terminal->char_height * adj; row = terminal->pvt->selection_start.y; vte_terminal_selection_recompute(terminal); + terminal->pvt->selection_start.x = 0; terminal->pvt->selection_start.y = adj; vte_invalidate_cells(terminal, 0, @@ -7674,9 +7673,14 @@ vte_terminal_autoscroll(gpointer data) row + 1 - terminal->pvt->selection_start.y); } +#ifdef VTE_DEBUG + if (vte_debug_on(VTE_DEBUG_EVENTS)) { + fprintf(stderr, "Autoscrolling down.\n"); + } +#endif } else if (terminal->pvt->mouse_last_y + 2 * VTE_PAD_WIDTH > - widget->allocation.y + widget->allocation.height) { + widget->allocation.height) { adj = CLAMP(terminal->adjustment->value + 1, terminal->adjustment->lower, terminal->adjustment->upper - @@ -7690,6 +7694,8 @@ vte_terminal_autoscroll(gpointer data) terminal->char_height * adj; row = terminal->pvt->selection_end.y; vte_terminal_selection_recompute(terminal); + terminal->pvt->selection_end.x = + terminal->column_count; terminal->pvt->selection_end.y = adj + terminal->row_count - 1; vte_invalidate_cells(terminal, @@ -7698,11 +7704,15 @@ vte_terminal_autoscroll(gpointer data) row, terminal->pvt->selection_end.y - row + 1); +#ifdef VTE_DEBUG + if (vte_debug_on(VTE_DEBUG_EVENTS)) { + fprintf(stderr, "Autoscrolling down.\n"); + } +#endif } else { - terminal->pvt->mouse_autoscrolling = FALSE; terminal->pvt->mouse_autoscroll_tag = -1; } - return terminal->pvt->mouse_autoscrolling; + return (terminal->pvt->mouse_autoscroll_tag != -1); } /* Read and handle a motion event. */ @@ -7812,13 +7822,13 @@ vte_terminal_motion_notify(GtkWidget *widget, GdkEventMotion *event) adj); need_autoscroll = TRUE; } - if (need_autoscroll && !terminal->pvt->mouse_autoscrolling) { + if (need_autoscroll && + (terminal->pvt->mouse_autoscroll_tag == -1)) { terminal->pvt->mouse_autoscroll_tag = g_timeout_add_full(G_PRIORITY_LOW, 50, vte_terminal_autoscroll, terminal, NULL); - terminal->pvt->mouse_autoscrolling = TRUE; } } else { #ifdef VTE_DEBUG @@ -8362,6 +8372,7 @@ vte_terminal_button_release(GtkWidget *widget, GdkEventButton *event) /* Disconnect from autoscroll requests. */ if (terminal->pvt->mouse_autoscroll_tag != -1) { g_source_remove(terminal->pvt->mouse_autoscroll_tag); + terminal->pvt->mouse_autoscroll_tag = -1; } } @@ -9795,7 +9806,6 @@ vte_terminal_init(VteTerminal *terminal, gpointer *klass) pvt->mouse_last_x = 0; pvt->mouse_last_y = 0; pvt->mouse_autohide = FALSE; - pvt->mouse_autoscrolling = FALSE; pvt->mouse_autoscroll_tag = -1; /* Matching data. */ @@ -9888,7 +9898,6 @@ vte_terminal_init(VteTerminal *terminal, gpointer *klass) pvt->connected_settings = NULL; /* Bookkeeping data for adjustment-changed signals. */ - pvt->adjustment_changed_pending = FALSE; pvt->adjustment_changed_tag = -1; /* Set up background information. */ @@ -10150,10 +10159,6 @@ vte_terminal_finalize(GObject *object) g_object_unref(G_OBJECT(terminal->pvt->bg_transparent_image)); terminal->pvt->bg_transparent_image = NULL; } - if (terminal->pvt->adjustment_changed_tag != -1) { - g_source_remove(terminal->pvt->adjustment_changed_tag); - terminal->pvt->adjustment_changed_tag = -1; - } if (terminal->pvt->bg_transparent_update_tag != -1) { g_source_remove(terminal->pvt->bg_transparent_update_tag); terminal->pvt->bg_transparent_update_tag = -1; @@ -10209,6 +10214,13 @@ vte_terminal_finalize(GObject *object) /* Disconnect from autoscroll requests. */ if (terminal->pvt->mouse_autoscroll_tag != -1) { g_source_remove(terminal->pvt->mouse_autoscroll_tag); + terminal->pvt->mouse_autoscroll_tag = -1; + } + + /* Cancel pending adjustment change notifications. */ + if (terminal->pvt->adjustment_changed_tag != -1) { + g_source_remove(terminal->pvt->adjustment_changed_tag); + terminal->pvt->adjustment_changed_tag = -1; } /* Tabstop information. */ @@ -12455,6 +12467,20 @@ vte_terminal_paste_clipboard(VteTerminal *terminal) vte_terminal_paste(terminal, GDK_SELECTION_CLIPBOARD); } +void +vte_terminal_copy_primary(VteTerminal *terminal) +{ + g_return_if_fail(VTE_IS_TERMINAL(terminal)); + vte_terminal_copy(terminal, GDK_SELECTION_PRIMARY); +} + +void +vte_terminal_paste_primary(VteTerminal *terminal) +{ + g_return_if_fail(VTE_IS_TERMINAL(terminal)); + vte_terminal_paste(terminal, GDK_SELECTION_PRIMARY); +} + /* Append the menu items for our input method context to the given shell. */ void vte_terminal_im_append_menuitems(VteTerminal *terminal, GtkMenuShell *menushell) @@ -12992,7 +13018,7 @@ vte_terminal_set_scrollback_lines(VteTerminal *terminal, long lines) screens[i]->scroll_delta = CLAMP(screens[i]->scroll_delta, low, highd); screens[i]->cursor_current.row = CLAMP(screens[i]->cursor_current.row, - low, high); + low, highd); } terminal->pvt->scrollback_lines = lines; @@ -13168,10 +13194,15 @@ vte_terminal_reset(VteTerminal *terminal, gboolean full, gboolean clear_history) terminal->pvt->normal_screen.cursor_saved.col = 0; terminal->pvt->normal_screen.cursor_current.row = 0; terminal->pvt->normal_screen.cursor_current.col = 0; + terminal->pvt->normal_screen.scroll_delta = 0; + terminal->pvt->normal_screen.insert_delta = 0; terminal->pvt->alternate_screen.cursor_saved.row = 0; terminal->pvt->alternate_screen.cursor_saved.col = 0; terminal->pvt->alternate_screen.cursor_current.row = 0; terminal->pvt->alternate_screen.cursor_current.col = 0; + terminal->pvt->alternate_screen.scroll_delta = 0; + terminal->pvt->alternate_screen.insert_delta = 0; + vte_terminal_adjust_adjustments(terminal, TRUE); } /* Clear the status lines. */ terminal->pvt->normal_screen.status_line = FALSE; diff --git a/src/vte.h b/src/vte.h index d603e455..4ef0e667 100644 --- a/src/vte.h +++ b/src/vte.h @@ -134,6 +134,8 @@ void vte_terminal_feed_child(VteTerminal *terminal, * the terminal. */ void vte_terminal_copy_clipboard(VteTerminal *terminal); void vte_terminal_paste_clipboard(VteTerminal *terminal); +void vte_terminal_copy_primary(VteTerminal *terminal); +void vte_terminal_paste_primary(VteTerminal *terminal); /* Set the terminal's size. */ void vte_terminal_set_size(VteTerminal *terminal, long columns, long rows); diff --git a/vte.spec b/vte.spec index fe759bc9..d95554c1 100644 --- a/vte.spec +++ b/vte.spec @@ -1,5 +1,5 @@ Name: vte -Version: 0.8.10 +Version: 0.8.11 Release: 1 Summary: An experimental terminal emulator. License: LGPL @@ -61,6 +61,10 @@ rm $RPM_BUILD_ROOT/%{_libdir}/lib%{name}.la %{_libdir}/pkgconfig/* %changelog +* Thu Aug 29 2002 Nalin Dahyabhai 0.8.11-1 +- clean up autoscroll (#70481) +- add Korean text examples to docs + * Tue Aug 27 2002 Nalin Dahyabhai 0.8.10-1 - autoscroll (#70481) - only perform cr-lf substitutions when pasting (#72639) -- cgit v1.2.1