def __init__(self): setup_icon_path() check_single_instance("blueman-applet") self.plugin_run_state_changed = False self.Manager = Bluez.Manager() self.Manager.connect_signal('adapter-added', self.on_adapter_added) self.Manager.connect_signal('adapter-removed', self.on_adapter_removed) self.Manager.connect_signal('device-created', self.on_device_created) self.Manager.connect_signal('device-removed', self.on_device_removed) self.DbusSvc = DbusService("org.blueman.Applet", "/") self.Plugins = PersistentPluginManager(AppletPlugin, blueman.plugins.applet, self) self.Plugins.Load() self.Plugins.Run("on_plugins_loaded") self.Manager.watch_name_owner(self._on_dbus_name_appeared, self._on_dbus_name_vanished) self._any_adapter = Bluez.AnyAdapter() self._any_adapter.connect_signal('property-changed', self._on_adapter_property_changed) self._any_device = Bluez.AnyDevice() self._any_device.connect_signal('property-changed', self._on_device_property_changed) Gtk.main()
def __init__(self, selected_hci_dev, socket_id): super(BluemanAdapters, self).__init__(title=_("Bluetooth Adapters")) # Setup dialog self.set_border_width(5) self.set_resizable(False) self.props.icon_name = "blueman-device" self.props.window_position = Gtk.WindowPosition.CENTER self.set_name("BluemanAdapters") self.connect("response", self.on_dialog_response) close_button = self.add_button("_Close", Gtk.ResponseType.CLOSE) close_button.props.receives_default = True close_button.props.use_underline = True self.notebook = Gtk.Notebook() if socket_id: plug = Gtk.Plug.new(socket_id) plug.connect('delete-event', lambda _plug, _event: Gtk.main_quit()) plug.add(self.notebook) plug.show() else: self.get_content_area().add(self.notebook) self.show() self.tabs = {} self._adapters = {} setup_icon_path() Bluez.Manager.watch_name_owner(self._on_dbus_name_appeared, self._on_dbus_name_vanished) check_single_instance("blueman-adapters", lambda time: self.present_with_time(time)) check_bluetooth_status( _("Bluetooth needs to be turned on for the adapter manager to work" ), lambda: exit()) try: self.manager = Bluez.Manager() except Exception as e: logging.exception(e) self.manager = None #fixme: show error dialog and exit self.manager.connect_signal('adapter-added', self.on_adapter_added) self.manager.connect_signal('adapter-removed', self.on_adapter_removed) for adapter in self.manager.get_adapters(): path = adapter.get_object_path() hci_dev = os.path.basename(path) self._adapters[hci_dev] = adapter self.on_adapter_added(self.manager, path) #activate a particular tab according to command line option if selected_hci_dev is not None: if selected_hci_dev in self.tabs: hci_dev_num = int(selected_hci_dev[3:]) self.notebook.set_current_page(hci_dev_num) else: logging.error('Error: the selected adapter does not exist') self.notebook.show_all()
def __init__(self, adapter_name=None, tabledata=None, **kwargs): if not tabledata: tabledata = [] def on_adapter_removed(_manager, path): self.emit("adapter-removed", path) if path == self.__adapter_path: self.clear() self.Adapter = None self.set_adapter() def on_adapter_added(_manager, path): if self.Adapter is None: self.set_adapter(path) self.emit("adapter-added", path) # cache for fast lookup in the list self.path_to_row = {} self.monitored_devices = [] self.manager = bluez.Manager() self.manager.connect_signal('adapter-removed', on_adapter_removed) self.manager.connect_signal('adapter-added', on_adapter_added) any_device = bluez.AnyDevice() any_device.connect_signal("property-changed", self._on_device_property_changed) self.__discovery_time = 0 self.__adapter_path = None self.Adapter = None self.discovering = False data = tabledata + [{ "id": "device", "type": object }, { "id": "dbus_path", "type": str }, { "id": "timestamp", "type": float }] super(DeviceList, self).__init__(data, **kwargs) self.set_name("DeviceList") self.set_adapter(adapter_name) self._any_adapter = bluez.AnyAdapter() self._any_adapter.connect_signal("property-changed", self._on_property_changed) self.selection.connect('changed', self.on_selection_changed) self.icon_theme = Gtk.IconTheme.get_default() self.icon_theme.prepend_search_path(ICON_PATH) # handle icon theme changes self.icon_theme.connect("changed", self.on_icon_theme_changed)
def __init__(self, adapter=None, tabledata=None): if not tabledata: tabledata = [] def on_adapter_removed(path): self.emit("adapter-removed", path) if path == self.__adapter_path: self.clear() self.Adapter = None self.SetAdapter() def on_adapter_added(path): def on_activate(): dprint("adapter powered", path) if self.Adapter is None: self.SetAdapter(path) self.emit("adapter-added", path) a = Bluez.Adapter(path) wait_for_adapter(a, on_activate) #cache for fast lookup in the list self.address_to_row = {} self.path_to_row = {} self.monitored_devices = [] self.discovered_devices = [] self.signals = SignalTracker() try: self.Manager = Bluez.Manager("gobject") self.signals.Handle(self.Manager, on_adapter_removed, "AdapterRemoved") self.signals.Handle(self.Manager, on_adapter_added, "AdapterAdded") except: self.Manager = None self.__discovery_time = 0 self.__adapter_path = None self.Adapter = None self.discovering = False data = [] data = data + tabledata data = data + [ ["device", object], ["dbus_path", str] ] GenericList.__init__(self, data) self.adapter_signals = SignalTracker() self.device_signals = SignalTracker() self.SetAdapter(adapter) self.signals.Handle(self.selection, "changed", self.on_selection_changed)
def __init__(self, selected_hci_dev, socket_id): super().__init__(title=_("Bluetooth Adapters"), border_width=5, resizable=False, icon_name="blueman-device", name="BluemanAdapters") self.connect("delete-event", self._on_close) self.notebook = Gtk.Notebook(visible=True) if socket_id: plug = Gtk.Plug.new(socket_id) plug.show() plug.connect('delete-event', self._on_close) plug.add(self.notebook) else: self.add(self.notebook) self.connect("delete-event", self._on_close) self.show() self.tabs = {} self._adapters = {} setup_icon_path() bluez.Manager.watch_name_owner(self._on_dbus_name_appeared, self._on_dbus_name_vanished) check_single_instance("blueman-adapters", lambda time: self.present_with_time(time)) check_bluetooth_status( _("Bluetooth needs to be turned on for the adapter manager to work" ), lambda: exit()) try: self.manager = bluez.Manager() except Exception as e: logging.exception(e) self.manager = None # fixme: show error dialog and exit self.manager.connect_signal('adapter-added', self.on_adapter_added) self.manager.connect_signal('adapter-removed', self.on_adapter_removed) for adapter in self.manager.get_adapters(): path = adapter.get_object_path() hci_dev = os.path.basename(path) self._adapters[hci_dev] = adapter self.on_adapter_added(self.manager, path) # activate a particular tab according to command line option if selected_hci_dev is not None: if selected_hci_dev in self.tabs: hci_dev_num = int(selected_hci_dev[3:]) self.notebook.set_current_page(hci_dev_num) else: logging.error('Error: the selected adapter does not exist') self.notebook.show_all()
def on_dbus_name_appeared(_connection, name, owner): logging.info("%s %s" % (name, owner)) setup_icon_path() try: self.Applet = AppletService() except DBusProxyFailed: print("Blueman applet needs to be running") exit() check_bluetooth_status(_("Bluetooth needs to be turned on for the device manager to function"), lambda: Gtk.main_quit()) try: bluez.Manager().get_adapter(self.Config['last-adapter']) except bluez.errors.DBusNoSuchAdapterError: logging.error('No bluetooth adapter(s) found.') exit(1) self._applet_sig = self.Applet.connect('g-signal', on_applet_signal) self.connect("delete-event", on_window_delete) self.props.icon_name = "blueman" w, h, x, y = self.Config["window-properties"] if w and h: self.resize(w, h) if x and y: self.move(x, y) sw = self.Builder.get_object("scrollview") # Disable overlay scrolling if Gtk.get_minor_version() >= 16: sw.props.overlay_scrolling = False self.List = ManagerDeviceList(adapter=self.Config["last-adapter"], inst=self) self.List.show() sw.add(self.List) self.Toolbar = ManagerToolbar(self) self.Menu = ManagerMenu(self) self.Stats = ManagerStats(self) if self.List.is_valid_adapter(): self.List.display_known_devices(autoselect=True) self.List.connect("adapter-changed", self.on_adapter_changed) toolbar = self.Builder.get_object("toolbar") statusbar = self.Builder.get_object("statusbar") self.Config.bind_to_widget("show-toolbar", toolbar, "visible") self.Config.bind_to_widget("show-statusbar", statusbar, "visible") self.show()
def __init__(self, adapter_name=None, tabledata=None, **kwargs): if not tabledata: tabledata = [] # cache for fast lookup in the list self.path_to_row: Dict[str, Gtk.TreeRowReference] = {} self.monitored_devices: List[str] = [] self.manager = bluez.Manager() self.manager.connect_signal('adapter-removed', self.__on_manager_signal, 'adapter-removed') self.manager.connect_signal('adapter-added', self.__on_manager_signal, 'adapter-added') self.manager.connect_signal('device-created', self.__on_manager_signal, 'device-created') self.manager.connect_signal('device-removed', self.__on_manager_signal, 'device-removed') self.any_device = bluez.AnyDevice() self.any_device.connect_signal("property-changed", self._on_device_property_changed) self.__discovery_time = 0 self.__adapter_path = None self.Adapter = None self.discovering = False data = tabledata + [{ "id": "device", "type": object }, { "id": "dbus_path", "type": str }, { "id": "timestamp", "type": float }] super().__init__(data, **kwargs) self.set_name("DeviceList") self.set_adapter(adapter_name) self._any_adapter = bluez.AnyAdapter() self._any_adapter.connect_signal("property-changed", self._on_property_changed) self.selection.connect('changed', self.on_selection_changed) self.icon_theme = Gtk.IconTheme.get_default() self.icon_theme.prepend_search_path(ICON_PATH) # handle icon theme changes self.icon_theme.connect("changed", self.on_icon_theme_changed)
def __init__(self, adapter=None, tabledata=None): if not tabledata: tabledata = [] def on_adapter_removed(_manager, path): self.emit("adapter-removed", path) if path == self.__adapter_path: self.clear() self.Adapter = None self.SetAdapter() def on_adapter_added(_manager, path): def on_activate(): logging.info("adapter powered %s" % path) if self.Adapter is None: self.SetAdapter(path) self.emit("adapter-added", path) a = Bluez.Adapter(path) wait_for_adapter(a, on_activate) #cache for fast lookup in the list self.path_to_row = {} self.monitored_devices = [] self.manager = Bluez.Manager() self.manager.connect_signal('adapter-removed', on_adapter_removed) self.manager.connect_signal('adapter-added', on_adapter_added) self.__discovery_time = 0 self.__adapter_path = None self.__signals = {} self.Adapter = None self.discovering = False data = [] data = data + tabledata data = data + [ ["device", object], ["dbus_path", str], ["timestamp", float] ] super(DeviceList, self).__init__(data) self.set_name("DeviceList") self.SetAdapter(adapter) self.selection.connect('changed', self.on_selection_changed)
def __init__(self, blueman): self.blueman = blueman self.adapter_items = {} self._adapters_group = [] self._insert_adapter_item_pos = 2 self.Search = None self.item_adapter = self.blueman.Builder.get_object("item_adapter") self.item_device = self.blueman.Builder.get_object("item_device") self.item_view = self.blueman.Builder.get_object("item_view") self.item_help = self.blueman.Builder.get_object("item_help") help_menu = Gtk.Menu() self.item_help.set_submenu(help_menu) help_menu.show() report_item = create_menuitem(_("_Report a Problem"), get_icon("dialog-warning", 16)) report_item.show() help_menu.append(report_item) report_item.connect( "activate", lambda x: launch("xdg-open %s/issues" % WEBSITE, None, True)) sep = Gtk.SeparatorMenuItem() sep.show() help_menu.append(sep) help_item = create_menuitem("_Help", get_icon("help-about")) help_item.show() help_menu.append(help_item) help_item.connect( "activate", lambda x: show_about_dialog('Blueman ' + _('Device Manager'))) view_menu = Gtk.Menu() self.item_view.set_submenu(view_menu) view_menu.show() item_toolbar = Gtk.CheckMenuItem.new_with_mnemonic(_("Show _Toolbar")) item_toolbar.show() view_menu.append(item_toolbar) self.blueman.Config.bind_to_widget("show-toolbar", item_toolbar, "active") item_statusbar = Gtk.CheckMenuItem.new_with_mnemonic( _("Show _Statusbar")) item_statusbar.show() view_menu.append(item_statusbar) self.blueman.Config.bind_to_widget("show-statusbar", item_statusbar, "active") item_services = Gtk.SeparatorMenuItem() view_menu.append(item_services) item_services.show() group = [] itemf = Gtk.RadioMenuItem.new_with_mnemonic(group, _("Latest Device _First")) itemf.show() group = itemf.get_group() view_menu.append(itemf) iteml = Gtk.RadioMenuItem.new_with_mnemonic(group, _("Latest Device _Last")) iteml.show() group = iteml.get_group() view_menu.append(iteml) itemf.connect( "activate", lambda x: self.blueman.Config.set_boolean( "latest-last", not x.props.active)) iteml.connect( "activate", lambda x: self.blueman.Config.set_boolean( "latest-last", x.props.active)) sep = Gtk.SeparatorMenuItem() sep.show() view_menu.append(sep) item_plugins = create_menuitem(_("Plugins"), get_icon('blueman-plugin', 16)) item_plugins.show() view_menu.append(item_plugins) item_plugins.connect( 'activate', lambda *args: self.blueman.Applet.open_plugin_dialog( ignore_reply=True)) item_services = create_menuitem( _("_Local Services") + "...", get_icon("preferences-desktop", 16)) item_services.connect( 'activate', lambda *args: launch("blueman-services", None, False, "blueman", _("Service Preferences"))) view_menu.append(item_services) item_services.show() adapter_menu = Gtk.Menu() self.item_adapter.set_submenu(adapter_menu) self.item_adapter.props.sensitive = False search_item = create_menuitem(_("_Search"), get_icon("edit-find", 16)) search_item.connect("activate", lambda x: self.blueman.inquiry()) search_item.show() adapter_menu.prepend(search_item) self.Search = search_item sep = Gtk.SeparatorMenuItem() sep.show() adapter_menu.append(sep) sep = Gtk.SeparatorMenuItem() sep.show() adapter_menu.append(sep) adapter_settings = create_menuitem("_Preferences", get_icon("preferences-system", 16)) adapter_settings.connect("activate", lambda x: self.blueman.adapter_properties()) adapter_settings.show() adapter_menu.append(adapter_settings) sep = Gtk.SeparatorMenuItem() sep.show() adapter_menu.append(sep) exit_item = create_menuitem("_Exit", get_icon("application-exit", 16)) exit_item.connect("activate", lambda x: Gtk.main_quit()) exit_item.show() adapter_menu.append(exit_item) self.item_adapter.show() self.item_view.show() self.item_help.show() self.item_device.show() self.item_device.props.sensitive = False self._manager = bluez.Manager() self._manager.connect_signal("adapter-added", self.on_adapter_added) self._manager.connect_signal("adapter-removed", self.on_adapter_removed) blueman.List.connect("device-selected", self.on_device_selected) for adapter in self._manager.list_adapters(): self.on_adapter_added(None, adapter.get_object_path()) self.device_menu = None
def __init__(self, blueman): self.blueman = blueman self.Config = Config("org.blueman.general") self.adapter_items = {} self._adapters_group = [] self._insert_adapter_item_pos = 2 self.Search = None self.item_adapter = self.blueman.Builder.get_object("item_adapter") self.item_device = self.blueman.Builder.get_object("item_device") self.item_view = self.blueman.Builder.get_object("item_view") self.item_help = self.blueman.Builder.get_object("item_help") help_menu = Gtk.Menu() self.item_help.set_submenu(help_menu) help_menu.show() report_item = create_menuitem(_("_Report a Problem"), "dialog-warning") report_item.show() help_menu.append(report_item) report_item.connect("activate", lambda x: launch("xdg-open %s/issues" % WEBSITE, None, True)) sep = Gtk.SeparatorMenuItem() sep.show() help_menu.append(sep) help_item = create_menuitem("_Help", "help-about") help_item.show() help_menu.append(help_item) help_item.connect("activate", lambda x: show_about_dialog('Blueman ' + _('Device Manager'), parent=self.blueman.get_toplevel())) view_menu = Gtk.Menu() self.item_view.set_submenu(view_menu) view_menu.show() item_toolbar = Gtk.CheckMenuItem.new_with_mnemonic(_("Show _Toolbar")) item_toolbar.show() view_menu.append(item_toolbar) self.blueman.Config.bind_to_widget("show-toolbar", item_toolbar, "active") item_statusbar = Gtk.CheckMenuItem.new_with_mnemonic(_("Show _Statusbar")) item_statusbar.show() view_menu.append(item_statusbar) self.blueman.Config.bind_to_widget("show-statusbar", item_statusbar, "active") item_services = Gtk.SeparatorMenuItem() view_menu.append(item_services) item_services.show() sorting_group = [] item_sort = Gtk.MenuItem.new_with_mnemonic(_("S_ort By")) view_menu.append(item_sort) item_sort.show() sorting_menu = Gtk.Menu() item_sort.set_submenu(sorting_menu) self._sort_alias_item = Gtk.RadioMenuItem.new_with_mnemonic(sorting_group, _("_Name")) self._sort_alias_item.show() sorting_group = self._sort_alias_item.get_group() sorting_menu.append(self._sort_alias_item) self._sort_timestamp_item = Gtk.RadioMenuItem.new_with_mnemonic(sorting_group, _("_Added")) self._sort_timestamp_item.show() sorting_menu.append(self._sort_timestamp_item) sort_config = self.Config['sort-by'] if sort_config == "alias": self._sort_alias_item.props.active = True else: self._sort_timestamp_item.props.active = True sort_sep = Gtk.SeparatorMenuItem() sort_sep.show() sorting_menu.append(sort_sep) self._sort_type_item = Gtk.CheckMenuItem.new_with_mnemonic(_("_Descending")) self._sort_type_item.show() sorting_menu.append(self._sort_type_item) if self.Config['sort-order'] == "ascending": self._sort_type_item.props.active = False else: self._sort_type_item.props.active = True sep = Gtk.SeparatorMenuItem() sep.show() view_menu.append(sep) item_plugins = create_menuitem(_("_Plugins"), 'blueman-plugin') item_plugins.show() view_menu.append(item_plugins) item_plugins.connect('activate', self._on_plugin_dialog_activate) item_services = create_menuitem(_("_Local Services") + "...", "preferences-desktop") item_services.connect('activate', lambda *args: launch("blueman-services", None, False, "blueman", _("Service Preferences"))) view_menu.append(item_services) item_services.show() adapter_menu = Gtk.Menu() self.item_adapter.set_submenu(adapter_menu) self.item_adapter.props.sensitive = False search_item = create_menuitem(_("_Search"), "edit-find") search_item.connect("activate", lambda x: self.blueman.inquiry()) search_item.show() adapter_menu.prepend(search_item) self.Search = search_item sep = Gtk.SeparatorMenuItem() sep.show() adapter_menu.append(sep) sep = Gtk.SeparatorMenuItem() sep.show() adapter_menu.append(sep) adapter_settings = create_menuitem("_Preferences", "preferences-system") adapter_settings.connect("activate", lambda x: self.blueman.adapter_properties()) adapter_settings.show() adapter_menu.append(adapter_settings) sep = Gtk.SeparatorMenuItem() sep.show() adapter_menu.append(sep) exit_item = create_menuitem("_Exit", "application-exit") exit_item.connect("activate", lambda x: Gtk.main_quit()) exit_item.show() adapter_menu.append(exit_item) self.item_adapter.show() self.item_view.show() self.item_help.show() self.item_device.show() self.item_device.props.sensitive = False self._manager = bluez.Manager() self._manager.connect_signal("adapter-added", self.on_adapter_added) self._manager.connect_signal("adapter-removed", self.on_adapter_removed) blueman.List.connect("device-selected", self.on_device_selected) for adapter in self._manager.get_adapters(): self.on_adapter_added(None, adapter.get_object_path()) self.device_menu = None self.Config.connect("changed", self._on_settings_changed) self._sort_alias_item.connect("activate", self._on_sorting_changed, "alias") self._sort_timestamp_item.connect("activate", self._on_sorting_changed, "timestamp") self._sort_type_item.connect("activate", self._on_sorting_changed, "sort-type")