Browse Source

Send explicitly unused Events to the parent

pull/1639/head
Cameron Leger 6 years ago
parent
commit
0d3928872a
1 changed files with 90 additions and 53 deletions
  1. +90
    -53
      dep/lglw/lglw_linux.c

+ 90
- 53
dep/lglw/lglw_linux.c View File

@@ -372,20 +372,23 @@ static void loc_eventProc(void *_xevent) {

if(NULL != lglw)
{
lglw_bool_t bHandled = LGLW_FALSE;
lglw_bool_t eventHandled = LGLW_FALSE;

switch(xev->type)
{
default:
printf("vstgltest<lglw_linux>: unhandled X11 event type=%d\n", xev->type);
eventHandled = LGLW_FALSE;
break;

case Expose:
printf("vstgltest<lglw_linux>: xev Expose\n");
loc_handle_queued_mouse_warp(lglw);
eventHandled = LGLW_FALSE;
if(NULL != lglw->redraw.cbk)
{
lglw->redraw.cbk(lglw);
eventHandled = LGLW_TRUE;
}
break;

@@ -393,10 +396,12 @@ static void loc_eventProc(void *_xevent) {

case FocusIn:
printf("vstgltest<lglw_linux>: xev FocusIn\n");
eventHandled = LGLW_FALSE;
break;

case FocusOut:
printf("vstgltest<lglw_linux>: xev FocusOut\n");
eventHandled = LGLW_FALSE;
break;

case EnterNotify:
@@ -415,6 +420,7 @@ static void loc_eventProc(void *_xevent) {
{
loc_handle_mouseenter(lglw);
}
eventHandled = LGLW_TRUE;

break;

@@ -431,6 +437,7 @@ static void loc_eventProc(void *_xevent) {
{
loc_handle_mouseleave(lglw);
}
eventHandled = LGLW_TRUE;

break;

@@ -456,6 +463,7 @@ static void loc_eventProc(void *_xevent) {
}

loc_handle_mousemotion(lglw);
eventHandled = LGLW_TRUE;

break;

@@ -463,6 +471,7 @@ static void loc_eventProc(void *_xevent) {
printf("vstgltest<lglw_linux>: xev KeyPress\n");
XKeyPressedEvent *keyPress = (XKeyPressedEvent*)xev;

eventHandled = LGLW_FALSE;
KeySym xkp = XLookupKeysym(keyPress, 0);
switch(xkp)
{
@@ -473,11 +482,11 @@ static void loc_eventProc(void *_xevent) {
KeySym xkpl;
KeySym xkpu;
XConvertCase(xkp, &xkpl, &xkpu);
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, xkpu);
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, xkpu);
}
else
{
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, xkp);
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, xkp);
}
break;

@@ -486,91 +495,91 @@ static void loc_eventProc(void *_xevent) {
break;

case XK_F1:
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F1);
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F1);
break;

case XK_F2:
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F2);
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F2);
break;

case XK_F3:
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F3);
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F3);
break;

case XK_F4:
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F4);
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F4);
break;

case XK_F5:
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F5);
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F5);
break;

case XK_F6:
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F6);
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F6);
break;

case XK_F7:
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F7);
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F7);
break;

case XK_F8:
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F8);
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F8);
break;

case XK_F9:
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F9);
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F9);
break;

case XK_F10:
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F10);
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F10);
break;

case XK_F11:
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F11);
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F11);
break;

case XK_F12:
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F12);
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_F12);
break;

case XK_BackSpace:
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_BACKSPACE);
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_BACKSPACE);
break;

case XK_Tab:
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_TAB);
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_TAB);
break;

case XK_Return:
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_RETURN);
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_RETURN);
break;

case XK_Escape:
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_ESCAPE);
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_ESCAPE);
break;

case XK_Shift_L:
lglw->keyboard.kmod_state |= LGLW_KMOD_LSHIFT;
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_LSHIFT);
bHandled = LGLW_FALSE;
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_LSHIFT);
eventHandled = LGLW_FALSE;
break;

case XK_Shift_R:
lglw->keyboard.kmod_state |= LGLW_KMOD_RSHIFT;
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_RSHIFT);
bHandled = LGLW_FALSE;
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_VKEY_RSHIFT);
eventHandled = LGLW_FALSE;
break;

case XK_Control_L:
lglw->keyboard.kmod_state |= LGLW_KMOD_LCTRL;
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_KMOD_LCTRL);
bHandled = LGLW_FALSE;
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_KMOD_LCTRL);
eventHandled = LGLW_FALSE;
break;

case XK_Control_R:
lglw->keyboard.kmod_state |= LGLW_KMOD_RCTRL;
bHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_KMOD_RCTRL);
bHandled = LGLW_FALSE;
eventHandled = loc_handle_key(lglw, LGLW_TRUE/*bPressed*/, LGLW_KMOD_RCTRL);
eventHandled = LGLW_FALSE;
break;
}

@@ -580,6 +589,7 @@ static void loc_eventProc(void *_xevent) {
printf("vstgltest<lglw_linux>: xev KeyRelease\n");
XKeyReleasedEvent *keyRelease = (XKeyReleasedEvent*)xev;

eventHandled = LGLW_FALSE;
KeySym xkr = XLookupKeysym(keyRelease, 0);
switch(xkr)
{
@@ -590,11 +600,11 @@ static void loc_eventProc(void *_xevent) {
KeySym xkrl;
KeySym xkru;
XConvertCase(xkr, &xkrl, &xkru);
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, xkru);
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, xkru);
}
else
{
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, xkr);
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, xkr);
}
break;

@@ -603,91 +613,91 @@ static void loc_eventProc(void *_xevent) {
break;

case XK_F1:
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F1);
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F1);
break;

case XK_F2:
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F2);
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F2);
break;

case XK_F3:
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F3);
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F3);
break;

case XK_F4:
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F4);
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F4);
break;

case XK_F5:
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F5);
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F5);
break;

case XK_F6:
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F6);
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F6);
break;

case XK_F7:
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F7);
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F7);
break;

case XK_F8:
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F8);
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F8);
break;

case XK_F9:
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F9);
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F9);
break;

case XK_F10:
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F10);
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F10);
break;

case XK_F11:
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F11);
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F11);
break;

case XK_F12:
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F12);
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_F12);
break;

case XK_BackSpace:
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_BACKSPACE);
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_BACKSPACE);
break;

case XK_Tab:
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_TAB);
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_TAB);
break;

case XK_Return:
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_RETURN);
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_RETURN);
break;

case XK_Escape:
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_ESCAPE);
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_ESCAPE);
break;

case XK_Shift_L:
lglw->keyboard.kmod_state &= ~LGLW_KMOD_LSHIFT;
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_LSHIFT);
bHandled = LGLW_FALSE;
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_LSHIFT);
eventHandled = LGLW_FALSE;
break;

case XK_Shift_R:
lglw->keyboard.kmod_state &= ~LGLW_KMOD_RSHIFT;
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_RSHIFT);
bHandled = LGLW_FALSE;
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_RSHIFT);
eventHandled = LGLW_FALSE;
break;

case XK_Control_L:
lglw->keyboard.kmod_state &= ~LGLW_KMOD_LCTRL;
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_LCTRL);
bHandled = LGLW_FALSE;
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_LCTRL);
eventHandled = LGLW_FALSE;
break;

case XK_Control_R:
lglw->keyboard.kmod_state &= ~LGLW_KMOD_RCTRL;
bHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_RCTRL);
bHandled = LGLW_FALSE;
eventHandled = loc_handle_key(lglw, LGLW_FALSE/*bPressed*/, LGLW_VKEY_RCTRL);
eventHandled = LGLW_FALSE;
break;
}

@@ -708,21 +718,27 @@ static void loc_eventProc(void *_xevent) {
{
default:
printf("vstgltest<lglw_linux>: xev ButtonPress unhandled button: %i\n", btnPress->button);
eventHandled = LGLW_FALSE;
break;
case Button1:
loc_handle_mousebutton(lglw, LGLW_TRUE/*bPressed*/, LGLW_MOUSE_LBUTTON);
eventHandled = LGLW_TRUE;
break;
case Button2:
loc_handle_mousebutton(lglw, LGLW_TRUE/*bPressed*/, LGLW_MOUSE_RBUTTON);
eventHandled = LGLW_TRUE;
break;
case Button3:
loc_handle_mousebutton(lglw, LGLW_TRUE/*bPressed*/, LGLW_MOUSE_MBUTTON);
eventHandled = LGLW_TRUE;
break;
case Button4:
loc_handle_mousebutton(lglw, LGLW_TRUE/*bPressed*/, LGLW_MOUSE_WHEELUP);
eventHandled = LGLW_TRUE;
break;
case Button5:
loc_handle_mousebutton(lglw, LGLW_TRUE/*bPressed*/, LGLW_MOUSE_WHEELDOWN);
eventHandled = LGLW_TRUE;
break;
}
break;
@@ -736,21 +752,27 @@ static void loc_eventProc(void *_xevent) {
{
default:
printf("vstgltest<lglw_linux>: xev ButtonRelease unhandled button: %i\n", btnRelease->button);
eventHandled = LGLW_FALSE;
break;
case Button1:
loc_handle_mousebutton(lglw, LGLW_FALSE/*bPressed*/, LGLW_MOUSE_LBUTTON);
eventHandled = LGLW_TRUE;
break;
case Button2:
loc_handle_mousebutton(lglw, LGLW_FALSE/*bPressed*/, LGLW_MOUSE_RBUTTON);
eventHandled = LGLW_TRUE;
break;
case Button3:
loc_handle_mousebutton(lglw, LGLW_FALSE/*bPressed*/, LGLW_MOUSE_MBUTTON);
eventHandled = LGLW_TRUE;
break;
case Button4:
loc_handle_mousebutton(lglw, LGLW_FALSE/*bPressed*/, LGLW_MOUSE_WHEELUP);
eventHandled = LGLW_TRUE;
break;
case Button5:
loc_handle_mousebutton(lglw, LGLW_FALSE/*bPressed*/, LGLW_MOUSE_WHEELDOWN);
eventHandled = LGLW_TRUE;
break;
}
break;
@@ -759,6 +781,7 @@ static void loc_eventProc(void *_xevent) {
printf("vstgltest<lglw_linux>: xev SelectionClear\n");
lglw->clipboard.numChars = 0;
free(lglw->clipboard.data);
eventHandled = LGLW_TRUE;
break;

case SelectionRequest:
@@ -787,9 +810,23 @@ static void loc_eventProc(void *_xevent) {
}

XSendEvent(lglw->xdsp, cbReq->requestor, True, NoEventMask, (XEvent *)&cbRes);
eventHandled = LGLW_TRUE;

break;
}

if(LGLW_FALSE == eventHandled)
{
if(0 == lglw->parent_xwnd)
{
printf("lglw_linux:loc_eventProc: no parent window to send events to");
XSendEvent(lglw->xdsp, InputFocus, True/*propgate*/, NoEventMask, xev);
}
else
{
XSendEvent(lglw->xdsp, lglw->parent_xwnd, True/*propgate*/, NoEventMask, xev);
}
}
}
}
}


Loading…
Cancel
Save