@ -1811,7 +1811,6 @@ tmoveto(int x, int y)
{
{
int miny , maxy ;
int miny , maxy ;
selclear ( NULL ) ;
if ( term . c . state & CURSOR_ORIGIN ) {
if ( term . c . state & CURSOR_ORIGIN ) {
miny = term . top ;
miny = term . top ;
maxy = term . bot ;
maxy = term . bot ;
@ -3819,6 +3818,7 @@ xdrawglyph(Glyph g, int x, int y)
{
{
int numspecs ;
int numspecs ;
XftGlyphFontSpec spec ;
XftGlyphFontSpec spec ;
numspecs = xmakeglyphfontspecs ( & spec , & g , 1 , x , y ) ;
numspecs = xmakeglyphfontspecs ( & spec , & g , 1 , x , y ) ;
xdrawglyphfontspecs ( & spec , g , numspecs , x , y ) ;
xdrawglyphfontspecs ( & spec , g , numspecs , x , y ) ;
}
}
@ -3828,8 +3828,10 @@ xdrawcursor(void)
{
{
static int oldx = 0 , oldy = 0 ;
static int oldx = 0 , oldy = 0 ;
int curx ;
int curx ;
Glyph g = { ' ' , ATTR_NULL , defaultbg , defaultcs } ;
Glyph g = { ' ' , ATTR_NULL , defaultbg , defaultcs } , og ;
int ena_sel = sel . ob . x ! = - 1 & & sel . alt = = IS_SET ( MODE_ALTSCREEN ) ;
int ena_sel = sel . ob . x ! = - 1 & & sel . alt = = IS_SET ( MODE_ALTSCREEN ) ;
Color drawcol ;
XRenderColor dccol ;
LIMIT ( oldx , 0 , term . col - 1 ) ;
LIMIT ( oldx , 0 , term . col - 1 ) ;
LIMIT ( oldy , 0 , term . row - 1 ) ;
LIMIT ( oldy , 0 , term . row - 1 ) ;
@ -3842,12 +3844,28 @@ xdrawcursor(void)
if ( term . line [ term . c . y ] [ curx ] . mode & ATTR_WDUMMY )
if ( term . line [ term . c . y ] [ curx ] . mode & ATTR_WDUMMY )
curx - - ;
curx - - ;
/* remove the old cursor */
og = term . line [ oldy ] [ oldx ] ;
if ( ena_sel & & selected ( oldx , oldy ) )
og . mode ^ = ATTR_REVERSE ;
xdrawglyph ( og , oldx , oldy ) ;
g . u = term . line [ term . c . y ] [ term . c . x ] . u ;
g . u = term . line [ term . c . y ] [ term . c . x ] . u ;
if ( ena_sel & & selected ( term . c . x , term . c . y ) )
g . mode ^ = ATTR_REVERSE ;
if ( ena_sel & & selected ( term . c . x , term . c . y ) ) {
/*
* Allocate the drawing color which is the reverse of
* defaultcs , if we are selected .
*/
dccol . red = ~ dc . col [ defaultcs ] . color . red ;
dccol . green = ~ dc . col [ defaultcs ] . color . green ;
dccol . blue = ~ dc . col [ defaultcs ] . color . blue ;
dccol . alpha = ~ dc . col [ defaultcs ] . color . alpha ;
XftColorAllocValue ( xw . dpy , xw . vis , xw . cmap , & dccol , & drawcol ) ;
/* remove the old cursor */
xdrawglyph ( term . line [ oldy ] [ oldx ] , oldx , oldy ) ;
g . mode ^ = ATTR_REVERSE ;
} else {
drawcol = dc . col [ defaultcs ] ;
}
if ( IS_SET ( MODE_HIDE ) )
if ( IS_SET ( MODE_HIDE ) )
return ;
return ;
@ -3869,33 +3887,33 @@ xdrawcursor(void)
break ;
break ;
case 3 : /* Blinking Underline */
case 3 : /* Blinking Underline */
case 4 : /* Steady Underline */
case 4 : /* Steady Underline */
XftDrawRect ( xw . draw , & dc . col [ defaultcs ] ,
XftDrawRect ( xw . draw , & drawcol ,
borderpx + curx * xw . cw ,
borderpx + curx * xw . cw ,
borderpx + ( term . c . y + 1 ) * xw . ch - cursorthickness ,
borderpx + ( term . c . y + 1 ) * xw . ch - cursorthickness ,
xw . cw , cursorthickness ) ;
xw . cw , cursorthickness ) ;
break ;
break ;
case 5 : /* Blinking bar */
case 5 : /* Blinking bar */
case 6 : /* Steady bar */
case 6 : /* Steady bar */
XftDrawRect ( xw . draw , & dc . col [ defaultcs ] ,
XftDrawRect ( xw . draw , & drawcol ,
borderpx + curx * xw . cw ,
borderpx + curx * xw . cw ,
borderpx + term . c . y * xw . ch ,
borderpx + term . c . y * xw . ch ,
cursorthickness , xw . ch ) ;
cursorthickness , xw . ch ) ;
break ;
break ;
}
}
} else {
} else {
XftDrawRect ( xw . draw , & dc . col [ defaultcs ] ,
XftDrawRect ( xw . draw , & drawcol ,
borderpx + curx * xw . cw ,
borderpx + curx * xw . cw ,
borderpx + term . c . y * xw . ch ,
borderpx + term . c . y * xw . ch ,
xw . cw - 1 , 1 ) ;
xw . cw - 1 , 1 ) ;
XftDrawRect ( xw . draw , & dc . col [ defaultcs ] ,
XftDrawRect ( xw . draw , & drawcol ,
borderpx + curx * xw . cw ,
borderpx + curx * xw . cw ,
borderpx + term . c . y * xw . ch ,
borderpx + term . c . y * xw . ch ,
1 , xw . ch - 1 ) ;
1 , xw . ch - 1 ) ;
XftDrawRect ( xw . draw , & dc . col [ defaultcs ] ,
XftDrawRect ( xw . draw , & drawcol ,
borderpx + ( curx + 1 ) * xw . cw - 1 ,
borderpx + ( curx + 1 ) * xw . cw - 1 ,
borderpx + term . c . y * xw . ch ,
borderpx + term . c . y * xw . ch ,
1 , xw . ch - 1 ) ;
1 , xw . ch - 1 ) ;
XftDrawRect ( xw . draw , & dc . col [ defaultcs ] ,
XftDrawRect ( xw . draw , & drawcol ,
borderpx + curx * xw . cw ,
borderpx + curx * xw . cw ,
borderpx + ( term . c . y + 1 ) * xw . ch - 1 ,
borderpx + ( term . c . y + 1 ) * xw . ch - 1 ,
xw . cw , 1 ) ;
xw . cw , 1 ) ;
@ -3945,7 +3963,7 @@ drawregion(int x1, int y1, int x2, int y2)
{
{
int i , x , y , ox , numspecs ;
int i , x , y , ox , numspecs ;
Glyph base , new ;
Glyph base , new ;
XftGlyphFontSpec * specs ;
XftGlyphFontSpec * specs ;
int ena_sel = sel . ob . x ! = - 1 & & sel . alt = = IS_SET ( MODE_ALTSCREEN ) ;
int ena_sel = sel . ob . x ! = - 1 & & sel . alt = = IS_SET ( MODE_ALTSCREEN ) ;
if ( ! ( xw . state & WIN_VISIBLE ) )
if ( ! ( xw . state & WIN_VISIBLE ) )