d536532f66
By not using a QQuickView it becomes possible to just use a PlasmaCore.Dialog or a Quick.Window in the TabBox qml and thus it's possible to simplify the qml code. To support this a new SwitcherItem is introduced and exported to QML. It's a simple QObject providing all the properties which used to be exported to the root context. A declarative TabBox is expected to use one of these items. The C++ side finds the Switcher and for that supports the case that the SwitcherItem is the rootItem or a child item. A declarative TabBox has also to create a QQuickWindow, e.g. a PlasmaCore.Dialog. The visibility of that window should be controlled through the visible property on the SwitcherItem. The underlying C++ implementation assumes that a TabBox only uses one window (it needs to get destroyed once it's hidden and included in highlight windows). Thanks to this change it's no longer needed to reload the TabBox whenever it gets shown or the alternative TabBox gets shown. Instead the same QML script can get reused. Other created switchers are ignored as the visible property won't be changed to true.
111 lines
2.9 KiB
C++
111 lines
2.9 KiB
C++
/********************************************************************
|
|
KWin - the KDE window manager
|
|
This file is part of the KDE project.
|
|
|
|
Copyright (C) 2013 Martin Gräßlin <mgraesslin@kde.org>
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program 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 General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*********************************************************************/
|
|
#ifndef KWIN_TABBOX_ITEM
|
|
#define KWIN_TABBOX_ITEM
|
|
|
|
#include <QObject>
|
|
#include <QRect>
|
|
|
|
class QAbstractItemModel;
|
|
|
|
namespace KWin
|
|
{
|
|
namespace TabBox
|
|
{
|
|
|
|
class SwitcherItem : public QObject
|
|
{
|
|
Q_OBJECT
|
|
Q_PROPERTY(QAbstractItemModel *model READ model NOTIFY modelChanged)
|
|
Q_PROPERTY(QRect screenGeometry READ screenGeometry NOTIFY screenGeometryChanged)
|
|
Q_PROPERTY(bool visible READ isVisible NOTIFY visibleChanged)
|
|
Q_PROPERTY(bool allDesktops READ isAllDesktops NOTIFY allDesktopsChanged)
|
|
Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged)
|
|
|
|
/**
|
|
* The main QML item that will be displayed in the Dialog
|
|
*/
|
|
Q_PROPERTY(QObject *item READ item WRITE setItem NOTIFY itemChanged)
|
|
|
|
Q_CLASSINFO("DefaultProperty", "item")
|
|
public:
|
|
SwitcherItem(QObject *parent = nullptr);
|
|
virtual ~SwitcherItem();
|
|
|
|
QAbstractItemModel *model() const;
|
|
QRect screenGeometry() const;
|
|
bool isVisible() const;
|
|
bool isAllDesktops() const;
|
|
int currentIndex() const;
|
|
void setCurrentIndex(int index);
|
|
QObject *item() const;
|
|
void setItem(QObject *item);
|
|
|
|
// for usage from outside
|
|
void setModel(QAbstractItemModel *model);
|
|
void setAllDesktops(bool all);
|
|
void setVisible(bool visible);
|
|
|
|
Q_SIGNALS:
|
|
void visibleChanged();
|
|
void currentIndexChanged(int index);
|
|
void modelChanged();
|
|
void allDesktopsChanged();
|
|
void screenGeometryChanged();
|
|
void itemChanged();
|
|
|
|
private:
|
|
QAbstractItemModel *m_model;
|
|
QObject *m_item;
|
|
bool m_visible;
|
|
bool m_allDesktops;
|
|
int m_currentIndex;
|
|
QMetaObject::Connection m_selectedIndexConnection;
|
|
};
|
|
|
|
inline QAbstractItemModel *SwitcherItem::model() const
|
|
{
|
|
return m_model;
|
|
}
|
|
|
|
inline bool SwitcherItem::isVisible() const
|
|
{
|
|
return m_visible;
|
|
}
|
|
|
|
inline bool SwitcherItem::isAllDesktops() const
|
|
{
|
|
return m_allDesktops;
|
|
}
|
|
|
|
inline int SwitcherItem::currentIndex() const
|
|
{
|
|
return m_currentIndex;
|
|
}
|
|
|
|
inline QObject *SwitcherItem::item() const
|
|
{
|
|
return m_item;
|
|
}
|
|
|
|
} // TabBox
|
|
} // KWin
|
|
|
|
#endif // KWIN_TABBOX_ITEM
|