From 176064b5206b38fcd0861c582ab50bf50f876400 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Mon, 7 Jul 2014 18:54:56 +0100 Subject: [GTKUI] Fix quitting bypassing password lock --- deluge/ui/gtkui/mainwindow.py | 54 +++++++++++++++++++++++++------------------ deluge/ui/gtkui/systemtray.py | 6 ----- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/deluge/ui/gtkui/mainwindow.py b/deluge/ui/gtkui/mainwindow.py index aef8318cf..8f61c09c2 100644 --- a/deluge/ui/gtkui/mainwindow.py +++ b/deluge/ui/gtkui/mainwindow.py @@ -176,31 +176,41 @@ class MainWindow(component.Component): :param shutdown: whether or not to shutdown the daemon as well :type shutdown: boolean """ + def quit_gtkui(): + def shutdown_daemon(result): + return client.daemon.shutdown() - def shutdown_daemon(result): - return client.daemon.shutdown() + def disconnect_client(result): + return client.disconnect() - def disconnect_client(result): - return client.disconnect() + def stop_reactor(result): + try: + reactor.stop() + except ReactorNotRunning: + log.debug("Attempted to stop the reactor but it is not running...") + + def log_failure(failure, action): + log.error("Encountered error attempting to %s: %s" % \ + (action, failure.getErrorMessage())) + + d = defer.succeed(None) + if shutdown: + d.addCallback(shutdown_daemon) + d.addErrback(log_failure, "shutdown daemon") + if not client.is_classicmode() and client.connected(): + d.addCallback(disconnect_client) + d.addErrback(log_failure, "disconnect client") + d.addBoth(stop_reactor) - def stop_reactor(result): - try: - reactor.stop() - except ReactorNotRunning: - log.debug("Attempted to stop the reactor but it is not running...") - - def log_failure(failure, action): - log.error("Encountered error attempting to %s: %s" % \ - (action, failure.getErrorMessage())) - - d = defer.succeed(None) - if shutdown: - d.addCallback(shutdown_daemon) - d.addErrback(log_failure, "shutdown daemon") - if not client.is_classicmode() and client.connected(): - d.addCallback(disconnect_client) - d.addErrback(log_failure, "disconnect client") - d.addBoth(stop_reactor) + if self.config["tray_password"] and not self.visible(): + dialog = PasswordDialog("Enter your pasword to Quit Deluge...") + def on_dialog_response(response_id): + if response_id == gtk.RESPONSE_OK: + if self.config["tray_password"] == sha(dialog.get_password()).hexdigest(): + quit_gtkui() + dialog.run().addCallback(on_dialog_response) + else: + quit_gtkui() def load_window_state(self): x = self.config["window_x_pos"] diff --git a/deluge/ui/gtkui/systemtray.py b/deluge/ui/gtkui/systemtray.py index bcfccb43a..c163bc1ff 100644 --- a/deluge/ui/gtkui/systemtray.py +++ b/deluge/ui/gtkui/systemtray.py @@ -377,16 +377,10 @@ 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(): - self.window.present() - self.window.quit() def on_menuitem_quitdaemon_activate(self, menuitem): log.debug("on_menuitem_quitdaemon_activate") - if self.config["lock_tray"] and not self.window.visible(): - self.window.present() - self.window.quit(shutdown=True) def on_tray_setbwdown(self, widget, data=None): -- cgit