Beispiel #1
0
 def __init__(self):
     self.__current_acc = None
     if binary == True:
         self._morse = Morse()
         self._morse.registerListener(caribouwindow.update)
         self._morse.fireToListener(
         )  #get the caribouwindow to do everything on startup
         self.vk = virtkey.virtkey()
    def __init__(self):
        self.__current_acc = None 
        if binary == True:
            self._morse = Morse()
            self._morse.registerListener(caribouwindow.update)
	    self._morse.fireToListener() #get the caribouwindow to do everything on startup
	    self.vk = virtkey.virtkey()
class Caribou:
    def __init__(self):
        self.__current_acc = None 
        if binary == True:
            self._morse = Morse()
            self._morse.registerListener(caribouwindow.update)
	    self._morse.fireToListener() #get the caribouwindow to do everything on startup
	    self.vk = virtkey.virtkey()

    def on_text_caret_moved(self, event):
        if self.__current_acc == event.source:
            self.__set_location(event.source)
            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() 
        [x, y, width, height] = text.getCharacterExtents(text.caretOffset, pyatspi.DESKTOP_COORDS)
        caribouwindow.set_cursor_location(gdk.Rectangle(x, y, width, height))
        
        component = acc.queryComponent()
        entry_bb = component.getExtents(pyatspi.DESKTOP_COORDS)
        caribouwindow.set_entry_location(entry_bb)
        caribouwindow.show_all()
       
    def __set_entry_location(self, acc):
        text = acc.queryText()
        cursor_bb = gdk.Rectangle(
            *text.getCharacterExtents(text.caretOffset,
                                      pyatspi.DESKTOP_COORDS))

        component = acc.queryComponent()
        entry_bb = component.getExtents(pyatspi.DESKTOP_COORDS)

        if cursor_bb == gdk.Rectangle(0, 0, 0, 0):
            cursor_bb = entry_bb

        caribouwindow.set_cursor_location(cursor_bb)
        caribouwindow.set_entry_location(entry_bb)

        caribouwindow.show_all()
       
    def on_focus(self, event):
        acc = event.source
        if pyatspi.STATE_EDITABLE in acc.getState().getStates() or event.source_role == pyatspi.ROLE_TERMINAL:
            if event.source_role in (pyatspi.ROLE_TEXT,
                                     pyatspi.ROLE_PARAGRAPH,
                                     pyatspi.ROLE_PASSWORD_TEXT,
                                     pyatspi.ROLE_TERMINAL):
                if event.type.startswith("focus") or event.detail1 == 1:
                    self.__set_text_location(acc)
                    self.__current_acc = event.source
                    self.__set_location = self.__set_text_location
                    if debug == True:
                        print "enter text widget in", event.host_application.name
                elif event.detail1 == 0:
                    caribouwindow.hide_all()
                    self.__current_acc = None 
                    self.__set_location = None
                    if debug == True:
                        print "leave text widget in", event.host_application.name

            elif event.source_role == pyatspi.ROLE_ENTRY:
                if event.type.startswith("focus") or event.detail1 == 1:
                    self.__set_entry_location(acc)
                    self.__current_acc = event.source
                    self.__set_location = self.__set_entry_location
                    if debug == True:
                        print "enter entry widget in", event.host_application.name
                elif event.detail1 == 0:
                    caribouwindow.hide_all()
                    self.__current_acc = None 
                    self.__set_location = None
                    if debug == True:
                        print "leave entry widget in", event.host_application.name
            else:
                print _("WARNING - Caribou: unhandled editable widget:"), event.source         

        # Firefox does report leave entry widget events.
        # This could be a way to get the entry widget leave events.
        #else:
        #    if event.detail1 == 1:
        #        caribouwindow.hide_all()
        #        print "--> LEAVE EDITABLE TEXT <--"

    def on_key_up(self, event):
        if binary == True:
            self._morse.key_up(event)

    def on_key_down(self, event):
        if binary == True:
            self._morse.key_down(event)
        # key binding for controlling the row column scanning
        if event.event_string == "Shift_R":
            # TODO: implement keyboard scanning
            pass 
        elif event.event_string == "Control_R":
            # The following is a hack to make this program initially type with
            # lower-case letters instead of upper-case; because we're using
            # l-shift and r-shift as our two buttons, it capitalizes whatever
            # we type. We'll start with caps-lock on to reverse that.
            self.vk.press_keycode(66)    # 66 is capslock
            self.vk.release_keycode(66)
            if debug == True:
                print "quitting ..."
            result = pyatspi.Registry.deregisterEventListener(self.on_text_caret_moved, "object:text-caret-moved")
            if debug == True:
                print "deregisterEventListener - object:text-caret-moved ...",
                if result == False:
                    print "OK"
                else:
                    print "FAIL"
            result = pyatspi.Registry.deregisterEventListener(self.on_focus, "object:state-changed:focused")
            if debug == True:
                print "deregisterEventListener - object:state-changed:focused ...",
                if result == False:
                    print "OK"
                else:
                    print "FAIL"
            result = pyatspi.Registry.deregisterEventListener(self.on_focus, "focus")
            if debug == True:
                print "deregisterEventListener - focus ...",
                if result == False:
                    print "OK"
                else:
                    print "FAIL"
            result = pyatspi.Registry.deregisterKeystrokeListener(self.on_key_down, mask=None, kind=(pyatspi.KEY_PRESSED_EVENT,))
            if debug == True:
                print "deregisterKeystrokeListener"
            result = pyatspi.Registry.deregisterKeystrokeListener(self.on_key_up, mask=None, kind=(pyatspi.KEY_RELEASED_EVENT,))
            if debug == True:
                print "deregisterKeystrokeListener"
            gtk.main_quit()
Beispiel #4
0
class Caribou:
    def __init__(self):
        self.__current_acc = None
        if binary == True:
            self._morse = Morse()
            self._morse.registerListener(caribouwindow.update)
            self._morse.fireToListener(
            )  #get the caribouwindow to do everything on startup
            self.vk = virtkey.virtkey()

    def on_text_caret_moved(self, event):
        if self.__current_acc == event.source:
            self.__set_location(event.source)
            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()
        [x, y, width,
         height] = text.getCharacterExtents(text.caretOffset,
                                            pyatspi.DESKTOP_COORDS)
        caribouwindow.set_cursor_location(gdk.Rectangle(x, y, width, height))

        component = acc.queryComponent()
        entry_bb = component.getExtents(pyatspi.DESKTOP_COORDS)
        caribouwindow.set_entry_location(entry_bb)
        caribouwindow.show_all()

    def __set_entry_location(self, acc):
        text = acc.queryText()
        cursor_bb = gdk.Rectangle(*text.getCharacterExtents(
            text.caretOffset, pyatspi.DESKTOP_COORDS))

        component = acc.queryComponent()
        entry_bb = component.getExtents(pyatspi.DESKTOP_COORDS)

        if cursor_bb == gdk.Rectangle(0, 0, 0, 0):
            cursor_bb = entry_bb

        caribouwindow.set_cursor_location(cursor_bb)
        caribouwindow.set_entry_location(entry_bb)

        caribouwindow.show_all()

    def on_focus(self, event):
        acc = event.source
        if pyatspi.STATE_EDITABLE in acc.getState().getStates(
        ) or event.source_role == pyatspi.ROLE_TERMINAL:
            if event.source_role in (pyatspi.ROLE_TEXT, pyatspi.ROLE_PARAGRAPH,
                                     pyatspi.ROLE_PASSWORD_TEXT,
                                     pyatspi.ROLE_TERMINAL):
                if event.type.startswith("focus") or event.detail1 == 1:
                    self.__set_text_location(acc)
                    self.__current_acc = event.source
                    self.__set_location = self.__set_text_location
                    if debug == True:
                        print "enter text widget in", event.host_application.name
                elif event.detail1 == 0:
                    caribouwindow.hide_all()
                    self.__current_acc = None
                    self.__set_location = None
                    if debug == True:
                        print "leave text widget in", event.host_application.name

            elif event.source_role == pyatspi.ROLE_ENTRY:
                if event.type.startswith("focus") or event.detail1 == 1:
                    self.__set_entry_location(acc)
                    self.__current_acc = event.source
                    self.__set_location = self.__set_entry_location
                    if debug == True:
                        print "enter entry widget in", event.host_application.name
                elif event.detail1 == 0:
                    caribouwindow.hide_all()
                    self.__current_acc = None
                    self.__set_location = None
                    if debug == True:
                        print "leave entry widget in", event.host_application.name
            else:
                print _("WARNING - Caribou: unhandled editable widget:"
                        ), event.source

        # Firefox does report leave entry widget events.
        # This could be a way to get the entry widget leave events.
        #else:
        #    if event.detail1 == 1:
        #        caribouwindow.hide_all()
        #        print "--> LEAVE EDITABLE TEXT <--"

    def on_key_up(self, event):
        if binary == True:
            self._morse.key_up(event)

    def on_key_down(self, event):
        if binary == True:
            self._morse.key_down(event)
        # key binding for controlling the row column scanning
        if event.event_string == "Shift_R":
            # TODO: implement keyboard scanning
            pass
        elif event.event_string == "Control_R":
            # The following is a hack to make this program initially type with
            # lower-case letters instead of upper-case; because we're using
            # l-shift and r-shift as our two buttons, it capitalizes whatever
            # we type. We'll start with caps-lock on to reverse that.
            self.vk.press_keycode(66)  # 66 is capslock
            self.vk.release_keycode(66)
            if debug == True:
                print "quitting ..."
            result = pyatspi.Registry.deregisterEventListener(
                self.on_text_caret_moved, "object:text-caret-moved")
            if debug == True:
                print "deregisterEventListener - object:text-caret-moved ...",
                if result == False:
                    print "OK"
                else:
                    print "FAIL"
            result = pyatspi.Registry.deregisterEventListener(
                self.on_focus, "object:state-changed:focused")
            if debug == True:
                print "deregisterEventListener - object:state-changed:focused ...",
                if result == False:
                    print "OK"
                else:
                    print "FAIL"
            result = pyatspi.Registry.deregisterEventListener(
                self.on_focus, "focus")
            if debug == True:
                print "deregisterEventListener - focus ...",
                if result == False:
                    print "OK"
                else:
                    print "FAIL"
            result = pyatspi.Registry.deregisterKeystrokeListener(
                self.on_key_down,
                mask=None,
                kind=(pyatspi.KEY_PRESSED_EVENT, ))
            if debug == True:
                print "deregisterKeystrokeListener"
            result = pyatspi.Registry.deregisterKeystrokeListener(
                self.on_key_up, mask=None, kind=(pyatspi.KEY_RELEASED_EVENT, ))
            if debug == True:
                print "deregisterKeystrokeListener"
            gtk.main_quit()