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
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]
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]
def getXTime(self): try: time = GdkX11.x11_get_server_time(self.get_window()) except: time = 0 return time
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()
def getXTime(self): try: time = GdkX11.x11_get_server_time(self.get_window()) except: time = 0 return time
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
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()
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))
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)
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)
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)
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
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))
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()
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)
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)
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()
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()
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()
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()
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)
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)
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)
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()
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()
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()
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()
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 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()
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()
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()))
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
def _get_server_time(self): server_time = GdkX11.x11_get_server_time(Gdk.get_default_root_window()) return server_time
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
def get_xserver_time(): return GdkX11.x11_get_server_time(Gdk.get_default_root_window())
def focusApp(process_name): now = GdkX11.x11_get_server_time(Gdk.get_default_root_window()) return ProcessNotifier.getOpenProcsCached()[process_name].activate(now)
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()))
def run(self, window, screen): gdk_window = get_gdk_window(window) window.activate(GdkX11.x11_get_server_time(gdk_window))
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)
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)