[caribou: 11/22] Do expected level transitions.
- From: Eitan Isaacson <eitani src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [caribou: 11/22] Do expected level transitions.
- Date: Mon, 2 May 2011 17:27:03 +0000 (UTC)
commit b319f06ecb7ba4d9bdb4e998cfdacf639edaa1aa
Author: Eitan Isaacson <eitan monotonous org>
Date: Sun Apr 24 12:49:09 2011 -0700
Do expected level transitions.
caribou/ui/keyboard.py | 27 ++++++++++++++++++---------
data/layouts/natural/ara.json | 7 +++++--
data/layouts/natural/il.json | 7 +++++--
data/layouts/natural/us.json | 10 +++++++---
4 files changed, 35 insertions(+), 16 deletions(-)
---
diff --git a/caribou/ui/keyboard.py b/caribou/ui/keyboard.py
index 9e7f21b..60c9ae1 100644
--- a/caribou/ui/keyboard.py
+++ b/caribou/ui/keyboard.py
@@ -148,7 +148,7 @@ class CaribouSubKeys(Gtk.Window):
for key in keys:
key.connect("clicked", self._on_key_clicked)
- layout = KeyboardLayout("")
+ layout = KeyboardLayout(key.name, "subkeyboard")
layout.add_row(keys)
self.add(layout)
@@ -223,9 +223,10 @@ class ModifierKey(Gtk.ToggleButton, Key):
class KeyboardLayout(Gtk.Grid):
KEY_SPAN = 4
- def __init__(self, name):
+ def __init__(self, name, mode):
gobject.GObject.__init__(self)
self.layout_name = name
+ self.mode = mode
self.rows = []
self.set_column_homogeneous(True)
self.set_row_homogeneous(True)
@@ -338,7 +339,7 @@ class KbLayoutDeserializer(object):
return None
layouts_encoded = []
for name, level in dictionary.items():
- kb_layout = KeyboardLayout(name)
+ kb_layout = KeyboardLayout(name, level.get("mode", "locked"))
rows_list = self._get_dict_value_as_list(level, 'rows')
for row in rows_list:
keys = self._get_keys_from_list(row)
@@ -419,6 +420,9 @@ class CaribouKeyboard(Gtk.Notebook):
for level in level_list:
level.show()
self.layouts[group][level.layout_name] = self.append_page(level, None)
+ if level.mode == "default":
+ self.layouts[group]["default"] = \
+ self.layouts[group][level.layout_name]
for row in level.rows:
for key in row:
self._connect_key_signals(key)
@@ -455,6 +459,9 @@ class CaribouKeyboard(Gtk.Notebook):
def _released_normal_key(self, key):
self.vk.keyval_release(key.keyval)
+ layout = self.get_nth_page(self.get_current_page())
+ if layout.mode == "latched":
+ self._switch_to_layout()
while True:
try:
mod = self.depressed_mods.pop()
@@ -463,11 +470,10 @@ class CaribouKeyboard(Gtk.Notebook):
mod.set_active (False)
def _pressed_layout_switcher_key(self, key):
- _, group, variant = self.vk.get_current_group()
- self._switch_to_layout('%s_%s' % (group, variant), key.toggle)
+ self._switch_to_layout(level=key.toggle)
def _on_group_changed(self, vk, groupid, group, variant):
- self._switch_to_default('%s_%s' % (group, variant))
+ self._switch_to_layout('%s_%s' % (group, variant))
def _toggled_mask_key(self, key):
if key.get_active():
@@ -490,19 +496,22 @@ class CaribouKeyboard(Gtk.Notebook):
p.run()
p.destroy()
- def _switch_to_default(self, group):
+ def _switch_to_fallback(self, group):
try:
i = min(self.layouts[group].values())
except KeyError:
i = 0
self.set_current_page(i)
- def _switch_to_layout(self, group, level):
+ def _switch_to_layout(self, group=None, level="default"):
+ if group is None:
+ _, _group, _variant = self.vk.get_current_group()
+ group = '%s_%s' % (_group, _variant)
if self.layouts.has_key(group):
if self.layouts[group].has_key(level):
self.set_current_page(self.layouts[group][level])
return
- self._switch_to_default(group)
+ self._switch_to_fallback(group)
def get_current_layout(self):
i = self.get_current_page()
diff --git a/data/layouts/natural/ara.json b/data/layouts/natural/ara.json
index ecea3a1..068554e 100644
--- a/data/layouts/natural/ara.json
+++ b/data/layouts/natural/ara.json
@@ -1,5 +1,6 @@
{
"level1" : {
+ "mode" : "default",
"rows" : [
[{"name" : "Arabic_dad"},
{"name" : "Arabic_sad"},
@@ -39,6 +40,7 @@
]
},
"symbols1" : {
+ "mode" : "locked",
"rows" : [
[{"name" : "Arabic_1"},
{"name" : "Arabic_2"},
@@ -71,13 +73,14 @@
{"name" : "quotedbl"},
{"name" : "bar"},
{"name" : "numbersign"}],
- [{"name" : "Caribou_Alpha", "width" : 2, "toggle" : "level1"},
+ [{"name" : "Caribou_Alpha", "width" : 2, "toggle" : "default"},
{"name" : "Caribou_Emoticons"},
{"name" : "space", "width" : 5},
{"name" : "Caribou_Prefs", "margin_left" : 2}]
]
},
"symbols2" : {
+ "mode" : "locked",
"rows" : [
[{"name" : "Arabic_percent"},
{"name" : "bracketleft"},
@@ -110,7 +113,7 @@
{"name" : "quotedbl"},
{"name" : "bar"},
{"name" : "numbersign"}],
- [{"name" : "Caribou_Alpha", "width" : 2, "toggle" : "level1"},
+ [{"name" : "Caribou_Alpha", "width" : 2, "toggle" : "default"},
{"name" : "Caribou_Emoticons"},
{"name" : "space", "width" : 5},
{"name" : "Caribou_Prefs", "margin_left" : 2}]
diff --git a/data/layouts/natural/il.json b/data/layouts/natural/il.json
index 17f75c5..06f566f 100644
--- a/data/layouts/natural/il.json
+++ b/data/layouts/natural/il.json
@@ -1,5 +1,6 @@
{
"level1" : {
+ "mode" : "default",
"rows" : [
[{"name" : "period"},
{"name" : "comma"},
@@ -39,6 +40,7 @@
]
},
"symbols1" : {
+ "mode" : "locked",
"rows" : [
[{"name" : "1"},
{"name" : "2"},
@@ -71,13 +73,14 @@
{"name" : "quotedbl"},
{"name" : "bar"},
{"name" : "numbersign"}],
- [{"name" : "Caribou_Alpha", "width" : 2, "toggle" : "level1"},
+ [{"name" : "Caribou_Alpha", "width" : 2, "toggle" : "default"},
{"name" : "Caribou_Emoticons"},
{"name" : "space", "width" : 5},
{"name" : "Caribou_Prefs", "margin_left" : 2}]
]
},
"symbols2" : {
+ "mode" : "locked",
"rows" : [
[{"name" : "percent"},
{"name" : "bracketleft"},
@@ -110,7 +113,7 @@
{"name" : "quotedbl"},
{"name" : "bar"},
{"name" : "numbersign"}],
- [{"name" : "Caribou_Alpha", "width" : 2, "toggle" : "level1"},
+ [{"name" : "Caribou_Alpha", "width" : 2, "toggle" : "default"},
{"name" : "Caribou_Emoticons"},
{"name" : "space", "width" : 5},
{"name" : "Caribou_Prefs", "margin_left" : 2}]
diff --git a/data/layouts/natural/us.json b/data/layouts/natural/us.json
index c3779c0..fbe2496 100644
--- a/data/layouts/natural/us.json
+++ b/data/layouts/natural/us.json
@@ -1,5 +1,6 @@
{
"level1" : {
+ "mode" : "default",
"rows" : [
[{"name" : "q"},
{"name" : "w"},
@@ -64,6 +65,7 @@
]
},
"level2" : {
+ "mode" : "latched",
"rows" : [
[{"name" : "Q"},
{"name" : "W"},
@@ -121,13 +123,14 @@
{"name" : "comma"},
{"name" : "period"},
{"name" : "question"}],
- [{"name" : "Caribou_Symbols", "width" : 2, "toggle" : "symbols1"},
+ [{"name" : "Caribou_Symbols", "width" : 2, "toggle" : "default"},
{"name" : "Caribou_Emoticons"},
{"name" : "space", "width" : 5},
{"name" : "Caribou_Prefs", "margin_left" : 2}]
]
},
"symbols1" : {
+ "mode" : "locked",
"rows" : [
[{"name" : "1"},
{"name" : "2"},
@@ -160,13 +163,14 @@
{"name" : "quotedbl"},
{"name" : "bar"},
{"name" : "numbersign"}],
- [{"name" : "Caribou_Alpha", "width" : 2, "toggle" : "level1"},
+ [{"name" : "Caribou_Alpha", "width" : 2, "toggle" : "default"},
{"name" : "Caribou_Emoticons"},
{"name" : "space", "width" : 5},
{"name" : "Caribou_Prefs", "margin_left" : 2}]
]
},
"symbols2" : {
+ "mode" : "locked",
"rows" : [
[{"name" : "percent"},
{"name" : "bracketleft"},
@@ -199,7 +203,7 @@
{"name" : "quotedbl"},
{"name" : "bar"},
{"name" : "numbersign"}],
- [{"name" : "Caribou_Alpha", "width" : 2, "toggle" : "level1"},
+ [{"name" : "Caribou_Alpha", "width" : 2, "toggle" : "default"},
{"name" : "Caribou_Emoticons"},
{"name" : "space", "width" : 5},
{"name" : "Caribou_Prefs", "margin_left" : 2}]
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]