mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-21 06:34:00 +00:00
Input: Move autorepeat to the event-passing phase
Preparing to split event filtering and event passing, move the autorepeat function to the point where the event is actually passed. Tested-by: Benjamin Tissoires <benjamin.tissoires@enac.fr> Tested-by: Ping Cheng <pingc@wacom.com> Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
This commit is contained in:
parent
0672120a2e
commit
352ac4bd01
1 changed files with 25 additions and 21 deletions
|
@ -69,6 +69,22 @@ static int input_defuzz_abs_event(int value, int old_val, int fuzz)
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void input_start_autorepeat(struct input_dev *dev, int code)
|
||||||
|
{
|
||||||
|
if (test_bit(EV_REP, dev->evbit) &&
|
||||||
|
dev->rep[REP_PERIOD] && dev->rep[REP_DELAY] &&
|
||||||
|
dev->timer.data) {
|
||||||
|
dev->repeat_key = code;
|
||||||
|
mod_timer(&dev->timer,
|
||||||
|
jiffies + msecs_to_jiffies(dev->rep[REP_DELAY]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void input_stop_autorepeat(struct input_dev *dev)
|
||||||
|
{
|
||||||
|
del_timer(&dev->timer);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Pass event first through all filters and then, if event has not been
|
* Pass event first through all filters and then, if event has not been
|
||||||
* filtered out, through all open handles. This function is called with
|
* filtered out, through all open handles. This function is called with
|
||||||
|
@ -105,6 +121,15 @@ static void input_pass_event(struct input_dev *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
|
|
||||||
|
/* trigger auto repeat for key events */
|
||||||
|
if (type == EV_KEY && value != 2) {
|
||||||
|
if (value)
|
||||||
|
input_start_autorepeat(dev, code);
|
||||||
|
else
|
||||||
|
input_stop_autorepeat(dev);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -142,22 +167,6 @@ static void input_repeat_key(unsigned long data)
|
||||||
spin_unlock_irqrestore(&dev->event_lock, flags);
|
spin_unlock_irqrestore(&dev->event_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void input_start_autorepeat(struct input_dev *dev, int code)
|
|
||||||
{
|
|
||||||
if (test_bit(EV_REP, dev->evbit) &&
|
|
||||||
dev->rep[REP_PERIOD] && dev->rep[REP_DELAY] &&
|
|
||||||
dev->timer.data) {
|
|
||||||
dev->repeat_key = code;
|
|
||||||
mod_timer(&dev->timer,
|
|
||||||
jiffies + msecs_to_jiffies(dev->rep[REP_DELAY]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void input_stop_autorepeat(struct input_dev *dev)
|
|
||||||
{
|
|
||||||
del_timer(&dev->timer);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define INPUT_IGNORE_EVENT 0
|
#define INPUT_IGNORE_EVENT 0
|
||||||
#define INPUT_PASS_TO_HANDLERS 1
|
#define INPUT_PASS_TO_HANDLERS 1
|
||||||
#define INPUT_PASS_TO_DEVICE 2
|
#define INPUT_PASS_TO_DEVICE 2
|
||||||
|
@ -252,11 +261,6 @@ static void input_handle_event(struct input_dev *dev,
|
||||||
|
|
||||||
__change_bit(code, dev->key);
|
__change_bit(code, dev->key);
|
||||||
disposition = INPUT_PASS_TO_HANDLERS;
|
disposition = INPUT_PASS_TO_HANDLERS;
|
||||||
|
|
||||||
if (value)
|
|
||||||
input_start_autorepeat(dev, code);
|
|
||||||
else
|
|
||||||
input_stop_autorepeat(dev);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Reference in a new issue