~ubuntu-branches/ubuntu/wily/blueman/wily-proposed

« back to all changes in this revision

Viewing changes to apps/blueman-applet

  • Committer: Package Import Robot
  • Author(s): Jackson Doak
  • Date: 2014-01-21 08:54:58 UTC
  • mfrom: (2.3.4 sid)
  • Revision ID: package-import@ubuntu.com-20140121085458-riy3j6wk9vfd599j
Tags: 1.23-git201312311147-1ubuntu1
* Merge from debian unstable. Remaining changes:
  - debian/patches/01_dont_autostart_lxde.patch:
    + Don't autostart the applet in LXDE
  - debian/patches/02_dont_crash_on_non-bluetooth_card.patch:
    + Avoid crashing when receiving event for cards blueman shouldn't handle
  - debian/control: Don't depend on python-appindicator
  - debian/patches/03_filemanager_fix.patch:
    + Add support for more filemanagers 

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#!/usr/bin/python
2
2
 
3
 
# Copyright (C) 2008 Valmantas Paliksa <walmis at balticum-tv dot lt>
4
 
# Copyright (C) 2008 Tadas Dailyda <tadas at dailyda dot com>
5
 
#
6
 
# Licensed under the GNU General Public License Version 3
7
 
#
8
 
# This program is free software: you can redistribute it and/or modify
9
 
# it under the terms of the GNU General Public License as published by
10
 
# the Free Software Foundation, either version 3 of the License, or
11
 
# (at your option) any later version.
12
 
#
13
 
# This program is distributed in the hope that it will be useful,
14
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 
# GNU General Public License for more details.
17
 
#
18
 
# You should have received a copy of the GNU General Public License
19
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
 
21
 
 
22
3
import sys
23
4
import os.path
24
5
import os
32
13
 
33
14
#support running uninstalled
34
15
_dirname = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
35
 
if os.path.exists(os.path.join(_dirname,"ChangeLog")):
36
 
        sys.path.insert(0, _dirname)
 
16
if os.path.exists(os.path.join(_dirname, "CHANGELOG.md")):
 
17
    sys.path.insert(0, _dirname)
37
18
 
38
19
from blueman.Constants import *
39
20
from blueman.Functions import *
50
31
 
51
32
from blueman.main.PluginManager import PersistentPluginManager
52
33
 
 
34
 
53
35
class BluemanApplet(object):
54
 
 
55
 
        def __init__(self):
56
 
                setup_icon_path()
57
 
                if not pynotify.init("Blueman"):
58
 
                        dprint("Error: Failed to init pynotify")
59
 
                
60
 
                check_single_instance("blueman-applet")
61
 
 
62
 
 
63
 
                self.Manager = None
64
 
                self.DbusSvc = DbusService("org.blueman.Applet", "/")
65
 
                self.Signals = SignalTracker()
66
 
                
67
 
                self.Plugins = PersistentPluginManager(AppletPlugin, blueman.plugins.applet, self)
68
 
                self.Plugins.Load()
69
 
                        
70
 
                self.Plugins.Run("on_plugins_loaded")
71
 
        
72
 
 
73
 
                self.bus = dbus.SystemBus()
74
 
                self.bus.watch_name_owner("org.bluez", self.on_dbus_name_owner_change)
75
 
                
76
 
                self.bus.add_signal_receiver(self.on_adapter_property_changed, "PropertyChanged", "org.bluez.Adapter", "org.bluez", path_keyword="path")
77
 
 
78
 
 
79
 
                gtk.main()
80
 
                
81
 
        
82
 
        def manager_init(self):
83
 
                try:
84
 
 
85
 
                        self.Signals.DisconnectAll()
86
 
                        self.Manager = Bluez.Manager("gobject")
87
 
                        self.Plugins.Run("on_manager_state_changed", True)
88
 
 
89
 
                        self.Signals.Handle("bluez", self.Manager, self.on_adapter_removed, "AdapterRemoved")
90
 
                        self.Signals.Handle("bluez", self.Manager, self.on_adapter_added, "AdapterAdded")
91
 
                
92
 
                except dbus.exceptions.DBusException, e:
93
 
                        dprint(e)
94
 
                        self.manager_deinit()
95
 
                        dprint("Bluez DBus API not available. Listening for DBus name ownership changes")
96
 
        
97
 
        def manager_deinit(self):
98
 
                self.Signals.DisconnectAll()
99
 
                self.Manager = None
100
 
                self.Plugins.Run("on_manager_state_changed", False)
101
 
                
102
 
        def on_dbus_name_owner_change(self, owner):
103
 
                dprint("org.bluez owner changed to", owner)
104
 
                if owner == "":
105
 
                        self.manager_deinit()
106
 
                elif self.Manager == None:
107
 
                        self.manager_init()
108
 
                
109
 
        def on_adapter_property_changed(self, key, value, path):
110
 
                self.Plugins.Run("on_adapter_property_changed", path, key, value)
111
 
        
112
 
        def on_adapter_added(self, path):
113
 
                dprint("Adapter added ", path)
114
 
                def on_activate():
115
 
                        dprint("Adapter activated")
116
 
                        self.Plugins.Run("on_adapter_added", path)
117
 
 
118
 
                adapter = Bluez.Adapter(path)
119
 
                wait_for_adapter(adapter, on_activate)
120
 
                
121
 
        def on_adapter_removed(self, path):
122
 
                dprint("Adapter removed ", path)
123
 
                self.Plugins.Run("on_adapter_removed", path)
 
36
    def __init__(self):
 
37
        setup_icon_path()
 
38
        if not pynotify.init("Blueman"):
 
39
            dprint("Error: Failed to init pynotify")
 
40
 
 
41
        check_single_instance("blueman-applet")
 
42
 
 
43
        self.Manager = None
 
44
        self.DbusSvc = DbusService("org.blueman.Applet", "/")
 
45
        self.Signals = SignalTracker()
 
46
 
 
47
        self.Plugins = PersistentPluginManager(AppletPlugin, blueman.plugins.applet, self)
 
48
        self.Plugins.Load()
 
49
 
 
50
        self.Plugins.Run("on_plugins_loaded")
 
51
 
 
52
        self.bus = dbus.SystemBus()
 
53
        self.bus.watch_name_owner("org.bluez", self.on_dbus_name_owner_change)
 
54
 
 
55
        self.bus.add_signal_receiver(self.on_adapter_property_changed, "PropertyChanged", "org.bluez.Adapter",
 
56
                                     "org.bluez", path_keyword="path")
 
57
 
 
58
        gtk.main()
 
59
 
 
60
 
 
61
    def manager_init(self):
 
62
        try:
 
63
 
 
64
            self.Signals.DisconnectAll()
 
65
            self.Manager = Bluez.Manager("gobject")
 
66
            self.Plugins.Run("on_manager_state_changed", True)
 
67
 
 
68
            self.Signals.Handle("bluez", self.Manager, self.on_adapter_removed, "AdapterRemoved")
 
69
            self.Signals.Handle("bluez", self.Manager, self.on_adapter_added, "AdapterAdded")
 
70
 
 
71
        except dbus.exceptions.DBusException as e:
 
72
            dprint(e)
 
73
            self.manager_deinit()
 
74
            dprint("Bluez DBus API not available. Listening for DBus name ownership changes")
 
75
 
 
76
    def manager_deinit(self):
 
77
        self.Signals.DisconnectAll()
 
78
        self.Manager = None
 
79
        self.Plugins.Run("on_manager_state_changed", False)
 
80
 
 
81
    def on_dbus_name_owner_change(self, owner):
 
82
        dprint("org.bluez owner changed to", owner)
 
83
        if owner == "":
 
84
            self.manager_deinit()
 
85
        elif self.Manager is None:
 
86
            self.manager_init()
 
87
 
 
88
    def on_adapter_property_changed(self, key, value, path):
 
89
        self.Plugins.Run("on_adapter_property_changed", path, key, value)
 
90
 
 
91
    def on_adapter_added(self, path):
 
92
        dprint("Adapter added ", path)
 
93
 
 
94
        def on_activate():
 
95
            dprint("Adapter activated")
 
96
            self.Plugins.Run("on_adapter_added", path)
 
97
 
 
98
        adapter = Bluez.Adapter(path)
 
99
        wait_for_adapter(adapter, on_activate)
 
100
 
 
101
    def on_adapter_removed(self, path):
 
102
        dprint("Adapter removed ", path)
 
103
        self.Plugins.Run("on_adapter_removed", path)
 
104
 
124
105
 
125
106
BluemanApplet()
126