diff options
Diffstat (limited to 'redhat/tdebase/kdebase-3.5.13-replicate_led_status_on_virtual_keyboard.patch')
-rw-r--r-- | redhat/tdebase/kdebase-3.5.13-replicate_led_status_on_virtual_keyboard.patch | 95 |
1 files changed, 0 insertions, 95 deletions
diff --git a/redhat/tdebase/kdebase-3.5.13-replicate_led_status_on_virtual_keyboard.patch b/redhat/tdebase/kdebase-3.5.13-replicate_led_status_on_virtual_keyboard.patch deleted file mode 100644 index 1d3f73ceb..000000000 --- a/redhat/tdebase/kdebase-3.5.13-replicate_led_status_on_virtual_keyboard.patch +++ /dev/null @@ -1,95 +0,0 @@ -commit 8468d9bd5c66fe402acbc06f728b12ea996848de -Author: Timothy Pearson <kb9vqf@pearsoncomputing.net> -Date: 1327049889 -0600 - - Replicate LED status from virtual keyboards to physical keyboards - Fix keyboard attribute cloning - This commit closes Bug 561 - -diff --git a/tsak/main.cpp b/tsak/main.cpp -index df485a0..26aad00 100644 ---- a/tsak/main.cpp -+++ b/tsak/main.cpp -@@ -126,22 +126,23 @@ static void copy_features(int devin, int devout) - for(i=0;i<EV_MAX;++i) { - if (bit_set(i, evtypes)) { - switch(i) { -- case EV_KEY: op = UI_SET_KEYBIT; break; -- case EV_REL: op = UI_SET_RELBIT; break; -- case EV_ABS: op = UI_SET_ABSBIT; break; -- case EV_MSC: op = UI_SET_MSCBIT; break; -- case EV_LED: op = UI_SET_LEDBIT; break; -- case EV_SND: op = UI_SET_SNDBIT; break; -- case EV_SW: op = UI_SET_SWBIT; break; -- default: op = -1; -+ case EV_KEY: op = UI_SET_KEYBIT; break; -+ case EV_REL: op = UI_SET_RELBIT; break; -+ case EV_ABS: op = UI_SET_ABSBIT; break; -+ case EV_MSC: op = UI_SET_MSCBIT; break; -+ case EV_LED: op = UI_SET_LEDBIT; break; -+ case EV_SND: op = UI_SET_SNDBIT; break; -+ case EV_SW: op = UI_SET_SWBIT; break; -+ default: op = -1; -+ } - } -- } -- if (op == -1) continue; -- ioctl(devout, UI_SET_EVBIT, i); -- memset(codes,0,sizeof(codes)); -- if (ioctl(devin, EVIOCGBIT(i, sizeof(codes)), codes) < 0) return; -- for(code=0;code<KEY_MAX;code++) { -- if (bit_set(code, codes)) ioctl(devout, op, code); -+ if (op == -1) continue; -+ ioctl(devout, UI_SET_EVBIT, i); -+ memset(codes,0,sizeof(codes)); -+ if (ioctl(devin, EVIOCGBIT(i, sizeof(codes)), codes) >= 0) { -+ for(code=0;code<KEY_MAX;code++) { -+ if (bit_set(code, codes)) ioctl(devout, op, code); -+ } - } - } - } -@@ -342,6 +343,7 @@ int main (int argc, char *argv[]) - { - struct input_event ev[64]; - struct input_event event; -+ struct input_event revev; - struct uinput_user_dev devinfo={0}; - int devout[MAX_KEYBOARDS], rd, i, value, size = sizeof (struct input_event); - char name[256] = "Unknown"; -@@ -416,9 +418,9 @@ int main (int argc, char *argv[]) - fprintf(stderr, "Reading from keyboard: (%s)\n", name); - - // Create filtered virtual output device -- devout[current_keyboard]=open("/dev/misc/uinput",O_WRONLY|O_NONBLOCK); -+ devout[current_keyboard]=open("/dev/misc/uinput",O_RDWR|O_NONBLOCK); - if (devout[current_keyboard]<0) { -- devout[current_keyboard]=open("/dev/uinput",O_WRONLY|O_NONBLOCK); -+ devout[current_keyboard]=open("/dev/uinput",O_RDWR|O_NONBLOCK); - if (devout[current_keyboard]<0) { - perror("open(\"/dev/misc/uinput\")"); - } -@@ -483,6 +485,14 @@ int main (int argc, char *argv[]) - fprintf(stderr, "Read failed.\n"); - break; - } -+ -+ // Replicate LED events from the virtual keyboard to the physical keyboard -+ int rrd = read(devout[current_keyboard], &revev, size); -+ if (rrd >= size) { -+ if (revev.type == EV_LED) { -+ write(keyboard_fds[current_keyboard], &revev, sizeof(revev)); -+ } -+ } - - value = ev[0].value; - -@@ -506,7 +516,7 @@ int main (int argc, char *argv[]) - } - } - -- if (hide_event == false) { -+ if ((hide_event == false) && (ev[0].type != EV_LED) && (ev[1].type != EV_LED)) { - // Pass the event on... - event = ev[0]; - write(devout[current_keyboard], &event, sizeof event); |