@@ -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);
0 commit comments