mirror of
https://github.com/apache/nuttx.git
synced 2026-06-05 07:12:54 +08:00
Fixes to x11 event loop
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3993 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
@@ -121,7 +121,7 @@ static void *up_x11eventthread(void *arg)
|
|||||||
XEvent event;
|
XEvent event;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* Grab the pointer (mouse) */
|
/* Grab the pointer (mouse), enabling mouse enter/leave events */
|
||||||
|
|
||||||
ret = XGrabPointer(g_display, g_window, 0,
|
ret = XGrabPointer(g_display, g_window, 0,
|
||||||
EnterWindowMask|LeaveWindowMask,
|
EnterWindowMask|LeaveWindowMask,
|
||||||
@@ -132,8 +132,19 @@ static void *up_x11eventthread(void *arg)
|
|||||||
return NULL;
|
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
|
/* 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 (;;)
|
for (;;)
|
||||||
@@ -141,26 +152,36 @@ static void *up_x11eventthread(void *arg)
|
|||||||
XNextEvent(g_display, &event);
|
XNextEvent(g_display, &event);
|
||||||
switch (event.type)
|
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_tcenter(event.xcrossing.x, event.xcrossing.y,
|
||||||
up_buttonmap(event.xcrossing.state));
|
up_buttonmap(event.xcrossing.state));
|
||||||
}
|
}
|
||||||
break;
|
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_tcleave(event.xcrossing.x, event.xcrossing.y,
|
||||||
up_buttonmap(event.xcrossing.state));
|
up_buttonmap(event.xcrossing.state));
|
||||||
}
|
}
|
||||||
break;
|
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 :
|
default :
|
||||||
fprintf(stderr, "Unrecognized event: %d\n", event.type);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user