summaryrefslogtreecommitdiff
path: root/nuttx/arch
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-09-28 22:28:21 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-09-28 22:28:21 +0000
commit4041d950714df40a207131894ca4121f53911820 (patch)
tree6debac196ebfe2e8f077c9bccbd5b7966bae3276 /nuttx/arch
parentb0708612631a72cd290c0925b80c0b65448d3e36 (diff)
downloadpx4-nuttx-4041d950714df40a207131894ca4121f53911820.tar.gz
px4-nuttx-4041d950714df40a207131894ca4121f53911820.tar.bz2
px4-nuttx-4041d950714df40a207131894ca4121f53911820.zip
Fixes to x11 event loop
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3993 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/arch')
-rw-r--r--nuttx/arch/sim/src/up_x11eventloop.c39
1 files changed, 30 insertions, 9 deletions
diff --git a/nuttx/arch/sim/src/up_x11eventloop.c b/nuttx/arch/sim/src/up_x11eventloop.c
index 5c449b739..6020433c4 100644
--- a/nuttx/arch/sim/src/up_x11eventloop.c
+++ b/nuttx/arch/sim/src/up_x11eventloop.c
@@ -121,7 +121,7 @@ static void *up_x11eventthread(void *arg)
XEvent event;
int ret;
- /* Grab the pointer (mouse) */
+ /* Grab the pointer (mouse), enabling mouse enter/leave events */
ret = XGrabPointer(g_display, g_window, 0,
EnterWindowMask|LeaveWindowMask,
@@ -132,8 +132,19 @@ static void *up_x11eventthread(void *arg)
return NULL;
}
+ /* Enable motion and button events.
+ * EnterWindowMask|LeaveWindowMask - When mouse enters or leaves window
+ * ButtonMotionMask - When mouse moves with any button pressed
+ * ButtonPress|ButtonRelease - When button is pressed or released
+ */
+
+ XSelectInput(g_display, g_window,
+ EnterWindowMask|LeaveWindowMask|ButtonMotionMask|
+ ButtonPressMask|ButtonReleaseMask);
+
/* Then loop forever, waiting for events and processing events as they are
- * received.
+ * received. NOTE: It seems to be fatal if you attempt to fprintf from
+ * within the following loop.
*/
for (;;)
@@ -141,26 +152,36 @@ static void *up_x11eventthread(void *arg)
XNextEvent(g_display, &event);
switch (event.type)
{
- case EnterNotify:
+ case EnterNotify: /* Enabled by EnterWindowMask */
{
- fprintf(stderr, "EnterNotify event: (%d,%d) %08x\n",
- event.xcrossing.x, event.xcrossing.y, event.xcrossing.state);
up_tcenter(event.xcrossing.x, event.xcrossing.y,
up_buttonmap(event.xcrossing.state));
}
break;
- case LeaveNotify :
+ case LeaveNotify : /* Enabled by LeaveWindowMask */
{
- fprintf(stderr, "LeaveNotify event: (%d,%d) %08x\n",
- event.xcrossing.x, event.xcrossing.y, event.xcrossing.state);
up_tcleave(event.xcrossing.x, event.xcrossing.y,
up_buttonmap(event.xcrossing.state));
}
break;
+ case MotionNotify : /* Enabled by ButtonMotionMask */
+ {
+ up_tcenter(event.xmotion.x, event.xmotion.y,
+ up_buttonmap(event.xmotion.state));
+ }
+ break;
+
+ case ButtonPress : /* Enabled by ButtonPressMask */
+ case ButtonRelease : /* Enabled by ButtonReleaseMask */
+ {
+ up_tcenter(event.xbutton.x, event.xbutton.y,
+ up_buttonmap(event.xbutton.state));
+ }
+ break;
+
default :
- fprintf(stderr, "Unrecognized event: %d\n", event.type);
break;
}
}