Add option to map tablet to full desktop area.

Some users might want to map the tablet to full desktop area.

BUG: 450874
master
Aki Sakurai 11 months ago committed by Joshua Goins
parent e504e9c305
commit 36e7eaf13a

@ -511,16 +511,19 @@ void Connection::processEvents()
if (workspace()) {
#ifndef KWIN_BUILD_TESTING
Output *output = tte->device()->output();
if (!output && workspace()->activeWindow()) {
output = workspace()->activeWindow()->output();
}
if (!output) {
output = workspace()->activeOutput();
QPointF globalPos;
if (tte->device()->isMapToWorkspace()) {
globalPos = workspace()->geometry().topLeft() + tte->transformedPosition(workspace()->geometry().size());
} else {
Output *output = tte->device()->output();
if (!output && workspace()->activeWindow()) {
output = workspace()->activeWindow()->output();
}
if (!output) {
output = workspace()->activeOutput();
}
globalPos = devicePointToGlobalPosition(tte->transformedPosition(output->modeSize()), output);
}
const QPointF globalPos =
devicePointToGlobalPosition(tte->transformedPosition(output->modeSize()),
output);
#else
const QPointF globalPos;
#endif

@ -99,6 +99,7 @@ enum class ConfigKey {
Calibration,
OutputName,
OutputArea,
MapToWorkspace
};
struct ConfigDataBase
@ -206,6 +207,7 @@ static const QMap<ConfigKey, std::shared_ptr<ConfigDataBase>> s_configData{
{ConfigKey::Calibration, std::make_shared<ConfigData<CalibrationMatrix>>()},
{ConfigKey::OutputName, std::make_shared<ConfigData<QString>>(QByteArrayLiteral("OutputName"), &Device::setOutputName, &Device::defaultOutputName)},
{ConfigKey::OutputArea, std::make_shared<ConfigData<QRectF>>(QByteArrayLiteral("OutputArea"), &Device::setOutputArea, &Device::defaultOutputArea)},
{ConfigKey::MapToWorkspace, std::make_shared<ConfigData<bool>>(QByteArrayLiteral("MapToWorkspace"), &Device::setMapToWorkspace, &Device::defaultMapToWorkspace)},
};
namespace
@ -711,6 +713,15 @@ void Device::setOutputArea(const QRectF &outputArea)
Q_EMIT outputAreaChanged();
}
}
void Device::setMapToWorkspace(bool mapToWorkspace)
{
if (m_mapToWorkspace != mapToWorkspace) {
m_mapToWorkspace = mapToWorkspace;
writeEntry(ConfigKey::MapToWorkspace, m_mapToWorkspace);
Q_EMIT mapToWorkspaceChanged();
}
}
}
}

@ -141,6 +141,8 @@ class KWIN_EXPORT Device : public InputDevice
Q_PROPERTY(bool supportsOutputArea READ supportsOutputArea CONSTANT)
Q_PROPERTY(QRectF defaultOutputArea READ defaultOutputArea CONSTANT)
Q_PROPERTY(QRectF outputArea READ outputArea WRITE setOutputArea NOTIFY outputAreaChanged)
Q_PROPERTY(bool defaultMapToWorkspace READ defaultMapToWorkspace CONSTANT)
Q_PROPERTY(bool mapToWorkspace READ isMapToWorkspace WRITE setMapToWorkspace NOTIFY mapToWorkspaceChanged)
public:
explicit Device(libinput_device *device, QObject *parent = nullptr);
@ -628,6 +630,18 @@ public:
QRectF outputArea() const;
void setOutputArea(const QRectF &outputArea);
bool defaultMapToWorkspace() const
{
return defaultValue("MapToWorkspace", false);
}
bool isMapToWorkspace() const
{
return m_mapToWorkspace;
}
void setMapToWorkspace(bool mapToWorkspace);
/**
* Gets the Device for @p native. @c null if there is no Device for @p native.
*/
@ -653,6 +667,7 @@ Q_SIGNALS:
void scrollFactorChanged();
void clickMethodChanged();
void outputAreaChanged();
void mapToWorkspaceChanged();
private:
template<typename T>
@ -740,6 +755,7 @@ private:
LEDs m_leds;
QRectF m_outputArea = QRectF(0, 0, 1, 1);
bool m_mapToWorkspace = false;
};
}

Loading…
Cancel
Save