From 299b4fb7dfccc166e5bbb34616b51da001ffb6d1 Mon Sep 17 00:00:00 2001 From: mzuther Date: Sun, 18 Apr 2010 11:47:58 +0000 Subject: X11 driver: correctly handle key releases git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@1117 3ae390bd-cb1e-0410-b409-cd5a39f66f1f --- drv_G15.c | 30 +++++++++++++++--------------- drv_X11.c | 15 +++++++++++++-- 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); } -- cgit v1.2.3