25
25
pygtk.require("2.0")
28
from awn import extras
29
from awn.extras import _, awnlib
28
from awn.extras import _, awnlib, __version__
30
system_theme_name = "System theme"
32
theme_dir = "/usr/share/icons"
31
33
icon_dir = os.path.join(os.path.dirname(__file__), "icons")
32
theme_dir = os.path.join(os.path.dirname(__file__), "themes")
34
mail_theme_dir = os.path.join(os.path.dirname(__file__), "themes")
33
35
ui_file = os.path.join(os.path.dirname(__file__), "mail.ui")
178
180
self.__dialog.update_email_list()
180
182
def __getIconPath(self, name):
181
path = os.path.join(theme_dir, self.settings["theme"], "scalable",
183
path = os.path.join(mail_theme_dir, self.awn.settings["theme"], "scalable", name + ".svg")
183
184
if os.path.isfile(path):
186
return os.path.join(icon_dir, name + ".svg")
187
path = os.path.join(theme_dir, self.awn.settings["theme"], "scalable/status", name + ".svg")
188
if os.path.isfile(path):
191
return os.path.join(icon_dir, name + ".svg")
188
193
def showWeb(self):
189
194
if hasattr(self.mail, "showWeb"):
198
203
# Now if xdg-open had an option to just open the email client,
199
204
# not start composing a message, that would be just wonderful.
200
if " " in self.settings["email-client"]:
201
subprocess.Popen(self.settings["email-client"], shell=True)
203
subprocess.Popen(self.settings["email-client"])
205
use_shell = " " in self.awn.settings["email-client"]
206
subprocess.Popen(self.awn.settings["email-client"], shell=use_shell)
205
208
def setup_themes(self):
206
"""Loads themes and states"""
208
for state in ["error", "login", "read", "unread"]:
209
states[state] = state
209
"""Loads themes and states.
215
"read" : "mail-read",
216
"unread": "mail-unread"
210
218
self.awn.theme.set_states(states)
211
self.awn.theme.theme(self.settings["theme"])
219
theme = self.awn.settings["theme"] if self.awn.settings["theme"] != system_theme_name else None
220
self.awn.theme.theme(theme)
213
222
def setup_context_menu(self):
214
223
prefs = gtk.Builder()
220
229
self.setup_preferences(prefs)
222
231
def setup_preferences(self, prefs):
223
def change_timeout(timeout):
232
def change_timeout(value):
224
233
if hasattr(self, "timer"):
225
self.timer.change_interval(timeout * 60)
229
"theme": ("Tango", self.awn.theme.theme),
230
"email-client": "evolution -c mail",
231
"hide": (False, self.refresh_hide_applet,
232
prefs.get_object("checkbutton-hide-applet")),
233
"show-network-errors": (True, None,
234
prefs.get_object("checkbutton-alert-errors")),
235
"timeout": (2, change_timeout,
236
prefs.get_object("spinbutton-timeout"))
239
for key, value in default_values.iteritems():
240
if not key in self.awn.settings:
241
self.awn.settings[key] = value
242
self.settings = self.awn.settings
244
entry_client = prefs.get_object("entry-client")
245
entry_client.set_text(self.settings["email-client"])
246
entry_client.connect("changed", self.changed_client_cb)
249
# Get a list of themes
251
return os.path.isdir(os.path.join(theme_dir, path))
252
themes = filter(is_dir, os.listdir(theme_dir))
253
themes.append("Tango")
234
self.timer.change_interval(value * 60)
236
# Only use themes that are likely to provide all the files
237
def filter_theme(theme):
238
return os.path.isfile(os.path.join(theme_dir, theme, "scalable/status/mail-read.svg")) \
239
or os.path.isfile(os.path.join(theme_dir, theme, "48x48/status/mail-read.png"))
240
themes = filter(filter_theme, os.listdir(theme_dir))
241
themes = [system_theme_name] + sorted(themes) + sorted(os.listdir(mail_theme_dir))
256
243
combobox_theme = prefs.get_object("combobox-theme")
257
244
awnlib.add_cell_renderer_text(combobox_theme)
258
245
for theme in themes:
259
combobox_theme.append_text(theme.replace('_', ' '))
260
combobox_theme.set_active(themes.index(self.settings["theme"]))
261
combobox_theme.connect("changed", self.changed_theme_cb)
246
combobox_theme.append_text(theme)
247
if self.awn.settings["theme"] not in themes:
248
self.awn.settings["theme"] = system_theme_name
263
def changed_theme_cb(self, combobox):
264
self.awn.settings["theme"] = \
265
combobox.get_active_text().replace(' ', '_')
250
binder = self.awn.settings.get_binder(prefs)
251
binder.bind("theme", "combobox-theme", key_callback=self.awn.theme.theme)
252
binder.bind("email-client", "entry-client")
253
binder.bind("hide", "checkbutton-hide-applet", key_callback=self.refresh_hide_applet)
254
binder.bind("show-network-errors", "checkbutton-alert-errors")
255
binder.bind("timeout", "spinbutton-timeout", key_callback=change_timeout)
256
self.awn.settings.load_bindings(binder)
267
258
def refresh_hide_applet(self, value):
268
if hasattr(self, "mail") and self.settings["hide"] and \
269
len(self.mail.subjects) == 0:
259
if hasattr(self, "mail") and value and len(self.mail.subjects) == 0:
270
260
self.awn.icon.hide()
271
261
self.awn.dialog.hide()
275
def changed_client_cb(self, entry):
276
self.awn.settings["email-client"] = entry.get_text()
279
266
class MainDialog:
916
903
awnlib.init_start(MailApplet, {
917
904
"name": _("Mail Applet"),
919
"version": extras.__version__,
906
"version": __version__,
920
907
"description": _("An applet to check one's email"),
921
"logo": os.path.join(icon_dir, "read.svg"),
908
"logo": os.path.join(icon_dir, "mail-read.svg"),
922
909
"author": "Pavel Panchekha",
923
910
"copyright-year": "2008",
924
911
"email": "pavpanchekha@gmail.com",
925
"type": ["Network", "Email"],
926
912
"authors": ["onox <denkpadje@gmail.com>",
927
913
"sharkbaitbobby <sharkbaitbobby+awn@gmail.com>",
929
["settings-per-instance", "detach"])