--- rxvt-unicode/src/screen.C 2007/10/31 09:55:24 1.281 +++ rxvt-unicode/src/screen.C 2008/01/29 13:57:23 1.301 @@ -3,7 +3,7 @@ *---------------------------------------------------------------------------* * * Copyright (c) 1997-2001 Geoff Wing - * Copyright (c) 2003-2006 Marc Lehmann + * Copyright (c) 2003-2007 Marc Lehmann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -89,24 +89,22 @@ * CLEAR_CHARS: clear chars starting from pixel position * ERASE_ROWS : set rows starting from row to the foreground colour */ -#define drawBuffer vt - #define CLEAR_ROWS(row, num) \ - if (mapped) \ - XClearArea (dpy, drawBuffer, 0, \ - Row2Pixel (row), (unsigned int)width, \ + if (mapped) \ + XClearArea (dpy, vt, 0, \ + Row2Pixel (row), (unsigned int)width, \ (unsigned int)Height2Pixel (num), False) #define CLEAR_CHARS(x, y, num) \ - if (mapped) \ - XClearArea (dpy, drawBuffer, x, y, \ + if (mapped) \ + XClearArea (dpy, vt, x, y, \ (unsigned int)Width2Pixel (num), \ (unsigned int)Height2Pixel (1), False) #define ERASE_ROWS(row, num) \ - XFillRectangle (dpy, drawBuffer, gc, \ + XFillRectangle (dpy, vt, gc, \ 0, Row2Pixel (row), \ - (unsigned int)width, \ + (unsigned int)width, \ (unsigned int)Height2Pixel (num)) /* ------------------------------------------------------------------------- * @@ -598,14 +596,14 @@ */ void rxvt_term::scr_rendition (int set, int style) NOTHROW - { - if (set) - rstyle |= style; - else if (style == ~RS_None) - rstyle = DEFAULT_RSTYLE; - else - rstyle &= ~style; - } +{ + if (set) + rstyle |= style; + else if (style == ~RS_None) + rstyle = DEFAULT_RSTYLE; + else + rstyle &= ~style; +} /* ------------------------------------------------------------------------- */ /* @@ -1013,23 +1011,20 @@ void rxvt_term::scr_backspace () NOTHROW { - want_refresh = 1; - if (screen.cur.col == 0) { if (screen.cur.row > 0) { #ifdef TERMCAP_HAS_BW screen.cur.col = ncol - 1; - screen.cur.row--; - return; + --screen.cur.row; + + want_refresh = 1; #endif } } - else if (!(screen.flags & Screen_WrapNext)) + else scr_gotorc (0, -1, RELATIVE); - - screen.flags &= ~Screen_WrapNext; } /* ------------------------------------------------------------------------- */ @@ -1188,7 +1183,8 @@ else { if (screen.flags & Screen_Relative) - { /* relative origin mode */ + { + /* relative origin mode */ screen.cur.row = row + screen.tscroll; min_it (screen.cur.row, screen.bscroll); } @@ -1474,7 +1470,8 @@ || (selection.end.col + count >= ncol)) CLEAR_SELECTION (); else - { /* shift selection */ + { + /* shift selection */ selection.beg.col += count; selection.mark.col += count; /* XXX: yes? */ selection.end.col += count; @@ -1673,7 +1670,7 @@ { tt_printf ("\033[%d;%dR", screen.cur.row + 1, screen.cur.col + 1); } - + /* ------------------------------------------------------------------------- * * FONTS * * ------------------------------------------------------------------------- */ @@ -1736,7 +1733,7 @@ set_font_style (); } - + /* ------------------------------------------------------------------------- * * MAJOR SCREEN MANIPULATION * * ------------------------------------------------------------------------- */ @@ -1868,10 +1865,11 @@ #ifndef NO_BELL void -rxvt_term::bell_cb (time_watcher &w) +rxvt_term::bell_cb (ev::timer &w, int revents) { rvideo_bell = false; scr_rvideo_mode (rvideo_mode); + refresh_check (); } #endif @@ -1903,9 +1901,9 @@ { rvideo_bell = true; scr_rvideo_mode (rvideo_mode); - display->flush (); + flush (); - bell_ev.start (NOW + VISUAL_BELL_DURATION); + bell_ev.start (VISUAL_BELL_DURATION); } else XBell (dpy, 0); @@ -2263,8 +2261,7 @@ bool invert = rend & RS_RVid; #ifndef NO_BOLD_UNDERLINE_REVERSE - if (rend & RS_Bold - && fore == Color_fg) + if (rend & RS_Bold && fore == Color_fg) { if (ISSET_PIXCOLOR (Color_BD)) fore = Color_BD; @@ -2274,8 +2271,7 @@ # endif } - if (rend & RS_Italic - && fore == Color_fg) + if (rend & RS_Italic && fore == Color_fg) { if (ISSET_PIXCOLOR (Color_IT)) fore = Color_IT; @@ -2319,9 +2315,9 @@ #ifdef TEXT_BLINK if (rend & RS_Blink && (back == Color_bg || fore == Color_bg)) { - if (!text_blink_ev.active) + if (!text_blink_ev.is_active ()) { - text_blink_ev.start (NOW + TEXT_BLINK_INTERVAL); + text_blink_ev.again (); hidden_text = 0; } else if (hidden_text) @@ -2379,7 +2375,7 @@ #endif XSetForeground (dpy, gc, pix_colors[fore]); - XDrawLine (dpy, drawBuffer, gc, + XDrawLine (dpy, vt, gc, xpixel, ypixel + font->ascent + 1, xpixel + Width2Pixel (count) - 1, ypixel + font->ascent + 1); } @@ -2427,7 +2423,7 @@ #endif XSetForeground (dpy, gc, pix_colors[ccol1]); - XDrawRectangle (dpy, drawBuffer, gc, + XDrawRectangle (dpy, vt, gc, Col2Pixel (col), Row2Pixel (oldcursor.row), (unsigned int) (Width2Pixel (cursorwidth) - 1), @@ -2475,22 +2471,23 @@ #ifdef HAVE_BG_PIXMAP bgPixmap.apply (); #else + XSetWindowBackground (dpy, parent[0], pix_colors[Color_border]); XClearWindow (dpy, parent[0]); XSetWindowBackground (dpy, vt, pix_colors[Color_bg]); -# if HAVE_SCROLLBARS + if (scrollBar.win) { XSetWindowBackground (dpy, scrollBar.win, pix_colors[Color_border]); - scrollBar.setIdle (); + scrollBar.state = STATE_IDLE; scrollbar_show (0); } -# endif + scr_clear (); scr_touch (true); want_refresh = 1; -#endif +#endif } /* ------------------------------------------------------------------------- */ @@ -2607,7 +2604,7 @@ } } #endif - + /* ------------------------------------------------------------------------- * * CHARACTER SELECTION * * ------------------------------------------------------------------------- */ @@ -2650,7 +2647,13 @@ if (data[i] == C0_LF) data[i] = C0_CR; + if (priv_modes & PrivMode_BracketPaste) + tt_printf ("\e[200~"); + tt_write (data, len); + + if (priv_modes & PrivMode_BracketPaste) + tt_printf ("\e[201~"); } /* ------------------------------------------------------------------------- */ @@ -2735,7 +2738,7 @@ selection_wait = Sel_incr; incr_buf_fill = 0; - incr_ev.start (NOW + 10); + incr_ev.start (10); goto bailout; } @@ -2771,7 +2774,7 @@ } else if (selection_wait == Sel_incr) { - incr_ev.start (NOW + 10); + incr_ev.start (10); while (incr_buf_fill + ct.nitems > incr_buf_size) { @@ -2821,7 +2824,7 @@ } void -rxvt_term::incr_cb (time_watcher &w) NOTHROW +rxvt_term::incr_cb (ev::timer &w, int revents) NOTHROW { selection_wait = Sel_none; @@ -2854,7 +2857,8 @@ rxvt_term::selection_request (Time tm, int selnum) NOTHROW { if (selection.text && selnum == Sel_Primary) - { /* internal selection */ + { + /* internal selection */ char *str = rxvt_wcstombs (selection.text, selection.len); paste (str, strlen (str)); free (str); @@ -3132,7 +3136,8 @@ --selection.mark.col; if (selection.op) - { /* clear the old selection */ + { + /* clear the old selection */ selection.beg.row = selection.end.row = selection.mark.row; selection.beg.col = selection.end.col = selection.mark.col; } @@ -3331,7 +3336,8 @@ * time of the most recent button3 press */ if (button3 && buttonpress) - { /* button3 press */ + { + /* button3 press */ /* * first determine which edge of the selection we are closest to */ @@ -3359,7 +3365,8 @@ } } else - { /* button1 drag or button3 drag */ + { + /* button1 drag or button3 drag */ if (ROWCOL_IS_AFTER (selection.mark, pos)) { if (selection.mark.row == selection.end.row @@ -3450,7 +3457,8 @@ } if (button3 && buttonpress) - { /* mark may need to be changed */ + { + /* mark may need to be changed */ if (closeto == LEFT) { selection.mark.row = selection.end.row; @@ -3660,10 +3668,6 @@ XSendEvent (dpy, rq.requestor, False, 0L, (XEvent *)&ev); } -/* ------------------------------------------------------------------------- * - * MOUSE ROUTINES * - * ------------------------------------------------------------------------- */ - /* ------------------------------------------------------------------------- */ #ifdef USE_XIM void