4874066423
There are a few benefits to using smart pointers from the standard library: - std::unique_ptr has move semantics. With move semantics, transfer of ownership can be properly expressed - std::shared_ptr is more efficient than QSharedPointer - more developers are used to them, making contributions for newcomers easier We're also already using a mix of both; because Qt shared pointers provide no benefits, porting to standard smart pointers improves consistency in the code base. Because of that, this commit ports most of the uses of QSharedPointer to std::shared_ptr, and some uses of QScopedPointer to std::unique_ptr
104 lines
1.9 KiB
C++
104 lines
1.9 KiB
C++
/*
|
|
KWin - the KDE window manager
|
|
This file is part of the KDE project.
|
|
|
|
SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
|
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
#ifndef KWIN_UDEV_H
|
|
#define KWIN_UDEV_H
|
|
#include <kwin_export.h>
|
|
#include <memory>
|
|
|
|
#include <QVector>
|
|
#include <vector>
|
|
|
|
#include <sys/types.h>
|
|
|
|
struct udev;
|
|
struct udev_device;
|
|
struct udev_monitor;
|
|
|
|
namespace KWin
|
|
{
|
|
class Udev;
|
|
|
|
class KWIN_EXPORT UdevDevice
|
|
{
|
|
public:
|
|
UdevDevice(udev_device *device);
|
|
~UdevDevice();
|
|
|
|
QString devNode() const;
|
|
dev_t devNum() const;
|
|
const char *property(const char *key);
|
|
bool hasProperty(const char *key, const char *value);
|
|
QString action() const;
|
|
|
|
QMap<QByteArray, QByteArray> properties() const;
|
|
bool isBootVga() const;
|
|
|
|
operator udev_device *() const
|
|
{
|
|
return m_device;
|
|
}
|
|
operator udev_device *()
|
|
{
|
|
return m_device;
|
|
}
|
|
typedef std::unique_ptr<UdevDevice> Ptr;
|
|
|
|
private:
|
|
udev_device *const m_device;
|
|
};
|
|
|
|
class KWIN_EXPORT UdevMonitor
|
|
{
|
|
public:
|
|
explicit UdevMonitor(Udev *udev);
|
|
~UdevMonitor();
|
|
|
|
int fd() const;
|
|
bool isValid() const
|
|
{
|
|
return m_monitor != nullptr;
|
|
}
|
|
void filterSubsystemDevType(const char *subSystem, const char *devType = nullptr);
|
|
void enable();
|
|
UdevDevice::Ptr getDevice();
|
|
|
|
private:
|
|
udev_monitor *m_monitor;
|
|
};
|
|
|
|
class KWIN_EXPORT Udev
|
|
{
|
|
public:
|
|
Udev();
|
|
~Udev();
|
|
|
|
bool isValid() const
|
|
{
|
|
return m_udev != nullptr;
|
|
}
|
|
std::vector<UdevDevice::Ptr> listGPUs();
|
|
std::vector<UdevDevice::Ptr> listFramebuffers();
|
|
UdevDevice::Ptr deviceFromSyspath(const char *syspath);
|
|
std::unique_ptr<UdevMonitor> monitor();
|
|
operator udev *() const
|
|
{
|
|
return m_udev;
|
|
}
|
|
operator udev *()
|
|
{
|
|
return m_udev;
|
|
}
|
|
|
|
private:
|
|
struct udev *m_udev;
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|