summaryrefslogtreecommitdiff
path: root/caribou/ui/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'caribou/ui/main.py')
-rw-r--r--caribou/ui/main.py100
1 files changed, 91 insertions, 9 deletions
diff --git a/caribou/ui/main.py b/caribou/ui/main.py
index 3a7d19a..1a6ac9e 100644
--- a/caribou/ui/main.py
+++ b/caribou/ui/main.py
@@ -2,6 +2,7 @@ import pyatspi
from gi.repository import Gtk
from gi.repository import Gdk
from gi.repository import Gio
+from string import Template
from window import CaribouWindowEntry, Rectangle
from keyboard import CaribouKeyboard
@@ -12,6 +13,40 @@ from scan import ScanMaster
debug = False
+CSS_TEMPLATE = """
+.caribou-keyboard-button {
+background-image: none;
+background-color: $normal_bg;
+}
+
+.caribou-keyboard-button:hover {
+background-image: none;
+background-color: $mouseover_bg;
+}
+"""
+
+SCAN_CSS_TEMPLATE = """
+.caribou-scan-key {
+background-image: none;
+background-color: $button_scan;
+}
+
+.caribou-scan-row {
+background-image: none;
+background-color: $row_scan;
+}
+
+.caribou-scan-block {
+background-image: none;
+background-color: $block_scan;
+}
+
+.caribou-scan-cancel {
+background-image: none;
+background-color: $cancel_scan;
+}
+"""
+
class Caribou:
def __init__(self,
kb_factory=CaribouKeyboard,
@@ -34,6 +69,50 @@ class Caribou:
if SettingsManager.scan_enabled.value:
self.scan_master.start()
+ self._custom_css_provider = Gtk.CssProvider()
+
+ for name in ["normal_color", "mouse_over_color", "default_colors"]:
+ getattr(SettingsManager, name).connect("value-changed",
+ self._colors_changed)
+ self._colors_changed(None, None)
+
+ self._scan_css_provider = Gtk.CssProvider()
+ Gtk.StyleContext.add_provider_for_screen(
+ Gdk.Screen.get_default(),
+ self._scan_css_provider,
+ Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
+
+ for name in ["button_scanning_color",
+ "row_scanning_color",
+ "block_scanning_color",
+ "cancel_scanning_color"]:
+ getattr(SettingsManager, name).connect("value-changed",
+ self._scan_colors_changed)
+ self._scan_colors_changed(None, None)
+
+ def _colors_changed(self, setting, value):
+ if SettingsManager.default_colors.value:
+ Gtk.StyleContext.remove_provider_for_screen(
+ Gdk.Screen.get_default(),
+ self._custom_css_provider)
+ else:
+ Gtk.StyleContext.add_provider_for_screen(
+ Gdk.Screen.get_default(),
+ self._custom_css_provider,
+ Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
+ self._custom_css_provider.load_from_data(
+ Template(CSS_TEMPLATE).substitute(
+ normal_bg=SettingsManager.normal_color.value,
+ mouseover_bg=SettingsManager.mouse_over_color.value), -1)
+
+ def _scan_colors_changed(self, setting, value):
+ self._scan_css_provider.load_from_data(Template(SCAN_CSS_TEMPLATE).substitute(
+ button_scan=SettingsManager.button_scanning_color.value,
+ row_scan=SettingsManager.row_scanning_color.value,
+ block_scan=SettingsManager.block_scanning_color.value,
+ cancel_scan=SettingsManager.cancel_scanning_color.value), -1)
+
+
def _register_event_listeners(self):
pyatspi.Registry.registerEventListener(
self.on_focus, "object:state-changed:focused")
@@ -70,8 +149,10 @@ class Caribou:
try:
settings = Gio.Settings('org.gnome.desktop.interface')
atspi = settings.get_boolean("toolkit-accessibility")
+ print "->", atspi
return atspi
except:
+ raise
from gi.repository import GConf
gconfc = GConf.Client.get_default()
atspi1 = gconfc.get_bool(
@@ -80,6 +161,7 @@ class Caribou:
"/desktop/gnome/interface/accessibility2")
return atspi1 or atspi2
except:
+ raise
return False
def on_text_caret_moved(self, event):
@@ -88,17 +170,17 @@ class Caribou:
if debug == True:
print "object:text-caret-moved in", event.host_application.name,
print event.detail1, event.source.description
-
+
def __set_text_location(self, acc):
- text = acc.queryText()
+ text = acc.queryText()
[x, y, width, height] = text.getCharacterExtents(text.caretOffset, pyatspi.DESKTOP_COORDS)
self.window.set_cursor_location(Rectangle(x, y, width, height))
-
+
component = acc.queryComponent()
entry_bb = component.getExtents(pyatspi.DESKTOP_COORDS)
self.window.set_entry_location(entry_bb)
self.window.show_all()
-
+
def __set_entry_location(self, acc):
text = acc.queryText()
cursor_bb = Rectangle(
@@ -115,7 +197,7 @@ class Caribou:
self.window.set_entry_location(entry_bb)
self.window.show_all()
-
+
def on_focus(self, event):
acc = event.source
source_role = acc.getRole()
@@ -133,7 +215,7 @@ class Caribou:
print "enter text widget in", event.host_application.name
elif event.detail1 == 0 and acc == self.__current_acc:
self.window.hide()
- self.__current_acc = None
+ self.__current_acc = None
self.__set_location = None
if debug == True:
print "leave text widget in", event.host_application.name
@@ -147,7 +229,7 @@ class Caribou:
print "enter entry widget in", event.host_application.name
elif event.detail1 == 0:
self.window.hide()
- self.__current_acc = None
+ self.__current_acc = None
self.__set_location = None
if debug == True:
print "leave entry widget in", event.host_application.name
@@ -165,5 +247,5 @@ class Caribou:
def clean_exit(self):
self.scan_master.stop()
self._deregister_event_listeners()
-
-
+
+