Example #1
0
    def layout_done(self):
        """Layout operations have finished, record that fact"""
        self.doing_layout = False
        maker = Factory()

        window_last_active_term_mapping = {}
        for window in self.windows:
            if window.is_child_notebook():
                source = window.get_toplevel().get_children()[0]
            else:
                source = window
            window_last_active_term_mapping[window] = copy.copy(
                source.last_active_term)

        for terminal in self.terminals:
            if not terminal.pid:
                terminal.spawn_child()

        for window in self.windows:
            if not window.is_child_notebook():
                # For windows without a notebook ensure Terminal is visible and focussed
                if window_last_active_term_mapping[window]:
                    term = self.find_terminal_by_uuid(
                        window_last_active_term_mapping[window].urn)
                    term.ensure_visible_and_focussed()

        # Build list of new windows using prelayout list
        new_win_list = []
        if self.prelayout_windows:
            for window in self.windows:
                if window not in self.prelayout_windows:
                    new_win_list.append(window)

        # Make sure all new windows get bumped to the top
        for window in new_win_list:
            window.show()
            window.grab_focus()
            try:
                t = GdkX11.x11_get_server_time(window.get_window())
            except (NameError, TypeError, AttributeError):
                t = 0
            window.get_window().focus(t)

        # Awful workaround to be sure that the last focused window is actually the one focused.
        # Don't ask, don't tell policy on this. Even this is not 100%
        if self.last_active_window:
            window = self.find_window_by_uuid(self.last_active_window.urn)
            count = 0
            while count < 1000 and Gtk.events_pending():
                count += 1
                Gtk.main_iteration_do(False)
                window.show()
                window.grab_focus()
                try:
                    t = GdkX11.x11_get_server_time(window.get_window())
                except (NameError, TypeError, AttributeError):
                    t = 0
                window.get_window().focus(t)

        self.prelayout_windows = None
Example #2
0
    def button_press(self, terminal, event):
        """Handles the button press event in the terminal widget. If
        any match string is caught, another aplication is open to
        handle the matched resource uri.
        """
        self.matched_value = ''
        matched_string = self.match_check(
            int(event.x / self.get_char_width()),
            int(event.y / self.get_char_height()))
        value, tag = matched_string

        if event.button == 1 \
                and event.get_state() & Gdk.ModifierType.CONTROL_MASK \
                and value:
            if TERMINAL_MATCH_TAGS[tag] == 'schema':
                # value here should not be changed, it is right and
                # ready to be used.
                pass
            elif TERMINAL_MATCH_TAGS[tag] == 'http':
                value = 'http://%s' % value
            elif TERMINAL_MATCH_TAGS[tag] == 'email':
                value = 'mailto:%s' % value

            Gtk.show_uri(self.get_screen(), value,
                         GdkX11.x11_get_server_time(self.get_window()))
        elif event.button == 3 and matched_string:
            self.matched_value = matched_string[0]
Example #3
0
    def button_press(self, terminal, event):
        """Handles the button press event in the terminal widget. If
        any match string is caught, another aplication is open to
        handle the matched resource uri.
        """
        self.matched_value = ''
        matched_string = self.match_check(
            int(event.x / self.get_char_width()),
            int(event.y / self.get_char_height()))
        value, tag = matched_string

        if event.button == 1 \
                and event.get_state() & Gdk.ModifierType.CONTROL_MASK \
                and value:
            if TERMINAL_MATCH_TAGS[tag] == 'schema':
                # value here should not be changed, it is right and
                # ready to be used.
                pass
            elif TERMINAL_MATCH_TAGS[tag] == 'http':
                value = 'http://%s' % value
            elif TERMINAL_MATCH_TAGS[tag] == 'https':
                value = 'https://%s' % value
            elif TERMINAL_MATCH_TAGS[tag] == 'ftp':
                value = 'ftp://%s' % value
            elif TERMINAL_MATCH_TAGS[tag] == 'email':
                value = 'mailto:%s' % value

            Gtk.show_uri(self.get_screen(), value,
                         GdkX11.x11_get_server_time(self.get_window()))
        elif event.button == 3 and matched_string:
            self.matched_value = matched_string[0]
Example #4
0
    def getXTime(self):
        try:
            time = GdkX11.x11_get_server_time(self.get_window())
        except:
            time = 0

        return time
Example #5
0
 def activate(self):
     if not getattr(self, 'window', None):
         return
     self.window.activate(GdkX11.x11_get_server_time(self.x11window))
     self.window.set_skip_tasklist(False)
     self.window.set_skip_pager(False)
     self.window.make_above()
Example #6
0
    def getXTime(self):
        try:
            time = GdkX11.x11_get_server_time(self.get_window())
        except:
            time = 0

        return time
Example #7
0
 def get_timestamp(self):
     """Returns the timestamp for the windowing server."""
     timestamp = 0
     gdk_window = self.window.get_window()
     if GdkX11 and isinstance(gdk_window, GdkX11.X11Window):
         timestamp = GdkX11.x11_get_server_time(gdk_window)
     return timestamp
Example #8
0
def get_server_time(widget):
    try:
        return GdkX11.x11_get_server_time(widget.get_window())
    except (TypeError, AttributeError):
        # Issue: https://github.com/Guake/guake/issues/1071
        # Wayland does not seem to like `x11_get_server_time`.
        # Use local timestamp instead
        return get_local_timestamp()
Example #9
0
def activate_window(window):
    screen = Wnck.Screen.get_default()
    screen.force_update()
    wnckwin = [
        win for win in screen.get_windows()
        if win.get_xid() == window.get_xid()
    ][0]
    wnckwin.activate(GdkX11.x11_get_server_time(window))
Example #10
0
 def __map_event_cb(self, window, event):
     # have to make the desktop window active
     # since metacity doesn't make it on startup
     timestamp = event.get_time()
     x11_window = self.get_window()
     if not timestamp:
         timestamp = GdkX11.x11_get_server_time(x11_window)
     x11_window.focus(timestamp)
Example #11
0
 def __map_event_cb(self, window, event):
     # have to make the desktop window active
     # since metacity doesn't make it on startup
     timestamp = event.get_time()
     x11_window = self.get_window()
     if not timestamp:
         timestamp = GdkX11.x11_get_server_time(x11_window)
     x11_window.focus(timestamp)
Example #12
0
def activate(window):
    workspace = window.get_workspace()
    now = GdkX11.x11_get_server_time(Gdk.get_default_root_window())
    if workspace is not None:
        # We need to first activate the workspace, otherwise windows on a different workspace might not become visible
        workspace.activate(now)

    window.activate(now)
Example #13
0
def get_server_time(widget):
    try:
        return GdkX11.x11_get_server_time(widget.get_window())
    except (TypeError, AttributeError):
        # Issue: https://github.com/Guake/guake/issues/1071
        # Wayland does not seem to like `x11_get_server_time`.
        # Quick and dirty fix like https://launchpadlibrarian.net/309178299/wayland_fix.diff
        return 0
Example #14
0
 def run(self, window, screen):
     if self.arg:
         if not window.is_minimized():
             window.minimize()
     else:
         if window.is_minimized():
             gdk_window = get_gdk_window(window)
             window.unminimize(GdkX11.x11_get_server_time(gdk_window))
Example #15
0
def main(argv):

    # No arg list, pass out help
    if len(argv) == 0:
        printHelp()
        sys.exit(2)

    buff = 20

    try:
        opts, args = getopt.getopt(argv,"hudlrb:v")
    except getopt.GetoptError as err:
        printHelp()
        sys.exit(2)

    direction = ""
    verbose = False

    for opt, arg in opts:
        if opt == "-h":
            printHelp()
            sys.exit()
        elif opt == "-u":
            direction = "UP"
        elif opt == "-d":
            direction = "DOWN"
        elif opt == "-l":
            direction = "LEFT"
        elif opt == "-r":
            direction = "RIGHT"
        elif opt == "-b":
            buff = int(arg)
        elif opt == "-v":
            verbose = True

    # Grab window list and geo
    Gtk.init([])  # necessary if not using a Gtk.main() loop
    screen = Wnck.Screen.get_default()
    screen.force_update()  # recommended per Wnck documentation

    window_list = screen.get_windows()
    active_window = screen.get_active_window()

    workspace_id = screen.get_active_workspace().get_number()

    if len(window_list) > 0:
        window = findWindow( direction, window_list, workspace_id, active_window, buff, verbose )
    else:
        print( "Empty window list!" )
        sys.exit(2)

    if window != None:
        now = GdkX11.x11_get_server_time(Gdk.get_default_root_window())
        window.activate(now)

    window = None
    screen = None
    Wnck.shutdown()
Example #16
0
def present_window(window: Gtk.Window):
    if window.is_active():
        return

    timestamp = Gtk.get_current_event_time()
    if timestamp == 0:
        from gi.repository import GdkX11
        timestamp = GdkX11.x11_get_server_time(window.get_window())

    window.present_with_time(timestamp)
Example #17
0
 def run(self, window, screen):
     space = screen.get_workspace(self.arg)
     if space:
         active_space = screen.get_active_workspace()
         if active_space and space == active_space:
             return
         # Delay workspace switch or some window managers have display issues
         gdk_window = get_gdk_window(window)
         timestamp = GdkX11.x11_get_server_time(gdk_window)
         GLib.timeout_add(100, self._delayed_activate_workspace, space,
                          timestamp)
Example #18
0
 def _activateCb(self, unused_app):
     if self.gui:
         # The app is already started and the window already created.
         # Present the already existing window.
         # TODO: Use present() instead of present_with_time() when
         # https://bugzilla.gnome.org/show_bug.cgi?id=688830 is fixed.
         x11_server_time = GdkX11.x11_get_server_time(self.gui.get_window())
         self.gui.present_with_time(x11_server_time)
         # No need to show the welcome wizard.
         return
     self.createMainWindow()
     self.welcome_wizard = StartUpWizard(self)
     self.welcome_wizard.show()
Example #19
0
 def _activateCb(self, unused_app):
     if self.gui:
         # The app is already started and the window already created.
         # Present the already existing window.
         # TODO: Use present() instead of present_with_time() when
         # https://bugzilla.gnome.org/show_bug.cgi?id=688830 is fixed.
         x11_server_time = GdkX11.x11_get_server_time(self.gui.get_window())
         self.gui.present_with_time(x11_server_time)
         # No need to show the welcome wizard.
         return
     self.createMainWindow()
     self.welcome_wizard = StartUpWizard(self)
     self.welcome_wizard.show()
Example #20
0
    def on_window_losefocus(self, window, event):
        if self.slide_effect_running:
            return
        if ConfigManager.disable_losefocus_temporary:
            return
        if not ConfigManager.get_conf('losefocus-hiding'):
            return

        if self.get_property('visible'):
            self.losefocus_time = GdkX11.x11_get_server_time(self.get_window())
            if ConfigManager.get_conf('use-animation'):
                self.slide_up()
            self.unrealize()
            self.hide()
Example #21
0
    def on_window_losefocus(self, window, event):
        if self.slide_effect_running:
            return
        if ConfigManager.disable_losefocus_temporary:
            return
        if not ConfigManager.get_conf('losefocus-hiding'):
            return

        if self.get_property('visible'):
            self.losefocus_time = GdkX11.x11_get_server_time(self.get_window())
            if ConfigManager.get_conf('use-animation'):
                self.slide_up()
            self.unrealize()
            self.hide()
Example #22
0
    def reveal(self):
        """ Make window active

        In contrast with present(), brings window to the top
        even after invoking on response on non-gtk events.
        See #1423.
        """
        window = self.get_window()
        if window is None:
            self.show()
            return
        timestamp = Gtk.get_current_event_time()
        if not timestamp:
            timestamp = GdkX11.x11_get_server_time(window)
        window.focus(timestamp)
    def reveal(self):
        """ Make window active

        In contrast with present(), brings window to the top
        even after invoking on response on non-gtk events.
        See #1423.
        """
        window = self.get_window()
        if window is None:
            self.show()
            return
        timestamp = Gtk.get_current_event_time()
        if not timestamp:
            timestamp = GdkX11.x11_get_server_time(window)
        window.focus(timestamp)
Example #24
0
    def reveal(self):
        """
        Make window active.

        Brings the window to the top and makes it acive, even after invoking on
        response to non-gtk events (in contrast to present()).
        See bug #1423
        """
        window = self.get_window()
        if window is None:
            self.show()
            return
        timestamp = Gtk.get_current_event_time()
        if not timestamp:
            timestamp = GdkX11.x11_get_server_time(window)
        window.focus(timestamp)
Example #25
0
    def reveal(self):
        """
        Make window active.

        Brings the window to the top and makes it active, even after
        invoking on response to non-GTK events (in contrast to
        present()).  See bug #1423
        """
        window = self.get_window()
        if window is None:
            self.show()
            return
        timestamp = Gtk.get_current_event_time()
        if not timestamp:
            timestamp = GdkX11.x11_get_server_time(window)
        window.focus(timestamp)
Example #26
0
    def present(self):
        """A version of present that also works if not called from an event
        handler (there is no active input event).
        See https://bugzilla.gnome.org/show_bug.cgi?id=688830
        """

        try:
            from gi.repository import GdkX11
        except ImportError:
            super(Window, self).present()
        else:
            window = self.get_window()
            if window and isinstance(window, GdkX11.X11Window):
                timestamp = GdkX11.x11_get_server_time(window)
                self.present_with_time(timestamp)
            else:
                super(Window, self).present()
Example #27
0
    def present(self):
        """A version of present that also works if not called from an event
        handler (there is no active input event).
        See https://bugzilla.gnome.org/show_bug.cgi?id=688830
        """

        try:
            from gi.repository import GdkX11
        except ImportError:
            super(Window, self).present()
        else:
            window = self.get_window()
            if window and isinstance(window, GdkX11.X11Window):
                timestamp = GdkX11.x11_get_server_time(window)
                self.present_with_time(timestamp)
            else:
                super(Window, self).present()
Example #28
0
 def do_activate(self):
     if self.gui:
         # The app is already started and the window already created.
         # Present the already existing window.
         if self.system.has_x11():
             # TODO: Use present() instead of present_with_time() when
             # https://bugzilla.gnome.org/show_bug.cgi?id=688830 is fixed.
             from gi.repository import GdkX11
             x11_server_time = GdkX11.x11_get_server_time(self.gui.get_window())
             self.gui.present_with_time(x11_server_time)
         else:
             # On Wayland or Quartz (Mac OS X) backend there is no GdkX11,
             # so just use present() directly here.
             self.gui.present()
         # No need to show the welcome wizard.
         return
     self.createMainWindow()
     self.welcome_wizard.show()
Example #29
0
 def do_activate(self):
     if self.gui:
         # The app is already started and the window already created.
         # Present the already existing window.
         if self.system.has_x11():
             # TODO: Use present() instead of present_with_time() when
             # https://bugzilla.gnome.org/show_bug.cgi?id=688830 is fixed.
             from gi.repository import GdkX11
             x11_server_time = GdkX11.x11_get_server_time(self.gui.get_window())
             self.gui.present_with_time(x11_server_time)
         else:
             # On Wayland or Quartz (Mac OS X) backend there is no GdkX11,
             # so just use present() directly here.
             self.gui.present()
         # No need to show the welcome wizard.
         return
     self.createMainWindow()
     self.welcome_wizard.show()
Example #30
0
    def on_hide_window(self, data=None):
        """Handle a request to hide/show the window"""

        if not self.get_property('visible'):
            #Don't show if window has just been hidden because of
            #lost focus
            if (time.time() - self.losefocus_time < 0.1) and \
                self.config['hide_on_lose_focus']:
                return
            if self.position:
                self.move(self.position[0], self.position[1])
            self.show()
            self.grab_focus()
            try:
                t = GdkX11.x11_get_server_time(self.get_window())
            except (TypeError, AttributeError):
                t = 0
            self.get_window().focus(t)
        else:
            self.position = self.get_position()
            self.hidefunc()
Example #31
0
    def show_hide(self):
        if self.slide_effect_running:
            return
        event_time = self.hotkey.get_current_event_time()
        if (self.losefocus_time and self.losefocus_time >= event_time):
            return

        if self.get_visible():
            if ConfigManager.get_conf('use-animation'):
                self.slide_up()
            else:
                self.hide()
            return
        else:
            self.update_ui()
            self.show()
            x11_win = self.get_window()
            x11_time = GdkX11.x11_get_server_time(x11_win)
            x11_win.focus(x11_time)
            if ConfigManager.get_conf('use-animation'):
                self.slide_down()
Example #32
0
    def show_hide(self):
        if self.slide_effect_running:
            return
        event_time = self.hotkey.get_current_event_time()
        if(self.losefocus_time and self.losefocus_time >= event_time):
            return

        if self.get_visible():
            if ConfigManager.get_conf('use-animation'):
                self.slide_up()
            else:
                self.hide()
            return
        else:
            self.update_ui()
            self.show()
            x11_win = self.get_window()
            x11_time = GdkX11.x11_get_server_time(x11_win)
            x11_win.focus(x11_time)
            if ConfigManager.get_conf('use-animation'):
                self.slide_down()
Example #33
0
    def on_hide_window(self, data=None):
        """Handle a request to hide/show the window"""

        if not self.get_property('visible'):
            #Don't show if window has just been hidden because of
            #lost focus
            if (time.time() - self.losefocus_time < 0.1) and \
                self.config['hide_on_lose_focus']:
                return
            if self.position:
                self.move(self.position[0], self.position[1])
            self.show()
            self.grab_focus()
            try:
                t = GdkX11.x11_get_server_time(self.get_window())
            except (TypeError, AttributeError):
                t = 0
            self.get_window().focus(t)
        else:
            self.position = self.get_position()
            self.hidefunc()
    def map_event(self, widget, event):

        dprint("Window is shown. Requesting focus...")

        xid = self.w.get_window().get_xid()
        tstamp = GdkX11.x11_get_server_time(self.w.get_window())

        if self.window_ref == None:

            screen = Wnck.Screen.get_default()
            screen.force_update()

            for w in screen.get_windows():
                if w.get_xid() == xid:
                    self.window_ref = w
                    w.activate(tstamp)
                    break

        if self.window_ref != None:
            self.window_ref.activate(tstamp)

        self.w.present()
def x11_now():
    """ X11 server timestamp """
    return GdkX11.x11_get_server_time(
        Gdk.Screen.get_root_window(Gdk.Screen.get_default()))
Example #36
0
    def layout_done(self):
        """Layout operations have finished, record that fact"""
        self.doing_layout = False
        maker = Factory()

        window_last_active_term_mapping = {}
        for window in self.windows:
            if window.is_child_notebook():
                source = window.get_toplevel().get_children()[0]
            else:
                source = window
            window_last_active_term_mapping[window] = copy.copy(source.last_active_term)

        for terminal in self.terminals:
            if not terminal.pid:
                terminal.spawn_child()

        for window in self.windows:
            if window.is_child_notebook():
                # For windows with a notebook
                notebook = window.get_toplevel().get_children()[0]
                # Cycle through pages by number
                for page in xrange(0, notebook.get_n_pages()):
                    # Try and get the entry in the previously saved mapping
                    mapping = window_last_active_term_mapping[window]
                    page_last_active_term = mapping.get(notebook.get_nth_page(page),  None)
                    if page_last_active_term is None:
                        # Couldn't find entry, so we find the first child of type Terminal
                        children = notebook.get_nth_page(page).get_children()
                        for page_last_active_term in children:
                            if maker.isinstance(page_last_active_term, 'Terminal'):
                                page_last_active_term = page_last_active_term.uuid
                                break
                        else:
                            err('Should never reach here!')
                            page_last_active_term = None
                    if page_last_active_term is None:
                        # Bail on this tab as we're having no luck here, continue with the next
                        continue
                    # Set the notebook entry, then ensure Terminal is visible and focussed
                    urn = page_last_active_term.urn
                    notebook.last_active_term[notebook.get_nth_page(page)] = page_last_active_term
                    if urn:
                        term = self.find_terminal_by_uuid(urn)
                        if term:
                            term.ensure_visible_and_focussed()
            else:
                # For windows without a notebook ensure Terminal is visible and focussed
                if window_last_active_term_mapping[window]:
                    term = self.find_terminal_by_uuid(window_last_active_term_mapping[window].urn)
                    term.ensure_visible_and_focussed()

        # Build list of new windows using prelayout list
        new_win_list = []
        for window in self.windows:
            if window not in self.prelayout_windows:
                new_win_list.append(window)
        
        # Make sure all new windows get bumped to the top
        for window in new_win_list:
            window.show()
            window.grab_focus()
            try:
                t = GdkX11.x11_get_server_time(window.get_window())
            except (TypeError, AttributeError):
                t = 0
            window.get_window().focus(t)

        # Awful workaround to be sure that the last focused window is actually the one focused.
        # Don't ask, don't tell policy on this. Even this is not 100%
        if self.last_active_window:
            window = self.find_window_by_uuid(self.last_active_window.urn)
            count = 0
            while count < 1000 and Gtk.events_pending():
                count += 1
                Gtk.main_iteration_do(False)
                window.show()
                window.grab_focus()
                try:
                    t = GdkX11.x11_get_server_time(window.get_window())
                except (TypeError, AttributeError):
                    t = 0
                window.get_window().focus(t)

        self.prelayout_windows = None
Example #37
0
 def _get_server_time(self):
     server_time = GdkX11.x11_get_server_time(Gdk.get_default_root_window())
     return server_time
Example #38
0
    def layout_done(self):
        """Layout operations have finished, record that fact"""
        self.doing_layout = False
        maker = Factory()

        window_last_active_term_mapping = {}
        for window in self.windows:
            if window.is_child_notebook():
                source = window.get_toplevel().get_children()[0]
            else:
                source = window
            window_last_active_term_mapping[window] = copy.copy(
                source.last_active_term)

        for terminal in self.terminals:
            if not terminal.pid:
                terminal.spawn_child()

        for window in self.windows:
            if window.is_child_notebook():
                # For windows with a notebook
                notebook = window.get_toplevel().get_children()[0]
                # Cycle through pages by number
                for page in range(0, notebook.get_n_pages()):
                    # Try and get the entry in the previously saved mapping
                    mapping = window_last_active_term_mapping[window]
                    page_last_active_term = mapping.get(
                        notebook.get_nth_page(page), None)
                    if page_last_active_term is None:
                        # Couldn't find entry, so we find the first child of type Terminal
                        children = notebook.get_nth_page(page).get_children()
                        for page_last_active_term in children:
                            if maker.isinstance(page_last_active_term,
                                                'Terminal'):
                                page_last_active_term = page_last_active_term.uuid
                                break
                        else:
                            err('Should never reach here!')
                            page_last_active_term = None
                    if page_last_active_term is None:
                        # Bail on this tab as we're having no luck here, continue with the next
                        continue
                    # Set the notebook entry, then ensure Terminal is visible and focussed
                    urn = page_last_active_term.urn
                    notebook.last_active_term[notebook.get_nth_page(
                        page)] = page_last_active_term
                    if urn:
                        term = self.find_terminal_by_uuid(urn)
                        if term:
                            term.ensure_visible_and_focussed()
            else:
                # For windows without a notebook ensure Terminal is visible and focussed
                if window_last_active_term_mapping[window]:
                    term = self.find_terminal_by_uuid(
                        window_last_active_term_mapping[window].urn)
                    term.ensure_visible_and_focussed()

        # Build list of new windows using prelayout list
        new_win_list = []
        for window in self.windows:
            if window not in self.prelayout_windows:
                new_win_list.append(window)

        # Make sure all new windows get bumped to the top
        for window in new_win_list:
            window.show()
            window.grab_focus()
            try:
                t = GdkX11.x11_get_server_time(window.get_window())
            except (TypeError, AttributeError):
                t = 0
            window.get_window().focus(t)

        # Awful workaround to be sure that the last focused window is actually the one focused.
        # Don't ask, don't tell policy on this. Even this is not 100%
        if self.last_active_window:
            window = self.find_window_by_uuid(self.last_active_window.urn)
            count = 0
            while count < 1000 and Gtk.events_pending():
                count += 1
                Gtk.main_iteration_do(False)
                window.show()
                window.grab_focus()
                try:
                    t = GdkX11.x11_get_server_time(window.get_window())
                except (TypeError, AttributeError):
                    t = 0
                window.get_window().focus(t)

        self.prelayout_windows = None
Example #39
0
def get_xserver_time():
    return GdkX11.x11_get_server_time(Gdk.get_default_root_window())
Example #40
0
 def focusApp(process_name):
     now = GdkX11.x11_get_server_time(Gdk.get_default_root_window())
     return ProcessNotifier.getOpenProcsCached()[process_name].activate(now)
Example #41
0
    def on_button_release(self, widget, event):
        self.get_container().active_terminal = self

        self.matched_value = ''
        matched_string = self.vte.match_check(int(event.x / self.vte.get_char_width()), int(event.y / self.vte.get_char_height()))
        value, tag = matched_string

        if event.button == 3:
            self.menu = Gtk.Menu()
            self.menu.connect('deactivate', lambda w: setattr(ConfigManager, 'disable_losefocus_temporary', False))

            if value:
                self.menu_open_link = Gtk.MenuItem(_("Open Link"))
                self.menu_open_link.connect("activate", lambda w: Gtk.show_uri(self.get_screen(), value, GdkX11.x11_get_server_time(self.get_window())))
                self.menu.append(self.menu_open_link)

                self.menu_copy_link = Gtk.MenuItem(_("Copy Link Address"))
                self.menu_copy_link.connect("activate", lambda w: Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD).set_text(value, -1))
                self.menu.append(self.menu_copy_link)

                self.menu.append(Gtk.SeparatorMenuItem.new())

            else:
                self.menu_copy = Gtk.MenuItem(_("Copy"))
                self.menu_copy.connect("activate", lambda w: self.vte.copy_clipboard())
                self.menu.append(self.menu_copy)

                self.menu_paste = Gtk.MenuItem(_("Paste"))
                self.menu_paste.connect("activate", lambda w: self.vte.paste_clipboard())
                self.menu.append(self.menu_paste)


            self.menu_select_all = Gtk.MenuItem(_("Select All"))
            self.menu_select_all.connect("activate", lambda w: self.vte.select_all())
            self.menu.append(self.menu_select_all)

            self.menu.append(Gtk.SeparatorMenuItem.new())

            self.menu_v_split = Gtk.MenuItem(_("Split Vertical"))
            self.menu_v_split.connect("activate", self.split_axis, 'h')
            self.menu.append(self.menu_v_split)

            self.menu_h_split = Gtk.MenuItem(_("Split Horizontal"))
            self.menu_h_split.connect("activate", self.split_axis, 'v')
            self.menu.append(self.menu_h_split)

            self.term_menu = Gtk.Menu()

            self.term = Gtk.MenuItem(_("Terminals"))
            self.term.set_submenu(self.term_menu)

            self.menu_new = Gtk.MenuItem(_("New Terminal"))
            self.submenu_item_connect_hack(self.menu_new, self.new_app, self.menu_new)

            self.set_new_prog = Gtk.MenuItem(_("Set ProgName"))
            self.submenu_item_connect_hack(self.set_new_prog, self.save_progname, self.set_new_prog)

            self.reset_prog = Gtk.MenuItem(_("Reset Default Progname"))
            self.submenu_item_connect_hack(self.reset_prog, self.reset_progname, self.reset_prog)
            
            self.term_menu.append(self.menu_new)
            self.term_menu.append(self.set_new_prog)
            self.term_menu.append(self.reset_prog)
            self.menu.append(self.term)

            self.menu_new = Gtk.MenuItem(_("Save Configuration"))
            self.menu_new.connect("activate", self.save_conf)
            self.menu.append(self.menu_new)

            self.menu_close = Gtk.MenuItem(_("Close"))
            self.menu_close.connect("activate", self.close_node)
            self.menu.append(self.menu_close)

            self.menu.append(Gtk.SeparatorMenuItem.new())

            self.menu_preferences = Gtk.MenuItem(_("Preferences"))
            self.menu_preferences.connect("activate", self.open_preferences)
            self.menu.append(self.menu_preferences)

            self.menu_quit = Gtk.MenuItem(_("Quit"))
            self.menu_quit.connect("activate", lambda w: self.get_toplevel().exit())
            self.menu.append(self.menu_quit)

            self.menu.show_all()

            ConfigManager.disable_losefocus_temporary = True
            self.menu.popup(None, None, None, None, event.button, event.time)
        elif value:
            Gtk.show_uri(self.get_screen(), value, GdkX11.x11_get_server_time(self.get_window()))
Example #42
0
 def run(self, window, screen):
     gdk_window = get_gdk_window(window)
     window.activate(GdkX11.x11_get_server_time(gdk_window))
Example #43
0
    def init_ui(self):
        builder = Gtk.Builder()
        builder.set_translation_domain('terra')
        builder.add_from_file(ConfigManager.data_dir + 'ui/preferences.ui')

        self.window = builder.get_object('preferences_window')
        self.window.connect('destroy', self.on_cancel_clicked)

        self.logo = builder.get_object('terra_logo')
        self.logo_buffer = GdkPixbuf.Pixbuf.new_from_file_at_size(
            ConfigManager.data_dir + 'image/terra.svg', 64, 64)
        self.logo.set_from_pixbuf(self.logo_buffer)

        self.version = builder.get_object('version')
        self.version.set_label(_("Version: ") + ConfigManager.version)

        self.btn_cancel = builder.get_object('btn_cancel')
        self.btn_cancel.connect('clicked', self.on_cancel_clicked)

        self.btn_apply = builder.get_object('btn_apply')
        self.btn_apply.connect('clicked', self.on_apply_clicked)

        self.btn_ok = builder.get_object('btn_ok')
        self.btn_ok.connect('clicked', self.on_ok_clicked)

        self.adj_seperator = builder.get_object('adjustment_seperator')
        self.adj_seperator.set_value(
            int(ConfigManager.get_conf('seperator-size')) * 1.0)

        self.adj_transparency = builder.get_object('adjustment_transparency')
        self.adj_transparency.set_value(
            int(ConfigManager.get_conf('transparency')) * 1.0)

        self.chk_hide_from_taskbar = builder.get_object(
            'chk_hide_from_taskbar')
        self.chk_hide_from_taskbar.set_active(
            ConfigManager.get_conf('skip-taskbar'))

        self.chk_use_border = builder.get_object('chk_use_border')
        self.chk_use_border.set_active(ConfigManager.get_conf('use-border'))

        self.color_text = builder.get_object('color_text')
        self.color_text.set_color(
            Gdk.color_parse(ConfigManager.get_conf('color-text')))

        self.color_background = builder.get_object('color_background')
        self.color_background.set_color(
            Gdk.color_parse(ConfigManager.get_conf('color-background')))

        self.entry_shell = builder.get_object('entry_shell')
        self.entry_shell.set_text(ConfigManager.get_conf('shell'))

        self.entry_select_by_word = builder.get_object('entry_select_by_word')
        self.entry_select_by_word.set_text(
            ConfigManager.get_conf('select-by-word'))

        self.dir_custom = builder.get_object('dir_custom')

        self.radio_home = builder.get_object('radio_home')
        self.radio_pwd = builder.get_object('radio_pwd')
        self.radio_dir_custom = builder.get_object('radio_dir_custom')
        self.radio_dir_custom.connect(
            'toggled', lambda w: self.toggle_sensitive(self.radio_dir_custom,
                                                       [self.dir_custom]))

        dir_conf = ConfigManager.get_conf('dir')
        if dir_conf == '$home$':
            self.radio_home.set_active(True)
        elif dir_conf == '$pwd$':
            self.radio_pwd.set_active(True)
        else:
            self.radio_dir_custom.set_active(True)
            self.dir_custom.set_text(dir_conf)
            self.dir_custom.set_sensitive(True)

        self.background_image = builder.get_object('background_image')
        self.background_image.set_filename(
            ConfigManager.get_conf('background-image'))

        self.clear_background_image = builder.get_object(
            'clear_background_image')
        self.clear_background_image.connect(
            'clicked', lambda w: self.background_image.unselect_all())

        self.font_name = builder.get_object('font_name')
        self.font_name.set_font_name(ConfigManager.get_conf('font-name'))
        self.font_name.set_sensitive(
            not ConfigManager.get_conf('use-default-font'))

        self.chk_use_system_font = builder.get_object('chk_use_system_font')
        self.chk_use_system_font.connect(
            'toggled', lambda w: self.toggle_sensitive(
                self.chk_use_system_font, [self.font_name]))
        self.chk_use_system_font.set_active(
            ConfigManager.get_conf('use-default-font'))

        self.chk_show_scrollbar = builder.get_object('chk_show_scrollbar')
        self.chk_show_scrollbar.set_active(
            ConfigManager.get_conf('show-scrollbar'))

        self.chk_always_on_top = builder.get_object('chk_always_on_top')
        self.chk_always_on_top.set_active(
            ConfigManager.get_conf('always-on-top'))

        self.chk_losefocus = builder.get_object('chk_losefocus')
        self.chk_losefocus.set_active(
            ConfigManager.get_conf('losefocus-hiding'))

        self.chk_hide_on_start = builder.get_object('chk_hide_on_start')
        self.chk_hide_on_start.set_active(
            ConfigManager.get_conf('hide-on-start'))

        # store all keyboard shortcut entry boxes in array for connecting signals together.
        key_entries = []

        self.fullscreen_key = builder.get_object('fullscreen_key')
        self.fullscreen_key.set_text(ConfigManager.get_conf('fullscreen-key'))
        key_entries.append(self.fullscreen_key)

        self.quit_key = builder.get_object('quit_key')
        self.quit_key.set_text(ConfigManager.get_conf('quit-key'))
        key_entries.append(self.quit_key)

        self.new_page_key = builder.get_object('new_page_key')
        self.new_page_key.set_text(ConfigManager.get_conf('new-page-key'))
        key_entries.append(self.new_page_key)

        self.close_page_key = builder.get_object('close_page_key')
        self.close_page_key.set_text(ConfigManager.get_conf('close-page-key'))
        key_entries.append(self.close_page_key)

        self.rename_page_key = builder.get_object('rename_page_key')
        self.rename_page_key.set_text(
            ConfigManager.get_conf('rename-page-key'))
        key_entries.append(self.rename_page_key)

        self.next_page_key = builder.get_object('next_page_key')
        self.next_page_key.set_text(ConfigManager.get_conf('next-page-key'))
        key_entries.append(self.next_page_key)

        self.prev_page_key = builder.get_object('prev_page_key')
        self.prev_page_key.set_text(ConfigManager.get_conf('prev-page-key'))
        key_entries.append(self.prev_page_key)

        self.move_page_left = builder.get_object('move_page_left')
        self.move_page_left.set_text(ConfigManager.get_conf('move-page-left'))
        key_entries.append(self.move_page_left)

        self.move_page_right = builder.get_object('move_page_right')
        self.move_page_right.set_text(
            ConfigManager.get_conf('move-page-right'))
        key_entries.append(self.move_page_right)

        self.global_key = builder.get_object('global_key')
        self.global_key.set_text(ConfigManager.get_conf('global-key'))
        key_entries.append(self.global_key)

        self.select_all_key = builder.get_object('select_all_key')
        self.select_all_key.set_text(ConfigManager.get_conf('select-all-key'))
        key_entries.append(self.select_all_key)

        self.copy_key = builder.get_object('copy_key')
        self.copy_key.set_text(ConfigManager.get_conf('copy-key'))
        key_entries.append(self.copy_key)

        self.paste_key = builder.get_object('paste_key')
        self.paste_key.set_text(ConfigManager.get_conf('paste-key'))
        key_entries.append(self.paste_key)

        self.split_v_key = builder.get_object('split_v_key')
        self.split_v_key.set_text(ConfigManager.get_conf('split-v-key'))
        key_entries.append(self.split_v_key)

        self.split_h_key = builder.get_object('split_h_key')
        self.split_h_key.set_text(ConfigManager.get_conf('split-h-key'))
        key_entries.append(self.split_h_key)

        self.close_node_key = builder.get_object('close_node_key')
        self.close_node_key.set_text(ConfigManager.get_conf('close-node-key'))
        key_entries.append(self.close_node_key)

        self.move_up_key = builder.get_object('move_up_key')
        self.move_up_key.set_text(ConfigManager.get_conf('move-up-key'))
        key_entries.append(self.move_up_key)

        self.move_down_key = builder.get_object('move_down_key')
        self.move_down_key.set_text(ConfigManager.get_conf('move-down-key'))
        key_entries.append(self.move_down_key)

        self.restore_defaults = builder.get_object('restore_defaults')
        self.restore_defaults.connect('clicked',
                                      lambda w: self.restore_defaults_cb())

        self.move_left_key = builder.get_object('move_left_key')
        self.move_left_key.set_text(ConfigManager.get_conf('move-left-key'))
        key_entries.append(self.move_left_key)

        self.move_right_key = builder.get_object('move_right_key')
        self.move_right_key.set_text(ConfigManager.get_conf('move-right-key'))
        key_entries.append(self.move_right_key)

        self.toggle_scrollbars_key = builder.get_object(
            'toggle_scrollbars_key')
        self.toggle_scrollbars_key.set_text(
            ConfigManager.get_conf('toggle-scrollbars-key'))
        key_entries.append(self.toggle_scrollbars_key)

        self.chk_run_on_startup = builder.get_object('chk_run_on_startup')
        self.chk_run_on_startup.set_active(
            os.path.exists(os.environ['HOME'] +
                           '/.config/autostart/terra.desktop'))

        self.open_translation_page = builder.get_object(
            'open_translation_page')
        self.open_translation_page.connect(
            'clicked', lambda w: Gtk.show_uri(
                self.window.get_screen(),
                'https://translations.launchpad.net/terra',
                GdkX11.x11_get_server_time(self.window.get_window())))

        self.report_bug = builder.get_object('report_bug')
        self.report_bug.connect(
            'clicked', lambda w: Gtk.show_uri(
                self.window.get_screen(),
                'https://github.com/Sixdsn/terra-terminal/issues',
                GdkX11.x11_get_server_time(self.window.get_window())))

        self.webpage = builder.get_object('webpage')
        self.webpage.connect(
            'clicked', lambda w: Gtk.show_uri(
                self.window.get_screen(), 'http://terraterminal.org',
                GdkX11.x11_get_server_time(self.window.get_window())))

        self.entry_scrollback_lines = builder.get_object(
            'entry_scrollback_lines')
        self.entry_scrollback_lines.set_text(
            str(ConfigManager.get_conf('scrollback-lines')))

        self.chk_scrollback_unlimited = builder.get_object(
            'chk_scrollback_unlimited')
        self.chk_scrollback_unlimited.connect(
            'toggled', lambda w: self.toggle_sensitive(
                self.chk_scrollback_unlimited, [self.entry_scrollback_lines]))
        self.chk_scrollback_unlimited.set_active(
            ConfigManager.get_conf('infinite-scrollback'))

        self.chk_scroll_on_output = builder.get_object('chk_scroll_on_output')
        self.chk_scroll_on_output.set_active(
            ConfigManager.get_conf('scroll-on-output'))

        self.chk_scroll_on_keystroke = builder.get_object(
            'chk_scroll_on_keystroke')
        self.chk_scroll_on_keystroke.set_active(
            ConfigManager.get_conf('scroll-on-keystroke'))

        self.chk_hide_tab_bar = builder.get_object('chk_hide_tab_bar')
        self.chk_hide_tab_bar.set_active(
            ConfigManager.get_conf('hide-tab-bar'))

        self.chk_hide_tab_bar_fullscreen = builder.get_object(
            'chk_hide_tab_bar_fullscreen')
        self.chk_hide_tab_bar_fullscreen.set_active(
            ConfigManager.get_conf('hide-tab-bar-fullscreen'))

        self.chk_prompt_on_quit = builder.get_object('chk_prompt_on_quit')
        self.chk_prompt_on_quit.set_active(
            ConfigManager.get_conf('prompt-on-quit'))

        self.spawn_term_on_last_close = builder.get_object(
            'spawn-term-on-last-close')
        self.spawn_term_on_last_close.set_active(
            ConfigManager.get_conf('spawn-term-on-last-close'))

        self.entry_step_count = builder.get_object('entry_step_count')
        self.entry_step_count.set_text(
            str(ConfigManager.get_conf('step-count')))

        self.entry_step_time = builder.get_object('entry_step_time')
        self.entry_step_time.set_text(str(ConfigManager.get_conf('step-time')))

        self.chk_use_animation = builder.get_object('chk_use_animation')
        self.chk_use_animation.set_active(
            ConfigManager.get_conf('use-animation'))
        self.chk_use_animation.connect(
            'toggled',
            lambda w: self.toggle_sensitive(self.chk_use_animation, [
                self.entry_step_time, self.entry_step_count
            ]))

        for key_entry in key_entries:
            key_entry.connect('button-press-event', self.clear_key_entry)
            key_entry.connect('key-press-event', self.generate_key_string)
Example #44
0
    def init_ui(self):
        builder = Gtk.Builder()
        builder.set_translation_domain('terra')
        builder.add_from_file(ConfigManager.data_dir + 'ui/preferences.ui')

        self.window = builder.get_object('preferences_window')
        self.window.connect('destroy', self.on_cancel_clicked)

        self.logo = builder.get_object('terra_logo')
        self.logo_buffer = GdkPixbuf.Pixbuf.new_from_file_at_size(ConfigManager.data_dir + 'image/terra.svg', 64, 64)
        self.logo.set_from_pixbuf(self.logo_buffer)

        self.version = builder.get_object('version')
        self.version.set_label(_("Version: ") + ConfigManager.version)

        self.btn_cancel = builder.get_object('btn_cancel')
        self.btn_cancel.connect('clicked', self.on_cancel_clicked)

        self.btn_apply = builder.get_object('btn_apply')
        self.btn_apply.connect('clicked', self.on_apply_clicked)

        self.btn_ok = builder.get_object('btn_ok')
        self.btn_ok.connect('clicked', self.on_ok_clicked)

        self.adj_seperator = builder.get_object('adjustment_seperator')
        self.adj_seperator.set_value(int(ConfigManager.get_conf('seperator-size')) * 1.0)

        self.adj_transparency = builder.get_object('adjustment_transparency')
        self.adj_transparency.set_value(int(ConfigManager.get_conf('transparency')) * 1.0)

        self.chk_hide_from_taskbar = builder.get_object('chk_hide_from_taskbar')
        self.chk_hide_from_taskbar.set_active(ConfigManager.get_conf('skip-taskbar'))

        self.chk_use_border = builder.get_object('chk_use_border')
        self.chk_use_border.set_active(ConfigManager.get_conf('use-border'))

        self.color_text = builder.get_object('color_text')
        self.color_text.set_color(Gdk.color_parse(ConfigManager.get_conf('color-text')))

        self.color_background = builder.get_object('color_background')
        self.color_background.set_color(Gdk.color_parse(ConfigManager.get_conf('color-background')))

        self.entry_shell = builder.get_object('entry_shell')
        self.entry_shell.set_text(ConfigManager.get_conf('shell'))

        self.entry_select_by_word = builder.get_object('entry_select_by_word')
        self.entry_select_by_word.set_text(ConfigManager.get_conf('select-by-word'))

        self.dir_custom = builder.get_object('dir_custom')

        self.radio_home = builder.get_object('radio_home')
        self.radio_pwd = builder.get_object('radio_pwd')
        self.radio_dir_custom = builder.get_object('radio_dir_custom')
        self.radio_dir_custom.connect('toggled', lambda w: self.toggle_sensitive(self.radio_dir_custom, [self.dir_custom]))

        dir_conf = ConfigManager.get_conf('dir')
        if dir_conf == '$home$':
            self.radio_home.set_active(True)
        elif dir_conf == '$pwd$':
            self.radio_pwd.set_active(True)
        else:
            self.radio_dir_custom.set_active(True)
            self.dir_custom.set_text(dir_conf)
            self.dir_custom.set_sensitive(True)

        self.background_image = builder.get_object('background_image')
        self.background_image.set_filename(ConfigManager.get_conf('background-image'))

        self.clear_background_image = builder.get_object('clear_background_image')
        self.clear_background_image.connect('clicked', lambda w: self.background_image.unselect_all())

        self.font_name = builder.get_object('font_name')
        self.font_name.set_font_name(ConfigManager.get_conf('font-name'))
        self.font_name.set_sensitive(not ConfigManager.get_conf('use-default-font'))

        self.chk_use_system_font = builder.get_object('chk_use_system_font')
        self.chk_use_system_font.connect('toggled', lambda w: self.toggle_sensitive(self.chk_use_system_font, [self.font_name]))
        self.chk_use_system_font.set_active(ConfigManager.get_conf('use-default-font'))

        self.chk_show_scrollbar = builder.get_object('chk_show_scrollbar')
        self.chk_show_scrollbar.set_active(ConfigManager.get_conf('show-scrollbar'))

        self.chk_always_on_top = builder.get_object('chk_always_on_top')
        self.chk_always_on_top.set_active(ConfigManager.get_conf('always-on-top'))

        self.chk_losefocus = builder.get_object('chk_losefocus')
        self.chk_losefocus.set_active(ConfigManager.get_conf('losefocus-hiding'))

        self.chk_hide_on_start = builder.get_object('chk_hide_on_start')
        self.chk_hide_on_start.set_active(ConfigManager.get_conf('hide-on-start'))

        # store all keyboard shortcut entry boxes in array for connecting signals together.
        key_entries = []

        self.fullscreen_key = builder.get_object('fullscreen_key')
        self.fullscreen_key.set_text(ConfigManager.get_conf('fullscreen-key'))
        key_entries.append(self.fullscreen_key)

        self.quit_key = builder.get_object('quit_key')
        self.quit_key.set_text(ConfigManager.get_conf('quit-key'))
        key_entries.append(self.quit_key)

        self.new_page_key = builder.get_object('new_page_key')
        self.new_page_key.set_text(ConfigManager.get_conf('new-page-key'))
        key_entries.append(self.new_page_key)

        self.close_page_key = builder.get_object('close_page_key')
        self.close_page_key.set_text(ConfigManager.get_conf('close-page-key'))
        key_entries.append(self.close_page_key)

        self.rename_page_key = builder.get_object('rename_page_key')
        self.rename_page_key.set_text(ConfigManager.get_conf('rename-page-key'))
        key_entries.append(self.rename_page_key)

        self.next_page_key = builder.get_object('next_page_key')
        self.next_page_key.set_text(ConfigManager.get_conf('next-page-key'))
        key_entries.append(self.next_page_key)

        self.prev_page_key = builder.get_object('prev_page_key')
        self.prev_page_key.set_text(ConfigManager.get_conf('prev-page-key'))
        key_entries.append(self.prev_page_key)

        self.move_page_left = builder.get_object('move_page_left')
        self.move_page_left.set_text(ConfigManager.get_conf('move-page-left'))
        key_entries.append(self.move_page_left)

        self.move_page_right = builder.get_object('move_page_right')
        self.move_page_right.set_text(ConfigManager.get_conf('move-page-right'))
        key_entries.append(self.move_page_right)

        self.global_key = builder.get_object('global_key')
        self.global_key.set_text(ConfigManager.get_conf('global-key'))
        key_entries.append(self.global_key)

        self.select_all_key = builder.get_object('select_all_key')
        self.select_all_key.set_text(ConfigManager.get_conf('select-all-key'))
        key_entries.append(self.select_all_key)

        self.copy_key = builder.get_object('copy_key')
        self.copy_key.set_text(ConfigManager.get_conf('copy-key'))
        key_entries.append(self.copy_key)

        self.paste_key = builder.get_object('paste_key')
        self.paste_key.set_text(ConfigManager.get_conf('paste-key'))
        key_entries.append(self.paste_key)

        self.split_v_key = builder.get_object('split_v_key')
        self.split_v_key.set_text(ConfigManager.get_conf('split-v-key'))
        key_entries.append(self.split_v_key)

        self.split_h_key = builder.get_object('split_h_key')
        self.split_h_key.set_text(ConfigManager.get_conf('split-h-key'))
        key_entries.append(self.split_h_key)

        self.close_node_key = builder.get_object('close_node_key')
        self.close_node_key.set_text(ConfigManager.get_conf('close-node-key'))
        key_entries.append(self.close_node_key)

        self.move_up_key = builder.get_object('move_up_key')
        self.move_up_key.set_text(ConfigManager.get_conf('move-up-key'))
        key_entries.append(self.move_up_key)

        self.move_down_key = builder.get_object('move_down_key')
        self.move_down_key.set_text(ConfigManager.get_conf('move-down-key'))
        key_entries.append(self.move_down_key)

        self.restore_defaults = builder.get_object('restore_defaults')
        self.restore_defaults.connect('clicked', lambda w: self.restore_defaults_cb())
        
        self.move_left_key = builder.get_object('move_left_key')
        self.move_left_key.set_text(ConfigManager.get_conf('move-left-key'))
        key_entries.append(self.move_left_key)

        self.move_right_key = builder.get_object('move_right_key')
        self.move_right_key.set_text(ConfigManager.get_conf('move-right-key'))
        key_entries.append(self.move_right_key)

        self.toggle_scrollbars_key = builder.get_object('toggle_scrollbars_key')
        self.toggle_scrollbars_key.set_text(ConfigManager.get_conf('toggle-scrollbars-key'))
        key_entries.append(self.toggle_scrollbars_key)

        self.chk_run_on_startup = builder.get_object('chk_run_on_startup')
        self.chk_run_on_startup.set_active(os.path.exists(os.environ['HOME'] + '/.config/autostart/terra.desktop'))

        self.open_translation_page = builder.get_object('open_translation_page')
        self.open_translation_page.connect('clicked', lambda w: Gtk.show_uri(self.window.get_screen(), 'https://translations.launchpad.net/terra', GdkX11.x11_get_server_time(self.window.get_window())))

        self.report_bug = builder.get_object('report_bug')
        self.report_bug.connect('clicked', lambda w: Gtk.show_uri(self.window.get_screen(), 'https://github.com/Sixdsn/terra-terminal/issues', GdkX11.x11_get_server_time(self.window.get_window())))

        self.webpage = builder.get_object('webpage')
        self.webpage.connect('clicked', lambda w: Gtk.show_uri(self.window.get_screen(), 'http://terraterminal.org', GdkX11.x11_get_server_time(self.window.get_window())))

        self.entry_scrollback_lines = builder.get_object('entry_scrollback_lines')
        self.entry_scrollback_lines.set_text(str(ConfigManager.get_conf('scrollback-lines')))

        self.chk_scrollback_unlimited = builder.get_object('chk_scrollback_unlimited')
        self.chk_scrollback_unlimited.connect('toggled', lambda w: self.toggle_sensitive(self.chk_scrollback_unlimited, [self.entry_scrollback_lines]))
        self.chk_scrollback_unlimited.set_active(ConfigManager.get_conf('infinite-scrollback'))

        self.chk_scroll_on_output = builder.get_object('chk_scroll_on_output')
        self.chk_scroll_on_output.set_active(ConfigManager.get_conf('scroll-on-output'))

        self.chk_scroll_on_keystroke = builder.get_object('chk_scroll_on_keystroke')
        self.chk_scroll_on_keystroke.set_active(ConfigManager.get_conf('scroll-on-keystroke'))
        
        self.chk_hide_tab_bar = builder.get_object('chk_hide_tab_bar')
        self.chk_hide_tab_bar.set_active(ConfigManager.get_conf('hide-tab-bar'))
        
        self.chk_hide_tab_bar_fullscreen = builder.get_object('chk_hide_tab_bar_fullscreen')
        self.chk_hide_tab_bar_fullscreen.set_active(ConfigManager.get_conf('hide-tab-bar-fullscreen'))

        self.chk_prompt_on_quit = builder.get_object('chk_prompt_on_quit')
        self.chk_prompt_on_quit.set_active(ConfigManager.get_conf('prompt-on-quit'))

        self.spawn_term_on_last_close = builder.get_object('spawn-term-on-last-close')
        self.spawn_term_on_last_close.set_active(ConfigManager.get_conf('spawn-term-on-last-close'))

        self.entry_step_count = builder.get_object('entry_step_count')
        self.entry_step_count.set_text(str(ConfigManager.get_conf('step-count')))

        self.entry_step_time = builder.get_object('entry_step_time')
        self.entry_step_time.set_text(str(ConfigManager.get_conf('step-time')))

        self.chk_use_animation = builder.get_object('chk_use_animation')
        self.chk_use_animation.set_active(ConfigManager.get_conf('use-animation'))
        self.chk_use_animation.connect('toggled', lambda w: self.toggle_sensitive(self.chk_use_animation, [self.entry_step_time, self.entry_step_count]))

        for key_entry in key_entries:
            key_entry.connect('button-press-event', self.clear_key_entry)
            key_entry.connect('key-press-event', self.generate_key_string)