From 903a59042e4017d851d8b32f2f8568fd36aeb2c8 Mon Sep 17 00:00:00 2001 From: Joni Poikelin Date: Tue, 24 Jan 2017 20:12:04 +0200 Subject: [PATCH] Fix QComboBox popup from opening on wrong screen Nothing seems to be telling the popup on which screen it should be shown on. To fix this, simply set same screen the QComboBox uses to the popup. Task-number: QTBUG-58392 Change-Id: If62a26fe4e51bcf3d770ee72c9baa998541618f4 Reviewed-by: Andy Shaw --- src/widgets/widgets/qcombobox.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp index b18066c174..2376a18e43 100644 --- a/src/widgets/widgets/qcombobox.cpp +++ b/src/widgets/widgets/qcombobox.cpp @@ -2746,6 +2746,22 @@ void QComboBox::showPopup() bool startTimer = !container->isVisible(); container->raise(); + container->create(); + QWindow *containerWindow = container->window()->windowHandle(); + if (containerWindow) { + QWindow *win = window()->windowHandle(); + if (win) { + QScreen *currentScreen = win->screen(); + if (currentScreen && !currentScreen->virtualSiblings().contains(containerWindow->screen())) { + containerWindow->setScreen(currentScreen); + + // This seems to workaround an issue in xcb+multi GPU+multiscreen + // environment where the window might not always show up when screen + // is changed. + container->hide(); + } + } + } container->show(); container->updateScrollers(); view()->setFocus();