Add option to map tablet to full desktop area.
Some users might want to map the tablet to full desktop area. BUG: 450874
This commit is contained in:
parent
e504e9c305
commit
36e7eaf13a
3 changed files with 39 additions and 9 deletions
|
@ -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();
|
||||
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);
|
||||
}
|
||||
if (!output) {
|
||||
output = workspace()->activeOutput();
|
||||
}
|
||||
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…
Reference in a new issue