Skip to content

Commit e66edd4

Browse files
committed
pikvm/pikvm#1460: Added scroll_rate param for VNC
1 parent 86774df commit e66edd4

File tree

4 files changed

+11
-2
lines changed

4 files changed

+11
-2
lines changed

kvmd/apps/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,7 @@ def _get_config_scheme() -> dict:
737737
"desired_fps": Option(30, type=valid_stream_fps),
738738
"mouse_output": Option("usb", type=valid_hid_mouse_output),
739739
"keymap": Option("/usr/share/kvmd/keymaps/en-us", type=valid_abs_file),
740+
"scroll_rate": Option(4, type=functools.partial(valid_number, min=1, max=30)),
740741
"allow_cut_after": Option(3.0, type=valid_float_f0),
741742

742743
"server": {

kvmd/apps/vnc/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ def make_memsink_streamer(name: str, fmt: int) -> (MemsinkStreamerClient | None)
7171
desired_fps=config.desired_fps,
7272
mouse_output=config.mouse_output,
7373
keymap_path=config.keymap,
74+
scroll_rate=config.scroll_rate,
7475
allow_cut_after=config.allow_cut_after,
7576

7677
kvmd=KvmdClient(user_agent=user_agent, **config.kvmd._unpack()),

kvmd/apps/vnc/rfb/__init__.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ def __init__( # pylint: disable=too-many-arguments
6565
width: int,
6666
height: int,
6767
name: str,
68+
scroll_rate: int,
6869
allow_cut_after: float,
6970
vnc_passwds: list[str],
7071
vencrypt: bool,
@@ -81,6 +82,7 @@ def __init__( # pylint: disable=too-many-arguments
8182
self._width = width
8283
self._height = height
8384
self.__name = name
85+
self.__scroll_rate = scroll_rate
8486
self.__allow_cut_after = allow_cut_after
8587
self.__vnc_passwds = vnc_passwds
8688
self.__vencrypt = vencrypt
@@ -493,6 +495,7 @@ async def __handle_pointer_event(self) -> None:
493495
ext_buttons = 0
494496
if self._encodings.has_ext_mouse and (buttons & 0x80): # Marker bit 7 for ext event
495497
ext_buttons = await self._read_number("ext pointer event buttons", "B")
498+
sr = self.__scroll_rate
496499
await self._on_pointer_event(
497500
buttons={
498501
"left": bool(buttons & 0x1),
@@ -502,8 +505,8 @@ async def __handle_pointer_event(self) -> None:
502505
"down": bool(ext_buttons & 0x1),
503506
},
504507
wheel={
505-
"x": (-4 if buttons & 0x40 else (4 if buttons & 0x20 else 0)),
506-
"y": (-4 if buttons & 0x10 else (4 if buttons & 0x8 else 0)),
508+
"x": (-sr if buttons & 0x40 else (sr if buttons & 0x20 else 0)),
509+
"y": (-sr if buttons & 0x10 else (sr if buttons & 0x8 else 0)),
507510
},
508511
move={
509512
"x": tools.remap(to_x, 0, self._width, *MouseRange.RANGE),

kvmd/apps/vnc/server.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ def __init__( # pylint: disable=too-many-arguments,too-many-locals
8181
mouse_output: str,
8282
keymap_name: str,
8383
symmap: dict[int, dict[int, str]],
84+
scroll_rate: int,
8485
allow_cut_after: float,
8586

8687
kvmd: KvmdClient,
@@ -101,6 +102,7 @@ def __init__( # pylint: disable=too-many-arguments,too-many-locals
101102
tls_timeout=tls_timeout,
102103
x509_cert_path=x509_cert_path,
103104
x509_key_path=x509_key_path,
105+
scroll_rate=scroll_rate,
104106
allow_cut_after=allow_cut_after,
105107
vnc_passwds=list(vnc_credentials),
106108
vencrypt=vencrypt,
@@ -446,6 +448,7 @@ def __init__( # pylint: disable=too-many-arguments,too-many-locals
446448
desired_fps: int,
447449
mouse_output: str,
448450
keymap_path: str,
451+
scroll_rate: int,
449452
allow_cut_after: float,
450453

451454
kvmd: KvmdClient,
@@ -504,6 +507,7 @@ async def handle_client(reader: asyncio.StreamReader, writer: asyncio.StreamWrit
504507
mouse_output=mouse_output,
505508
keymap_name=keymap_name,
506509
symmap=symmap,
510+
scroll_rate=scroll_rate,
507511
allow_cut_after=allow_cut_after,
508512
kvmd=kvmd,
509513
streamers=streamers,

0 commit comments

Comments
 (0)