kwin/kcmkwin/kwinrules/detectwidget.h
Martin Gräßlin 823222567e [kwin/kcmrules] Use a pointer for the KWindowInfo member variable
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.
2014-01-30 10:35:35 +01:00

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