aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormzuther <mzuther@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2010-04-18 11:47:58 +0000
committermzuther <mzuther@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2010-04-18 11:47:58 +0000
commit299b4fb7dfccc166e5bbb34616b51da001ffb6d1 (patch)
tree5d9b82488eb41354f91391a16f8d3cba50edcead
parentd1c03f054cf14908aa5fc1f7d3eba6d4dcb46994 (diff)
downloadlcd4linux-299b4fb7dfccc166e5bbb34616b51da001ffb6d1.tar.gz
X11 driver: correctly handle key releases
git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@1117 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
-rw-r--r--drv_G15.c30
-rw-r--r--drv_X11.c15
2 files changed, 28 insertions, 17 deletions
diff --git a/drv_G15.c b/drv_G15.c
index 296baa6..d070b38 100644
--- a/drv_G15.c
+++ b/drv_G15.c
@@ -328,15 +328,15 @@ static int drv_G15_open()
for (bus = usb_get_busses(); bus; bus = bus->next) {
for (dev = bus->devices; dev; dev = dev->next) {
debug("%s: open %s/%s/%s", Name, bus->dirname, dev->bus->dirname, dev->filename);
- if (dev->descriptor.idVendor == G15_VENDOR) {
- if ((g15_lcd = usb_open(dev))) {
- // get vendor name if possible
- if (dev->descriptor.iManufacturer) {
- retval = usb_get_string_simple(g15_lcd, dev->descriptor.iManufacturer, dname, sizeof(dname));
- if (retval <= 0) {
- snprintf(dname, sizeof(dname), "(unknown)");
- }
- }
+ if (dev->descriptor.idVendor == G15_VENDOR) {
+ if ((g15_lcd = usb_open(dev))) {
+ // get vendor name if possible
+ if (dev->descriptor.iManufacturer) {
+ retval = usb_get_string_simple(g15_lcd, dev->descriptor.iManufacturer, dname, sizeof(dname));
+ if (retval <= 0) {
+ snprintf(dname, sizeof(dname), "(unknown)");
+ }
+ }
debug("%s: Found USB vendor ID 0x%x (%s), checking productID 0x%x...",
Name, G15_VENDOR, dname, dev->descriptor.idProduct);
switch (dev->descriptor.idProduct) {
@@ -375,7 +375,7 @@ static int drv_G15_open()
switch (retval) {
case -EPERM:
error("%s: Permission denied! eUID of this process is %i %s",
- Name, geteuid(), geteuid() != 0 ? "(not root)" : "");
+ Name, geteuid(), geteuid() != 0 ? "(not root)" : "");
//return -1;
break;
case -ENODATA:
@@ -388,8 +388,8 @@ static int drv_G15_open()
debug("%s: detaching...", Name);
usb_detach_kernel_driver_np(g15_lcd, interf);
}
-#endif // detach_kernel_driver_np
-#endif // get_driver_np
+#endif // detach_kernel_driver_np
+#endif // get_driver_np
retval = usb_set_configuration(g15_lcd, config);
debug("%s: Ret %d from usb_set_configuration(%d)", Name, retval, config);
@@ -411,9 +411,9 @@ static int drv_G15_open()
}
}
- } // G15_Vendor
- } // all devices
- } // all busses
+ } // G15_Vendor
+ } // all devices
+ } // all busses
return -1;
}
diff --git a/drv_X11.c b/drv_X11.c
index 8b80b4b..b3f627e 100644
--- a/drv_X11.c
+++ b/drv_X11.c
@@ -201,9 +201,18 @@ static int drv_X11_brightness(int brightness)
static int drv_X11_keypad(const int num)
{
- int val = WIDGET_KEY_PRESSED;
+ int val;
+ int new_num = num;
+
+ if (new_num > 0)
+ val = WIDGET_KEY_PRESSED;
+ else {
+ /* negative values mark a key release */
+ new_num = -num;
+ val = WIDGET_KEY_RELEASED;
+ }
- switch (num) {
+ switch (new_num) {
case 1:
val += WIDGET_KEY_UP;
break;
@@ -447,6 +456,8 @@ static void drv_X11_timer( __attribute__ ((unused))
debug("key for button %i released", btn);
XClearArea(dp, w, xoffset, yoffset + (btn - 1) * (btnheight + pgap), btnwidth, btnheight - 2,
1 /* true */ );
+ /* negative values mark a key release */
+ drv_generic_keypad_press(-btn);
} else {
debug("key release for button %i ignored", btn);
}