12345678910111213141516171819202122232425262728293031323334353637383940 |
- #!/usr/bin/python
- from gi.repository import Gio # pylint: disable=import-error
- from gi.repository import GLib # pylint: disable=import-error
- import sys
- import os
- def pid_callback(launcher, pid, pid_list):
- pid_list.append(pid)
- def launch(desktop, *files, **kwargs):
- wait = kwargs.pop('wait', True)
- launcher = Gio.DesktopAppInfo.new_from_filename(desktop)
- try:
- import dbus
- if hasattr(launcher, 'get_boolean'):
- activatable = launcher.get_boolean('DBusActivatable')
- if activatable:
- bus = dbus.SessionBus()
- service_id = launcher.get_id()
- # cut the .desktop suffix
- service_id = service_id[:-8]
- try:
- bus.start_service_by_name(service_id)
- except dbus.DBusException:
- pass
- except ImportError:
- pass
- if wait:
- pid_list = []
- flags = GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD
- launcher.launch_uris_as_manager(files, None, flags, None, None,
- pid_callback, pid_list)
- for pid in pid_list:
- os.waitpid(pid, 0)
- else:
- launcher.launch(files, None)
- if __name__ == "__main__":
- launch(*sys.argv[1:])
|