REFACTOR WindowsTracker to provide more information
--View::WindowsTracker now provides all the time information about CurrentScreen and AllScreens! This way all consumers (Latte::Containment, Applets etc.) can choose whatever suits them best.pull/6/head
parent
7deef41015
commit
4cc4bfd6de
@ -1,5 +1,7 @@
|
||||
set(lattedock-app_SRCS
|
||||
${lattedock-app_SRCS}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/allscreenstracker.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/currentscreentracker.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/windowstracker.cpp
|
||||
PARENT_SCOPE
|
||||
)
|
||||
|
@ -0,0 +1,131 @@
|
||||
/*
|
||||
* Copyright 2019 Michail Vourlakos <mvourlakos@gmail.com>
|
||||
*
|
||||
* This file is part of Latte-Dock
|
||||
*
|
||||
* Latte-Dock 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.
|
||||
*
|
||||
* Latte-Dock 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/>.
|
||||
*/
|
||||
|
||||
#include "allscreenstracker.h"
|
||||
|
||||
// local
|
||||
#include "../view.h"
|
||||
#include "../../layout/genericlayout.h"
|
||||
#include "../../wm/schemecolors.h"
|
||||
#include "../../wm/tracker/lastactivewindow.h"
|
||||
#include "../../wm/tracker/trackerwindows.h"
|
||||
|
||||
namespace Latte {
|
||||
namespace ViewPart {
|
||||
namespace TrackerPart {
|
||||
|
||||
AllScreensTracker::AllScreensTracker(WindowsTracker *parent)
|
||||
: QObject(parent),
|
||||
m_latteView(parent->view()),
|
||||
m_wm(parent->wm())
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
||||
AllScreensTracker::~AllScreensTracker()
|
||||
{
|
||||
}
|
||||
|
||||
void AllScreensTracker::init()
|
||||
{
|
||||
connect(m_wm->windowsTracker(), &WindowSystem::Tracker::Windows::informationAnnouncedForLayout, this, [&](const Latte::Layout::GenericLayout *layout) {
|
||||
if (m_latteView->layout() == layout) {
|
||||
initSignalsForInformation();
|
||||
}
|
||||
});
|
||||
|
||||
connect(m_wm->windowsTracker(), &WindowSystem::Tracker::Windows::enabledChangedForLayout, this, [&](const Latte::Layout::GenericLayout *layout) {
|
||||
if (m_latteView->layout() == layout) {
|
||||
emit enabledChanged();
|
||||
}
|
||||
});
|
||||
|
||||
connect(m_wm->windowsTracker(), &WindowSystem::Tracker::Windows::activeWindowMaximizedChangedForLayout, this, [&](const Latte::Layout::GenericLayout *layout) {
|
||||
if (m_latteView->layout() == layout) {
|
||||
emit activeWindowMaximizedChanged();
|
||||
}
|
||||
});
|
||||
|
||||
connect(m_wm->windowsTracker(), &WindowSystem::Tracker::Windows::existsWindowActiveChangedForLayout, this, [&](const Latte::Layout::GenericLayout *layout) {
|
||||
if (m_latteView->layout() == layout) {
|
||||
emit existsWindowActiveChanged();
|
||||
}
|
||||
});
|
||||
|
||||
connect(m_wm->windowsTracker(), &WindowSystem::Tracker::Windows::existsWindowMaximizedChangedForLayout, this, [&](const Latte::Layout::GenericLayout *layout) {
|
||||
if (m_latteView->layout() == layout) {
|
||||
emit existsWindowMaximizedChanged();
|
||||
}
|
||||
});
|
||||
|
||||
connect(m_wm->windowsTracker(), &WindowSystem::Tracker::Windows::activeWindowSchemeChangedForLayout, this, [&](const Latte::Layout::GenericLayout *layout) {
|
||||
if (m_latteView->layout() == layout) {
|
||||
emit activeWindowSchemeChanged();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void AllScreensTracker::initSignalsForInformation()
|
||||
{
|
||||
connect(lastActiveWindow(), &WindowSystem::Tracker::LastActiveWindow::draggingStarted,
|
||||
this, &AllScreensTracker::activeWindowDraggingStarted);
|
||||
|
||||
emit lastActiveWindowChanged();
|
||||
}
|
||||
|
||||
bool AllScreensTracker::activeWindowMaximized() const
|
||||
{
|
||||
return m_wm->windowsTracker()->activeWindowMaximized(m_latteView->layout());
|
||||
}
|
||||
|
||||
bool AllScreensTracker::existsWindowActive() const
|
||||
{
|
||||
return m_wm->windowsTracker()->existsWindowActive(m_latteView->layout());
|
||||
}
|
||||
|
||||
bool AllScreensTracker::existsWindowMaximized() const
|
||||
{
|
||||
return m_wm->windowsTracker()->existsWindowMaximized(m_latteView->layout());
|
||||
}
|
||||
|
||||
WindowSystem::SchemeColors *AllScreensTracker::activeWindowScheme() const
|
||||
{
|
||||
return m_wm->windowsTracker()->activeWindowScheme(m_latteView->layout());
|
||||
}
|
||||
|
||||
bool AllScreensTracker::enabled() const
|
||||
{
|
||||
return m_wm->windowsTracker()->enabled(m_latteView->layout());
|
||||
}
|
||||
|
||||
WindowSystem::Tracker::LastActiveWindow *AllScreensTracker::lastActiveWindow()
|
||||
{
|
||||
return m_wm->windowsTracker()->lastActiveWindow(m_latteView->layout());
|
||||
}
|
||||
|
||||
|
||||
//! Window Functions
|
||||
void AllScreensTracker::requestMoveLastWindow(int localX, int localY)
|
||||
{
|
||||
m_wm->windowsTracker()->lastActiveWindow(m_latteView->layout())->requestMove(m_latteView, localX, localY);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright 2019 Michail Vourlakos <mvourlakos@gmail.com>
|
||||
*
|
||||
* This file is part of Latte-Dock
|
||||
*
|
||||
* Latte-Dock 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.
|
||||
*
|
||||
* Latte-Dock 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 WINDOWSALLSCREENSTRACKER_H
|
||||
#define WINDOWSALLSCREENSTRACKER_H
|
||||
|
||||
// local
|
||||
#include "../../wm/abstractwindowinterface.h"
|
||||
|
||||
// Qt
|
||||
#include <QObject>
|
||||
|
||||
namespace Latte{
|
||||
class View;
|
||||
|
||||
namespace ViewPart {
|
||||
class WindowsTracker;
|
||||
}
|
||||
|
||||
namespace WindowSystem {
|
||||
class AbstractWindowInterface;
|
||||
class SchemeColors;
|
||||
namespace Tracker {
|
||||
class LastActiveWindow;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
namespace Latte {
|
||||
namespace ViewPart {
|
||||
namespace TrackerPart {
|
||||
|
||||
class AllScreensTracker : public QObject {
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(bool enabled READ enabled NOTIFY enabledChanged)
|
||||
Q_PROPERTY(bool activeWindowMaximized READ activeWindowMaximized NOTIFY activeWindowMaximizedChanged)
|
||||
Q_PROPERTY(bool existsWindowActive READ existsWindowActive NOTIFY existsWindowActiveChanged)
|
||||
Q_PROPERTY(bool existsWindowMaximized READ existsWindowMaximized NOTIFY existsWindowMaximizedChanged)
|
||||
Q_PROPERTY(Latte::WindowSystem::SchemeColors *activeWindowScheme READ activeWindowScheme NOTIFY activeWindowSchemeChanged)
|
||||
|
||||
Q_PROPERTY(Latte::WindowSystem::Tracker::LastActiveWindow *lastActiveWindow READ lastActiveWindow NOTIFY lastActiveWindowChanged)
|
||||
|
||||
public:
|
||||
explicit AllScreensTracker(WindowsTracker *parent);
|
||||
virtual ~AllScreensTracker();
|
||||
|
||||
bool enabled() const;
|
||||
bool activeWindowMaximized() const;
|
||||
bool existsWindowActive() const;
|
||||
bool existsWindowMaximized() const;
|
||||
|
||||
WindowSystem::SchemeColors *activeWindowScheme() const;
|
||||
|
||||
WindowSystem::Tracker::LastActiveWindow *lastActiveWindow();
|
||||
|
||||
public slots:
|
||||
Q_INVOKABLE void requestMoveLastWindow(int localX, int localY);
|
||||
|
||||
signals:
|
||||
void enabledChanged();
|
||||
void activeWindowDraggingStarted();
|
||||
void activeWindowMaximizedChanged();
|
||||
void existsWindowActiveChanged();
|
||||
void existsWindowMaximizedChanged();
|
||||
void activeWindowSchemeChanged();
|
||||
|
||||
void lastActiveWindowChanged();
|
||||
|
||||
private slots:
|
||||
void initSignalsForInformation();
|
||||
|
||||
private:
|
||||
void init();
|
||||
|
||||
Latte::View *m_latteView{nullptr};
|
||||
WindowSystem::AbstractWindowInterface *m_wm{nullptr};
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
@ -0,0 +1,171 @@
|
||||
/*
|
||||
* Copyright 2019 Michail Vourlakos <mvourlakos@gmail.com>
|
||||
*
|
||||
* This file is part of Latte-Dock
|
||||
*
|
||||
* Latte-Dock 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.
|
||||
*
|
||||
* Latte-Dock 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/>.
|
||||
*/
|
||||
|
||||
#include "currentscreentracker.h"
|
||||
|
||||
// local
|
||||
#include "../view.h"
|
||||
#include "../../wm/schemecolors.h"
|
||||
#include "../../wm/tracker/lastactivewindow.h"
|
||||
#include "../../wm/tracker/trackerwindows.h"
|
||||
|
||||
namespace Latte {
|
||||
namespace ViewPart {
|
||||
namespace TrackerPart {
|
||||
|
||||
CurrentScreenTracker::CurrentScreenTracker(WindowsTracker *parent)
|
||||
: QObject(parent),
|
||||
m_latteView(parent->view()),
|
||||
m_wm(parent->wm())
|
||||
{
|
||||
init();
|
||||
|
||||
m_wm->windowsTracker()->addView(m_latteView);
|
||||
}
|
||||
|
||||
CurrentScreenTracker::~CurrentScreenTracker()
|
||||
{
|
||||
m_wm->windowsTracker()->removeView(m_latteView);
|
||||
}
|
||||
|
||||
void CurrentScreenTracker::init()
|
||||
{
|
||||
connect(m_wm->windowsTracker(), &WindowSystem::Tracker::Windows::informationAnnounced, this, [&](const Latte::View *view) {
|
||||
if (m_latteView == view) {
|
||||
initSignalsForInformation();
|
||||
}
|
||||
});
|
||||
|
||||
connect(m_wm->windowsTracker(), &WindowSystem::Tracker::Windows::enabledChanged, this, [&](const Latte::View *view) {
|
||||
if (m_latteView == view) {
|
||||
emit enabledChanged();
|
||||
}
|
||||
});
|
||||
|
||||
connect(m_wm->windowsTracker(), &WindowSystem::Tracker::Windows::activeWindowMaximizedChanged, this, [&](const Latte::View *view) {
|
||||
if (m_latteView == view) {
|
||||
emit activeWindowMaximizedChanged();
|
||||
}
|
||||
});
|
||||
|
||||
connect(m_wm->windowsTracker(), &WindowSystem::Tracker::Windows::activeWindowTouchingChanged, this, [&](const Latte::View *view) {
|
||||
if (m_latteView == view) {
|
||||
emit activeWindowTouchingChanged();
|
||||
}
|
||||
});
|
||||
|
||||
connect(m_wm->windowsTracker(), &WindowSystem::Tracker::Windows::existsWindowActiveChanged, this, [&](const Latte::View *view) {
|
||||
if (m_latteView == view) {
|
||||
emit existsWindowActiveChanged();
|
||||
}
|
||||
});
|
||||
|
||||
connect(m_wm->windowsTracker(), &WindowSystem::Tracker::Windows::existsWindowMaximizedChanged, this, [&](const Latte::View *view) {
|
||||
if (m_latteView == view) {
|
||||
emit existsWindowMaximizedChanged();
|
||||
}
|
||||
});
|
||||
|
||||
connect(m_wm->windowsTracker(), &WindowSystem::Tracker::Windows::existsWindowTouchingChanged, this, [&](const Latte::View *view) {
|
||||
if (m_latteView == view) {
|
||||
emit existsWindowTouchingChanged();
|
||||
}
|
||||
});
|
||||
|
||||
connect(m_wm->windowsTracker(), &WindowSystem::Tracker::Windows::activeWindowSchemeChanged, this, [&](const Latte::View *view) {
|
||||
if (m_latteView == view) {
|
||||
emit activeWindowSchemeChanged();
|
||||
}
|
||||
});
|
||||
|
||||
connect(m_wm->windowsTracker(), &WindowSystem::Tracker::Windows::touchingWindowSchemeChanged, this, [&](const Latte::View *view) {
|
||||
if (m_latteView == view) {
|
||||
emit touchingWindowSchemeChanged();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void CurrentScreenTracker::initSignalsForInformation()
|
||||
{
|
||||
connect(lastActiveWindow(), &WindowSystem::Tracker::LastActiveWindow::draggingStarted,
|
||||
this, &CurrentScreenTracker::activeWindowDraggingStarted);
|
||||
|
||||
emit lastActiveWindowChanged();
|
||||
}
|
||||
|
||||
bool CurrentScreenTracker::activeWindowMaximized() const
|
||||
{
|
||||
return m_wm->windowsTracker()->activeWindowMaximized(m_latteView);
|
||||
}
|
||||
|
||||
bool CurrentScreenTracker::activeWindowTouching() const
|
||||
{
|
||||
return m_wm->windowsTracker()->activeWindowTouching(m_latteView);
|
||||
}
|
||||
|
||||
bool CurrentScreenTracker::existsWindowActive() const
|
||||
{
|
||||
return m_wm->windowsTracker()->existsWindowActive(m_latteView);
|
||||
}
|
||||
|
||||
bool CurrentScreenTracker::existsWindowMaximized() const
|
||||
{
|
||||
return m_wm->windowsTracker()->existsWindowMaximized(m_latteView);
|
||||
}
|
||||
|
||||
bool CurrentScreenTracker::existsWindowTouching() const
|
||||
{
|
||||
return m_wm->windowsTracker()->existsWindowTouching(m_latteView);
|
||||
}
|
||||
|
||||
WindowSystem::SchemeColors *CurrentScreenTracker::activeWindowScheme() const
|
||||
{
|
||||
return m_wm->windowsTracker()->activeWindowScheme(m_latteView);
|
||||
}
|
||||
|
||||
WindowSystem::SchemeColors *CurrentScreenTracker::touchingWindowScheme() const
|
||||
{
|
||||
return m_wm->windowsTracker()->touchingWindowScheme(m_latteView);
|
||||
}
|
||||
|
||||
bool CurrentScreenTracker::enabled() const
|
||||
{
|
||||
return m_wm->windowsTracker()->enabled(m_latteView);
|
||||
}
|
||||
|
||||
void CurrentScreenTracker::setEnabled(bool active)
|
||||
{
|
||||
m_wm->windowsTracker()->setEnabled(m_latteView, active);
|
||||
}
|
||||
|
||||
WindowSystem::Tracker::LastActiveWindow *CurrentScreenTracker::lastActiveWindow()
|
||||
{
|
||||
return m_wm->windowsTracker()->lastActiveWindow(m_latteView);
|
||||
}
|
||||
|
||||
|
||||
//! Window Functions
|
||||
void CurrentScreenTracker::requestMoveLastWindow(int localX, int localY)
|
||||
{
|
||||
m_wm->windowsTracker()->lastActiveWindow(m_latteView)->requestMove(m_latteView, localX, localY);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,110 @@
|
||||
/*
|
||||
* Copyright 2019 Michail Vourlakos <mvourlakos@gmail.com>
|
||||
*
|
||||
* This file is part of Latte-Dock
|
||||
*
|
||||
* Latte-Dock 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.
|
||||
*
|
||||
* Latte-Dock 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 WINDOWSCURRENTSCREENTRACKER_H
|
||||
#define WINDOWSCURRENTSCREENTRACKER_H
|
||||
|
||||
// local
|
||||
#include "../../wm/abstractwindowinterface.h"
|
||||
|
||||
// Qt
|
||||
#include <QObject>
|
||||
|
||||
namespace Latte{
|
||||
class View;
|
||||
|
||||
namespace ViewPart {
|
||||
class WindowsTracker;
|
||||
}
|
||||
|
||||
namespace WindowSystem {
|
||||
class AbstractWindowInterface;
|
||||
class SchemeColors;
|
||||
namespace Tracker {
|
||||
class LastActiveWindow;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
namespace Latte {
|
||||
namespace ViewPart {
|
||||
namespace TrackerPart {
|
||||
|
||||
class CurrentScreenTracker : public QObject {
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged)
|
||||
Q_PROPERTY(bool activeWindowMaximized READ activeWindowMaximized NOTIFY activeWindowMaximizedChanged)
|
||||
Q_PROPERTY(bool activeWindowTouching READ activeWindowTouching NOTIFY activeWindowTouchingChanged)
|
||||
Q_PROPERTY(bool existsWindowActive READ existsWindowActive NOTIFY existsWindowActiveChanged)
|
||||
Q_PROPERTY(bool existsWindowMaximized READ existsWindowMaximized NOTIFY existsWindowMaximizedChanged)
|
||||
Q_PROPERTY(bool existsWindowTouching READ existsWindowTouching NOTIFY existsWindowTouchingChanged)
|
||||
Q_PROPERTY(Latte::WindowSystem::SchemeColors *activeWindowScheme READ activeWindowScheme NOTIFY activeWindowSchemeChanged)
|
||||
Q_PROPERTY(Latte::WindowSystem::SchemeColors *touchingWindowScheme READ touchingWindowScheme NOTIFY touchingWindowSchemeChanged)
|
||||
|
||||
Q_PROPERTY(Latte::WindowSystem::Tracker::LastActiveWindow *lastActiveWindow READ lastActiveWindow NOTIFY lastActiveWindowChanged)
|
||||
|
||||
public:
|
||||
explicit CurrentScreenTracker(WindowsTracker *parent);
|
||||
virtual ~CurrentScreenTracker();
|
||||
|
||||
bool enabled() const;
|
||||
void setEnabled(bool active);
|
||||
|
||||
bool activeWindowMaximized() const;
|
||||
bool activeWindowTouching() const;
|
||||
bool existsWindowActive() const;
|
||||
bool existsWindowMaximized() const;
|
||||
bool existsWindowTouching() const;
|
||||
|
||||
WindowSystem::SchemeColors *activeWindowScheme() const;
|
||||
WindowSystem::SchemeColors *touchingWindowScheme() const;
|
||||
|
||||
WindowSystem::Tracker::LastActiveWindow *lastActiveWindow();
|
||||
|
||||
public slots:
|
||||
Q_INVOKABLE void requestMoveLastWindow(int localX, int localY);
|
||||
|
||||
signals:
|
||||
void enabledChanged();
|
||||
void activeWindowDraggingStarted();
|
||||
void activeWindowMaximizedChanged();
|
||||
void activeWindowTouchingChanged();
|
||||
void existsWindowActiveChanged();
|
||||
void existsWindowMaximizedChanged();
|
||||
void existsWindowTouchingChanged();
|
||||
void activeWindowSchemeChanged();
|
||||
void touchingWindowSchemeChanged();
|
||||
|
||||
void lastActiveWindowChanged();
|
||||
|
||||
private slots:
|
||||
void initSignalsForInformation();
|
||||
|
||||
private:
|
||||
void init();
|
||||
|
||||
Latte::View *m_latteView{nullptr};
|
||||
WindowSystem::AbstractWindowInterface *m_wm{nullptr};
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue