#622614 rdesktop: [patch] add an option not to revert mouse button mappings

Package:
rdesktop
Source:
rdesktop
Description:
RDP client for Windows NT/2000 Terminal Server and Windows Servers
Submitter:
Matthew Vernon
Date:
2026-02-11 08:57:03 UTC
Severity:
normal
Tags:
#622614#5
Date:
2011-04-13 11:52:41 UTC
From:
To:
Hi,

This patch adds a -M option to rdesktop which means that it doesn't
undo any mouse-button remappings the user may have done. It applies
cleanly to stable's source package.

I found it here:
https://bugs.archlinux.org/task/15113

But I think we should have it in Debian, since it won't affect people
who don't need this option, and makes the lives of people like me who
use a mouse left-handed (and so remap buttons with xmodmap) much
easier.

Cheers,

Matthew

*** rdesktop-mouse.patch
? aclocal.m4
Index: rdesktop.c
===================================================================
RCS file: /cvsroot/rdesktop/rdesktop/rdesktop.c,v
retrieving revision 1.163
diff -u -r1.163 rdesktop.c
--- rdesktop.c	5 Apr 2008 06:15:45 -0000	1.163
+++ rdesktop.c	5 Aug 2008 11:46:04 -0000
@@ -73,6 +73,7 @@
 int g_win_button_size = 0;	/* If zero, disable single app mode */
 RD_BOOL g_bitmap_compression = True;
 RD_BOOL g_sendmotion = True;
+RD_BOOL g_send_physical_buttons = True;
 RD_BOOL g_bitmap_cache = True;
 RD_BOOL g_bitmap_cache_persist_enable = False;
 RD_BOOL g_bitmap_cache_precache = True;
@@ -152,6 +153,7 @@
 	fprintf(stderr, "   -B: use BackingStore of X-server (if available)\n");
 	fprintf(stderr, "   -e: disable encryption (French TS)\n");
 	fprintf(stderr, "   -E: disable encryption from client to server\n");
+	fprintf(stderr, "   -M: do not map logical mouse buttons to physical\n");
 	fprintf(stderr, "   -m: do not send motion events\n");
 	fprintf(stderr, "   -C: use private colour map\n");
 	fprintf(stderr, "   -D: hide window manager decorations\n");
@@ -450,7 +452,7 @@
 #endif

 	while ((c = getopt(argc, argv,
-			   VNCOPT "Au:L:d:s:c:p:n:k:g:fbBeEmzCDKS:T:NX:a:x:Pr:045h?")) != -1)
+			   VNCOPT "Au:L:d:s:c:p:n:k:g:fbBeEMmzCDKS:T:NX:a:x:Pr:045h?")) != -1)
 	{
 		switch (c)
 		{
@@ -584,6 +586,9 @@
 			case 'E':
 				g_packet_encryption = False;
 				break;
+			case 'M':
+				g_send_physical_buttons = False;
+				break;
 			case 'm':
 				g_sendmotion = False;
 				break;
Index: xwin.c
===================================================================
RCS file: /cvsroot/rdesktop/rdesktop/xwin.c,v
retrieving revision 1.235
diff -u -r1.235 xwin.c
--- xwin.c	11 Jul 2008 03:51:23 -0000	1.235
+++ xwin.c	5 Aug 2008 11:46:06 -0000
@@ -36,6 +36,7 @@
 extern int g_ypos;
 extern int g_pos;
 extern RD_BOOL g_sendmotion;
+extern RD_BOOL g_send_physical_buttons;
 extern RD_BOOL g_fullscreen;
 extern RD_BOOL g_grab_keyboard;
 extern RD_BOOL g_hide_decorations;
@@ -2190,7 +2191,8 @@
 	   receive physical buttons (true in mstsc as well) and
 	   logical button behavior depends on the remote desktop's own
 	   mouse settings */
-	xevent.xbutton.button = g_pointer_log_to_phys_map[xevent.xbutton.button - 1];
+	if (g_send_physical_buttons)
+		xevent.xbutton.button = g_pointer_log_to_phys_map[xevent.xbutton.button - 1];
 	button = xkeymap_translate_button(xevent.xbutton.button);
 	if (button == 0)
 		return;

#622614#10
Date:
2026-02-10 20:11:09 UTC
From:
To:
Hi Matthew,

I'm checking the list of bugs in rdesktop since this became a candidate
for the Bug of the Day.  Reading the bug log including the link to
ArchLinux I think this very patch was not applied upstream.  However,
there is

$ grep -- '-M:' *.c
rdesktop.c:     fprintf(stderr, "   -M: use local mouse cursor\n");


so the suggested option is in use.  Since I'm not fully sure whether
this might be the feature you want to see implemented I'm tagging this
bug moreinfo.

Kind regards and thank you for your patience over so many years
   Andreas.

#622614#17
Date:
2026-02-11 08:55:07 UTC
From:
To:
Hi,

Crikey, this is a blast from the past!

I've looked at the source code, and I am reasonably confident that it
isn't - if you look at handle_button_event in xwin.c, you'll see[0]:

xevent.xbutton.button = g_pointer_log_to_phys_map[xevent.xbutton.button
- 1];

without any sort of conditional handling (which is what the patch in
this bug report sets up). Upstream's -M instead makes ui_set_cursor a
no-op[1].

I no longer have access to a suitable Windows server to test against,
but I think this means that upstream's -M doesn't leave mouse button
mappings alone.

So I think this bug report is likely still germane (although you'd now
need to change the option for dont-revert-mouse-button-mappings). I
might be wrong, though!

I see upstream is absent since 2019.

Regards,

Matthew

[0]
https://salsa.debian.org/debian/rdesktop/-/blame/master/xwin.c?ref_type=heads#L2519
[1]
https://salsa.debian.org/debian/rdesktop/-/blob/master/xwin.c?ref_type=heads#L3591