1
# Copyright (C) 2007 by Robert Collins
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
# GNU General Public License for more details.
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
"""Notification area icon and notification for Bazaar."""
19
from gi.repository import Gtk
24
return (getattr(bzrlib.plugins, "dbus", None) is not None)
28
return (getattr(bzrlib.plugins, "avahi", None) is not None)
31
class NotifyPopupMenu(Gtk.Menu):
34
super(NotifyPopupMenu, self).__init__()
37
def create_items(self):
38
from bzrlib import errors
39
item = Gtk.CheckMenuItem('_Gateway to LAN')
40
item.connect('toggled', self.toggle_lan_gateway)
42
self.append(Gtk.SeparatorMenuItem())
44
from bzrlib.plugins.dbus.activity import LanGateway
45
self.langateway = LanGateway()
47
item.set_sensitive(False)
48
except errors.BzrError:
49
# FIXME: Should only catch errors that indicate a lan-notify
50
# process is already running.
51
item.set_sensitive(False)
53
item = Gtk.CheckMenuItem('Announce _branches on LAN')
54
item.connect('toggled', self.toggle_announce_branches)
56
self.append(Gtk.SeparatorMenuItem())
58
from bzrlib.plugins.avahi.share import ZeroConfServer
59
from bzrlib import urlutils
60
self.zeroconfserver = ZeroConfServer(urlutils.normalize_url('.'))
62
item.set_sensitive(False)
64
item = Gtk.ImageMenuItem(Gtk.STOCK_PREFERENCES, None)
65
item.connect('activate', self.show_preferences)
67
item = Gtk.ImageMenuItem(Gtk.STOCK_ABOUT, None)
68
item.connect('activate', self.show_about)
70
self.append(Gtk.SeparatorMenuItem())
71
item = Gtk.ImageMenuItem(Gtk.STOCK_QUIT, None)
72
item.connect('activate', Gtk.main_quit)
76
def display(self, icon, event_button, event_time):
77
self.popup(None, None, Gtk.status_icon_position_menu,
78
event_button, event_time, icon)
80
def toggle_lan_gateway(self, item):
82
self.langateway.start()
84
self.langateway.stop()
86
def toggle_announce_branches(self, item):
88
self.zeroconfserver.start()
90
self.zeroconfserver.close()
92
def show_about(self, item):
93
from bzrlib.plugins.gtk.about import AboutDialog
94
dialog = AboutDialog()
97
def show_preferences(self, item):
98
from bzrlib.plugins.gtk.preferences import PreferencesWindow
99
prefs = PreferencesWindow()