mirror of https://github.com/cutefishos/core
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			298 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			C++
		
	
			
		
		
	
	
			298 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			C++
		
	
/*
 | 
						|
    SPDX-FileCopyrightText: 2018 Roman Gilg <subdiff@gmail.com>
 | 
						|
 | 
						|
    SPDX-License-Identifier: GPL-2.0-or-later
 | 
						|
*/
 | 
						|
 | 
						|
#ifndef X11LIBINPUTDUMMYDEVICE_H
 | 
						|
#define X11LIBINPUTDUMMYDEVICE_H
 | 
						|
 | 
						|
#include <QObject>
 | 
						|
#include <QString>
 | 
						|
#include <QX11Info>
 | 
						|
 | 
						|
#include <X11/Xdefs.h>
 | 
						|
 | 
						|
struct LibinputSettings;
 | 
						|
 | 
						|
class X11LibinputDummyDevice : public QObject
 | 
						|
{
 | 
						|
    Q_OBJECT
 | 
						|
 | 
						|
    //
 | 
						|
    // general
 | 
						|
    Q_PROPERTY(QString name READ name CONSTANT)
 | 
						|
    Q_PROPERTY(bool supportsDisableEvents READ supportsDisableEvents CONSTANT)
 | 
						|
    Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged)
 | 
						|
 | 
						|
    //
 | 
						|
    // advanced
 | 
						|
    Q_PROPERTY(Qt::MouseButtons supportedButtons READ supportedButtons CONSTANT)
 | 
						|
 | 
						|
    Q_PROPERTY(bool supportsLeftHanded READ supportsLeftHanded CONSTANT)
 | 
						|
    Q_PROPERTY(bool leftHandedEnabledByDefault READ leftHandedEnabledByDefault CONSTANT)
 | 
						|
    Q_PROPERTY(bool leftHanded READ isLeftHanded WRITE setLeftHanded NOTIFY leftHandedChanged)
 | 
						|
 | 
						|
    Q_PROPERTY(bool supportsMiddleEmulation READ supportsMiddleEmulation CONSTANT)
 | 
						|
    Q_PROPERTY(bool middleEmulationEnabledByDefault READ middleEmulationEnabledByDefault CONSTANT)
 | 
						|
    Q_PROPERTY(bool middleEmulation READ isMiddleEmulation WRITE setMiddleEmulation NOTIFY middleEmulationChanged)
 | 
						|
 | 
						|
    //
 | 
						|
    // acceleration speed and profile
 | 
						|
    Q_PROPERTY(bool supportsPointerAcceleration READ supportsPointerAcceleration CONSTANT)
 | 
						|
    Q_PROPERTY(qreal pointerAcceleration READ pointerAcceleration WRITE setPointerAcceleration NOTIFY pointerAccelerationChanged)
 | 
						|
 | 
						|
    Q_PROPERTY(bool supportsPointerAccelerationProfileFlat READ supportsPointerAccelerationProfileFlat CONSTANT)
 | 
						|
    Q_PROPERTY(bool defaultPointerAccelerationProfileFlat READ defaultPointerAccelerationProfileFlat CONSTANT)
 | 
						|
    Q_PROPERTY(bool pointerAccelerationProfileFlat READ pointerAccelerationProfileFlat WRITE setPointerAccelerationProfileFlat NOTIFY
 | 
						|
                   pointerAccelerationProfileChanged)
 | 
						|
 | 
						|
    Q_PROPERTY(bool supportsPointerAccelerationProfileAdaptive READ supportsPointerAccelerationProfileAdaptive CONSTANT)
 | 
						|
    Q_PROPERTY(bool defaultPointerAccelerationProfileAdaptive READ defaultPointerAccelerationProfileAdaptive CONSTANT)
 | 
						|
    Q_PROPERTY(bool pointerAccelerationProfileAdaptive READ pointerAccelerationProfileAdaptive WRITE setPointerAccelerationProfileAdaptive NOTIFY
 | 
						|
                   pointerAccelerationProfileChanged)
 | 
						|
 | 
						|
    //
 | 
						|
    // scrolling
 | 
						|
    Q_PROPERTY(bool supportsNaturalScroll READ supportsNaturalScroll CONSTANT)
 | 
						|
    Q_PROPERTY(bool naturalScrollEnabledByDefault READ naturalScrollEnabledByDefault CONSTANT)
 | 
						|
    Q_PROPERTY(bool naturalScroll READ isNaturalScroll WRITE setNaturalScroll NOTIFY naturalScrollChanged)
 | 
						|
 | 
						|
public:
 | 
						|
    X11LibinputDummyDevice(QObject *parent, Display *dpy);
 | 
						|
    ~X11LibinputDummyDevice() override;
 | 
						|
 | 
						|
    bool getConfig();
 | 
						|
    bool getDefaultConfig();
 | 
						|
    bool applyConfig();
 | 
						|
    bool isChangedConfig() const;
 | 
						|
 | 
						|
    //
 | 
						|
    // general
 | 
						|
    QString name() const
 | 
						|
    {
 | 
						|
        return m_name.val;
 | 
						|
    }
 | 
						|
    QString sysName() const
 | 
						|
    {
 | 
						|
        return m_sysName.val;
 | 
						|
    }
 | 
						|
    bool supportsDisableEvents() const
 | 
						|
    {
 | 
						|
        return m_supportsDisableEvents.val;
 | 
						|
    }
 | 
						|
    void setEnabled(bool enabled)
 | 
						|
    {
 | 
						|
        m_enabled.set(enabled);
 | 
						|
    }
 | 
						|
    bool isEnabled() const
 | 
						|
    {
 | 
						|
        return m_enabled.val;
 | 
						|
    }
 | 
						|
    Qt::MouseButtons supportedButtons() const
 | 
						|
    {
 | 
						|
        return m_supportedButtons.val;
 | 
						|
    }
 | 
						|
 | 
						|
    //
 | 
						|
    // advanced
 | 
						|
    bool supportsLeftHanded() const
 | 
						|
    {
 | 
						|
        return m_supportsLeftHanded.val;
 | 
						|
    }
 | 
						|
    bool leftHandedEnabledByDefault() const
 | 
						|
    {
 | 
						|
        return m_leftHandedEnabledByDefault.val;
 | 
						|
    }
 | 
						|
    bool isLeftHanded() const
 | 
						|
    {
 | 
						|
        return m_leftHanded.val;
 | 
						|
    }
 | 
						|
    void setLeftHanded(bool set)
 | 
						|
    {
 | 
						|
        m_leftHanded.set(set);
 | 
						|
    }
 | 
						|
 | 
						|
    bool supportsMiddleEmulation() const
 | 
						|
    {
 | 
						|
        return m_supportsMiddleEmulation.val;
 | 
						|
    }
 | 
						|
    bool middleEmulationEnabledByDefault() const
 | 
						|
    {
 | 
						|
        return m_middleEmulationEnabledByDefault.val;
 | 
						|
    }
 | 
						|
    bool isMiddleEmulation() const
 | 
						|
    {
 | 
						|
        return m_middleEmulation.val;
 | 
						|
    }
 | 
						|
    void setMiddleEmulation(bool set)
 | 
						|
    {
 | 
						|
        m_middleEmulation.set(set);
 | 
						|
    }
 | 
						|
 | 
						|
    //
 | 
						|
    // acceleration speed and profile
 | 
						|
    bool supportsPointerAcceleration() const
 | 
						|
    {
 | 
						|
        return m_supportsPointerAcceleration.val;
 | 
						|
    }
 | 
						|
    qreal pointerAcceleration() const
 | 
						|
    {
 | 
						|
        return m_pointerAcceleration.val;
 | 
						|
    }
 | 
						|
    void setPointerAcceleration(qreal acceleration)
 | 
						|
    {
 | 
						|
        m_pointerAcceleration.set(acceleration);
 | 
						|
    }
 | 
						|
 | 
						|
    bool supportsPointerAccelerationProfileFlat() const
 | 
						|
    {
 | 
						|
        return m_supportsPointerAccelerationProfileFlat.val;
 | 
						|
    }
 | 
						|
    bool defaultPointerAccelerationProfileFlat() const
 | 
						|
    {
 | 
						|
        return m_defaultPointerAccelerationProfileFlat.val;
 | 
						|
    }
 | 
						|
    bool pointerAccelerationProfileFlat() const
 | 
						|
    {
 | 
						|
        return m_pointerAccelerationProfileFlat.val;
 | 
						|
    }
 | 
						|
    void setPointerAccelerationProfileFlat(bool set)
 | 
						|
    {
 | 
						|
        m_pointerAccelerationProfileFlat.set(set);
 | 
						|
    }
 | 
						|
 | 
						|
    bool supportsPointerAccelerationProfileAdaptive() const
 | 
						|
    {
 | 
						|
        return m_supportsPointerAccelerationProfileAdaptive.val;
 | 
						|
    }
 | 
						|
    bool defaultPointerAccelerationProfileAdaptive() const
 | 
						|
    {
 | 
						|
        return m_defaultPointerAccelerationProfileAdaptive.val;
 | 
						|
    }
 | 
						|
    bool pointerAccelerationProfileAdaptive() const
 | 
						|
    {
 | 
						|
        return m_pointerAccelerationProfileAdaptive.val;
 | 
						|
    }
 | 
						|
    void setPointerAccelerationProfileAdaptive(bool set)
 | 
						|
    {
 | 
						|
        m_pointerAccelerationProfileAdaptive.set(set);
 | 
						|
    }
 | 
						|
 | 
						|
    //
 | 
						|
    // scrolling
 | 
						|
    bool supportsNaturalScroll() const
 | 
						|
    {
 | 
						|
        return m_supportsNaturalScroll.val;
 | 
						|
    }
 | 
						|
    bool naturalScrollEnabledByDefault() const
 | 
						|
    {
 | 
						|
        return m_naturalScrollEnabledByDefault.val;
 | 
						|
    }
 | 
						|
    bool isNaturalScroll() const
 | 
						|
    {
 | 
						|
        return m_naturalScroll.val;
 | 
						|
    }
 | 
						|
    void setNaturalScroll(bool set)
 | 
						|
    {
 | 
						|
        m_naturalScroll.set(set);
 | 
						|
    }
 | 
						|
 | 
						|
Q_SIGNALS:
 | 
						|
    void leftHandedChanged();
 | 
						|
    void pointerAccelerationChanged();
 | 
						|
    void pointerAccelerationProfileChanged();
 | 
						|
    void enabledChanged();
 | 
						|
    void middleEmulationChanged();
 | 
						|
    void naturalScrollChanged();
 | 
						|
 | 
						|
private:
 | 
						|
    template<typename T>
 | 
						|
    struct Prop {
 | 
						|
        explicit Prop(const QString &_name, const QString &_cfgName = "")
 | 
						|
            : name(_name)
 | 
						|
            , cfgName(_cfgName)
 | 
						|
        {
 | 
						|
        }
 | 
						|
 | 
						|
        void set(T newVal)
 | 
						|
        {
 | 
						|
            if (avail && val != newVal) {
 | 
						|
                val = newVal;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        void set(const Prop<T> &p)
 | 
						|
        {
 | 
						|
            if (avail && val != p.val) {
 | 
						|
                val = p.val;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        bool changed() const
 | 
						|
        {
 | 
						|
            return avail && (old != val);
 | 
						|
        }
 | 
						|
 | 
						|
        void reset(T newVal)
 | 
						|
        {
 | 
						|
            val = newVal;
 | 
						|
            old = newVal;
 | 
						|
        }
 | 
						|
 | 
						|
        QString name;
 | 
						|
        QString cfgName;
 | 
						|
 | 
						|
        bool avail = true;
 | 
						|
        T old;
 | 
						|
        T val;
 | 
						|
 | 
						|
        Atom atom;
 | 
						|
    };
 | 
						|
 | 
						|
    template<typename T>
 | 
						|
    bool valueWriter(Prop<T> &prop);
 | 
						|
 | 
						|
    //
 | 
						|
    // general
 | 
						|
    Prop<QString> m_name = Prop<QString>("name");
 | 
						|
    Prop<QString> m_sysName = Prop<QString>("sysName");
 | 
						|
    Prop<bool> m_supportsDisableEvents = Prop<bool>("supportsDisableEvents");
 | 
						|
    Prop<bool> m_enabled = Prop<bool>("enabled");
 | 
						|
 | 
						|
    //
 | 
						|
    // advanced
 | 
						|
    Prop<Qt::MouseButtons> m_supportedButtons = Prop<Qt::MouseButtons>("supportedButtons");
 | 
						|
 | 
						|
    Prop<bool> m_supportsLeftHanded = Prop<bool>("supportsLeftHanded");
 | 
						|
    Prop<bool> m_leftHandedEnabledByDefault = Prop<bool>("leftHandedEnabledByDefault");
 | 
						|
    Prop<bool> m_leftHanded = Prop<bool>("leftHanded", "XLbInptLeftHanded");
 | 
						|
 | 
						|
    Prop<bool> m_supportsMiddleEmulation = Prop<bool>("supportsMiddleEmulation");
 | 
						|
    Prop<bool> m_middleEmulationEnabledByDefault = Prop<bool>("middleEmulationEnabledByDefault");
 | 
						|
    Prop<bool> m_middleEmulation = Prop<bool>("middleEmulation", "XLbInptMiddleEmulation");
 | 
						|
 | 
						|
    //
 | 
						|
    // acceleration speed and profile
 | 
						|
    Prop<bool> m_supportsPointerAcceleration = Prop<bool>("supportsPointerAcceleration");
 | 
						|
    Prop<qreal> m_defaultPointerAcceleration = Prop<qreal>("defaultPointerAcceleration");
 | 
						|
    Prop<qreal> m_pointerAcceleration = Prop<qreal>("pointerAcceleration", "XLbInptPointerAcceleration");
 | 
						|
 | 
						|
    Prop<bool> m_supportsPointerAccelerationProfileFlat = Prop<bool>("supportsPointerAccelerationProfileFlat");
 | 
						|
    Prop<bool> m_defaultPointerAccelerationProfileFlat = Prop<bool>("defaultPointerAccelerationProfileFlat");
 | 
						|
    Prop<bool> m_pointerAccelerationProfileFlat = Prop<bool>("pointerAccelerationProfileFlat", "XLbInptAccelProfileFlat");
 | 
						|
 | 
						|
    Prop<bool> m_supportsPointerAccelerationProfileAdaptive = Prop<bool>("supportsPointerAccelerationProfileAdaptive");
 | 
						|
    Prop<bool> m_defaultPointerAccelerationProfileAdaptive = Prop<bool>("defaultPointerAccelerationProfileAdaptive");
 | 
						|
    Prop<bool> m_pointerAccelerationProfileAdaptive = Prop<bool>("pointerAccelerationProfileAdaptive");
 | 
						|
 | 
						|
    //
 | 
						|
    // scrolling
 | 
						|
    Prop<bool> m_supportsNaturalScroll = Prop<bool>("supportsNaturalScroll");
 | 
						|
    Prop<bool> m_naturalScrollEnabledByDefault = Prop<bool>("naturalScrollEnabledByDefault");
 | 
						|
    Prop<bool> m_naturalScroll = Prop<bool>("naturalScroll", "XLbInptNaturalScroll");
 | 
						|
 | 
						|
    LibinputSettings *m_settings;
 | 
						|
    Display *m_dpy = nullptr;
 | 
						|
};
 | 
						|
 | 
						|
#endif // X11LIBINPUTDUMMYDEVICE_H
 |