Skip to content

Commit f74a227

Browse files
committed
remotedesktop: code cleanup, fix capslock
1 parent c4a0869 commit f74a227

File tree

4 files changed

+75
-106
lines changed

4 files changed

+75
-106
lines changed

src/core/PortalManager.cpp

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ void CPortalManager::onGlobal(uint32_t name, const char* interface, uint32_t ver
6262

6363
Debug::log(LOG, " | Got interface: {} (ver {})", INTERFACE, version);
6464

65-
6665
if (INTERFACE == zwlr_screencopy_manager_v1_interface.name && m_sPipewire.loop) {
6766
m_sPortals.screencopy = std::make_unique<CScreencopyPortal>(makeShared<CCZwlrScreencopyManagerV1>(
6867
(wl_proxy*)wl_registry_bind((wl_registry*)m_sWaylandConnection.registry->resource(), name, &zwlr_screencopy_manager_v1_interface, version)));
@@ -106,16 +105,6 @@ void CPortalManager::onGlobal(uint32_t name, const char* interface, uint32_t ver
106105
m_sWaylandConnection.seat = makeShared<CCWlSeat>((wl_proxy*)wl_registry_bind((wl_registry*)m_sWaylandConnection.registry->resource(), name, &wl_seat_interface, version));
107106
}
108107

109-
/*
110-
else if (INTERFACE == wl_keyboard_interface.name) {
111-
const auto PKEYBOARD = m_vKeyboards
112-
.emplace_back(std::make_unique<SKeyboard>(makeShared<CCWlKeyboard>(
113-
(wl_proxy*)wl_registry_bind((wl_registry*)m_sWaylandConnection.registry->resource(), name, &wl_keyboard_interface, version))))
114-
.get();
115-
PKEYBOARD->id = name;
116-
}
117-
*/
118-
119108
else if (INTERFACE == zwp_linux_dmabuf_v1_interface.name) {
120109
if (version < 4) {
121110
Debug::log(ERR, "cannot use linux_dmabuf with ver < 4");
@@ -455,9 +444,9 @@ void CPortalManager::startEventLoop() {
455444
m_sPortals.globalShortcuts.reset();
456445
m_sPortals.screencopy.reset();
457446
m_sPortals.screenshot.reset();
447+
m_sHelpers.toplevel.reset();
458448
m_sPortals.inputCapture.reset();
459449
m_sPortals.remoteDesktop.reset();
460-
m_sHelpers.toplevel.reset();
461450

462451
m_pConnection.reset();
463452
pw_loop_destroy(m_sPipewire.loop);

src/core/PortalManager.hpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
#include "linux-dmabuf-v1.hpp"
2323
#include "wlr-foreign-toplevel-management-unstable-v1.hpp"
2424
#include "wlr-screencopy-unstable-v1.hpp"
25-
#include "hyprland-input-capture-v1.hpp"
2625
#include "wlr-virtual-pointer-unstable-v1.hpp"
2726
#include "virtual-keyboard-unstable-v1.hpp"
2827

@@ -144,8 +143,8 @@ class CPortalManager {
144143
std::unique_ptr<std::thread> thread;
145144
} m_sTimersThread;
146145

147-
std::unique_ptr<sdbus::IConnection> m_pConnection;
148-
std::vector<std::unique_ptr<SOutput>> m_vOutputs;
146+
std::unique_ptr<sdbus::IConnection> m_pConnection;
147+
std::vector<std::unique_ptr<SOutput>> m_vOutputs;
149148

150149
std::mutex m_mEventLock;
151150
};

src/shared/Eis.cpp

Lines changed: 72 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,6 @@ int EmulatedInputServer::onEvent(eis_event* e) {
114114
} else
115115
Debug::log(WARN, "[EIS] Unknown device to close");
116116
break;
117-
case EIS_EVENT_FRAME:
118-
if (virtualPointer != nullptr) {
119-
virtualPointer->sendFrame();
120-
}
121-
break;
122117
case EIS_EVENT_DEVICE_START_EMULATING:
123118
device = eis_event_get_device(e);
124119
Debug::log(LOG, "[EIS] Device {} is ready to send events", eis_device_get_name(device));
@@ -130,102 +125,96 @@ int EmulatedInputServer::onEvent(eis_event* e) {
130125
depressed = 0;
131126
virtualKeyboard->sendModifiers(depressed, 0, locked, 3);
132127
break;
133-
case EIS_EVENT_POINTER_MOTION:
134-
if (virtualPointer != nullptr) {
135-
virtualPointer->sendMotion(0, eis_event_pointer_get_dx(e), eis_event_pointer_get_dy(e));
128+
case EIS_EVENT_KEYBOARD_KEY:
129+
if (!virtualKeyboard) break;
130+
{
131+
uint32_t keycode = eis_event_keyboard_get_key(e);
132+
bool pressed = eis_event_keyboard_get_key_is_press(e);
133+
uint32_t modmask = 0u;
134+
switch (keycode) {
135+
case KEY_LEFTSHIFT:
136+
case KEY_RIGHTSHIFT:
137+
modmask = 1u;
138+
break;
139+
case KEY_CAPSLOCK:
140+
if (pressed) locked ^= 1u << 1u;
141+
break;
142+
case KEY_LEFTCTRL:
143+
case KEY_RIGHTCTRL:
144+
modmask = 1u << 2u;
145+
break;
146+
case KEY_LEFTALT:
147+
case KEY_RIGHTALT:
148+
modmask = 1u << 3u;
149+
break;
150+
case KEY_NUMLOCK:
151+
if (pressed) locked ^= 1u << 4u;
152+
break;
153+
case KEY_LEFTMETA:
154+
case KEY_RIGHTMETA:
155+
modmask = 1u << 6u;
156+
break;
157+
case KEY_SCROLLLOCK:
158+
if (pressed) locked ^= 1u << 7u;
159+
break;
160+
default:
161+
break;
162+
}
163+
164+
depressed = pressed ? depressed | modmask : depressed & (~modmask);
165+
virtualKeyboard->sendKey(1, keycode, pressed);
166+
virtualKeyboard->sendModifiers(depressed, 0, locked, 3);
136167
}
137168
break;
169+
case EIS_EVENT_FRAME:
170+
if (!virtualPointer) break;
171+
virtualPointer->sendFrame();
172+
break;
173+
case EIS_EVENT_POINTER_MOTION:
174+
if (!virtualPointer) break;
175+
virtualPointer->sendMotion(0, eis_event_pointer_get_dx(e), eis_event_pointer_get_dy(e));
176+
break;
138177
case EIS_EVENT_POINTER_MOTION_ABSOLUTE:
139-
if (virtualPointer != nullptr) {
140-
virtualPointer->sendMotionAbsolute(0, eis_event_pointer_get_absolute_x(e), eis_event_pointer_get_absolute_y(e), screenWidth, screenHeight);
178+
if (!virtualPointer) break;
179+
{
180+
int x = eis_event_pointer_get_absolute_x(e);
181+
int y = eis_event_pointer_get_absolute_y(e);
182+
device = eis_event_get_device(e);
183+
eis_region* region = eis_device_get_region_at(device, x, y);
184+
virtualPointer->sendMotionAbsolute(0, x, y, eis_region_get_width(region), eis_region_get_height(region));
141185
}
142186
break;
143187
case EIS_EVENT_BUTTON_BUTTON:
144-
if (virtualPointer != nullptr) {
145-
virtualPointer->sendButton(0, eis_event_button_get_button(e), eis_event_button_get_is_press(e));
146-
}
188+
if (!virtualPointer) break;
189+
virtualPointer->sendButton(0, eis_event_button_get_button(e), eis_event_button_get_is_press(e));
147190
break;
148191
case EIS_EVENT_SCROLL_DELTA:
149-
if (virtualPointer != nullptr) {
150-
virtualPointer->sendAxis(0, 0, eis_event_scroll_get_dy(e));
151-
virtualPointer->sendAxis(0, 1, eis_event_scroll_get_dx(e));
152-
}
192+
if (!virtualPointer) break;
193+
virtualPointer->sendAxis(0, 0, wl_fixed_from_double(eis_event_scroll_get_dy(e)));
194+
virtualPointer->sendAxis(0, 1, wl_fixed_from_double(eis_event_scroll_get_dx(e)));
153195
break;
154196
case EIS_EVENT_SCROLL_STOP:
155-
if (virtualPointer != nullptr) {
156-
if (eis_event_scroll_get_stop_x(e))
157-
virtualPointer->sendAxisStop(0, 1);
158-
if (eis_event_scroll_get_stop_y(e))
159-
virtualPointer->sendAxisStop(0, 0);
160-
}
197+
if (!virtualPointer) break;
198+
if (eis_event_scroll_get_stop_x(e))
199+
virtualPointer->sendAxisStop(0, 1);
200+
if (eis_event_scroll_get_stop_y(e))
201+
virtualPointer->sendAxisStop(0, 0);
161202
break;
162203
case EIS_EVENT_SCROLL_DISCRETE:
163-
if (virtualPointer != nullptr) {
204+
if (!virtualPointer) break;
205+
{
164206
int32_t dx = eis_event_scroll_get_discrete_dx(e);
165207
int32_t dy = eis_event_scroll_get_discrete_dy(e);
166-
virtualPointer->sendAxisDiscrete(1, 0, dy*30, dy > 0 ? 1 : -1);
167-
virtualPointer->sendAxisDiscrete(0, 1, dx*30, dx > 0 ? 1 : -1);
208+
if (dx != 0)
209+
virtualPointer->sendAxisDiscrete(0, 1, wl_fixed_from_int(dx), dx > 0 ? 1 : -1);
210+
if (dy != 0)
211+
virtualPointer->sendAxisDiscrete(1, 0, wl_fixed_from_int(dy), dy > 0 ? 1 : -1);
168212
}
169213
break;
170-
case EIS_EVENT_KEYBOARD_KEY:
171-
{
172-
if (virtualKeyboard != nullptr) {
173-
uint32_t keycode = eis_event_keyboard_get_key(e);
174-
bool pressed = eis_event_keyboard_get_key_is_press(e);
175-
switch (keycode) {
176-
case KEY_LEFTSHIFT:
177-
case KEY_RIGHTSHIFT:
178-
if (pressed)
179-
depressed |= 1;
180-
else
181-
depressed &= ~((uint32_t)1);
182-
break;
183-
case KEY_CAPSLOCK:
184-
locked ^= ((uint32_t)1 << 4);
185-
break;
186-
case KEY_LEFTCTRL:
187-
case KEY_RIGHTCTRL:
188-
if (pressed)
189-
depressed |= (uint32_t)1 << 2;
190-
else
191-
depressed &= ~((uint32_t)1 << 2);
192-
break;
193-
case KEY_LEFTALT:
194-
case KEY_RIGHTALT:
195-
if (pressed)
196-
depressed |= (uint32_t)1 << 3;
197-
else
198-
depressed &= ~((uint32_t)1 << 3);
199-
break;
200-
case KEY_NUMLOCK:
201-
if (pressed) {
202-
locked ^= ((uint32_t)1 << 4);
203-
}
204-
break;
205-
case KEY_LEFTMETA:
206-
case KEY_RIGHTMETA:
207-
if (pressed)
208-
depressed |= (uint32_t)1 << 6;
209-
else
210-
depressed &= ~((uint32_t)1 << 6);
211-
break;
212-
case KEY_SCROLLLOCK:
213-
if (pressed) {
214-
locked ^= ((uint32_t)1 << 7);
215-
}
216-
break;
217-
default:
218-
break;
219-
}
220-
221-
virtualKeyboard->sendModifiers(depressed, 0, locked, 3);
222-
virtualKeyboard->sendKey(1, keycode, pressed);
223-
}
224-
}
214+
default:
225215
break;
226-
227-
default: return 0;
228216
}
217+
229218
return 0;
230219
}
231220

@@ -246,15 +235,9 @@ void EmulatedInputServer::ensurePointer() {
246235

247236
eis_region_set_offset(r, o->x, o->y);
248237
eis_region_set_size(r, o->width, o->height);
249-
Debug::log(LOG, "[EIS] REGION TME {} {}", o->width, o->height);
250238
eis_region_set_physical_scale(r, o->scale);
251239
eis_region_add(r);
252240
eis_region_unref(r);
253-
254-
//#FIXME: #TODO: this doesn't work if there are multiple outputs in getAllOutPuts()
255-
screenWidth = o->width;
256-
screenHeight = o->height;
257-
258241
}
259242

260243
eis_device_add(pointer);

src/shared/Eis.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,6 @@ class EmulatedInputServer {
5656

5757
SP<CCZwlrVirtualPointerV1> virtualPointer = nullptr;
5858
SP<CCZwpVirtualKeyboardV1> virtualKeyboard = nullptr;
59-
uint32_t screenWidth = 0;
60-
uint32_t screenHeight = 0;
6159

6260
uint32_t depressed = 0;
6361
uint32_t latched = 0;

0 commit comments

Comments
 (0)