def _hide_window(self):
        from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow

        window = UlauncherWindow.get_instance()
        if window.is_visible():
            # update UI in the main thread to avoid race conditions
            GLib.idle_add(window.hide_and_clear_input)
Esempio n. 2
0
 def setup(self, _):
     self.hold()  # Keep the app running even without a window
     # These modules are very heavy, so we don't want to load them in the remote
     # pylint: disable=import-outside-toplevel
     from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow
     self.window = UlauncherWindow.get_instance()
     self.window.set_application(self)
    def run(self):
        from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow

        window = UlauncherWindow.get_instance()
        if window.is_visible():
            # update UI in the main thread to avoid race conditions
            GLib.idle_add(window.show_results, self.result_list)
Esempio n. 4
0
    def setup(self, _):
        self.hold()  # Keep the app running even without a window
        self.window = window = UlauncherWindow.get_instance()
        window.set_application(self)
        window.set_keep_above(True)
        window.position_window()
        window.init_theme()

        # this will trigger to show frequent apps if necessary
        window.show_results([])

        if self.settings.get_property('show-indicator-icon'):
            self.appindicator = AppIndicator(self)
            self.appindicator.switch(True)

        if IS_X11:
            # bind hotkey
            Keybinder.init()
            accel_name = self.settings.get_property('hotkey-show-app')
            # bind in the main thread
            GLib.idle_add(self.bind_hotkey, accel_name)

        ExtensionServer.get_instance().start()
        time.sleep(0.01)
        ExtensionRunner.get_instance().run_all()
Esempio n. 5
0
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 _hide_window(self):
        from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow

        window = UlauncherWindow.get_instance()
        if window.is_visible():
            # update UI in the main thread to avoid race conditions
            GLib.idle_add(window.hide_and_clear_input)
Esempio n. 7
0
 def prefs_set_hotkey_show_app(self, query):
     hotkey = query['value']
     # Bind a new key
     # pylint: disable=import-outside-toplevel
     from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow
     ulauncher_window = UlauncherWindow.get_instance()
     ulauncher_window.bind_hotkey(hotkey)
     self.settings.set_property('hotkey-show-app', hotkey)
Esempio n. 8
0
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(
            "DBus name already taken. Ulauncher is probably backgrounded. Did you mean `ulauncher-toggle`?",
            file=sys.stderr)
        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('Extension API version %s', api_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 quitting 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.warning('On KeyboardInterrupt')
    finally:
        Gtk.main_quit()
    def prefs_set_hotkey_show_app(self, url_params):
        hotkey = url_params['query']['value']
        logger.info('Set hotkey-show-app to %s' % hotkey)

        # Bind a new key
        from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow
        ulauncher_window = UlauncherWindow.get_instance()
        ulauncher_window.bind_show_app_hotkey(hotkey)
        self.settings.set_property('hotkey-show-app', hotkey)
        self.settings.save_to_file()
Esempio n. 10
0
 def get_instance(cls):
     from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow
     window = UlauncherWindow.get_instance()
     indicator = cls("ulauncher")
     indicator.set_icon('ulauncher-indicator')
     indicator.add_menu_item(window.on_mnu_preferences_activate, "Preferences")
     indicator.add_menu_item(window.on_mnu_about_activate, "About")
     indicator.add_seperator()
     indicator.add_menu_item(Gtk.main_quit, "Exit")
     return indicator
Esempio n. 11
0
    def _update_query(self):
        from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow

        input = UlauncherWindow.get_instance().get_input()
        input.set_text(self.new_query)

        # Ugly hack:
        # Defer set position, because GTK sets position after change event occurs
        sleep(0.002)
        input.set_position(len(self.new_query))
Esempio n. 12
0
 def get_instance(cls):
     from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow
     window = UlauncherWindow.get_instance()
     indicator = cls("ulauncher")
     indicator.set_icon('ulauncher-indicator')
     indicator.add_menu_item(window.on_mnu_preferences_activate, "Preferences")
     indicator.add_menu_item(window.on_mnu_about_activate, "About")
     indicator.add_seperator()
     indicator.add_menu_item(Gtk.main_quit, "Exit")
     return indicator
    def prefs_set_hotkey_show_app(self, url_params):
        hotkey = url_params['query']['value']
        logger.info('Set hotkey-show-app to %s', hotkey)

        # Bind a new key
        from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow
        ulauncher_window = UlauncherWindow.get_instance()
        ulauncher_window.bind_show_app_hotkey(hotkey)
        self.settings.set_property('hotkey-show-app', hotkey)
        self.settings.save_to_file()
    def prefs_set_theme_name(self, url_params):
        name = url_params['query']['value']
        logger.info('Set theme-name to %s', name)

        self.settings.set_property('theme-name', name)
        self.settings.save_to_file()

        from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow
        ulauncher_window = UlauncherWindow.get_instance()
        ulauncher_window.init_theme()
    def prefs_set_theme_name(self, url_params):
        name = url_params['query']['value']
        logger.info('Set theme-name to %s' % name)

        self.settings.set_property('theme-name', name)
        self.settings.save_to_file()

        from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow
        ulauncher_window = UlauncherWindow.get_instance()
        ulauncher_window.init_theme()
Esempio n. 16
0
    def _update_query(self):
        from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow

        input = UlauncherWindow.get_instance().get_input()
        input.set_text(self.new_query)

        # Ugly hack:
        # Defer set position, because GTK sets position after change event occurs
        sleep(0.002)
        input.set_position(len(self.new_query))
Esempio n. 17
0
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()
Esempio n. 18
0
    def on_hotkey_show_app_key_press_event(self, widget, event):
        # remove GDK_MOD2_MASK, because it seems unnecessary
        mask = event.state
        if mask & Gdk.ModifierType.MOD2_MASK:
            mask ^= Gdk.ModifierType.MOD2_MASK

        label = Gtk.accelerator_get_label(event.keyval, mask)
        accel_name = Gtk.accelerator_name(event.keyval, mask)

        # do nothing for invalid hotkeys
        if not self.is_valid_hotkey(label, accel_name):
            logger.debug("Invalid hotkey '%s', ('%s') is not allowed" %
                         (label, accel_name))
            return

        # Bind a new key
        from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow
        UlauncherWindow.get_instance().bind_show_app_hotkey(accel_name)

        widget.set_text(label)

        self.settings.set_property('hotkey-show-app', accel_name)
        self.settings.save_to_file()
Esempio n. 19
0
    def run(self):
        """
        Runs :meth:`~ulauncher.api.server.ExtensionController.ExtensionController.trigger_event`
        with :class:`ItemEnterEvent`
        """
        # import here to avoid circular deps
        from ulauncher.api.server.DeferredResultRenderer import DeferredResultRenderer
        from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow

        window = UlauncherWindow.get_instance()
        if not window.is_visible():
            return

        renderer = DeferredResultRenderer.get_instance()
        controller = renderer.get_active_controller()
        if controller:
            controller.trigger_event(ItemEnterEvent(self._data))
Esempio n. 20
0
    def run(self):
        """
        Runs :meth:`~ulauncher.api.server.ExtensionController.ExtensionController.trigger_event`
        with :class:`ItemEnterEvent`
        """
        # import here to avoid circular deps
        from ulauncher.api.server.DeferredResultRenderer import DeferredResultRenderer
        from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow

        window = UlauncherWindow.get_instance()
        if not window.is_visible():
            return

        renderer = DeferredResultRenderer.get_instance()
        controller = renderer.get_active_controller()
        if controller:
            controller.trigger_event(ItemEnterEvent(self._data))
Esempio n. 21
0
    def prefs_set(self, query):
        property = query['property']
        value = query['value']
        # This setting is not stored to the config
        if property == 'autostart-enabled':
            self.prefs_set_autostart(value)
            return

        self.settings.set_property(property, value)

        if property == 'show-indicator-icon':
            # pylint: disable=import-outside-toplevel
            from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow
            ulauncher_window = UlauncherWindow.get_instance()
            GLib.idle_add(AppIndicator.get_instance(ulauncher_window).switch, value)
        if property == 'theme-name':
            self.prefs_apply_theme()
Esempio n. 22
0
def main():
    _create_dirs()

    options = parse_options()
    set_up_logging(options)
    logger = logging.getLogger('ulauncher')
    logger.info('Ulauncher version: %s' % get_version())

    # 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:
        logger.debug("Getting the existing instance...")
        show_window = dbus.SessionBus().get_object(
            DBUS_SERVICE, DBUS_PATH).get_dbus_method("show_window")
        show_window()
    else:
        logger.debug("Starting a new instance...")
        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()

        @run_async
        def run_main():
            Gtk.main()

        main_thread = run_main()

        # workaround to make Ctrl+C quiting the app
        try:
            while main_thread.is_alive():
                time.sleep(1)
        except KeyboardInterrupt:
            logger.info('On KeyboardInterrupt')
            Gtk.main_quit()
            main_thread.join()

    sys.exit(0)
Esempio n. 23
0
 def window(self):
     return UlauncherWindow()
Esempio n. 24
0
 def run(self):
     from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow
     UlauncherWindow.get_instance().show_results(self.restul_list)
Esempio n. 25
0
 def __init__(self, new_query):
     self.new_query = new_query
     from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow
     self._input = UlauncherWindow.get_instance().input
Esempio n. 26
0
 def window(self, mocker):
     return UlauncherWindow()
Esempio n. 27
0
 def prefs_apply_theme(self):
     # pylint: disable=import-outside-toplevel
     from ulauncher.ui.windows.UlauncherWindow import UlauncherWindow
     ulauncher_window = UlauncherWindow.get_instance()
     ulauncher_window.init_theme()
Esempio n. 28
0
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()