diff --git a/deluge/data/pixmaps/lock48.png b/deluge/data/pixmaps/lock48.png new file mode 100644 index 000000000..f24ae3a60 Binary files /dev/null and b/deluge/data/pixmaps/lock48.png differ diff --git a/deluge/ui/gtkui/systemtray.py b/deluge/ui/gtkui/systemtray.py index 4c0be9564..ae0ac607d 100644 --- a/deluge/ui/gtkui/systemtray.py +++ b/deluge/ui/gtkui/systemtray.py @@ -278,9 +278,9 @@ class SystemTray(component.Component): self.window.hide() else: if self.config["lock_tray"]: - if not self.unlock_tray(): - return - self.window.present() + self.unlock_tray() + else: + self.window.present() def on_tray_popup(self, status_icon, button, activate_time): """Called when the tray icon is right clicked.""" @@ -301,9 +301,9 @@ class SystemTray(component.Component): log.debug("on_menuitem_show_deluge_activate") if menuitem.get_active() and not self.window.visible(): if self.config["lock_tray"]: - if not self.unlock_tray(): - return - self.window.present() + self.unlock_tray() + else: + self.window.present() elif not menuitem.get_active() and self.window.visible(): self.window.hide() @@ -322,8 +322,7 @@ class SystemTray(component.Component): def on_menuitem_quit_activate(self, menuitem): log.debug("on_menuitem_quit_activate") if self.config["lock_tray"] and not self.window.visible(): - if not self.unlock_tray(): - return + self.unlock_tray() if self.config["classic_mode"]: client.daemon.shutdown() @@ -333,8 +332,7 @@ class SystemTray(component.Component): def on_menuitem_quitdaemon_activate(self, menuitem): log.debug("on_menuitem_quitdaemon_activate") if self.config["lock_tray"] and not self.window.visible(): - if not self.unlock_tray(): - return + self.unlock_tray() client.daemon.shutdown() self.window.quit() @@ -370,7 +368,6 @@ class SystemTray(component.Component): from sha import new as sha_hash log.debug("Show tray lock dialog") - result = False if is_showing_dlg[0]: return @@ -380,25 +377,47 @@ class SystemTray(component.Component): entered_pass.set_activates_default(True) entered_pass.set_width_chars(25) entered_pass.set_visibility(False) - entered_pass.show() - tray_lock = gtk.Dialog(title=_("Deluge is locked"), parent=None, - buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, - gtk.RESPONSE_ACCEPT)) - label = gtk.Label(_("Deluge is password protected.\nTo show the Deluge \ -window, please enter your password")) - label.set_line_wrap(True) - label.set_justify(gtk.JUSTIFY_CENTER) - tray_lock.set_position(gtk.WIN_POS_CENTER_ALWAYS) - tray_lock.set_size_request(400, 200) - tray_lock.set_default_response(gtk.RESPONSE_ACCEPT) - tray_lock.vbox.pack_start(label) - tray_lock.vbox.pack_start(entered_pass) - tray_lock.show_all() - if tray_lock.run() == gtk.RESPONSE_ACCEPT: - if self.config["tray_password"] == sha_hash(\ - entered_pass.get_text()).hexdigest(): - result = True - tray_lock.destroy() - is_showing_dlg[0] = False - return result + tray_lock = gtk.Dialog(title="", parent=self.window.window, + buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OK, + gtk.RESPONSE_OK)) + tray_lock.set_default_response(gtk.RESPONSE_OK) + tray_lock.set_has_separator(False) + + tray_lock.set_border_width(5) + + hbox = gtk.HBox(spacing=5) + + image = gtk.image_new_from_file(deluge.common.get_pixmap("lock48.png")) + image.set_alignment(0.5, 0.0) + hbox.pack_start(image, False) + + vbox = gtk.VBox(spacing=5) + hbox.pack_start(vbox, False) + + label = gtk.Label(_("Deluge is password protected!")) + label.set_use_markup(True) + label.set_alignment(0.0, 0.5) + label.set_line_wrap(True) + vbox.pack_start(label, False) + + tlabel = gtk.Label(_("Enter your password to continue")) + tlabel.set_use_markup(True) + tlabel.set_alignment(0.0, 0.5) + tlabel.set_line_wrap(True) + vbox.pack_start(tlabel, False) + + vbox.pack_start(entered_pass) + + tray_lock.vbox.pack_start(hbox) + + def on_response(dialog, response_id): + if response_id == gtk.RESPONSE_OK: + if self.config["tray_password"] == sha_hash(entered_pass.get_text()).hexdigest(): + self.window.present() + + tray_lock.destroy() + is_showing_dlg[0] = False + + tray_lock.connect("response", on_response) + tray_lock.show_all()