diff options
author | Eitan Isaacson <eitan@monotonous.org> | 2009-11-30 16:37:36 -0800 |
---|---|---|
committer | Eitan Isaacson <eitan@monotonous.org> | 2009-11-30 16:37:36 -0800 |
commit | 0d88cdf8b3c0ce0d2f711cd0a11255dc16eb7ef4 (patch) | |
tree | c5a7bbbdad3b8d4e945faeefda4923a090785e70 | |
parent | 715ebb3fd91d7fa1aef96b79170bf812692ce716 (diff) | |
download | caribou-0d88cdf8b3c0ce0d2f711cd0a11255dc16eb7ef4.tar.gz |
some bigger changes
-rw-r--r-- | src/caribou.py | 8 | ||||
-rw-r--r-- | src/keyboard.py | 77 |
2 files changed, 49 insertions, 36 deletions
diff --git a/src/caribou.py b/src/caribou.py index e03018f..6ee1944 100644 --- a/src/caribou.py +++ b/src/caribou.py @@ -41,7 +41,7 @@ class Test: def __set_text_location(self, acc): text = acc.queryText() [x, y, width, height] = text.getCharacterExtents(text.caretOffset, pyatspi.DESKTOP_COORDS) - cp.set_cursor_location(x, y, width, height) + cp.cursor_location = gtk.gdk.Rectangle(x, y, width, height) cp.show_all() def __set_entry_location(self, acc): @@ -50,9 +50,9 @@ class Test: if x == 0 and y == 0 and width == 0 and height == 0: component = acc.queryComponent() bb = component.getExtents(pyatspi.DESKTOP_COORDS) - cp.set_cursor_location(bb.x, bb.y, bb.width, bb.height) + cp.cursor_location = gtk.gdk.Rectangle(bb.x, bb.y, bb.width, bb.height) else: - cp.set_cursor_location(x, y, width, height) + cp.cursor_location = gtk.gdk.Rectangle(x, y, width, height) cp.show_all() def on_state_changed_focused(self, event): @@ -160,7 +160,7 @@ if __name__ == "__main__": pyatspi.Registry.registerKeystrokeListener(test.on_key_down, mask = None, kind = (pyatspi.KEY_PRESSED_EVENT,)) # TODO: move text entry detection to its own file - cp = keyboard.CaribouWindow() + cp = keyboard.CaribouHoverWindow() cp.hide_all() gtk.main() diff --git a/src/keyboard.py b/src/keyboard.py index c9455ee..d7d290f 100644 --- a/src/keyboard.py +++ b/src/keyboard.py @@ -1,4 +1,4 @@ -# -*- coding: UTF-8 -*- +# -*- coding: utf-8 -*- # # Carbou - On-screen Keyboard and UI navigation application # @@ -100,62 +100,75 @@ class CaribouKeyboard(gtk.Frame): gobject.type_register(CaribouKeyboard) -class CaribouWindow(gtk.VBox): +class CaribouWindow(gtk.Window): __gtype_name__ = "CaribouWindow" def __init__(self): - super(CaribouWindow, self).__init__() + super(CaribouWindow, self).__init__(gtk.WINDOW_POPUP) self.set_name("CaribouWindow") - self.__toplevel = gtk.Window(gtk.WINDOW_POPUP) - self.__toplevel.add(self) - self.__toplevel.connect("size-allocate", lambda w, a: self.__check_position()) - self.__cursor_location = (0, 0) - self.pack_start(CaribouKeyboard(qwerty)) + self._vbox = gtk.VBox() + self.add(self._vbox) - #print "----> SET CURSOR LOCATION" - def set_cursor_location(self, x, y, width, height): - self.__cursor_location = (x, y, width, height) - self.__check_position() + self.connect("size-allocate", lambda w, a: self._update_position()) - def do_size_request(self, requisition): - #print "---->> DO SIZE REQUEST" - gtk.VBox.do_size_request(self, requisition) - self.__toplevel.resize(1, 1) + self._vbox.pack_start(CaribouKeyboard(qwerty)) - def __check_position(self): +class CaribouHoverWindow(CaribouWindow): + __gtype_name__ = "CaribouHoverWindow" + def __init__(self): + super(CaribouHoverWindow, self).__init__() + self._cursor_location = gtk.gdk.Rectangle() + + def _set_cursor_location(self, val): + self._cursor_location = val + self._update_position() + + def _get_cursor_location(self): + return self._cursor_location + + cursor_location = gobject.property(type=object, + setter=_set_cursor_location, + getter=_get_cursor_location) + + def _update_position(self): #print "---->>> CHECK POSITION" - bx = self.__cursor_location[0] + self.__toplevel.allocation.width - by = self.__cursor_location[1] + self.__toplevel.allocation.height + bx = self.cursor_location.x + self.allocation.width + by = self.cursor_location.y + self.allocation.height root_window = gdk.get_default_root_window() sx, sy = root_window.get_size() if bx > sx: - x = sx - self.__toplevel.allocation.width + x = sx - self.allocation.width else: - x = self.__cursor_location[0] + x = self.cursor_location.x if by > sy: - y = self.__cursor_location[1] - self.__toplevel.allocation.height + y = self.cursor_location.y - self.allocation.height else: - y = self.__cursor_location[1] + self.__cursor_location[3] + y = self.cursor_location.y + self.cursor_location.height self.move(x, y) - def show_all(self): - gtk.VBox.show_all(self) - self.__toplevel.show_all() +class CaribouKeyboardPlacement: + LEFT = 0 + RIGHT = 1 + TOP = 0 + BOTTOM = 1 + CENTER = 2 + + SCREEN = 0 + ENTRY = 1 + CURSOR = 2 - def hide_all(self): - gtk.VBox.hide_all(self) - self.__toplevel.hide_all() + INSIDE = 0 + OUTSIDE = 1 - def move(self, x, y): - self.__toplevel.move(x, y) + if __name__ == "__main__": - ckbd = CaribouWindow() + ckbd = CaribouHoverWindow() ckbd.show_all() gtk.main() |