367 // ... ConfigureNotify ... ReparentNotify ... MapNotify ... Expose |
367 // ... ConfigureNotify ... ReparentNotify ... MapNotify ... Expose |
368 // with X11BypassWindowManagerHint: |
368 // with X11BypassWindowManagerHint: |
369 // ConfigureNotify ... MapNotify ... Expose |
369 // ConfigureNotify ... MapNotify ... Expose |
370 |
370 |
371 enum State { |
371 enum State { |
372 Initial, Reparented, Mapped |
372 Initial, Mapped |
373 } state = Initial; |
373 } state = Initial; |
374 |
374 |
375 do { |
375 do { |
376 if (XEventsQueued(X11->display, QueuedAlready)) { |
376 if (XEventsQueued(X11->display, QueuedAlready)) { |
377 XNextEvent(X11->display, &ev); |
377 XNextEvent(X11->display, &ev); |
378 qApp->x11ProcessEvent(&ev); |
378 qApp->x11ProcessEvent(&ev); |
379 |
379 |
380 if (w->windowFlags() & Qt::X11BypassWindowManagerHint) { |
380 switch (state) { |
381 switch (state) { |
381 case Initial: |
382 case Initial: |
382 if (ev.type == MapNotify && ev.xany.window == winid) |
383 case Reparented: |
383 state = Mapped; |
384 if (ev.type == MapNotify && ev.xany.window == winid) |
384 break; |
385 state = Mapped; |
385 case Mapped: |
386 break; |
386 if (ev.type == Expose && ev.xany.window == winid) |
387 case Mapped: |
387 return; |
388 if (ev.type == Expose && ev.xany.window == winid) |
388 break; |
389 return; |
|
390 break; |
|
391 } |
|
392 } else { |
|
393 switch (state) { |
|
394 case Initial: |
|
395 if (ev.type == ReparentNotify && ev.xany.window == winid) |
|
396 state = Reparented; |
|
397 break; |
|
398 case Reparented: |
|
399 if (ev.type == MapNotify && ev.xany.window == winid) |
|
400 state = Mapped; |
|
401 break; |
|
402 case Mapped: |
|
403 if (ev.type == Expose && ev.xany.window == winid) |
|
404 return; |
|
405 break; |
|
406 } |
|
407 } |
389 } |
408 } else { |
390 } else { |
409 if (!XEventsQueued(X11->display, QueuedAfterFlush)) |
391 if (!XEventsQueued(X11->display, QueuedAfterFlush)) |
410 qApp->syncX(); // non-busy wait |
392 qApp->syncX(); // non-busy wait |
411 } |
393 } |