src/gui/kernel/qwidget_x11.cpp
changeset 19 fcece45ef507
parent 18 2f34d5167611
child 30 5dc02b23752f
equal deleted inserted replaced
18:2f34d5167611 19:fcece45ef507
   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         }