8af2fa73dc
Summary: Currently code base of kwin can be viewed as two pieces. One is very ancient, and the other one is more modern, which uses new C++ features. The main problem with the ancient code is that it was written before C++11 era. So, no override or final keywords, lambdas, etc. Quite recently, KDE compiler settings were changed to show a warning if a virtual method has missing override keyword. As you might have already guessed, this fired back at us because of that ancient code. We had about 500 new compiler warnings. A "solution" was proposed to that problem - disable -Wno-suggest-override and the other similar warning for clang. It's hard to call a solution because those warnings are disabled not only for the old code, but also for new. This is not what we want! The main argument for not actually fixing the problem was that git history will be screwed as well because of human factor. While good git history is a very important thing, we should not go crazy about it and block every change that somehow alters git history. git blame allows to specify starting revision for a reason. The other argument (human factor) can be easily solved by using tools such as clang-tidy. clang-tidy is a clang-based linter for C++. It can be used for various things, e.g. fixing coding style(e.g. add missing braces to if statements, readability-braces-around-statements check), or in our case add missing override keywords. Test Plan: Compiles. Reviewers: #kwin, davidedmundson Reviewed By: #kwin, davidedmundson Subscribers: davidedmundson, apol, romangg, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D22371
184 lines
5.8 KiB
C++
184 lines
5.8 KiB
C++
/********************************************************************
|
|
KWin - the KDE window manager
|
|
This file is part of the KDE project.
|
|
|
|
Copyright (C) 2016 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_DEBUG_CONSOLE_H
|
|
#define KWIN_DEBUG_CONSOLE_H
|
|
|
|
#include <kwin_export.h>
|
|
#include <config-kwin.h>
|
|
#include "input.h"
|
|
#include "input_event_spy.h"
|
|
|
|
#include <QAbstractItemModel>
|
|
#include <QStyledItemDelegate>
|
|
#include <QVector>
|
|
|
|
class QTextEdit;
|
|
|
|
namespace Ui
|
|
{
|
|
class DebugConsole;
|
|
}
|
|
|
|
namespace KWin
|
|
{
|
|
|
|
class Client;
|
|
class ShellClient;
|
|
class Unmanaged;
|
|
class DebugConsoleFilter;
|
|
|
|
class KWIN_EXPORT DebugConsoleModel : public QAbstractItemModel
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit DebugConsoleModel(QObject *parent = nullptr);
|
|
~DebugConsoleModel() override;
|
|
|
|
|
|
int columnCount(const QModelIndex &parent) const override;
|
|
QVariant data(const QModelIndex &index, int role) const override;
|
|
QModelIndex index(int row, int column, const QModelIndex & parent) const override;
|
|
int rowCount(const QModelIndex &parent) const override;
|
|
QModelIndex parent(const QModelIndex &child) const override;
|
|
|
|
private:
|
|
template <class T>
|
|
QModelIndex indexForClient(int row, int column, const QVector<T*> &clients, int id) const;
|
|
template <class T>
|
|
QModelIndex indexForProperty(int row, int column, const QModelIndex &parent, T *(DebugConsoleModel::*filter)(const QModelIndex&) const) const;
|
|
template <class T>
|
|
int propertyCount(const QModelIndex &parent, T *(DebugConsoleModel::*filter)(const QModelIndex&) const) const;
|
|
QVariant propertyData(QObject *object, const QModelIndex &index, int role) const;
|
|
template <class T>
|
|
QVariant clientData(const QModelIndex &index, int role, const QVector<T*> clients) const;
|
|
template <class T>
|
|
void add(int parentRow, QVector<T*> &clients, T *client);
|
|
template <class T>
|
|
void remove(int parentRow, QVector<T*> &clients, T *client);
|
|
ShellClient *shellClient(const QModelIndex &index) const;
|
|
ShellClient *internalClient(const QModelIndex &index) const;
|
|
Client *x11Client(const QModelIndex &index) const;
|
|
Unmanaged *unmanaged(const QModelIndex &index) const;
|
|
int topLevelRowCount() const;
|
|
|
|
QVector<ShellClient*> m_shellClients;
|
|
QVector<ShellClient*> m_internalClients;
|
|
QVector<Client*> m_x11Clients;
|
|
QVector<Unmanaged*> m_unmanageds;
|
|
|
|
};
|
|
|
|
class DebugConsoleDelegate : public QStyledItemDelegate
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit DebugConsoleDelegate(QObject *parent = nullptr);
|
|
~DebugConsoleDelegate() override;
|
|
|
|
QString displayText(const QVariant &value, const QLocale &locale) const override;
|
|
};
|
|
|
|
class KWIN_EXPORT DebugConsole : public QWidget
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
DebugConsole();
|
|
~DebugConsole() override;
|
|
|
|
protected:
|
|
void showEvent(QShowEvent *event) override;
|
|
|
|
private:
|
|
void initGLTab();
|
|
void updateKeyboardTab();
|
|
|
|
QScopedPointer<Ui::DebugConsole> m_ui;
|
|
QScopedPointer<DebugConsoleFilter> m_inputFilter;
|
|
};
|
|
|
|
class SurfaceTreeModel : public QAbstractItemModel
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit SurfaceTreeModel(QObject *parent = nullptr);
|
|
~SurfaceTreeModel() override;
|
|
|
|
int columnCount(const QModelIndex &parent) const override;
|
|
QVariant data(const QModelIndex &index, int role) const override;
|
|
QModelIndex index(int row, int column, const QModelIndex & parent) const override;
|
|
int rowCount(const QModelIndex &parent) const override;
|
|
QModelIndex parent(const QModelIndex &child) const override;
|
|
};
|
|
|
|
class DebugConsoleFilter : public InputEventSpy
|
|
{
|
|
public:
|
|
explicit DebugConsoleFilter(QTextEdit *textEdit);
|
|
~DebugConsoleFilter() override;
|
|
|
|
void pointerEvent(MouseEvent *event) override;
|
|
void wheelEvent(WheelEvent *event) override;
|
|
void keyEvent(KeyEvent *event) override;
|
|
void touchDown(quint32 id, const QPointF &pos, quint32 time) override;
|
|
void touchMotion(quint32 id, const QPointF &pos, quint32 time) override;
|
|
void touchUp(quint32 id, quint32 time) override;
|
|
|
|
void pinchGestureBegin(int fingerCount, quint32 time) override;
|
|
void pinchGestureUpdate(qreal scale, qreal angleDelta, const QSizeF &delta, quint32 time) override;
|
|
void pinchGestureEnd(quint32 time) override;
|
|
void pinchGestureCancelled(quint32 time) override;
|
|
|
|
void swipeGestureBegin(int fingerCount, quint32 time) override;
|
|
void swipeGestureUpdate(const QSizeF &delta, quint32 time) override;
|
|
void swipeGestureEnd(quint32 time) override;
|
|
void swipeGestureCancelled(quint32 time) override;
|
|
|
|
void switchEvent(SwitchEvent *event) override;
|
|
|
|
private:
|
|
QTextEdit *m_textEdit;
|
|
};
|
|
|
|
namespace LibInput
|
|
{
|
|
class Device;
|
|
}
|
|
|
|
class InputDeviceModel : public QAbstractItemModel
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit InputDeviceModel(QObject *parent = nullptr);
|
|
~InputDeviceModel() override;
|
|
|
|
int columnCount(const QModelIndex &parent) const override;
|
|
QVariant data(const QModelIndex &index, int role) const override;
|
|
QModelIndex index(int row, int column, const QModelIndex & parent) const override;
|
|
int rowCount(const QModelIndex &parent) const override;
|
|
QModelIndex parent(const QModelIndex &child) const override;
|
|
|
|
private:
|
|
void setupDeviceConnections(LibInput::Device *device);
|
|
QVector<LibInput::Device*> m_devices;
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|