|
From: <hba...@us...> - 2010-03-23 19:53:04
|
Revision: 10880
http://plplot.svn.sourceforge.net/plplot/?rev=10880&view=rev
Author: hbabcock
Date: 2010-03-23 19:52:58 +0000 (Tue, 23 Mar 2010)
Log Message:
-----------
Tweak xcairo driver so that button and keypress handling more exactly matched that of xev.
Modified Paths:
--------------
trunk/drivers/cairo.c
Modified: trunk/drivers/cairo.c
===================================================================
--- trunk/drivers/cairo.c 2010-03-23 19:29:55 UTC (rev 10879)
+++ trunk/drivers/cairo.c 2010-03-23 19:52:58 UTC (rev 10880)
@@ -1926,12 +1926,21 @@
XDefineCursor( aStream->XDisplay, aStream->XWindow, xHairCursor );
/* Get the next mouse button release or key press event */
- XSelectInput( aStream->XDisplay, aStream->XWindow, ButtonReleaseMask | KeyPressMask );
- XMaskEvent( aStream->XDisplay, ButtonReleaseMask | KeyPressMask, &event );
+ XSelectInput( aStream->XDisplay, aStream->XWindow, ButtonPressMask | ButtonReleaseMask | KeyPressMask | KeyReleaseMask );
+ XMaskEvent( aStream->XDisplay, ButtonPressMask | ButtonReleaseMask | KeyPressMask | KeyReleaseMask, &event );
XSelectInput( aStream->XDisplay, aStream->XWindow, NoEventMask );
+ /* Update PLplot's mouse event structure */
+ xButtonEvent = (XButtonEvent *) &event;
+ gin->state = xButtonEvent->state;
+ gin->button = xButtonEvent->button;
+ gin->pX = event.xbutton.x;
+ gin->pY = pls->ylength - event.xbutton.y;
+ gin->dX = (PLFLT) event.xbutton.x / ( (PLFLT) ( pls->xlength ) );
+ gin->dY = (PLFLT) ( pls->ylength - event.xbutton.y ) / ( (PLFLT) ( pls->ylength ) );
+
/* Get key pressed (if any) */
- if ( event.type == KeyPress )
+ if ( event.type == KeyPress || event.type == KeyRelease )
{
number_chars = XLookupString( (XKeyEvent *) &event, str, 100, &keysym, NULL );
if (keysym == NoSymbol)
@@ -1954,21 +1963,12 @@
gin->keysym = keysym;
}
}
- else
+ else // button press
{
- gin->string[0] = '\0';
- gin->keysym = 0x20;
+ sprintf(gin->string, "button %u", gin->button);
+ gin->keysym = 0x20;
}
- /* Update PLplot's mouse event structure */
- xButtonEvent = (XButtonEvent *) &event;
- gin->state = xButtonEvent->state;
- gin->button = xButtonEvent->button;
- gin->pX = event.xbutton.x;
- gin->pY = pls->ylength - event.xbutton.y;
- gin->dX = (PLFLT) event.xbutton.x / ( (PLFLT) ( pls->xlength ) );
- gin->dY = (PLFLT) ( pls->ylength - event.xbutton.y ) / ( (PLFLT) ( pls->ylength ) );
-
/* Switch back to normal cursor */
XUndefineCursor( aStream->XDisplay, aStream->XWindow );
XFlush( aStream->XDisplay );
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|