From: Joakim Karlsson <aio@nocrew.org>
To: linuxppc-dev@ozlabs.org
Subject: [PATCH] Extended keyboard+mouse emulation
Date: Wed, 26 Jan 2005 01:12:56 +0100 (CET) [thread overview]
Message-ID: <Pine.LNX.4.58.0501260109220.2914@jadzia> (raw)
Hi everyone!
This is my first patch ever, so I hope I'm doing this right. In short,
this patch allows standard usage of the mouse button emulation in the
mac_hid. It extends the functionality to a combination of a key and mouse
button, retaining full compatibility. Project site:
http://aio.nocrew.org/projects/pbmousehack/
I have successfully tested it on 2.6.9 and 2.6.10.
Regards, Joakim Karlsson <aio@nocrew.org>
diff -urN linux-2.6.9.old/drivers/input/mousedev.c linux-2.6.9.new/drivers/input/mousedev.c
--- linux-2.6.9.old/drivers/input/mousedev.c 2004-10-18 23:55:07.000000000 +0200
+++ linux-2.6.9.new/drivers/input/mousedev.c 2004-12-14 01:11:48.644153752 +0100
@@ -168,6 +168,11 @@
}
}
+#ifdef CONFIG_MAC_EMUMOUSEBTN
+extern int mac_hid_mouse_emulate_buttons(int, int, int);
+extern int mac_hid_get_mouse_combination(int);
+#endif /* CONFIG_MAC_EMUMOUSEBTN */
+
static void mousedev_key_event(struct mousedev *mousedev, unsigned int code, int value)
{
int index;
@@ -192,9 +197,17 @@
}
if (value) {
+#ifdef CONFIG_MAC_EMUMOUSEBTN
+ if (index == 0)
+ index += mac_hid_get_mouse_combination(1);
+#endif /* CONFIG_MAC_EMUMOUSEBTN */
set_bit(index, &mousedev->packet.buttons);
set_bit(index, &mousedev_mix.packet.buttons);
} else {
+#ifdef CONFIG_MAC_EMUMOUSEBTN
+ if (index == 0)
+ index += mac_hid_get_mouse_combination(0);
+#endif /* CONFIG_MAC_EMUMOUSEBTN */
clear_bit(index, &mousedev->packet.buttons);
clear_bit(index, &mousedev_mix.packet.buttons);
}
diff -urN linux-2.6.9.old/drivers/macintosh/mac_hid.c linux-2.6.9.new/drivers/macintosh/mac_hid.c
--- linux-2.6.9.old/drivers/macintosh/mac_hid.c 2004-10-18 23:54:55.000000000 +0200
+++ linux-2.6.9.new/drivers/macintosh/mac_hid.c 2004-12-14 01:12:11.998603336 +0100
@@ -15,10 +15,10 @@
#include <linux/input.h>
#include <linux/module.h>
-
static struct input_dev emumousebtn;
static void emumousebtn_input_register(void);
static int mouse_emulate_buttons = 0;
+static int mouse_combine_buttons = 0;
static int mouse_button2_keycode = KEY_RIGHTCTRL; /* right control key */
static int mouse_button3_keycode = KEY_RIGHTALT; /* right option key */
static int mouse_last_keycode = 0;
@@ -35,6 +35,14 @@
.proc_handler = &proc_dointvec,
},
{
+ .ctl_name = DEV_MAC_HID_MOUSE_BUTTON_COMBINATION,
+ .procname = "mouse_combine_emulation",
+ .data = &mouse_combine_buttons,
+ .maxlen = sizeof(int),
+ .mode = 0644,
+ .proc_handler = &proc_dointvec,
+ },
+ {
.ctl_name = DEV_MAC_HID_MOUSE_BUTTON2_KEYCODE,
.procname = "mouse_button2_keycode",
.data = &mouse_button2_keycode,
@@ -81,12 +89,37 @@
#endif /* endif CONFIG_SYSCTL */
+int mac_hid_get_mouse_combination(int set)
+{
+ static int button = 0;
+ int retval = 0;
+
+ if (set == 1) {
+ button = mouse_last_keycode;
+ if (button == mouse_button2_keycode)
+ retval = 1;
+ else if (button == mouse_button3_keycode)
+ retval = 2;
+ else
+ retval = 0;
+ } else {
+ if (button == mouse_button2_keycode)
+ retval = 1;
+ else if (button == mouse_button3_keycode)
+ retval = 2;
+ else
+ retval = 0;
+ button = 0;
+ }
+ return retval;
+}
+
int mac_hid_mouse_emulate_buttons(int caller, unsigned int keycode, int down)
{
switch (caller) {
case 1:
/* Called from keyboard.c */
- if (mouse_emulate_buttons
+ if (mouse_emulate_buttons && !mouse_combine_buttons
&& (keycode == mouse_button2_keycode
|| keycode == mouse_button3_keycode)) {
if (mouse_emulate_buttons == 1) {
@@ -98,6 +131,12 @@
}
mouse_last_keycode = down ? keycode : 0;
}
+ if (mouse_combine_buttons
+ && (keycode == mouse_button2_keycode
+ || keycode == mouse_button3_keycode)) {
+ mouse_last_keycode = down ? keycode : 0;
+ return 0;
+ }
break;
}
return 0;
diff -urN linux-2.6.9.old/include/linux/sysctl.h linux-2.6.9.new/include/linux/sysctl.h
--- linux-2.6.9.old/include/linux/sysctl.h 2004-10-18 23:54:31.000000000 +0200
+++ linux-2.6.9.new/include/linux/sysctl.h 2004-12-14 01:13:44.179589696 +0100
@@ -747,7 +747,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_MOUSE_BUTTON_COMBINATION=8
};
/* /proc/sys/dev/scsi */
reply other threads:[~2005-01-26 0:37 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.LNX.4.58.0501260109220.2914@jadzia \
--to=aio@nocrew.org \
--cc=linuxppc-dev@ozlabs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox