def find_desktop_files(dirs=DESKTOP_DIRS): """ :param list dirs: :rtype: list """ all_files = chain.from_iterable( map(lambda f: os.path.join(f_path, f), find_files(f_path, '*.desktop')) for f_path in dirs) # dedup desktop file according to folow XDG data dir order # specifically the first file name (i.e. firefox.desktop) take precedence # and other files with the same name shoudl be ignored deduped_file_dict = OrderedDict() for file_path in all_files: file_name = os.path.basename(file_path) if file_name not in deduped_file_dict: deduped_file_dict[file_name] = file_path deduped_files = deduped_file_dict.itervalues() blacklisted_dirs_srt = Settings.get_instance().get_property( 'blacklisted-desktop-dirs') blacklisted_dirs = blacklisted_dirs_srt.split( ':') if blacklisted_dirs_srt else [] for file in deduped_files: try: if any([ force_unicode(file).startswith(dir) for dir in blacklisted_dirs ]): continue except UnicodeDecodeError: continue yield file
def finish_initializing(self, builder): """Called while initializing this instance in __new__ finish_initalizing should be called after parsing the ui definition and creating a PreferencesDialog object with it in order to finish initializing the start of the new PerferencesUlauncherDialog instance. Put your initialization code in here and leave __init__ undefined. """ # Get a reference to the builder and set up the signals. self.builder = builder self.ui = builder.get_ui(self, True) # unnecessary action area can be removed only manually, like this self.ui['dialog_action_area'].destroy() self.settings = Settings.get_instance() self._init_webview() self.init_styles(get_data_file('styles', 'preferences.css')) self.autostart_pref = AutostartPreference() self.hotkey_dialog = HotkeyDialog() self.hotkey_dialog.connect('hotkey-set', self.on_hotkey_set) self.show_all()
def find_desktop_files(dirs=DESKTOP_DIRS): """ :param list dirs: :rtype: list """ all_files = chain.from_iterable( map(lambda f: os.path.join(f_path, f), find_files(f_path, '*.desktop')) for f_path in dirs) # dedup desktop file according to folow XDG data dir order # specifically the first file name (i.e. firefox.desktop) take precedence # and other files with the same name shoudl be ignored deduped_file_dict = OrderedDict() for file_path in all_files: file_name = os.path.basename(file_path) if file_name not in deduped_file_dict: deduped_file_dict[file_name] = file_path deduped_files = deduped_file_dict.itervalues() blacklisted_dirs_srt = Settings.get_instance().get_property('blacklisted-desktop-dirs') blacklisted_dirs = blacklisted_dirs_srt.split(':') if blacklisted_dirs_srt else [] for file in deduped_files: try: if any([force_unicode(file).startswith(dir) for dir in blacklisted_dirs]): continue except UnicodeDecodeError: continue yield file
def main(): """ Main function that starts everything """ if is_wayland() and gdk_backend().lower() != 'x11' and not is_wayland_compatibility_on(): warn = """ [!] Looks like you are in Wayland session Please run Ulauncher with env var GDK_BACKEND set to 'x11' like this: GDK_BACKEND=x11 ulauncher """ print(warn, file=sys.stderr) sys.exit(1) # start DBus loop DBusGMainLoop(set_as_default=True) bus = dbus.SessionBus() instance = bus.request_name(DBUS_SERVICE) if instance != dbus.bus.REQUEST_NAME_REPLY_PRIMARY_OWNER: toggle_window = dbus.SessionBus().get_object(DBUS_SERVICE, DBUS_PATH).get_dbus_method("toggle_window") toggle_window() return _create_dirs() options = get_options() setup_logging(options) logger = logging.getLogger('ulauncher') logger.info('Ulauncher version %s' % get_version()) logger.info("GTK+ %s.%s.%s" % (Gtk.get_major_version(), Gtk.get_minor_version(), Gtk.get_micro_version())) logger.info("Is Wayland: %s" % is_wayland()) logger.info("Wayland compatibility: %s" % ('on' if is_wayland_compatibility_on() else 'off')) # log uncaught exceptions def except_hook(exctype, value, tb): logger.error("Uncaught exception", exc_info=(exctype, value, tb)) sys.excepthook = except_hook window = UlauncherWindow.get_instance() UlauncherDbusService(window) if not options.hide_window: window.show() if Settings.get_instance().get_property('show-indicator-icon'): AppIndicator.get_instance().show() # workaround to make Ctrl+C quiting the app signal_handler = SignalHandler(window) gtk_thread = run_async(Gtk.main)() try: while gtk_thread.is_alive() and not signal_handler.killed(): time.sleep(0.5) except KeyboardInterrupt: logger.warn('On KeyboardInterrupt') finally: Gtk.main_quit()
def finish_initializing(self, builder): """Called while initializing this instance in __new__ finish_initalizing should be called after parsing the ui definition and creating a PreferencesDialog object with it in order to finish initializing the start of the new PerferencesUlauncherDialog instance. Put your initialization code in here and leave __init__ undefined. """ # Get a reference to the builder and set up the signals. self.builder = builder self.ui = builder.get_ui(self, True) # unnecessary action area can be removed only manually, like this self.ui['dialog_action_area'].destroy() self.settings = Settings.get_instance() self._init_webview() self.init_styles(get_data_file('styles', 'preferences.css')) self.autostart_pref = AutostartPreference() self.hotkey_dialog = HotkeyDialog() self.hotkey_dialog.connect('hotkey-set', self.on_hotkey_set) self.show_all()
def get_current(cls): default = 'light' current_name = Settings.get_instance().get_property('theme-name') or default try: current = themes[current_name] except KeyError: logger.warning('No theme with name %s' % current_name) current = themes[default] return current
def main(): """ Main function that starts everything """ # start DBus loop DBusGMainLoop(set_as_default=True) bus = dbus.SessionBus() instance = bus.request_name(DBUS_SERVICE) if instance != dbus.bus.REQUEST_NAME_REPLY_PRIMARY_OWNER: print("Ulauncher is already running") show_window = dbus.SessionBus().get_object( DBUS_SERVICE, DBUS_PATH).get_dbus_method("show_window") show_window() return _create_dirs() options = get_options() setup_logging(options) logger = logging.getLogger('ulauncher') logger.info('Ulauncher version %s' % get_version()) logger.info("GTK+ %s.%s.%s" % (Gtk.get_major_version(), Gtk.get_minor_version(), Gtk.get_micro_version())) # log uncaught exceptions def except_hook(exctype, value, tb): logger.error("Uncaught exception", exc_info=(exctype, value, tb)) sys.excepthook = except_hook window = UlauncherWindow.get_instance() UlauncherDbusService(window) if not options.hide_window: window.show() if Settings.get_instance().get_property('show-indicator-icon'): AppIndicator.get_instance().show() # workaround to make Ctrl+C quiting the app app_killer = GracefulAppKiller() gtk_thread = run_async(Gtk.main)() try: while gtk_thread.is_alive() and not app_killer.killed(): time.sleep(0.5) except KeyboardInterrupt: logger.warn('On KeyboardInterrupt') finally: Gtk.main_quit()
def finish_initializing(self, builder): """Called while initializing this instance in __new__ finish_initializing should be called after parsing the UI definition and creating a UlauncherWindow object with it in order to finish initializing the start of the new UlauncherWindow instance. """ # Get a reference to the builder and set up the signals. self.builder = builder self.ui = builder.get_ui(self, True) self.PreferencesDialog = None # class self.preferences_dialog = None # instance self.results_nav = None self.window = self.ui['ulauncher_window'] self.input = self.ui['input'] self.prefs_btn = self.ui['prefs_btn'] self.result_box = self.ui["result_box"] self.input.connect('changed', self.on_input_changed) self.prefs_btn.connect('clicked', self.on_mnu_preferences_activate) self.set_keep_above(True) self.PreferencesDialog = PreferencesUlauncherDialog self.settings = Settings.get_instance() self.fix_window_width() self.position_window() self.init_theme() # this will trigger to show frequent apps if necessary self.show_results([]) if not is_wayland_compatibility_on(): # bind hotkey Keybinder.init() accel_name = self.settings.get_property('hotkey-show-app') # bind in the main thread GLib.idle_add(self.bind_show_app_hotkey, accel_name) start_app_watcher() ExtensionServer.get_instance().start() time.sleep(0.01) ExtensionRunner.get_instance().run_all() ExtensionDownloader.get_instance().download_missing()
def find_desktop_files(dirs=DESKTOP_DIRS): """ :param list dirs: :rtype: list """ files = chain.from_iterable( map(lambda f: os.path.join(f_path, f), find_files(f_path, '*.desktop')) for f_path in dirs) blacklisted_dirs_srt = Settings.get_instance().get_property( 'blacklisted-desktop-dirs') blacklisted_dirs = blacklisted_dirs_srt.split( ':') if blacklisted_dirs_srt else [] for file in files: if any([file.startswith(dir) for dir in blacklisted_dirs]): continue yield file
def settings(self): return Settings()
def main(): """ Main function that starts everything """ if is_wayland( ) and gdk_backend().lower() != 'x11' and not is_wayland_compatibility_on(): warn = """ [!] Looks like you are in Wayland session Please run Ulauncher with env var GDK_BACKEND set to 'x11' like this: GDK_BACKEND=x11 ulauncher """ print(warn, file=sys.stderr) sys.exit(1) # start DBus loop DBusGMainLoop(set_as_default=True) bus = dbus.SessionBus() instance = bus.request_name(DBUS_SERVICE) if instance != dbus.bus.REQUEST_NAME_REPLY_PRIMARY_OWNER: toggle_window = dbus.SessionBus().get_object( DBUS_SERVICE, DBUS_PATH).get_dbus_method("toggle_window") toggle_window() return _create_dirs() options = get_options() setup_logging(options) logger = logging.getLogger('ulauncher') logger.info('Ulauncher version %s' % get_version()) logger.info("GTK+ %s.%s.%s" % (Gtk.get_major_version(), Gtk.get_minor_version(), Gtk.get_micro_version())) logger.info("Is Wayland: %s" % is_wayland()) logger.info("Wayland compatibility: %s" % ('on' if is_wayland_compatibility_on() else 'off')) # log uncaught exceptions def except_hook(exctype, value, tb): logger.error("Uncaught exception", exc_info=(exctype, value, tb)) sys.excepthook = except_hook window = UlauncherWindow.get_instance() UlauncherDbusService(window) if not options.hide_window: window.show() if Settings.get_instance().get_property('show-indicator-icon'): AppIndicator.get_instance().show() # workaround to make Ctrl+C quiting the app signal_handler = SignalHandler(window) gtk_thread = run_async(Gtk.main)() try: while gtk_thread.is_alive() and not signal_handler.killed(): time.sleep(0.5) except KeyboardInterrupt: logger.warn('On KeyboardInterrupt') finally: Gtk.main_quit()
def get_theme_prop(name): theme_name = Settings.get_instance().get_property('theme-name') return _read_theme(theme_name)[name]