- 
    
Bug
 - 
    Resolution: Done
 - 
    
P3: Somewhat important
 - 
    4.4.2
 - 
    None
 
- 
        26b572903a800163972817cd717b5df454b96eb2
 
In void QWidget::activateWindow(), XSetInputFocus() can be called on a window which is Unviewable or Unmapped. The call fails and return a BadMatch error (this behavior is not described in the man page, it is described in the XLib programming Manual).
Here is a patch to avoid the issue:
diff --git a/src/gui/kernel/qwidget_x11.cpp b/src/gui/kernel/qwidget_x11.cpp
index 79ee8c9..766a301 100644
--- a/src/gui/kernel/qwidget_x11.cpp
+++ b/src/gui/kernel/qwidget_x11.cpp
@@ -1509,9 +1509,14 @@ QWidget *QWidget::keyboardGrabber()
 void QWidget::activateWindow()
 {
-    Q_D(QWidget);
     QWidget *tlw = window();
     if (tlw->isVisible() && !tlw->d_func()->topData()->embedded && !X11->deferred_map.contains(tlw)) {
+
+        XWindowAttributes attributes;
+        XGetWindowAttributes(X11->display, tlw->internalWinId(), &attributes);
+        if(attributes.map_state != IsViewable)
+            return;
+
         if (X11->userTime == 0)
             X11->userTime = X11->time;
         qt_net_update_user_time(tlw, X11->userTime);
diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp
index e21c573..c8277bb 100644
--- a/src/gui/kernel/qapplication_x11.cpp
+++ b/src/gui/kernel/qapplication_x11.cpp
@@ -632,11 +632,6 @@ static int qt_x_errhandler(Display *dpy, XErrorEvent *err)
             return 0;
         break;
-    case BadMatch:
-        if (err->request_code == 42 /* X_SetInputFocus */)
-            return 0;
-        break;
-
     default:
         if (err->request_code == X11->xinput_major
             && err->error_code == (X11->xinput_errorbase + XI_BadDevice)