summaryrefslogtreecommitdiff
path: root/community/rxvt-unicode/01-fix-screen-sel.patch
blob: bee7dc26269c3ea025938a14b07836827a9e2521 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
--- a/src/rxvt.h	2012-11-30 07:52:10.000000000 +0100
+++ b/src/rxvt.h	2013-01-19 18:14:07.477653413 +0100
@@ -1488,6 +1488,7 @@
   void scr_blank_screen_mem (line_t &l, rend_t efs) const NOTHROW;
   void scr_kill_char (line_t &l, int col) const NOTHROW;
   int scr_scroll_text (int row1, int row2, int count) NOTHROW;
+  void copy_line (line_t &dst, line_t &src);
   void scr_reset ();
   void scr_release () NOTHROW;
   void scr_clear (bool really = false) NOTHROW;
--- a/src/screen.C	2012-11-30 08:13:38.000000000 +0100
+++ b/src/screen.C	2013-01-19 18:17:13.431014964 +0100
@@ -190,6 +190,16 @@
   row_buf   = swap_buf  + nrow;
 }
 
+void
+rxvt_term::copy_line (line_t &dst, line_t &src)
+{
+  scr_blank_screen_mem (dst, DEFAULT_RSTYLE);
+  dst.l = min (src.l, ncol);
+  memcpy (dst.t, src.t, sizeof (text_t) * dst.l);
+  memcpy (dst.r, src.r, sizeof (rend_t) * dst.l);
+  dst.f = src.f;
+}
+
 void ecb_cold
 rxvt_term::scr_reset ()
 {
@@ -232,8 +242,6 @@
   line_t *prev_swap_buf  = swap_buf;
   line_t *prev_row_buf   = row_buf;
 
-  int common_col = min (prev_ncol, ncol);
-
   scr_alloc ();
 
   if (!prev_row_buf)
@@ -277,13 +285,8 @@
 
       for (int row = min (nrow, prev_nrow); row--; )
         {
-          scr_blank_screen_mem (drawn_buf [row], DEFAULT_RSTYLE);
-          scr_blank_screen_mem (swap_buf  [row], DEFAULT_RSTYLE);
-
-          memcpy (drawn_buf [row].t, prev_drawn_buf [row].t, sizeof (text_t) * common_col);
-          memcpy (drawn_buf [row].r, prev_drawn_buf [row].r, sizeof (rend_t) * common_col);
-          memcpy (swap_buf  [row].t, prev_swap_buf  [row].t, sizeof (text_t) * common_col);
-          memcpy (swap_buf  [row].r, prev_swap_buf  [row].r, sizeof (rend_t) * common_col);
+          copy_line (drawn_buf [row], prev_drawn_buf [row]);
+          copy_line (swap_buf [row], prev_swap_buf [row]);
         }
 
       int p    = MOD (term_start + prev_nrow, prev_total_rows);  // previous row
@@ -388,10 +391,7 @@
               line_t &src = prev_row_buf [MOD (term_start + row, prev_total_rows)];
               line_t &dst = row_buf [row];
 
-              scr_blank_screen_mem (dst, DEFAULT_RSTYLE);
-
-              memcpy (dst.t, src.t, sizeof (text_t) * common_col);
-              memcpy (dst.r, src.r, sizeof (rend_t) * common_col);
+              copy_line (dst, src);
             }
 
           for (int row = prev_nrow; row < nrow; row++)