mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2026-01-29 09:01:54 +08:00
mouse buttons 4 and 5
This commit is contained in:
@@ -400,6 +400,8 @@ class RfbClient(RfbClientStream): # pylint: disable=too-many-instance-attribute
|
||||
"left": bool(buttons & 0x1),
|
||||
"right": bool(buttons & 0x4),
|
||||
"middle": bool(buttons & 0x2),
|
||||
"up": bool(buttons & 0x8), # Back
|
||||
"down": bool(buttons & 0x10), # Forward
|
||||
},
|
||||
wheel={
|
||||
"x": (-4 if buttons & 0x40 else (4 if buttons & 0x20 else 0)),
|
||||
|
||||
@@ -114,7 +114,7 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
|
||||
|
||||
# Эти состояния шарить не обязательно - бекенд исключает дублирующиеся события.
|
||||
# Все это нужно только чтобы не посылать лишние жсоны в сокет KVMD
|
||||
self.__mouse_buttons: Dict[str, Optional[bool]] = {"left": None, "right": None, "middle": None}
|
||||
self.__mouse_buttons: Dict[str, Optional[bool]] = dict.fromkeys(["left", "right", "middle", "up", "down"], None)
|
||||
self.__mouse_move = {"x": -1, "y": -1}
|
||||
|
||||
self.__lock = asyncio.Lock()
|
||||
|
||||
@@ -91,6 +91,8 @@ class MouseProcess(BaseDeviceProcess):
|
||||
"left": 0x1,
|
||||
"right": 0x2,
|
||||
"middle": 0x4,
|
||||
"up": 0x8, # Back
|
||||
"down": 0x10, # Forward
|
||||
}[button]
|
||||
self._queue_event(_ButtonEvent(code, state))
|
||||
|
||||
|
||||
@@ -108,17 +108,25 @@ class _MouseButtonEvent(_BaseEvent):
|
||||
state: bool
|
||||
|
||||
def __post_init__(self) -> None:
|
||||
assert self.name in ["left", "right", "middle"]
|
||||
assert self.name in ["left", "right", "middle", "up", "down"]
|
||||
|
||||
def make_command(self) -> bytes:
|
||||
(code, state_pressed) = {
|
||||
"left": (0b10000000, 0b00001000),
|
||||
"right": (0b01000000, 0b00000100),
|
||||
"middle": (0b00100000, 0b00000010),
|
||||
(code, state_pressed, is_main) = {
|
||||
"left": (0b10000000, 0b00001000, True),
|
||||
"right": (0b01000000, 0b00000100, True),
|
||||
"middle": (0b00100000, 0b00000010, True),
|
||||
"up": (0b10000000, 0b00001000, False), # Back
|
||||
"down": (0b01000000, 0b00000100, False), # Forward
|
||||
}[self.name]
|
||||
if self.state:
|
||||
code |= state_pressed
|
||||
return struct.pack(">BBxxx", 0x13, code)
|
||||
if is_main:
|
||||
main_code = code
|
||||
extra_code = 0
|
||||
else:
|
||||
main_code = 0
|
||||
extra_code = code
|
||||
return struct.pack(">BBBxx", 0x13, main_code, extra_code)
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
|
||||
@@ -80,7 +80,7 @@ def valid_hid_mouse_move(arg: Any) -> int:
|
||||
|
||||
|
||||
def valid_hid_mouse_button(arg: Any) -> str:
|
||||
return check_string_in_list(arg, "HID mouse button", ["left", "right", "middle"])
|
||||
return check_string_in_list(arg, "HID mouse button", ["left", "right", "middle", "up", "down"])
|
||||
|
||||
|
||||
def valid_hid_mouse_wheel(arg: Any) -> int:
|
||||
|
||||
Reference in New Issue
Block a user