diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2011-09-28 22:28:21 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2011-09-28 22:28:21 +0000 |
commit | 4041d950714df40a207131894ca4121f53911820 (patch) | |
tree | 6debac196ebfe2e8f077c9bccbd5b7966bae3276 | |
parent | b0708612631a72cd290c0925b80c0b65448d3e36 (diff) | |
download | px4-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
-rw-r--r-- | nuttx/arch/sim/src/up_x11eventloop.c | 39 |
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; } } |