Hi, this patch adds an entry in /proc, /proc/sys/dev/mac_hid/rclick_key_modifier.
It lets the kernel report a right-click when KEY+Left click are pressed, where KEY is the KEY specified by echoing its code to the /proc entry. ie, "echo 29 > /proc/sys/dev/mac_hid/rclick_key_modifier" and you'll have Ctrl-click = right click. It's a patch against linuxppc-2.5-benh tree rsync'ed tonight from source.mvista.com. hope it's useful, -- Colin
--- linuxppc-2.5-benh/drivers/input/input.c.orig Mon Oct 13 23:04:52 2003 +++ linuxppc-2.5-benh/drivers/input/input.c Mon Oct 13 23:06:46 2003 @@ -63,6 +63,10 @@ } +#ifdef CONFIG_MAC_EMUMOUSEBTN +extern int mac_hid_mouse_emulate_buttons(int,int,int); +#endif + void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) { struct input_handle *handle; @@ -91,7 +95,10 @@ break; case EV_KEY: - +#ifdef CONFIG_MAC_EMUMOUSEBTN + if (mac_hid_mouse_emulate_buttons(2, code, value)) + code = BTN_RIGHT; +#endif if (code > KEY_MAX || !test_bit(code, dev->keybit) || !!test_bit(code, dev->key) == value) return; --- linuxppc-2.5-benh/drivers/macintosh/mac_hid.c.orig Mon Oct 13 23:04:46 2003 +++ linuxppc-2.5-benh/drivers/macintosh/mac_hid.c Mon Oct 13 23:05:40 2003 @@ -21,7 +21,9 @@ static int mouse_emulate_buttons = 0; static int mouse_button2_keycode = KEY_RIGHTCTRL; /* right control key */ static int mouse_button3_keycode = KEY_RIGHTALT; /* right option key */ +static int rclick_key_modifier = 0; /* disabled */ static int mouse_last_keycode = 0; +static int rclick_key_modifier_down = 0; #if defined(CONFIG_SYSCTL) /* file(s) in /proc/sys/dev/mac_hid */ @@ -50,6 +52,14 @@ .mode = 0644, .proc_handler = &proc_dointvec, }, + { + .ctl_name = DEV_MAC_HID_RCLICK_KEY_MODIFIER, + .procname = "rclick_key_modifier", + .data = &rclick_key_modifier, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = &proc_dointvec, + }, { .ctl_name = 0 } }; @@ -98,6 +108,15 @@ } mouse_last_keycode = down ? keycode : 0; } + if (rclick_key_modifier + && keycode == rclick_key_modifier) + rclick_key_modifier_down = down; + + break; + case 2: + /* Called from input.c */ + if (keycode == BTN_LEFT && rclick_key_modifier && rclick_key_modifier_down) + return 1; break; } return 0; --- linuxppc-2.5-benh/include/linux/sysctl.h.orig Mon Oct 13 23:05:33 2003 +++ linuxppc-2.5-benh/include/linux/sysctl.h Mon Oct 13 23:05:40 2003 @@ -681,7 +681,8 @@ DEV_MAC_HID_MOUSE_BUTTON_EMULATION=3, DEV_MAC_HID_MOUSE_BUTTON2_KEYCODE=4, DEV_MAC_HID_MOUSE_BUTTON3_KEYCODE=5, - DEV_MAC_HID_ADB_MOUSE_SENDS_KEYCODES=6 + DEV_MAC_HID_ADB_MOUSE_SENDS_KEYCODES=6, + DEV_MAC_HID_RCLICK_KEY_MODIFIER=7 }; /* /proc/sys/dev/scsi */ --- linuxppc-2.5-benh/arch/ppc/Kconfig.orig Mon Oct 13 23:05:00 2003 +++ linuxppc-2.5-benh/arch/ppc/Kconfig Mon Oct 13 23:05:40 2003 @@ -1243,6 +1243,11 @@ /proc/sys/dev/mac_hid/mouse_button_emulation /proc/sys/dev/mac_hid/mouse_button2_keycode /proc/sys/dev/mac_hid/mouse_button3_keycode + /proc/sys/dev/mac_hid/rclick_key_modifier + + rclick_key_modifier allows the kernel to handle "Key+LClick" as a + right-click. It's disabled by default. Echo a keycode to it to + enable it. If you have an Apple machine with a 1-button mouse, say Y here. --- linuxppc-2.5-benh/arch/m68k/Kconfig.orig Mon Oct 13 23:05:18 2003 +++ linuxppc-2.5-benh/arch/m68k/Kconfig Mon Oct 13 23:05:40 2003 @@ -932,6 +932,11 @@ /proc/sys/dev/mac_hid/mouse_button_emulation /proc/sys/dev/mac_hid/mouse_button2_keycode /proc/sys/dev/mac_hid/mouse_button3_keycode + /proc/sys/dev/mac_hid/rclick_key_modifier + + rclick_key_modifier allows the kernel to handle "Key+LClick" as a + right-click. It's disabled by default. Echo a keycode to it to + enable it. config ADB_KEYBOARD bool "Support for ADB keyboard (old driver)"