@ -33,6 +33,7 @@ typedef struct {
uint button ;
uint button ;
void ( * func ) ( const Arg * ) ;
void ( * func ) ( const Arg * ) ;
const Arg arg ;
const Arg arg ;
uint release ;
} MouseShortcut ;
} MouseShortcut ;
typedef struct {
typedef struct {
@ -165,6 +166,7 @@ static void kpress(XEvent *);
static void cmessage ( XEvent * ) ;
static void cmessage ( XEvent * ) ;
static void resize ( XEvent * ) ;
static void resize ( XEvent * ) ;
static void focus ( XEvent * ) ;
static void focus ( XEvent * ) ;
static int mouseaction ( XEvent * , uint ) ;
static void brelease ( XEvent * ) ;
static void brelease ( XEvent * ) ;
static void bpress ( XEvent * ) ;
static void bpress ( XEvent * ) ;
static void bmotion ( XEvent * ) ;
static void bmotion ( XEvent * ) ;
@ -416,11 +418,27 @@ mousereport(XEvent *e)
ttywrite ( buf , len , 0 ) ;
ttywrite ( buf , len , 0 ) ;
}
}
int
mouseaction ( XEvent * e , uint release )
{
MouseShortcut * ms ;
for ( ms = mshortcuts ; ms < mshortcuts + LEN ( mshortcuts ) ; ms + + ) {
if ( ms - > release = = release & &
ms - > button = = e - > xbutton . button & &
match ( ms - > mod , e - > xbutton . state & ~ forcemousemod ) ) {
ms - > func ( & ( ms - > arg ) ) ;
return 1 ;
}
}
return 0 ;
}
void
void
bpress ( XEvent * e )
bpress ( XEvent * e )
{
{
struct timespec now ;
struct timespec now ;
MouseShortcut * ms ;
int snap ;
int snap ;
if ( IS_SET ( MODE_MOUSE ) & & ! ( e - > xbutton . state & forcemousemod ) ) {
if ( IS_SET ( MODE_MOUSE ) & & ! ( e - > xbutton . state & forcemousemod ) ) {
@ -428,13 +446,8 @@ bpress(XEvent *e)
return ;
return ;
}
}
for ( ms = mshortcuts ; ms < mshortcuts + LEN ( mshortcuts ) ; ms + + ) {
if ( mouseaction ( e , 0 ) )
if ( e - > xbutton . button = = ms - > button & &
return ;
match ( ms - > mod , e - > xbutton . state & ~ forcemousemod ) ) {
ms - > func ( & ( ms - > arg ) ) ;
return ;
}
}
if ( e - > xbutton . button = = Button1 ) {
if ( e - > xbutton . button = = Button1 ) {
/*
/*
@ -655,9 +668,9 @@ brelease(XEvent *e)
return ;
return ;
}
}
if ( e - > xbutton . button = = Button2 )
if ( mouseaction ( e , 1 ) )
selpaste ( NULL ) ;
return ;
else if ( e - > xbutton . button = = Button1 )
if ( e - > xbutton . button = = Button1 )
mousesel ( e , 1 ) ;
mousesel ( e , 1 ) ;
}
}