From 60a7419746ceb11e636e211c84f99ccd4240ebc2 Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Tue, 16 Sep 2014 18:52:01 +0200 Subject: [PATCH] fix availableScreenGeometryForPosition() when we check if a position is in a screen, we need the whole screen geometry, panels included, otherwise if we pass a coordinate under a panel, it will think no screen is there Change-Id: I802a2bec4ae44b583eafdc309934e67b620cc463 --- autotests/CMakeLists.txt | 2 ++ autotests/dialogtest.cpp | 57 ++++++++++++++++++++++++++++++++++++++ autotests/dialogtest.h | 48 ++++++++++++++++++++++++++++++++ src/plasmaquick/dialog.cpp | 5 +++- 4 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 autotests/dialogtest.cpp create mode 100644 autotests/dialogtest.h diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt index 544834c0c..5c7f1db9f 100644 --- a/autotests/CMakeLists.txt +++ b/autotests/CMakeLists.txt @@ -48,6 +48,8 @@ PLASMA_UNIT_TESTS( add_executable(storagetest storagetest.cpp ../src/plasma/private/storage.cpp ../src/plasma/private/storagethread.cpp) target_link_libraries(storagetest Qt5::Gui Qt5::Test Qt5::Sql KF5::KIOCore KF5::Plasma KF5::CoreAddons) +set(dialogtest_srcs dialogtest.cpp) +ecm_add_test(${dialogtest_srcs} TEST_NAME dialogtest LINK_LIBRARIES Qt5::Gui Qt5::Test Qt5::Qml Qt5::Quick KF5::WindowSystem KF5::Plasma KF5::PlasmaQuick) set(coronatest_srcs coronatest.cpp) qt5_add_resources(coronatest_srcs coronatestresources.qrc) diff --git a/autotests/dialogtest.cpp b/autotests/dialogtest.cpp new file mode 100644 index 000000000..8c4d5ef88 --- /dev/null +++ b/autotests/dialogtest.cpp @@ -0,0 +1,57 @@ +/******************************************************************************** +* Copyright 2014 Marco Martin * +* * +* This library is free software; you can redistribute it and/or * +* modify it under the terms of the GNU Library General Public * +* License as published by the Free Software Foundation; either * +* version 2 of the License, or (at your option) any later version. * +* * +* This library is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +* Library General Public License for more details. * +* * +* You should have received a copy of the GNU Library General Public License * +* along with this library; see the file COPYING.LIB. If not, write to * +* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * +* Boston, MA 02110-1301, USA. * +*********************************************************************************/ + +#include "dialogtest.h" +#include + + +void DialogTest::initTestCase() +{ + m_dialog = new PlasmaQuick::Dialog; + + m_panel = new QQuickView; + m_panel->setGeometry(0, 0, 50, 50); + m_panel->setFlags(Qt::FramelessWindowHint|Qt::WindowDoesNotAcceptFocus); + + m_content = new QQuickItem; + m_content->setWidth(100); + m_content->setHeight(100); + m_dialog->setMainItem(m_content); + + m_panel->show(); + KWindowSystem::setType(m_panel->winId(), NET::Dock); + m_dialog->setVisualParent(m_panel->contentItem()); + m_dialog->show(); +} + +void DialogTest::cleanupTestCase() +{ + delete m_dialog; + delete m_panel; +} + +void DialogTest::position() +{ + QTest::qWaitForWindowExposed(m_dialog); + + QCOMPARE(m_dialog->x(), 0); + QCOMPARE(m_dialog->y(), 49); +} + +QTEST_MAIN(DialogTest) diff --git a/autotests/dialogtest.h b/autotests/dialogtest.h new file mode 100644 index 000000000..32624cec2 --- /dev/null +++ b/autotests/dialogtest.h @@ -0,0 +1,48 @@ +/****************************************************************************** +* Copyright 2014 Marco Martin * +* * +* This library is free software; you can redistribute it and/or * +* modify it under the terms of the GNU Library General Public * +* License as published by the Free Software Foundation; either * +* version 2 of the License, or (at your option) any later version. * +* * +* This library is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +* Library General Public License for more details. * +* * +* You should have received a copy of the GNU Library General Public License * +* along with this library; see the file COPYING.LIB. If not, write to * +* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * +* Boston, MA 02110-1301, USA. * +*******************************************************************************/ +#ifndef DIALOGTEST_H +#define DIALOGTEST_H + +#include +#include +#include + +#include "plasmaquick/dialog.h" + + + +class DialogTest : public QObject +{ + Q_OBJECT + +public Q_SLOTS: + void initTestCase(); + void cleanupTestCase(); + +private Q_SLOTS: + void position(); + +private: + QQuickView *m_panel; + QQuickItem *m_content; + PlasmaQuick::Dialog *m_dialog; +}; + +#endif + diff --git a/src/plasmaquick/dialog.cpp b/src/plasmaquick/dialog.cpp index afc7d0feb..0dc0257cc 100644 --- a/src/plasmaquick/dialog.cpp +++ b/src/plasmaquick/dialog.cpp @@ -141,7 +141,10 @@ QRect DialogPrivate::availableScreenGeometryForPosition(const QPoint& pos) const // says it's at. QRect avail; Q_FOREACH (QScreen *screen, q->screen()->virtualSiblings()) { - if (screen->availableGeometry().contains(pos)) { + //we check geometry() but then take availableGeometry() + //to reliably check in which screen a position is, we need the full + //geometry, including areas for panels + if (screen->geometry().contains(pos)) { avail = screen->availableGeometry(); break; }