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. 11
      windowsystem.cpp
  4. 2
      windowsystem.h

@ -22,11 +22,15 @@
#include <cmath>
#include <QDebug>
#include <QScreen>
#include <KWindowSystem>
SubMenu::SubMenu(QQuickItem *parent) : PlasmaQuick::Dialog(parent)
, m_facingLeft(false)
{
KWindowSystem::setType(winId(), NET::Menu);
}
SubMenu::~SubMenu()
@ -76,3 +80,16 @@ QRect SubMenu::availableScreenRectForItem(QQuickItem *item) const
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:
void facingLeftChanged() const;
void focusLost() const;
protected:
void focusOutEvent(QFocusEvent *ev);
private:
bool m_facingLeft;

@ -40,4 +40,13 @@ void WindowSystem::forceActive(QQuickItem *item)
KWindowSystem::forceActiveWindow(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();
Q_INVOKABLE void forceActive(QQuickItem *item);
Q_INVOKABLE bool isActive(QQuickItem *item);
};
#endif

Loading…
Cancel
Save