Browse Source

fix plugin window event propagation

pull/1639/head
bsp2 6 years ago
parent
commit
0e9ca3d293
1 changed files with 24 additions and 3 deletions
  1. +24
    -3
      dep/lglw/lglw_linux.c

+ 24
- 3
dep/lglw/lglw_linux.c View File

@@ -459,7 +459,9 @@ lglw_bool_t lglw_window_open (lglw_t _lglw, void *_parentHWNDOrNull, int32_t _x,
lglw_log("lglw:lglw_window_open: 5\n"); lglw_log("lglw:lglw_window_open: 5\n");
swa.border_pixel = 0; swa.border_pixel = 0;
swa.colormap = lglw->cmap; swa.colormap = lglw->cmap;
swa.event_mask = EnterWindowMask | LeaveWindowMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask;
// (note) [bsp] setting this to NoEventMask causes all events to be propagated to the parent (host) window.
// The host then reports the event to the plugin by calling its eventProc function (set via "_XEventProc").
swa.event_mask = NoEventMask;/////ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask | ButtonMotionMask | FocusChangeMask;
lglw->win.xwnd = XCreateWindow(lglw->xdsp/*display*/, lglw->win.xwnd = XCreateWindow(lglw->xdsp/*display*/,
DefaultRootWindow(lglw->xdsp)/*parent. see Cameron's comment below.*/, DefaultRootWindow(lglw->xdsp)/*parent. see Cameron's comment below.*/,
0/*x*/, 0/*x*/,
@@ -475,7 +477,15 @@ lglw_bool_t lglw_window_open (lglw_t _lglw, void *_parentHWNDOrNull, int32_t _x,
); );


lglw_log("lglw:lglw_window_open: 6\n"); lglw_log("lglw:lglw_window_open: 6\n");
XSetStandardProperties(lglw->xdsp, lglw->win.xwnd, "LGLW", "LGLW", None, NULL, 0, NULL);
XSetStandardProperties(lglw->xdsp/*display*/,
lglw->win.xwnd/*window*/,
"LGLW"/*window_name*/,
"LGLW"/*icon_name*/,
None/*icon_pixmap*/,
NULL/*argv*/,
0/*argc*/,
NULL/*XSizeHints*/
);


// Some hosts only check and store the callback when the Window is reparented // Some hosts only check and store the callback when the Window is reparented
// Since creating the Window with a Parent may or may not do that, but the callback is not set, // Since creating the Window with a Parent may or may not do that, but the callback is not set,
@@ -502,7 +512,10 @@ lglw_bool_t lglw_window_open (lglw_t _lglw, void *_parentHWNDOrNull, int32_t _x,


lglw_log("lglw:lglw_window_open: 9\n"); lglw_log("lglw:lglw_window_open: 9\n");
if(lglw->win.b_owner) if(lglw->win.b_owner)
XMapRaised(lglw->xdsp, lglw->win.xwnd);
{
// // XMapRaised(lglw->xdsp, lglw->win.xwnd);
XMapWindow(lglw->xdsp, lglw->win.xwnd);
}


#if 0 #if 0
XSelectInput(lglw->xdsp, lglw->win.xwnd, XSelectInput(lglw->xdsp, lglw->win.xwnd,
@@ -516,6 +529,14 @@ lglw_bool_t lglw_window_open (lglw_t _lglw, void *_parentHWNDOrNull, int32_t _x,
); );
#endif #endif


#if 0
XSetInputFocus(lglw->xdsp/*display*/,
PointerRoot/*focus*/,
RevertToPointerRoot/*revert_to*/,
CurrentTime
);
#endif

XSync(lglw->xdsp, False); XSync(lglw->xdsp, False);
lglw->win.mapped = LGLW_TRUE; lglw->win.mapped = LGLW_TRUE;




Loading…
Cancel
Save