Plugins can't tell the difference between a modifier key-tap, and a modifier key-release (after being used to modify other keys)
Bug #925293 reported by
Daniel van Vugt
This bug affects 7 people
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Compiz Core |
Fix Released
|
High
|
Daniel van Vugt | ||
Unity Distro Priority |
Fix Released
|
High
|
Unassigned | ||
compiz (Ubuntu) |
Fix Released
|
Undecided
|
Daniel van Vugt |
Bug Description
If you tap a modifier key, or if you use it to modify another key, any plugin listening for that modifier will have its key-Terminate callback called. But that callback has no way of knowing whether the modifier was tapped (no other keys pressed) or if it was simply held as a regular modifier of another key.
We need a simple way for the Terminate callback (or any other function like a timer started in Initiate) to tell if any other key events have happened between our press and release events (initiate/terminate callbacks). Thus a plugin would be able to respond to a single modifier being tapped or held, without getting confused with the modifier being used with other keys.
Related branches
lp://staging/~vanvugt/compiz-core/fix-925293
- Tim Penhey (community): Approve
- Gord Allott: Pending requested
-
Diff: 395 lines (+133/-58)6 files modifiedinclude/core/action.h (+2/-1)
plugins/water/src/water.cpp (+9/-1)
plugins/water/water.xml.in (+3/-0)
src/event.cpp (+105/-55)
src/privatescreen.h (+11/-1)
src/screen.cpp (+3/-0)
lp://staging/~vanvugt/compiz-core/fix-925293.2
- Sam Spilsbury: Approve
-
Diff: 133 lines (+28/-31)3 files modifiedsrc/event.cpp (+22/-29)
src/privatescreen.h (+1/-1)
src/screen.cpp (+5/-1)
lp://staging/~vanvugt/compiz-core/fix-alt-bugs
- Alan Griffiths: Approve
-
Diff: 160 lines (+36/-15)4 files modifiedmetadata/core.xml.in (+7/-0)
src/event.cpp (+25/-6)
src/privatescreen.h (+1/-2)
src/screen.cpp (+3/-7)
lp://staging/~vanvugt/compiz-core/fix-alt-bugs-2
- Alan Griffiths: Approve
-
Diff: 68 lines (+16/-18)2 files modifiedsrc/event.cpp (+11/-17)
src/screen.cpp (+5/-1)
lp://staging/~vanvugt/compiz-core/tapping-panacea
- Alan Griffiths: Approve
-
Diff: 99 lines (+16/-20)4 files modifiedmetadata/core.xml.in (+0/-7)
src/event.cpp (+1/-8)
src/privatescreen.h (+0/-3)
src/screen.cpp (+15/-2)
Changed in compiz-core: | |
status: | New → In Progress |
assignee: | nobody → Daniel van Vugt (vanvugt) |
Changed in compiz-core: | |
importance: | Undecided → Medium |
summary: |
- Using <Alt> as a plugin hotkey prevents apps from receiving - <Alt>+<some_other_key> + Plugins can't tell the difference between a modifier key-tap, and a + modifier key-release (after being used to modify other keys) |
description: | updated |
tags: | added: compiz-ff-precise |
Changed in compiz-core: | |
status: | In Progress → Fix Committed |
milestone: | none → 0.9.7.0 |
Changed in unity-distro-priority: | |
status: | New → Fix Committed |
importance: | Undecided → High |
Changed in compiz-core: | |
status: | Fix Committed → Fix Released |
Changed in unity-distro-priority: | |
status: | Fix Committed → Fix Released |
To post a comment you must log in.
Presently, the difference between responding on tap, vs press, release or hold is entirely coded into the plugins. For example, unityshell has some timing code that tries to tell the difference between the different kinds of key events for the dash. But I think a generic solution in compiz-core would be preferable.