823222567e
The reason for this change is that the default ctor of KWindowInfo creates a broken object. Calling any method in it will result in a crush. Thus it is scheduled for removal in kwindowsystem framework causing this code to no longer compile. The solution is to use a pointer and set it to null as long as the window has not been detected yet. To ensure that this doesn't fail badly an assert is added to the getter in DetectWidget.
92 lines
2.4 KiB
C++
92 lines
2.4 KiB
C++
/*
|
|
* Copyright (c) 2004 Lubos Lunak <l.lunak@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, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
|
|
#ifndef __DETECTWIDGET_H__
|
|
#define __DETECTWIDGET_H__
|
|
|
|
#include <QDialog>
|
|
#include <kwindowsystem.h>
|
|
#include <QAbstractNativeEventFilter>
|
|
|
|
#include "../../rules.h"
|
|
//Added by qt3to4:
|
|
#include <QEvent>
|
|
#include <QByteArray>
|
|
|
|
#include "ui_detectwidget.h"
|
|
|
|
namespace KWin
|
|
{
|
|
|
|
class DetectWidget
|
|
: public QWidget, public Ui_DetectWidget
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit DetectWidget(QWidget* parent = nullptr);
|
|
};
|
|
|
|
class DetectDialog
|
|
: public QDialog, public QAbstractNativeEventFilter
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit DetectDialog(QWidget* parent = nullptr, const char* name = nullptr);
|
|
void detect(WId window, int secs = 0);
|
|
QByteArray selectedClass() const;
|
|
bool selectedWholeClass() const;
|
|
QByteArray selectedRole() const;
|
|
bool selectedWholeApp() const;
|
|
NET::WindowType selectedType() const;
|
|
QString selectedTitle() const;
|
|
Rules::StringMatch titleMatch() const;
|
|
QByteArray selectedMachine() const;
|
|
const KWindowInfo& windowInfo() const;
|
|
|
|
virtual bool nativeEventFilter(const QByteArray& eventType, void* message, long int* result) override;
|
|
Q_SIGNALS:
|
|
void detectionDone(bool);
|
|
private Q_SLOTS:
|
|
void selectWindow();
|
|
private:
|
|
void readWindow(WId window);
|
|
void executeDialog();
|
|
WId findWindow();
|
|
QByteArray wmclass_class;
|
|
QByteArray wmclass_name;
|
|
QByteArray role;
|
|
NET::WindowType type;
|
|
QString title;
|
|
QByteArray extrarole;
|
|
QByteArray machine;
|
|
DetectWidget* widget;
|
|
QScopedPointer<QDialog> grabber;
|
|
QScopedPointer<KWindowInfo> info;
|
|
};
|
|
|
|
inline
|
|
const KWindowInfo& DetectDialog::windowInfo() const
|
|
{
|
|
Q_ASSERT(!info.isNull());
|
|
return *(info.data());
|
|
}
|
|
|
|
} // namespace
|
|
|
|
#endif
|