diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 5b2aabc..69e9ed8 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -13,7 +13,8 @@ set(SOURCES
windowhelper.cpp
iconitem.cpp
managedtexturenode.cpp
- popupwindow.cpp
+
+ desktop/menupopupwindow.cpp
meuikit.qrc
meui-style/style.qrc
diff --git a/src/controls/TopLevelMenu.qml b/src/controls/DesktopMenu.qml
similarity index 97%
rename from src/controls/TopLevelMenu.qml
rename to src/controls/DesktopMenu.qml
index 72ebc37..6ebb3e2 100644
--- a/src/controls/TopLevelMenu.qml
+++ b/src/controls/DesktopMenu.qml
@@ -3,7 +3,7 @@ import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
import MeuiKit 1.0 as Meui
-Meui.PopupWindow {
+Meui.MenuPopupWindow {
id: control
default property alias content : _mainLayout.data
diff --git a/src/controls/qmldir b/src/controls/qmldir
index 26e49cc..5f8918e 100644
--- a/src/controls/qmldir
+++ b/src/controls/qmldir
@@ -19,4 +19,4 @@ RoundedRect 1.0 RoundedRect.qml
Window 1.0 Window.qml
WindowButton 1.0 WindowButton.qml
Toast 1.0 Toast.qml
-TopLevelMenu 1.0 TopLevelMenu.qml
+DesktopMenu 1.0 DesktopMenu.qml
diff --git a/src/popupwindow.cpp b/src/desktop/menupopupwindow.cpp
similarity index 81%
rename from src/popupwindow.cpp
rename to src/desktop/menupopupwindow.cpp
index 6290b13..8acd8f8 100644
--- a/src/popupwindow.cpp
+++ b/src/desktop/menupopupwindow.cpp
@@ -17,13 +17,13 @@
* along with this program. If not, see .
*/
-#include "popupwindow.h"
+#include "menupopupwindow.h"
#include
#include
#include
#include
-PopupWindow::PopupWindow(QQuickWindow *parent)
+MenuPopupWindow::MenuPopupWindow(QQuickWindow *parent)
: QQuickWindow(parent)
, m_parentItem(0)
, m_contentItem(0)
@@ -36,13 +36,13 @@ PopupWindow::PopupWindow(QQuickWindow *parent)
this, SLOT(applicationStateChanged(Qt::ApplicationState)));
}
-void PopupWindow::applicationStateChanged(Qt::ApplicationState state)
+void MenuPopupWindow::applicationStateChanged(Qt::ApplicationState state)
{
if (state != Qt::ApplicationActive)
dismissPopup();
}
-void PopupWindow::show()
+void MenuPopupWindow::show()
{
QPoint pos = QCursor::pos();
int w = m_contentItem->implicitWidth();
@@ -59,7 +59,7 @@ void PopupWindow::show()
QRect g = pw->screen()->availableGeometry();
if (posx + w > g.right()) {
- if (qobject_cast(transientParent())) {
+ if (qobject_cast(transientParent())) {
// reposition submenu window on the parent menu's left side
int submenuOverlap = pw->x() + pw->width() - posx;
posx -= pw->width() + w - 2 * submenuOverlap;
@@ -70,6 +70,9 @@ void PopupWindow::show()
posx = qMax(posx, g.left());
}
+ m_mouseMoved = false;
+ m_dismissed = false;
+
posy = qBound(g.top(), posy, g.bottom() - h);
setGeometry(posx, posy, w, h);
@@ -79,14 +82,14 @@ void PopupWindow::show()
setKeyboardGrabEnabled(true);
}
-void PopupWindow::setParentItem(QQuickItem *item)
+void MenuPopupWindow::setParentItem(QQuickItem *item)
{
m_parentItem = item;
if (m_parentItem)
setTransientParent(m_parentItem->window());
}
-void PopupWindow::setPopupContentItem(QQuickItem *contentItem)
+void MenuPopupWindow::setPopupContentItem(QQuickItem *contentItem)
{
if (!contentItem)
return;
@@ -95,21 +98,21 @@ void PopupWindow::setPopupContentItem(QQuickItem *contentItem)
m_contentItem = contentItem;
}
-void PopupWindow::dismissPopup()
+void MenuPopupWindow::dismissPopup()
{
m_dismissed = true;
emit popupDismissed();
hide();
}
-void PopupWindow::mouseMoveEvent(QMouseEvent *e)
+void MenuPopupWindow::mouseMoveEvent(QMouseEvent *e)
{
m_mouseMoved = true;
QQuickWindow::mouseMoveEvent(e);
}
-void PopupWindow::mousePressEvent(QMouseEvent *e)
+void MenuPopupWindow::mousePressEvent(QMouseEvent *e)
{
QRect rect = QRect(QPoint(), size());
if (rect.contains(e->pos())) {
@@ -119,15 +122,17 @@ void PopupWindow::mousePressEvent(QMouseEvent *e)
}
}
-void PopupWindow::mouseReleaseEvent(QMouseEvent *e)
+void MenuPopupWindow::mouseReleaseEvent(QMouseEvent *e)
{
QRect rect = QRect(QPoint(), size());
if (rect.contains(e->pos())) {
if (m_mouseMoved) {
QMouseEvent pe = QMouseEvent(QEvent::MouseButtonPress, e->pos(), e->button(), e->buttons(), e->modifiers());
QQuickWindow::mousePressEvent(&pe);
- if (!m_dismissed)
+ if (!m_dismissed) {
+ dismissPopup();
QQuickWindow::mouseReleaseEvent(e);
+ }
}
m_mouseMoved = true;
}
@@ -136,14 +141,14 @@ void PopupWindow::mouseReleaseEvent(QMouseEvent *e)
// dismissPopup();
}
-bool PopupWindow::event(QEvent *event)
+bool MenuPopupWindow::event(QEvent *event)
{
//QTBUG-45079
//This is a workaround for popup menu not being closed when using touch input.
//Currently mouse synthesized events are not created for touch events which are
//outside the qquickwindow.
- if (event->type() == QEvent::TouchBegin && !qobject_cast(transientParent())) {
+ if (event->type() == QEvent::TouchBegin && !qobject_cast(transientParent())) {
QRect rect = QRect(QPoint(), size());
QTouchEvent *touch = static_cast(event);
QTouchEvent::TouchPoint point = touch->touchPoints().first();
diff --git a/src/popupwindow.h b/src/desktop/menupopupwindow.h
similarity index 91%
rename from src/popupwindow.h
rename to src/desktop/menupopupwindow.h
index e545f59..d842acc 100644
--- a/src/popupwindow.h
+++ b/src/desktop/menupopupwindow.h
@@ -17,13 +17,13 @@
* along with this program. If not, see .
*/
-#ifndef TOPLEVELMENU_H
-#define TOPLEVELMENU_H
+#ifndef MENUPOPUPWINDOW_H
+#define MENUPOPUPWINDOW_H
#include
#include
-class PopupWindow : public QQuickWindow
+class MenuPopupWindow : public QQuickWindow
{
Q_OBJECT
Q_PROPERTY(QQuickItem *popupContentItem READ popupContentItem WRITE setPopupContentItem)
@@ -31,7 +31,7 @@ class PopupWindow : public QQuickWindow
Q_PROPERTY(QQuickItem *parentItem READ parentItem WRITE setParentItem)
public:
- PopupWindow(QQuickWindow *parent = nullptr);
+ MenuPopupWindow(QQuickWindow *parent = nullptr);
QQuickItem *popupContentItem() const { return m_contentItem; }
void setPopupContentItem(QQuickItem *popupContentItem);
@@ -63,4 +63,4 @@ private:
bool m_dismissed;
};
-#endif // POPUPWINDOW_H
+#endif
diff --git a/src/meuikit.cpp b/src/meuikit.cpp
index 09000f8..a57ce88 100644
--- a/src/meuikit.cpp
+++ b/src/meuikit.cpp
@@ -24,7 +24,8 @@
#include "blurhelper/windowblur.h"
#include "windowhelper.h"
#include "iconitem.h"
-#include "popupwindow.h"
+
+#include "desktop/menupopupwindow.h"
#include
#include
@@ -55,7 +56,7 @@ void MeuiKit::registerTypes(const char *uri)
qmlRegisterType(uri, 1, 0, "WindowBlur");
qmlRegisterType(uri, 1, 0, "WindowHelper");
qmlRegisterType(uri, 1, 0, "IconItem");
- qmlRegisterType(uri, 1, 0, "PopupWindow");
+ qmlRegisterType(uri, 1, 0, "MenuPopupWindow");
qmlRegisterSingletonType(componentUrl(QStringLiteral("Theme.qml")), uri, 1, 0, "Theme");
qmlRegisterSingletonType(componentUrl(QStringLiteral("Units.qml")), uri, 1, 0, "Units");
@@ -68,7 +69,7 @@ void MeuiKit::registerTypes(const char *uri)
qmlRegisterType(componentUrl(QStringLiteral("Toast.qml")), uri, 1, 0, "Toast");
qmlRegisterType(componentUrl(QStringLiteral("Window.qml")), uri, 1, 0, "Window");
qmlRegisterType(componentUrl(QStringLiteral("WindowButton.qml")), uri, 1, 0, "WindowButton");
- qmlRegisterType(componentUrl(QStringLiteral("TopLevelMenu.qml")), uri, 1, 0, "TopLevelMenu");
+ qmlRegisterType(componentUrl(QStringLiteral("DesktopMenu.qml")), uri, 1, 0, "DesktopMenu");
qmlProtectModule(uri, 1);
}
diff --git a/src/meuikit.qrc b/src/meuikit.qrc
index c30b979..fcdba31 100644
--- a/src/meuikit.qrc
+++ b/src/meuikit.qrc
@@ -10,7 +10,7 @@
controls/Units.qml
controls/Window.qml
controls/WindowButton.qml
- controls/TopLevelMenu.qml
+ controls/DesktopMenu.qml
images/refresh.svg
images/dark/close.svg
images/dark/maximize.svg