@ -162,6 +162,12 @@ enum window_state {
WIN_FOCUSED = 2
WIN_FOCUSED = 2
} ;
} ;
enum selection_mode {
SEL_IDLE = 0 ,
SEL_EMPTY = 1 ,
SEL_READY = 2
} ;
enum selection_type {
enum selection_type {
SEL_REGULAR = 1 ,
SEL_REGULAR = 1 ,
SEL_RECTANGULAR = 2
SEL_RECTANGULAR = 2
@ -643,7 +649,7 @@ void
selinit ( void ) {
selinit ( void ) {
memset ( & sel . tclick1 , 0 , sizeof ( sel . tclick1 ) ) ;
memset ( & sel . tclick1 , 0 , sizeof ( sel . tclick1 ) ) ;
memset ( & sel . tclick2 , 0 , sizeof ( sel . tclick2 ) ) ;
memset ( & sel . tclick2 , 0 , sizeof ( sel . tclick2 ) ) ;
sel . mode = 0 ;
sel . mode = SEL_IDLE ;
sel . ob . x = - 1 ;
sel . ob . x = - 1 ;
sel . primary = NULL ;
sel . primary = NULL ;
sel . clipboard = NULL ;
sel . clipboard = NULL ;
@ -897,7 +903,7 @@ bpress(XEvent *e) {
/* Clear previous selection, logically and visually. */
/* Clear previous selection, logically and visually. */
selclear ( NULL ) ;
selclear ( NULL ) ;
sel . mode = 1 ;
sel . mode = SEL_EMPTY ;
sel . type = SEL_REGULAR ;
sel . type = SEL_REGULAR ;
sel . oe . x = sel . ob . x = x2col ( e - > xbutton . x ) ;
sel . oe . x = sel . ob . x = x2col ( e - > xbutton . x ) ;
sel . oe . y = sel . ob . y = y2row ( e - > xbutton . y ) ;
sel . oe . y = sel . ob . y = y2row ( e - > xbutton . y ) ;
@ -920,7 +926,7 @@ bpress(XEvent *e) {
* make clicks visible
* make clicks visible
*/
*/
if ( sel . snap ! = 0 ) {
if ( sel . snap ! = 0 ) {
sel . mode + + ;
sel . mode = SEL_READY ;
tsetdirt ( sel . nb . y , sel . ne . y ) ;
tsetdirt ( sel . nb . y , sel . ne . y ) ;
}
}
sel . tclick2 = sel . tclick1 ;
sel . tclick2 = sel . tclick1 ;
@ -1142,13 +1148,12 @@ brelease(XEvent *e) {
if ( e - > xbutton . button = = Button2 ) {
if ( e - > xbutton . button = = Button2 ) {
selpaste ( NULL ) ;
selpaste ( NULL ) ;
} else if ( e - > xbutton . button = = Button1 ) {
} else if ( e - > xbutton . button = = Button1 ) {
if ( sel . mode < 2 ) {
selclear ( NULL ) ;
} else {
if ( sel . mode = = SEL_READY ) {
getbuttoninfo ( e ) ;
getbuttoninfo ( e ) ;
selcopy ( e - > xbutton . time ) ;
selcopy ( e - > xbutton . time ) ;
}
sel . mode = 0 ;
} else
selclear ( NULL ) ;
sel . mode = SEL_IDLE ;
tsetdirt ( sel . nb . y , sel . ne . y ) ;
tsetdirt ( sel . nb . y , sel . ne . y ) ;
}
}
}
}
@ -1165,7 +1170,7 @@ bmotion(XEvent *e) {
if ( ! sel . mode )
if ( ! sel . mode )
return ;
return ;
sel . mode + + ;
sel . mode = SEL_READY ;
oldey = sel . oe . y ;
oldey = sel . oe . y ;
oldex = sel . oe . x ;
oldex = sel . oe . x ;
oldsby = sel . nb . y ;
oldsby = sel . nb . y ;