diff --git a/glade/preferences_dialog.glade b/glade/preferences_dialog.glade
index a48d1d1a2..df4dce52c 100644
--- a/glade/preferences_dialog.glade
+++ b/glade/preferences_dialog.glade
@@ -438,11 +438,13 @@
-
+
True
- 1
- Active Port:
- GTK_JUSTIFY_RIGHT
+ True
+ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
+ Random Ports
+ 0
+ True
False
@@ -450,19 +452,6 @@
4
-
-
- True
- 0
- 0000
- 5
-
-
- False
- 5
- 5
-
-
True
@@ -476,7 +465,7 @@
False
False
- 6
+ 5
@@ -489,10 +478,46 @@
-
+
True
- <b>TCP Port</b>
- True
+ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
+
+
+ True
+ <b>TCP</b>
+ True
+
+
+ False
+ 5
+
+
+
+
+ True
+ 1
+ Active Port:
+ GTK_JUSTIFY_RIGHT
+
+
+ False
+ 5
+ 1
+
+
+
+
+ True
+ 0
+ 0000
+ 5
+
+
+ False
+ 5
+ 2
+
+
label_item
@@ -530,9 +555,6 @@
True
-
-
-
diff --git a/src/core.py b/src/core.py
index 9e97450aa..fd10ddab3 100644
--- a/src/core.py
+++ b/src/core.py
@@ -845,9 +845,15 @@ class Manager:
print "Applying preferences"
for pref in PREF_FUNCTIONS:
- if PREF_FUNCTIONS[pref] is not None:
+ if PREF_FUNCTIONS[pref] is not None and self.get_pref("random_port") \
+ == False:
PREF_FUNCTIONS[pref](self.get_pref(pref))
-
+ if self.get_pref("random_port"):
+ import random
+ ports = [random.randrange(49152, 65535), random.randrange(49152, 65535)]
+ ports.sort()
+ deluge_core.set_listen_on(ports)
+
# We need to reapply priorities to files after preferences were
# changed
for unique_ID in self.unique_IDs:
diff --git a/src/dialogs.py b/src/dialogs.py
index 210983ae0..619a5f82a 100644
--- a/src/dialogs.py
+++ b/src/dialogs.py
@@ -63,6 +63,7 @@ class PreferencesDlg:
self.glade.get_widget("chk_tracker_proxy").set_active(self.preferences.get("tracker_proxy"))
self.glade.get_widget("chk_dht_proxy").set_active(self.preferences.get("dht_proxy"))
self.glade.get_widget("chk_upnp").set_active(self.preferences.get("use_upnp"))
+ self.glade.get_widget("chk_random_port").set_active(self.preferences.get("random_port"))
self.glade.get_widget("chk_natpmp").set_active(self.preferences.get("use_natpmp"))
self.glade.get_widget("chk_utpex").set_active(self.preferences.get("use_utpex"))
self.glade.get_widget("chk_use_tray").set_active(self.preferences.get("enable_system_tray"))
@@ -135,6 +136,7 @@ class PreferencesDlg:
self.preferences.set("tracker_proxy", self.glade.get_widget("chk_tracker_proxy").get_active())
self.preferences.set("dht_proxy", self.glade.get_widget("chk_dht_proxy").get_active())
self.preferences.set("use_upnp", self.glade.get_widget("chk_upnp").get_active())
+ self.preferences.set("random_port", self.glade.get_widget("chk_random_port").get_active())
self.preferences.set("use_natpmp", self.glade.get_widget("chk_natpmp").get_active())
self.preferences.set("use_utpex", self.glade.get_widget("chk_utpex").get_active())
self.preferences.set("enable_system_tray", self.glade.get_widget("chk_use_tray").get_active())
@@ -203,6 +205,13 @@ class PreferencesDlg:
self.glade.get_widget('chk_lock_tray').set_active(value)
elif widget == self.glade.get_widget('chk_lock_tray'):
self.glade.get_widget('txt_tray_passwd').set_sensitive(value)
+ elif widget == self.glade.get_widget('chk_move_completed'):
+ if self.glade.get_widget('chk_random_port').get_active():
+ self.glade.get_widget('spin_port_min').set_sensitive(False)
+ self.glade.get_widget('spin_port_max').set_sensitive(False)
+ else:
+ self.glade.get_widget('spin_port_min').set_sensitive(True)
+ self.glade.get_widget('spin_port_max').set_sensitive(True)
class MergeDlg:
def __init__(self):
diff --git a/src/pref.py b/src/pref.py
index 0c2281626..f1ef71a74 100644
--- a/src/pref.py
+++ b/src/pref.py
@@ -78,6 +78,7 @@ DEFAULT_PREFS = {
"proxy_password" : "",
"proxy_port": 8080,
"queue_seeds_to_bottom" : False,
+ "random_port" : False,
"show_availability" : True,
"show_dl" : True,
"show_eta" : True,