abouttreesummaryrefslogcommitdiff
path: root/srcs
diff options
context:
space:
mode:
Diffstat (limited to 'srcs')
-rw-r--r--srcs/juloo.keyboard2/Keyboard2View.java14
-rw-r--r--srcs/juloo.keyboard2/Pointers.java42
2 files changed, 34 insertions, 22 deletions
diff --git a/srcs/juloo.keyboard2/Keyboard2View.java b/srcs/juloo.keyboard2/Keyboard2View.java
index bad75bb..c0ec68f 100644
--- a/srcs/juloo.keyboard2/Keyboard2View.java
+++ b/srcs/juloo.keyboard2/Keyboard2View.java
@@ -120,19 +120,7 @@ public class Keyboard2View extends View
{
if (_keyboard == null || key == null)
return;
- int flags = _pointers.getKeyFlags(key, kv);
- if (latched)
- {
- if (flags != -1 && !lock)
- return; // Don't replace an existing pointer
- _pointers.add_fake_pointer(kv, key, lock);
- }
- else
- {
- if ((flags & KeyValue.FLAG_FAKE_PTR) == 0)
- return; // Don't remove locked pointers
- _pointers.remove_fake_pointer(kv, key);
- }
+ _pointers.set_fake_pointer_state(key, kv, latched, lock);
}
/** Called by auto-capitalisation. */
diff --git a/srcs/juloo.keyboard2/Pointers.java b/srcs/juloo.keyboard2/Pointers.java
index 6591937..c03599c 100644
--- a/srcs/juloo.keyboard2/Pointers.java
+++ b/srcs/juloo.keyboard2/Pointers.java
@@ -85,13 +85,10 @@ public final class Pointers implements Handler.Callback
return ptr.flags;
}
- /** Fake pointers are latched and not lockable. */
- public void add_fake_pointer(KeyValue kv, KeyboardData.Key key, boolean locked)
+ /** The key must not be already latched . */
+ void add_fake_pointer(KeyboardData.Key key, KeyValue kv, boolean locked)
{
- Pointer ptr = getLatched(key, kv);
- if (ptr != null)
- removePtr(ptr); // Already latched, replace pointer.
- ptr = new Pointer(-1, key, kv, 0.f, 0.f, Modifiers.EMPTY);
+ Pointer ptr = new Pointer(-1, key, kv, 0.f, 0.f, Modifiers.EMPTY);
ptr.flags &= ~(KeyValue.FLAG_LATCH | KeyValue.FLAG_LOCK);
ptr.flags |= KeyValue.FLAG_FAKE_PTR;
if (locked)
@@ -100,12 +97,39 @@ public final class Pointers implements Handler.Callback
_handler.onPointerFlagsChanged(false);
}
- public void remove_fake_pointer(KeyValue kv, KeyboardData.Key key)
+ /** Set whether a key is latched or locked by adding a "fake" pointer, a
+ pointer that is not due to user interaction.
+ This is used by auto-capitalisation.
+
+ When [lock] is true, [latched] control whether the modifier is locked or disabled.
+ When [lock] is false, an existing locked pointer is not affected. */
+ public void set_fake_pointer_state(KeyboardData.Key key, KeyValue kv,
+ boolean latched, boolean lock)
{
Pointer ptr = getLatched(key, kv);
- if (ptr != null && (ptr.flags & KeyValue.FLAG_FAKE_PTR) != 0)
+ if (ptr == null)
+ {
+ // No existing pointer, latch the key.
+ if (latched)
+ add_fake_pointer(key, kv, lock);
+ }
+ else if ((ptr.flags & KeyValue.FLAG_FAKE_PTR) != 0)
+ {} // Key already latched but not by a fake ptr, do nothing.
+ else if (lock)
+ {
+ // Acting on locked modifiers, replace the pointer each time.
removePtr(ptr);
- _handler.onPointerFlagsChanged(false);
+ if (latched)
+ add_fake_pointer(key, kv, lock);
+ }
+ else if ((ptr.flags & KeyValue.FLAG_LOCKED) != 0)
+ {} // Existing ptr is locked but [lock] is false, do not continue.
+ else if (!latched)
+ {
+ // Key is latched by a fake ptr. Unlatch if requested.
+ removePtr(ptr);
+ _handler.onPointerFlagsChanged(false);
+ }
}
// Receiving events