2007-02-26 Behdad Esfahbod Released vte-0.15.4. * NEWS: Updated. * configure.in: Bumped version to 0.15.4. * src/Makefile.am: Bumped libtool version to 11:1:2. 2007-02-26 Chris Wilson Bug 410986 – Fails to build with -z defs The forgotten half - the python module also fails to link. * acinclude.m4: * python/Makefile.am: Add PYTHON_LIBS pointing to the customary location and remember to include them when compiling vtemodule.so. 2007-02-26 Chris Wilson Bug 412361 – Yet another mouse selection regression... Part 2. * src/vte.c: (vte_terminal_queue_adjustment_value_changed), (_vte_terminal_adjust_adjustments_full), (vte_terminal_scroll_pages), (vte_terminal_autoscroll), (vte_terminal_size_allocate), (vte_terminal_scroll): We implicitly used a bit of sanity checking when setting the adjustment value. Ensure the value really is within the adjustment range before updating scroll_delta. 2007-02-26 Chris Wilson Bug 412361 – Yet another mouse selection regression... Part 1. * src/vte.c: (vte_terminal_draw_rows): Restore drawing of the selection below the text. 2007-02-26 Chris Wilson * src/vte.c: (vte_terminal_class_init), (time_process_incoming), (process_timeout), (update_repeat_timeout), (update_timeout): Update max number of processable bytes each time we call vte_terminal_process_incoming(). 2007-02-26 Chris Wilson * src/vte.c: (vte_terminal_emit_adjustment_changed), (_vte_terminal_adjust_adjustments_full): Refactor the common code. 2007-02-26 Chris Wilson Push a couple of NULL checks to the callers so to be able to move them outside of the inner-most loops. * src/vte.c: (_vte_row_data_find_charcell), (_vte_invalidate_cell), (_vte_terminal_adjust_adjustments), (vte_terminal_get_text_range_maybe_wrapped), (find_start_column), (find_end_column), (vte_terminal_draw_rows): 2007-02-26 Chris Wilson Some applications, such as cat, dump as much data to the terminal as possible. In these scenarios it is likely that we will read data from the child much faster than we can process it and the refresh will stutter. The ideal solution would be to speed up the data processing so that this overrun was impossible. However, the approach taken here is to estimate how much data we can actually process in our time slice and to stop reading once we have sufficient data. * src/vte-private.h: * src/vte.c: (_vte_invalidate_all), (vte_terminal_emit_contents_changed), (vte_terminal_match_contents_clear), (vte_terminal_match_contents_refresh), (vte_terminal_emit_adjustment_changed), (_vte_terminal_adjust_adjustments), (vte_terminal_scroll_pages), (vte_terminal_catch_child_exited), (vte_terminal_eof), (vte_terminal_process_incoming), (vte_terminal_io_read), (vte_terminal_handle_scroll), (vte_terminal_init), (vte_terminal_size_allocate), (need_processing), (process_timeout), (update_repeat_timeout), (update_timeout): * src/vteseq.c: (vte_sequence_handler_decset_internal): 2007-02-26 Chris Wilson Bug 411000 – Orca repeats old text in gnome-terminal The deferred handling of the window scrolling had the unfortunate side-effect of postponing the accessibility 'text-scrolled' signal until after the 'text-inserted' signal. This caused vteaccess to determine that the whole window had been modified and cause orca to reread the entire screen. * src/vte-private.h: * src/vte.c: (vte_terminal_emit_contents_changed), (_vte_terminal_queue_contents_changed), (vte_terminal_emit_cursor_moved), (vte_terminal_queue_cursor_moved), (vte_terminal_scroll_pages), (vte_terminal_eof), (vte_terminal_emit_pending_text_signals), (vte_terminal_process_incoming), (vte_terminal_handle_scroll), (vte_terminal_size_allocate), (vte_terminal_unrealize), (vte_terminal_emit_pending_signals): * src/vteaccess.c: (emit_text_caret_moved), (emit_text_changed_insert), (emit_text_changed_delete): * src/vteseq.c: (vte_sequence_handler_decset_internal): Restore the order of the ally signals. However, Bug 372777 remains unresolved. 2007-02-26 Chris Wilson * src/vte.c: (vte_terminal_io_read): Eeek, correctly compute the buffer length when we no longer aim to fill it. 2007-02-26 Chris Wilson Use a separate debug flag for the ally interface. * src/debug.c: (_vte_debug_parse_string): * src/debug.h: * src/vteaccess.c: (vte_terminal_accessible_update_private_data_if_needed), (vte_terminal_accessible_invalidate_cursor), (vte_terminal_accessible_finalize), (vte_terminal_accessible_get_text), (vte_terminal_accessible_get_text_somewhere), (vte_terminal_accessible_text_init), (vte_terminal_accessible_component_init), (vte_terminal_accessible_action_init), (vte_terminal_accessible_factory_new): 2007-02-26 Chris Wilson * src/vte-private.h: * src/vte.c: (vte_terminal_io_read): And finally clamp the maximum number of bytes transferred in a single chunk. 2007-02-24 Chris Wilson * src/vte.c: Hint that the compiler should inline vte_terminal_determine_colors(). 2007-02-24 Chris Wilson cf Bug 410534 – Slow content scrolling, takes 100% of CPU. cf Bug 410463 – Poor interactive performance with multiple terminals * src/vte.c: (vte_terminal_io_read): Do not loop whilst reading in a backlog of child data - should help prevent monopolisation of vte by a single child and make vte more responsive to user input on slower computers. 2007-02-24 Chris Wilson Bug 159078 – slow highlight Do not update the match hilite during a selection-drag. Record unsuccesful regex matches, so we can quickly determine whether the cursor is still inside the blank region. * src/vte-private.h: * src/vte.c: (vte_terminal_match_check_internal), (rowcol_inside_match), (vte_terminal_match_check), (_vte_terminal_set_pointer_visible), (vte_terminal_match_hilite_clear), (vte_terminal_match_hilite_show), (vte_terminal_match_hilite_hide), (vte_terminal_match_hilite_update), (vte_terminal_match_hilite), (vte_terminal_motion_notify), (vte_terminal_button_press), (vte_terminal_focus_in), (vte_terminal_focus_out), (vte_terminal_enter), (vte_terminal_leave), (vte_terminal_init), (vte_terminal_unrealize), (vte_terminal_draw_rows), (vte_terminal_paint): 2007-02-23 Chris Wilson A couple of compiler warnings and avoid unnecessary arithmetic. * src/vte.c: (_vte_terminal_set_default_attributes), (find_start_column), (find_end_column), (vte_terminal_start_selection), (vte_terminal_extend_selection), (vte_terminal_draw_rows), (vte_terminal_paint): * src/vtexft.c: (_vte_xft_font_open), (_vte_xft_font_for_char), (_vte_xft_char_width), (_vte_xft_unlock_fonts), (_vte_xft_start), (_vte_xft_clip), (_vte_xft_set_text_font), (_vte_xft_draw_text): 2007-02-23 Chris Wilson Bug 411276 – SVN trunk compilation error Part 2. * configure.in: Check that the header file defines FcStrFree before checking for the availability of the function. Complete hack, but appears to work. 2007-02-23 Chris Wilson Bug 411276 – SVN trunk compilation error * configure.in: Ubuntu Edgy appears to have a broken fontconfig-dev package where the function is exported from the library but is missing the corresponding prototypes. So we reorder the determination of the compilation flags before checking for available functions in the hope that the tests will then match the results at compile time. 2007-02-23 Chris Wilson * src/vte.c: (vte_terminal_io_read): Prevent a deadlock on recursively grabbing the gdk_mutex. 2007-02-23 Chris Wilson Heuristic to avoid a read when it's likely to just return EAGAIN. * src/vte-private.h: * src/vte.c: (vte_terminal_io_read), (process_timeout), (update_repeat_timeout), (update_timeout): 2007-02-23 Chris Wilson Add a new debug flag to monitor draw operations. Don't issue individual glyphs for is_local_graphic() in the middle of a run. * src/debug.c: (_vte_debug_parse_string): * src/debug.h: * src/vte.c: (vte_terminal_unichar_is_local_graphic), (vte_terminal_draw_rows), (vte_terminal_paint): * src/vtedraw.c: (_vte_draw_init_user), (_vte_draw_init_default), (_vte_draw_new), (_vte_draw_free), (_vte_draw_get_visual), (_vte_draw_get_colormap), (_vte_draw_start), (_vte_draw_end), (_vte_draw_set_background_color), (_vte_draw_set_background_image), (_vte_draw_requires_repaint), (_vte_draw_clip), (_vte_draw_clear), (_vte_draw_set_text_font), (_vte_draw_get_text_width), (_vte_draw_get_text_height), (_vte_draw_get_text_ascent), (_vte_draw_get_char_width), (_vte_draw_get_using_fontconfig), (_vte_draw_text), (_vte_draw_char), (_vte_draw_has_char), (_vte_draw_fill_rectangle), (_vte_draw_draw_rectangle), (_vte_draw_set_scroll): * src/vtedraw.h: * src/vteft2.c: (_vte_ft2_draw_has_char): * src/vtegl.c: (_vte_gl_draw_has_char): * src/vtepango.c: (_vte_pango_draw_has_char): * src/vtepangox.c: (_vte_pango_x_draw_has_char): * src/vteskel.c: (_vte_skel_draw_has_char): * src/vtexft.c: (_vte_xft_draw_has_char): 2007-02-23 Chris Wilson * src/vte.c: (vte_terminal_draw_rows): Don't break a glyph run for a graphic, issue the draw and continue. 2007-02-23 Chris Wilson Cache the font metrics on the vte_xft_font, avoids having to remeasure when opening a new terminal. * src/vtexft.c: (_vte_xft_font_open), (_vte_xft_set_text_font): 2007-02-23 Chris Wilson Share XftFonts between terminal backends and preserve faces from the previous draw - helps prevents font cache thrashing inside libXft. * src/vtexft.c: (_vte_xft_font_hash), (_vte_xft_font_equal), (_vte_xft_font_open), (_vte_xft_font_close), (_vte_xft_font_for_char), (_vte_xft_unlock_fonts), (_vte_xft_destroy), (_vte_xft_start), (_vte_xft_end), (ptr_array_zeroed_new), (_vte_xft_set_text_font), (_vte_xft_get_char_width), (_vte_xft_draw_text), (_vte_xft_draw_char): 2007-02-22 Chris Wilson Bug 410986 – Fails to build with -z defs Patch by Loïc Minier. * src/Makefile.am: Add FreeType to the libs. 2007-02-22 Chris Wilson * src/vte.c: (vte_terminal_send): Return in the face of error as we appear to hit this in the wild. 2007-02-22 Chris Wilson Bug 410819 – slider not correctly positioned after calling less * src/vte.c: (_vte_terminal_adjust_adjustments), (_vte_terminal_adjust_adjustments_full), (vte_terminal_maybe_scroll_to_top), (vte_terminal_size_allocate), (vte_terminal_set_scrollback_lines): * src/vteseq.c: (vte_sequence_handler_decset_internal): Fixup a lot of issues with changing the number of scrollback lines, such as missing value_changed signals for the scrollbar and a couple of missing CLAMPs. 2007-02-22 Chris Wilson After adjusting the current profile, the last line gets chomped. * src/vte.c: (vte_terminal_set_scrollback_lines): 2007-02-21 Chris Wilson cf Bug 410534 – Slow content scrolling, takes 100% of CPU. * src/vte.c: (vte_terminal_scroll), (vte_terminal_set_scrollback_lines): Operate on scroll delta directly as adjustment->value updates are not instantaneous and we may have several scroll events before the next update. 2007-02-21 Chris Wilson Bug 410463 – Poor interactive performance with multiple terminals * src/vte.c: (vte_terminal_io_read), (process_timeout), (update_repeat_timeout): When multiple terminals are active, poll the IO sources from within the process/display timeout (akin to interrupt mitigation). Return to normal interrupts when we only have a single active terminal - so we don't sacrifice high performance. 2007-02-21 Chris Wilson A small bit of callgrinding, avoid the modulus inside vte_terminal_ensure_cursor() by caching the last row_data. * src/iso2022.c: (process_cdata): * src/ring.c: (_vte_ring_new), (_vte_ring_insert), (_vte_ring_insert_preserve), (_vte_ring_remove): * src/ring.h: * src/table.c: (_vte_table_match): * src/vte.c: (_vte_terminal_ensure_cursor), (_vte_terminal_insert_char), (vte_terminal_process_incoming): 2007-02-21 Chris Wilson Callgrind strikes again... Inserting a char is a rare operation (especially in the scrolling benchmark!) so only read the old cell during an insert. This wins about 5% during a hexdump. * src/iso2022.c: (_vte_iso2022_find_nextctl), (_vte_iso2022_fragment_input), (process_cdata): * src/vte.c: (_vte_terminal_insert_char): * src/vteseq.c: (vte_sequence_handler_sf): 2007-02-21 Chris Wilson RedHat Bug 113195: First line displayed incorrectly if prompt changes background color e.g. PS1='\e[46m[\u@\h:\w]\e[m \e[45m' The issue is when we insert a char on a new row and the background is not the default, we fill the entire row with the *current* colour. This behaviour is incorrect, and the fix is to fill to the end of the line on a carriage return. * src/vte-private.h: * src/vte.c: (_vte_terminal_ensure_cursor), (_vte_terminal_insert_char), (vte_terminal_process_incoming), (vte_terminal_send): * src/vteseq.c: (vte_sequence_handler_ce), (vte_sequence_handler_cr), (vte_sequence_handler_cs), (vte_sequence_handler_cS), (vte_sequence_handler_cursor_lower_left), (vte_sequence_handler_dc), (vte_sequence_handler_ic), (vte_sequence_handler_sf): 2007-02-20 Chris Wilson RedHat Bug 123845: gnome-terminal not parsing cursor position escape sequence properly * src/caps.c: * src/vteseq.c: (vte_sequence_handler_cm): Add 'ESC [ Pn H' to cursor-position and provide default values. 2007-02-19 Chris Wilson Bug 409055 – Terminal stays blank Due to GTK+ coallescing of XExposeEvents it was possible for our GdkExposeEvent to arrive before the GdkVisibilityEvent associated with the mapping of our toplevel and so we discarded the event as we believed we were still unviewable. * src/vte.c: (_vte_invalidate_cells), (vte_terminal_expose), (reset_update_regions): Assume that all GdkExposeEvents have been checked for suitability before delivery. We know this true for locally generated expose events which are extensively checked during invalidation, and we presume that X will not generate expose events on unmapped or otherwise unviewable windows. 2007-02-19 Chris Wilson * src/vte.c: (_vte_terminal_adjust_adjustments), (_vte_terminal_adjust_adjustments_full): Dead code elimination. 2007-02-19 Chris Wilson * perf/random.sh: A simple script to dump a fixed amount of random data to the terminal. 2007-02-19 Chris Wilson A few more trivial incremental improvements. * src/Makefile.am: * src/iso2022.c: (_vte_iso2022_map_get): Switch to a VteTree. * src/vte.c: (_vte_terminal_update_insert_delta), (_vte_terminal_insert_char): No need to ensure the cursor when scrolling, only before insertions. * src/vtexft.c: (_vte_xft_font_open), (_vte_xft_font_close), (_vte_xft_font_for_char), (_vte_xft_end): Lock the face over the entire expose. 2007-02-19 Chris Wilson Improve handling of parallel 'cat /dev/urandom' - notably a crasher in the table matcher, repeated g_getenv processing and wasted time in g_tree_lookup. * src/iso2022.c: (_vte_iso2022_ambiguous_width_guess), (_vte_iso2022_map_init), (_vte_iso2022_map_get), (process_8_bit_sequence), (process_cdata), (_vte_iso2022_process_single), (_vte_iso2022_process): * src/table.c: (_vte_table_match): * src/vte-private.h: 2007-02-19 Chris Wilson * src/vte.c: (update_timeout): In conjunction with the previous fix, since the terminal can be removed from the active list by vte_terminal_process_incoming() we need to be careful whilst iterating along the active list. 2007-02-19 Chris Wilson ickle: hi.. our kernel hacker just found a nice reproducible crash in vte :) oh, joy very easy to reproduce cat /dev/urandom wait 2 or 3S then press Ctrl-Shift-T to open a new tab => crash * src/vte.c: (process_timeout), (update_repeat_timeout): vte_terminal_process_incoming() can trigger a terminal reset which will remove the terminal from the active list, and then we attempt to remove it again after handling the incoming data. The fix is simple - don't delete the link if the the terminal is no longer active. 2007-02-19 Chris Wilson As noticed on bug 409055, we do not receive a visibility-notify event when we switch workspaces (or even when the window is iconified). The workaround for this is to watch for our toplevel being unmapped and set the fully-obscured flag. * src/vte.c: (vte_terminal_configure_toplevel), (vte_terminal_unmap_toplevel), (vte_terminal_hierarchy_changed), (vte_terminal_set_visibility), (vte_terminal_visibility_notify): 2007-02-19 Chris Wilson * src/vte.c: (visibility_state_str), (vte_terminal_visibility_notify), (vte_terminal_init), (vte_terminal_realize): Add the visibility state to the debug output. 2007-02-19 Chris Wilson * configure.in: Add the configuration details to config.log as well. 2007-02-19 Chris Wilson Bug 409241 – gnome-terminal crashed with SIGSEGV in vte_terminal_draw_graphic() * src/vte.c: (vte_terminal_paint): Lookup fore/back colours before attempting to draw the graphic character behind the unfocused cursor. 2007-02-19 Chris Wilson * src/vte.c: (vte_terminal_visibility_notify): Add VTE_DEBUG_EVENT info. 2007-02-16 Chris Wilson Bug 407945 – "GNOME" Terminal" regression after "vte" update when using "csh" When passing multiple versions of the same environment variable to execve (i.e g_spawn) the result is undefined. So we solve the ambiguity by using the application passed env to override values from the current environment. * src/pty.c: (collect_variables), (merge_environ), (_vte_pty_run_on_pty): 2007-02-16 Chris Wilson Bug 408536 – trouble compiling vte 0.15.3 * configure.in: * src/vtefc.c: (_vte_fc_patterns_from_pango_font_desc): Check for availability of FcStrFree() - only used for debugging purposes so we can live without it. 2007-02-15 Chris Wilson Guard against a missing default number of rows or columns inside the termcap. * src/vte-private.h: * src/vte.c: (vte_terminal_set_emulation), (vte_terminal_init): 2007-02-15 Chris Wilson Bug 408040 – vte automagic hyperlinks Patch by Gilles Dartiguelongue. * src/vteapp.c: Correct the typo in the nntp protocol matcher. 2007-02-14 Chris Wilson Bug 407839 – Use of environ breaks build on Solaris Original patch by Damien Carbery. * src/pty.c: extern char **environ - glibc was 'conveniently' declaring it for us... 2007-02-13 Chris Wilson uws reported that scrolling inside screen with a status line was broken. Indeed any scrolling inside an alternative screen was broken, e.g. plain vim would not always update the topmost line. The issue was the interaction with the deferred value-changed signal emission and failing to correctly maintain the current scroll_delta. The fix is that we always now apply changes to the scroll_delta and swap scroll_delta with adjustment->value before the deferred signal emission to correctly trigger the handle_scroll(). * src/vte-private.h: * src/vte.c: (_vte_invalidate_cells), (vte_terminal_emit_adjustment_changed), (vte_terminal_queue_adjustment_value_changed), (_vte_terminal_adjust_adjustments), (_vte_terminal_adjust_adjustments_full), (vte_terminal_maybe_scroll_to_bottom), (vte_terminal_process_incoming), (vte_terminal_extend_selection), (vte_terminal_handle_scroll), (vte_terminal_set_scrollback_lines): * src/vteseq.c: (vte_sequence_handler_sf): 2007-02-13 Chris Wilson Bug 407358 – regression in mouse selection * src/vte.c: (vte_terminal_motion_notify): When outside the terminal we used an uninitialised variable to determine the mouse tracking mode.