Double click a blank area to toggle maximization

pull/7/head
reionwong 4 years ago
parent 5ffdd34909
commit 48fc559e3a

@ -370,6 +370,51 @@ Item {
} }
MouseArea {
id: _sliding
anchors.fill: parent
z: -1
property int startY: -1
property bool activated: false
onActivatedChanged: {
// TODO
// if (activated)
// acticity.move()
}
onPressed: {
startY = mouse.y
}
onReleased: {
startY = -1
}
onDoubleClicked: {
acticity.toggleMaximize()
}
onMouseYChanged: {
if (startY === parseInt(mouse.y)) {
activated = false
return
}
// Up
if (startY > parseInt(mouse.y)) {
activated = false
return
}
if (mouse.y > rootItem.height)
activated = true
else
activated = false
}
}
// Components // Components
ControlCenter { ControlCenter {
id: controlCenter id: controlCenter

@ -20,6 +20,7 @@
#include "activity.h" #include "activity.h"
#include <QFile> #include <QFile>
#include <QCursor>
#include <QDebug> #include <QDebug>
#include <QX11Info> #include <QX11Info>
#include <QDirIterator> #include <QDirIterator>
@ -63,6 +64,58 @@ void Activity::close()
NETRootInfo(QX11Info::connection(), NET::CloseWindow).closeWindowRequest(KWindowSystem::activeWindow()); NETRootInfo(QX11Info::connection(), NET::CloseWindow).closeWindowRequest(KWindowSystem::activeWindow());
} }
void Activity::minimize()
{
KWindowSystem::minimizeWindow(KWindowSystem::activeWindow());
}
void Activity::restore()
{
KWindowSystem::clearState(KWindowSystem::activeWindow(), NET::Max);
}
void Activity::maximize()
{
KWindowSystem::setState(KWindowSystem::activeWindow(), NET::Max);
}
void Activity::toggleMaximize()
{
KWindowInfo info(KWindowSystem::activeWindow(), NET::WMState);
bool isWindow = !info.hasState(NET::SkipTaskbar) ||
info.windowType(NET::UtilityMask) != NET::Utility ||
info.windowType(NET::DesktopMask) != NET::Desktop;
if (!isWindow)
return;
bool isMaximized = info.hasState(NET::Max);
isMaximized ? restore() : maximize();
}
void Activity::move()
{
WId winId = KWindowSystem::activeWindow();
KWindowInfo info(winId, NET::WMState | NET::WMGeometry | NET::WMDesktop);
bool window = !info.hasState(NET::SkipTaskbar) ||
info.windowType(NET::UtilityMask) != NET::Utility ||
info.windowType(NET::DesktopMask) != NET::Desktop;
if (!window)
return;
bool onCurrent = info.isOnCurrentDesktop();
if (!onCurrent) {
KWindowSystem::setCurrentDesktop(info.desktop());
KWindowSystem::forceActiveWindow(winId);
}
NETRootInfo ri(QX11Info::connection(), NET::WMMoveResize);
ri.moveResizeRequest(winId,
QCursor::pos().x(),
QCursor::pos().y(), NET::Move);
}
bool Activity::isAcceptableWindow(quint64 wid) bool Activity::isAcceptableWindow(quint64 wid)
{ {
QFlags<NET::WindowTypeMask> ignoreList; QFlags<NET::WindowTypeMask> ignoreList;

@ -39,6 +39,11 @@ public:
QString icon() const; QString icon() const;
Q_INVOKABLE void close(); Q_INVOKABLE void close();
Q_INVOKABLE void minimize();
Q_INVOKABLE void restore();
Q_INVOKABLE void maximize();
Q_INVOKABLE void toggleMaximize();
Q_INVOKABLE void move();
bool isAcceptableWindow(quint64 wid); bool isAcceptableWindow(quint64 wid);

Loading…
Cancel
Save