Skip to content

Commit 6781fd3

Browse files
dd4evasily-v-ryabov
authored andcommitted
- added xinput event methods
- added xinput property event data
1 parent 3d28d6b commit 6781fd3

File tree

2 files changed

+126
-1
lines changed

2 files changed

+126
-1
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ docs/_build/
5959
target/
6060

6161
# IntelliJ
62-
6362
.idea/
6463

64+
# Visual Studio Code
65+
.vscode/
66+
6567
/.mypy_cache/

Xlib/ext/xinput.py

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@
158158
DEVICE = rq.Card16
159159
DEVICEUSE = rq.Card8
160160

161+
PROPERTY_TYPE_FLOAT = 'FLOAT'
162+
161163
class FP1616(rq.Int32):
162164

163165
def check_value(self, value):
@@ -426,6 +428,114 @@ def query_device(self, deviceid):
426428
deviceid=deviceid,
427429
)
428430

431+
class XIListProperties(rq.ReplyRequest):
432+
_request = rq.Struct(
433+
rq.Card8('opcode'),
434+
rq.Opcode(56),
435+
rq.RequestLength(),
436+
DEVICEID('deviceid'),
437+
rq.Pad(2),
438+
)
439+
440+
_reply = rq.Struct(
441+
rq.ReplyCode(),
442+
rq.Pad(1),
443+
rq.Card16('sequence_number'),
444+
rq.ReplyLength(),
445+
rq.LengthOf('atoms', 2),
446+
rq.Pad(22),
447+
rq.List('atoms', rq.Card32Obj),
448+
)
449+
450+
def list_device_properties(self, deviceid):
451+
return XIListProperties(
452+
display=self.display,
453+
opcode=self.display.get_extension_major(extname),
454+
deviceid=deviceid,
455+
)
456+
457+
class XIGetProperty(rq.ReplyRequest):
458+
_request = rq.Struct(
459+
rq.Card8('opcode'),
460+
rq.Opcode(59),
461+
rq.RequestLength(),
462+
DEVICEID('deviceid'),
463+
rq.Card8('delete'),
464+
rq.Pad(1),
465+
rq.Card32('property'),
466+
rq.Card32('type'),
467+
rq.Card32('offset'),
468+
rq.Card32('length'),
469+
)
470+
471+
_reply = rq.Struct(
472+
rq.ReplyCode(),
473+
rq.Pad(1),
474+
rq.Card16('sequence_number'),
475+
rq.ReplyLength(),
476+
rq.Card32('type'),
477+
rq.Card32('bytes_after'),
478+
rq.LengthOf('value', 4),
479+
rq.Format('value', 1),
480+
rq.Pad(11),
481+
rq.PropertyData('value')
482+
)
483+
484+
def get_device_property(self, deviceid, property, type, offset, length, delete=False):
485+
return XIGetProperty(
486+
display=self.display,
487+
opcode=self.display.get_extension_major(extname),
488+
deviceid=deviceid,
489+
property=property,
490+
type=type,
491+
offset=offset,
492+
length=length,
493+
delete=delete,
494+
)
495+
496+
class XIChangeProperty(rq.Request):
497+
_request = rq.Struct(
498+
rq.Card8('opcode'),
499+
rq.Opcode(57),
500+
rq.RequestLength(),
501+
DEVICEID('deviceid'),
502+
rq.Card8('mode'),
503+
rq.Format('value', 1),
504+
rq.Card32('property'),
505+
rq.Card32('type'),
506+
rq.LengthOf('value', 4),
507+
rq.PropertyData('value'),
508+
)
509+
510+
def change_device_property(self, deviceid, property, type, mode, value):
511+
return XIChangeProperty(
512+
display=self.display,
513+
opcode=self.display.get_extension_major(extname),
514+
deviceid=deviceid,
515+
property=property,
516+
type=type,
517+
mode=mode,
518+
value=value,
519+
)
520+
521+
class XIDeleteProperty(rq.Request):
522+
_request = rq.Struct(
523+
rq.Card8('opcode'),
524+
rq.Opcode(58),
525+
rq.RequestLength(),
526+
DEVICEID('deviceid'),
527+
rq.Pad(2),
528+
rq.Card32('property'),
529+
)
530+
531+
def delete_device_property(self, deviceid, property):
532+
return XIDeleteProperty(
533+
display=self.display,
534+
opcode=self.display.get_extension_major(extname),
535+
deviceid=deviceid,
536+
property=property,
537+
)
538+
429539
class XIGrabDevice(rq.ReplyRequest):
430540
_request = rq.Struct(
431541
rq.Card8('opcode'),
@@ -639,6 +749,14 @@ def ungrab_keycode(self, deviceid, keycode, modifiers):
639749
rq.List('classes', ClassInfo),
640750
)
641751

752+
PropertyEventData = rq.Struct(
753+
DEVICEID('deviceid'),
754+
rq.Card32('time'),
755+
rq.Card32('property'),
756+
rq.Card8('what'),
757+
rq.Pad(11),
758+
)
759+
642760
def init(disp, info):
643761
disp.extension_add_method('display', 'xinput_query_version', query_version)
644762
disp.extension_add_method('window', 'xinput_select_events', select_events)
@@ -647,8 +765,13 @@ def init(disp, info):
647765
disp.extension_add_method('display', 'xinput_ungrab_device', ungrab_device)
648766
disp.extension_add_method('window', 'xinput_grab_keycode', grab_keycode)
649767
disp.extension_add_method('window', 'xinput_ungrab_keycode', ungrab_keycode)
768+
disp.extension_add_method('display', 'xinput_get_device_property', get_device_property)
769+
disp.extension_add_method('display', 'xinput_list_device_properties', list_device_properties)
770+
disp.extension_add_method('display', 'xinput_change_device_property', change_device_property)
771+
disp.extension_add_method('display', 'xinput_delete_device_property', delete_device_property)
650772
if hasattr(disp,"ge_add_event_data"):
651773
for device_event in (ButtonPress, ButtonRelease, KeyPress, KeyRelease, Motion):
652774
disp.ge_add_event_data(info.major_opcode, device_event, DeviceEventData)
653775
disp.ge_add_event_data(info.major_opcode, DeviceChanged, DeviceEventData)
654776
disp.ge_add_event_data(info.major_opcode, HierarchyChanged, HierarchyEventData)
777+
disp.ge_add_event_data(info.major_opcode, PropertyEvent, PropertyEventData)

0 commit comments

Comments
 (0)