summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-12-21 15:11:39 +0000
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-12-21 15:11:39 +0000
commit41cdfb7420be3a8473c46f28d74cdada4c0f2258 (patch)
tree62ee2cb287a339d23f78d36c37d63cdbaf727e52 /src
parentfc37ce4a724101def1befa01b353162830f4393f (diff)
allow binding tablets to outputs
Diffstat (limited to 'src')
-rw-r--r--src/config/ConfigManager.cpp11
-rw-r--r--src/debug/HyprCtl.cpp1
-rw-r--r--src/helpers/WLClasses.hpp1
-rw-r--r--src/managers/input/InputManager.cpp20
-rw-r--r--src/managers/input/InputManager.hpp1
-rw-r--r--src/managers/input/Tablets.cpp3
6 files changed, 33 insertions, 4 deletions
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp
index 045a96a8..7d4ada08 100644
--- a/src/config/ConfigManager.cpp
+++ b/src/config/ConfigManager.cpp
@@ -200,8 +200,8 @@ void CConfigManager::setDeviceDefaultVars(const std::string& dev) {
cfgValues["left_handed"].intValue = 0;
cfgValues["scroll_method"].strValue = STRVAL_EMPTY;
cfgValues["scroll_button"].intValue = 0;
- cfgValues["touch_transform"].intValue = 0;
- cfgValues["touch_output"].strValue = STRVAL_EMPTY;
+ cfgValues["transform"].intValue = 0;
+ cfgValues["output"].strValue = STRVAL_EMPTY;
cfgValues["enabled"].intValue = 1; // only for mice / touchpads
}
@@ -298,6 +298,11 @@ void CConfigManager::configSetValueSafe(const std::string& COMMAND, const std::s
auto it = deviceConfigs.find(DEVICE);
if (it->second.find(CONFIGVAR) == it->second.end()) {
+ if (it->second.contains("touch_output") || it->second.contains("touch_transform")) {
+ parseError = "touch_output and touch_transform have been changed to output and transform respectively";
+ return;
+ }
+
parseError = "Error setting value <" + VALUE + "> for field <" + COMMAND + ">: No such field.";
return;
}
@@ -1229,6 +1234,7 @@ void CConfigManager::loadConfigLoadVars() {
g_pInputManager->setKeyboardLayout();
g_pInputManager->setPointerConfigs();
g_pInputManager->setTouchDeviceConfigs();
+ g_pInputManager->setTabletConfigs();
}
// Calculate the internal vars
@@ -1534,6 +1540,7 @@ void CConfigManager::dispatchExecOnce() {
g_pInputManager->setKeyboardLayout();
g_pInputManager->setPointerConfigs();
g_pInputManager->setTouchDeviceConfigs();
+ g_pInputManager->setTabletConfigs();
// set ws names again
for (auto& ws : g_pCompositor->m_vWorkspaces) {
diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp
index d888b751..e0d4d845 100644
--- a/src/debug/HyprCtl.cpp
+++ b/src/debug/HyprCtl.cpp
@@ -551,6 +551,7 @@ std::string dispatchKeyword(std::string in) {
g_pInputManager->setKeyboardLayout(); // update kb layout
g_pInputManager->setPointerConfigs(); // update mouse cfgs
g_pInputManager->setTouchDeviceConfigs(); // update touch device cfgs
+ g_pInputManager->setTabletConfigs(); // update tablets
}
if (COMMAND.contains("general:layout"))
diff --git a/src/helpers/WLClasses.hpp b/src/helpers/WLClasses.hpp
index 417a9d06..881f677c 100644
--- a/src/helpers/WLClasses.hpp
+++ b/src/helpers/WLClasses.hpp
@@ -253,6 +253,7 @@ struct STabletTool {
struct STabletPad {
wlr_tablet_v2_tablet_pad* wlrTabletPadV2 = nullptr;
STablet* pTabletParent = nullptr;
+ wlr_input_device* pWlrDevice = nullptr;
std::string name = "";
diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp
index db883fea..43fc66cf 100644
--- a/src/managers/input/InputManager.cpp
+++ b/src/managers/input/InputManager.cpp
@@ -1147,10 +1147,10 @@ void CInputManager::setTouchDeviceConfigs() {
const auto LIBINPUTDEV = (libinput_device*)wlr_libinput_get_device_handle(m.pWlrDevice);
const int ROTATION =
- std::clamp(HASCONFIG ? g_pConfigManager->getDeviceInt(PTOUCHDEV->name, "touch_transform") : g_pConfigManager->getInt("input:touchdevice:transform"), 0, 7);
+ std::clamp(HASCONFIG ? g_pConfigManager->getDeviceInt(PTOUCHDEV->name, "transform") : g_pConfigManager->getInt("input:touchdevice:transform"), 0, 7);
libinput_device_config_calibration_set_matrix(LIBINPUTDEV, MATRICES[ROTATION]);
- const auto OUTPUT = HASCONFIG ? g_pConfigManager->getDeviceString(PTOUCHDEV->name, "touch_output") : g_pConfigManager->getString("input:touchdevice:output");
+ const auto OUTPUT = HASCONFIG ? g_pConfigManager->getDeviceString(PTOUCHDEV->name, "output") : g_pConfigManager->getString("input:touchdevice:output");
if (!OUTPUT.empty() && OUTPUT != STRVAL_EMPTY)
PTOUCHDEV->boundOutput = OUTPUT;
else
@@ -1159,6 +1159,22 @@ void CInputManager::setTouchDeviceConfigs() {
}
}
+void CInputManager::setTabletConfigs() {
+ for (auto& t : m_lTablets) {
+ const auto HASCONFIG = g_pConfigManager->deviceConfigExists(t.name);
+
+ if (HASCONFIG) {
+ const auto OUTPUT = g_pConfigManager->getDeviceString(t.name, "output");
+ const auto PMONITOR = g_pCompositor->getMonitorFromString(OUTPUT);
+
+ if (PMONITOR) {
+ wlr_cursor_map_input_to_output(g_pCompositor->m_sWLRCursor, t.wlrDevice, PMONITOR->output);
+ wlr_cursor_map_input_to_region(g_pCompositor->m_sWLRCursor, t.wlrDevice, nullptr);
+ }
+ }
+ }
+}
+
void CInputManager::destroyTouchDevice(STouchDevice* pDevice) {
Debug::log(LOG, "Touch device at %x removed", pDevice);
diff --git a/src/managers/input/InputManager.hpp b/src/managers/input/InputManager.hpp
index 460b5ac2..91783f38 100644
--- a/src/managers/input/InputManager.hpp
+++ b/src/managers/input/InputManager.hpp
@@ -60,6 +60,7 @@ class CInputManager {
void setKeyboardLayout();
void setPointerConfigs();
void setTouchDeviceConfigs();
+ void setTabletConfigs();
void updateDragIcon();
void updateCapabilities();
diff --git a/src/managers/input/Tablets.cpp b/src/managers/input/Tablets.cpp
index 00cedb09..10a850c5 100644
--- a/src/managers/input/Tablets.cpp
+++ b/src/managers/input/Tablets.cpp
@@ -137,6 +137,8 @@ void CInputManager::newTabletTool(wlr_input_device* pDevice) {
}
},
PNEWTABLET, "Tablet");
+
+ setTabletConfigs();
}
STabletTool* CInputManager::ensureTabletToolPresent(wlr_tablet_tool* pTool) {
@@ -176,6 +178,7 @@ void CInputManager::newTabletPad(wlr_input_device* pDevice) {
}
PNEWPAD->wlrTabletPadV2 = wlr_tablet_pad_create(g_pCompositor->m_sWLRTabletManager, g_pCompositor->m_sSeat.seat, pDevice);
+ PNEWPAD->pWlrDevice = pDevice;
PNEWPAD->hyprListener_Button.initCallback(
&wlr_tablet_pad_from_input_device(pDevice)->events.button,