--- drivers/macintosh/mac_hid.c.orig 2002-10-12 14:49:00.000000000 +0200 +++ drivers/macintosh/mac_hid.c 2003-11-30 13:28:01.000000000 +0100 @@ -222,7 +222,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; #endif extern void pckbd_init_hw(void); @@ -259,6 +261,10 @@ "mouse_button3_keycode", &mouse_button3_keycode, sizeof(int), 0644, NULL, &proc_dointvec }, + { DEV_MAC_HID_RCLICK_KEY_MODIFIER, + "rclick_key_modifier", &rclick_key_modifier, sizeof(int), + 0644, NULL, &proc_dointvec + }, #endif { 0 } }; @@ -438,6 +444,9 @@ } mouse_last_keycode = down ? keycode : 0; } + if (rclick_key_modifier + && keycode == rclick_key_modifier) + rclick_key_modifier_down = down; break; case 2: /* Called from mousedev.c */ @@ -448,6 +457,12 @@ return 2; /* map to right button */ } return keycode; /* keep button */ + case 3: + /* Called from input.c */ + if (keycode == BTN_LEFT && rclick_key_modifier && rclick_key_modifier_down) { + input_report_key(&emumousebtn, BTN_RIGHT, down); + return 1; + } } return 0; } --- drivers/input/input.c.orig 2003-11-30 13:28:59.000000000 +0100 +++ drivers/input/input.c 2003-11-30 13:16:00.000000000 +0100 @@ -60,6 +60,10 @@ static int input_number; static long input_devices[NBITS(INPUT_DEVICES)]; +#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 = dev->handle; @@ -74,7 +78,11 @@ switch (type) { case EV_KEY: - +#ifdef CONFIG_MAC_EMUMOUSEBTN + if (mac_hid_mouse_emulate_buttons(3, code, value)) { + return; + } +#endif if (code > KEY_MAX || !test_bit(code, dev->keybit) || !!test_bit(code, dev->key) == value) return; --- include/linux/sysctl.h.orig 2003-11-29 10:32:04.000000000 +0100 +++ include/linux/sysctl.h 2003-11-29 12:52:55.000000000 +0100 @@ -654,7 +654,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/abi */