Last bits on focus/window persistence management; now behaves fully QMenu-like.

wilder-5.17
Eike Hein 12 years ago
parent 7088a1dda2
commit 294dc4dd28
  1. 17
      submenu.cpp
  2. 4
      submenu.h
  3. 9
      windowsystem.cpp
  4. 2
      windowsystem.h

@ -22,11 +22,15 @@
#include <cmath> #include <cmath>
#include <QDebug>
#include <QScreen> #include <QScreen>
#include <KWindowSystem>
SubMenu::SubMenu(QQuickItem *parent) : PlasmaQuick::Dialog(parent) SubMenu::SubMenu(QQuickItem *parent) : PlasmaQuick::Dialog(parent)
, m_facingLeft(false) , m_facingLeft(false)
{ {
KWindowSystem::setType(winId(), NET::Menu);
} }
SubMenu::~SubMenu() SubMenu::~SubMenu()
@ -76,3 +80,16 @@ QRect SubMenu::availableScreenRectForItem(QQuickItem *item) const
return screen->availableGeometry(); return screen->availableGeometry();
} }
void SubMenu::focusOutEvent(QFocusEvent *ev)
{
const QWindow *focusWindow = QGuiApplication::focusWindow();
if (!(focusWindow && focusWindow->isActive() && isAncestorOf(focusWindow))) {
emit focusLost();
}
QQuickWindow::focusOutEvent(ev);
}

@ -43,6 +43,10 @@ class SubMenu : public PlasmaQuick::Dialog
Q_SIGNALS: Q_SIGNALS:
void facingLeftChanged() const; void facingLeftChanged() const;
void focusLost() const;
protected:
void focusOutEvent(QFocusEvent *ev);
private: private:
bool m_facingLeft; bool m_facingLeft;

@ -41,3 +41,12 @@ void WindowSystem::forceActive(QQuickItem *item)
KWindowSystem::forceActiveWindow(item->window()->winId()); KWindowSystem::forceActiveWindow(item->window()->winId());
KWindowSystem::raiseWindow(item->window()->winId()); KWindowSystem::raiseWindow(item->window()->winId());
} }
bool WindowSystem::isActive(QQuickItem *item)
{
if (!item || !item->window()) {
return false;
}
return item->window()->isActive();
}

@ -33,6 +33,8 @@ class WindowSystem : public QObject
~WindowSystem(); ~WindowSystem();
Q_INVOKABLE void forceActive(QQuickItem *item); Q_INVOKABLE void forceActive(QQuickItem *item);
Q_INVOKABLE bool isActive(QQuickItem *item);
}; };
#endif #endif

Loading…
Cancel
Save