Author: fcrozat
Date: Mon Feb 19 16:12:20 2007
New Revision: 122791

Added:
   packages/cooker/vte/current/SOURCES/vte-0.15.3-fixscrolling.patch
Modified:
   packages/cooker/vte/current/SPECS/vte.spec

Log:
Patch1 (SVN): fix scrolling under screen (special dedicace to saispo :)


Added: packages/cooker/vte/current/SOURCES/vte-0.15.3-fixscrolling.patch
==============================================================================
--- (empty file)
+++ packages/cooker/vte/current/SOURCES/vte-0.15.3-fixscrolling.patch   Mon Feb 
19 16:12:20 2007
@@ -0,0 +1,249 @@
+Index: src/vte-private.h
+===================================================================
+--- vte/src/vte-private.h      (r�vision 1679)
++++ vte/src/vte-private.h      (r�vision 1680)
+@@ -273,7 +273,6 @@
+ 
+       /* Scrolling options. */
+       gboolean scroll_background;
+-      long scroll_lock_count;
+       gboolean scroll_on_output;
+       gboolean scroll_on_keystroke;
+       long scrollback_lines;
+Index: src/vte.c
+===================================================================
+--- vte/src/vte.c      (r�vision 1679)
++++ vte/src/vte.c      (r�vision 1680)
+@@ -349,8 +349,9 @@
+       }
+ 
+       _vte_debug_print (VTE_DEBUG_UPDATES,
+-                      "Invalidating cells at (%ld,%ld)x(%d,%d).\n",
++                      "Invalidating cells at (%ld,%ld+%ld)x(%d,%d).\n",
+                       column_start, row_start,
++                      (long)terminal->pvt->screen->scroll_delta,
+                       column_count, row_count);
+       _vte_debug_print (VTE_DEBUG_WORK, "?");
+ 
+@@ -1464,10 +1465,21 @@
+               gtk_adjustment_changed(terminal->adjustment);
+       }
+       if (terminal->pvt->adjustment_value_changed_pending) {
++              glong v;
+               _vte_debug_print(VTE_DEBUG_SIGNALS,
+                               "Emitting adjustment_value_changed.\n");
+               terminal->pvt->adjustment_value_changed_pending = FALSE;
+-              gtk_adjustment_value_changed(terminal->adjustment);
++              v = floor (terminal->adjustment->value);
++              if (v != terminal->pvt->screen->scroll_delta) {
++                      /* this little dance is so that the scroll_delta is
++                       * updated immediately, but we still handled scrolling
++                       * via the adjustment - e.g. user interaction with the
++                       * scrollbar
++                       */
++                      terminal->adjustment->value = 
terminal->pvt->screen->scroll_delta;
++                      terminal->pvt->screen->scroll_delta = v;
++                      gtk_adjustment_value_changed(terminal->adjustment);
++              }
+       }
+ }
+ 
+@@ -1481,8 +1493,8 @@
+ static void
+ vte_terminal_queue_adjustment_value_changed(VteTerminal *terminal, glong v)
+ {
+-      if (v != floor (terminal->adjustment->value)) {
+-              terminal->adjustment->value = v;
++      if (v != terminal->pvt->screen->scroll_delta) {
++              terminal->pvt->screen->scroll_delta = v;
+               terminal->pvt->adjustment_value_changed_pending = TRUE;
+               vte_terminal_start_processing (terminal);
+       }
+@@ -1528,7 +1540,7 @@
+ 
+       /* The upper value is the number of rows which might be visible.  (Add
+        * one to the cursor offset because it's zero-based.) */
+-      rows = MAX (screen->insert_delta, terminal->adjustment->value)
++      rows = MAX (screen->insert_delta, screen->scroll_delta)
+               + terminal->row_count;
+       rows = MAX(_vte_ring_next(terminal->pvt->screen->row_data), rows);
+       if (terminal->adjustment->upper != rows) {
+@@ -1541,8 +1553,7 @@
+       }
+ 
+       /* Set the scrollbar adjustment to where the screen wants it to be. */
+-      if (!terminal->pvt->adjustment_value_changed_pending &&
+-                      floor(terminal->adjustment->value) != 
screen->scroll_delta) {
++      if (floor(terminal->adjustment->value) != screen->scroll_delta) {
+               _vte_debug_print(VTE_DEBUG_IO,
+                               "Changing adjustment scroll position: "
+                               "%ld\n", screen->scroll_delta);
+@@ -1600,7 +1611,7 @@
+ 
+       /* The upper value is the number of rows which might be visible.  (Add
+        * one to the cursor offset because it's zero-based.) */
+-      rows = MAX (screen->insert_delta, terminal->adjustment->value)
++      rows = MAX (screen->insert_delta, screen->scroll_delta)
+               + terminal->row_count;
+       rows = MAX(_vte_ring_next(terminal->pvt->screen->row_data), rows);
+       if (terminal->adjustment->upper != rows) {
+@@ -1646,8 +1657,7 @@
+       }
+ 
+       /* Set the scrollbar adjustment to where the screen wants it to be. */
+-      if (!terminal->pvt->adjustment_value_changed_pending &&
+-                      floor(terminal->adjustment->value) != 
screen->scroll_delta) {
++      if (floor(terminal->adjustment->value) != screen->scroll_delta) {
+               _vte_debug_print(VTE_DEBUG_IO,
+                               "Changing adjustment scroll position: "
+                               "%ld\n", screen->scroll_delta);
+@@ -1701,11 +1711,9 @@
+ {
+       glong delta;
+       delta = terminal->pvt->screen->insert_delta;
+-      if (terminal->pvt->screen->scroll_delta != delta) {
+-              vte_terminal_queue_adjustment_value_changed (terminal, delta);
+-              _vte_debug_print(VTE_DEBUG_IO,
+-                              "Snapping to bottom of screen\n");
+-      }
++      vte_terminal_queue_adjustment_value_changed (terminal, delta);
++      _vte_debug_print(VTE_DEBUG_IO,
++                      "Snapping to bottom of screen\n");
+ }
+ 
+ static void
+@@ -3059,7 +3067,7 @@
+       gboolean cursor_visible;
+       GdkPoint bbox_topleft, bbox_bottomright;
+       gunichar *wbuf, c;
+-      long wcount, start;
++      long wcount, start, delta;
+       gboolean leftovers, modified, bottom, inserted, again;
+       gboolean invalidated_text;
+       GArray *unichars;
+@@ -3071,11 +3079,12 @@
+                       _vte_incoming_chunks_count(terminal->pvt->incoming));
+       _vte_debug_print (VTE_DEBUG_WORK, "(");
+ 
+-      bottom = (terminal->pvt->screen->insert_delta ==
+-                floor (terminal->adjustment->value));
++      screen = terminal->pvt->screen;
+ 
++      delta = screen->scroll_delta;
++      bottom = screen->insert_delta == delta;
++
+       /* Save the current cursor position. */
+-      screen = terminal->pvt->screen;
+       cursor = screen->cursor_current;
+       cursor_visible = terminal->pvt->cursor_visible;
+ 
+@@ -3208,13 +3217,12 @@
+                                        screen->cursor_current.row < 
bbox_topleft.y - VTE_CELL_BBOX_SLACK)) {
+                               /* Clip off any part of the box which isn't 
already on-screen. */
+                               bbox_topleft.x = MAX(bbox_topleft.x, 0);
+-                              bbox_topleft.y = MAX(bbox_topleft.y, 
screen->scroll_delta);
++                              bbox_topleft.y = MAX(bbox_topleft.y, delta);
+                               bbox_bottomright.x = MIN(bbox_bottomright.x,
+                                               terminal->column_count);
+                               /* lazily apply the +1 to the cursor_row */
+                               bbox_bottomright.y = MIN(bbox_bottomright.y + 1,
+-                                              screen->scroll_delta +
+-                                              terminal->row_count);
++                                              delta + terminal->row_count);
+ 
+                               _vte_invalidate_cells(terminal,
+                                               bbox_topleft.x,
+@@ -3352,13 +3360,12 @@
+       if (invalidated_text) {
+               /* Clip off any part of the box which isn't already on-screen. 
*/
+               bbox_topleft.x = MAX(bbox_topleft.x, 0);
+-              bbox_topleft.y = MAX(bbox_topleft.y, screen->scroll_delta);
++              bbox_topleft.y = MAX(bbox_topleft.y, delta);
+               bbox_bottomright.x = MIN(bbox_bottomright.x,
+                               terminal->column_count);
+               /* lazily apply the +1 to the cursor_row */
+               bbox_bottomright.y = MIN(bbox_bottomright.y + 1,
+-                              screen->scroll_delta +
+-                              terminal->row_count);
++                              delta + terminal->row_count);
+ 
+               _vte_invalidate_cells(terminal,
+                               bbox_topleft.x,
+@@ -3446,8 +3453,7 @@
+               rect.x = terminal->pvt->screen->cursor_current.col *
+                        terminal->char_width + VTE_PAD_WIDTH;
+               rect.width = terminal->char_width;
+-              rect.y = (terminal->pvt->screen->cursor_current.row -
+-                        terminal->pvt->screen->scroll_delta) *
++              rect.y = (terminal->pvt->screen->cursor_current.row - delta) *
+                        terminal->char_height + VTE_PAD_WIDTH;
+               rect.height = terminal->char_height;
+               gtk_im_context_set_cursor_location(terminal->pvt->im_context,
+@@ -5462,7 +5468,7 @@
+       old_end = terminal->pvt->selection_end;
+ 
+       /* Convert the event coordinates to cell coordinates. */
+-      delta = terminal->adjustment->value;
++      delta = screen->scroll_delta;
+ 
+       /* If we're restarting on a drag, then mark this as the start of
+        * the selected block. */
+@@ -6740,7 +6746,7 @@
+       screen = terminal->pvt->screen;
+ 
+       /* Read the new adjustment value and save the difference. */
+-      adj = floor(terminal->adjustment->value);
++      adj = floor (terminal->adjustment->value);
+       dy = adj - screen->scroll_delta;
+       screen->scroll_delta = adj;
+ 
+@@ -10883,6 +10889,9 @@
+       VteScreen *screen;
+ 
+       g_return_if_fail(VTE_IS_TERMINAL(terminal));
++      _vte_debug_print (VTE_DEBUG_MISC,
++                      "Setting scrollback lines to %ld\n", lines);
++
+       screen = terminal->pvt->screen;
+       terminal->pvt->scrollback_lines = lines;
+ 
+Index: src/vteseq.c
+===================================================================
+--- vte/src/vteseq.c   (r�vision 1679)
++++ vte/src/vteseq.c   (r�vision 1680)
+@@ -2204,9 +2204,6 @@
+                               terminal->pvt->free_row = 
_vte_ring_insert_preserve(terminal->pvt->screen->row_data,
+                                                         
screen->cursor_current.row,
+                                                         row);
+-                              /* This may generate multiple redraws, so
+-                               * disable fast scrolling for now. */
+-                              terminal->pvt->scroll_lock_count++;
+                               /* Force the areas below the region to be
+                                * redrawn -- they've moved. */
+                               _vte_terminal_scroll_region(terminal, start,
+@@ -2214,25 +2211,18 @@
+                               /* Force scroll. */
+                               _vte_terminal_ensure_cursor(terminal, FALSE);
+                               _vte_terminal_adjust_adjustments(terminal);
+-                              /* Allow updates again. */
+-                              terminal->pvt->scroll_lock_count--;
+                       } else {
+                               /* If we're at the bottom of the scrolling
+                                * region, add a line at the top to scroll the
+                                * bottom off. */
+                               vte_remove_line_internal(terminal, start);
+                               vte_insert_line_internal(terminal, end);
+-                              /* This may generate multiple redraws, so
+-                               * disable fast scrolling for now. */
+-                              terminal->pvt->scroll_lock_count++;
+                               /* Update the display. */
+                               _vte_terminal_scroll_region(terminal, start,
+                                                          end - start + 1, -1);
+                               _vte_invalidate_cells(terminal,
+                                                     0, terminal->column_count,
+                                                     end - 2, 2);
+-                              /* Allow updates again. */
+-                              terminal->pvt->scroll_lock_count--;
+                       }
+               } else {
+                       /* Scroll up with history. */

Modified: packages/cooker/vte/current/SPECS/vte.spec
==============================================================================
--- packages/cooker/vte/current/SPECS/vte.spec  (original)
+++ packages/cooker/vte/current/SPECS/vte.spec  Mon Feb 19 16:12:20 2007
@@ -7,7 +7,7 @@
 
 Name: vte
 Version: 0.15.3
-Release: %mkrel 1
+Release: %mkrel 2
 Summary: An terminal emulator widget
 License: LGPL
 Group: System/Libraries
@@ -15,6 +15,8 @@
 Source0: 
ftp://ftp.gnome.org/pub/GNOME/sources/%{name}/%{name}-%{version}.tar.bz2
 # (gb) 0.11.10-3mdk lib64 fixes
 Patch0: vte-xpath.patch
+# (fc) 0.15.3-2mdv fix scrolling in screen (SVN)
+Patch1: vte-0.15.3-fixscrolling.patch
 
 BuildRequires: gtk+2-devel
 BuildRequires: libxft-devel
@@ -65,7 +67,8 @@
 %prep
 %setup -q
 %patch0 -p1 -b .xpath
-touch *
+%patch1 -p1 -b .fixscrolling
+
 #needed by patch0 
 WANT_AUTOCONF_2_5=1 autoconf
 

Reply via email to