]> git.webhop.me Git - lcd4linux.git/commitdiff
X11 driver: correctly handle key releases
authormzuther <mzuther@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Sun, 18 Apr 2010 11:47:58 +0000 (11:47 +0000)
committermzuther <mzuther@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Sun, 18 Apr 2010 11:47:58 +0000 (11:47 +0000)
git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@1117 3ae390bd-cb1e-0410-b409-cd5a39f66f1f

drv_G15.c
drv_X11.c

index 296baa66142f8c5d9f5d33b9f9b8e54c05dc2743..d070b3831234bafd100e7bf28bd72c141065f0c0 100644 (file)
--- 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;
 }
index 8b80b4b68e143534a65e511fd1d19cc474c91a2c..b3f627ef89e33fd34232dddeae4b9006a9f0faf6 100644 (file)
--- 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);
            }