commit 488b7569d78e80a13839eb768c367b862be72480
Author: Mike Perry <mikeperry-git(a)fscked.org>
Date: Wed Jun 29 17:50:34 2011 -0700
Bug #1282: Set fixed window size for each new window.
Rather than one fixed size, we try to bin the resolution into just a few
possibilities, choosing the largest bin possible for a given desktop
resolution. We also cap the width at 1000.
---
src/chrome/content/torbutton.js | 85 ++++++++++++++++++-------------
src/defaults/preferences/preferences.js | 1 +
2 files changed, 50 insertions(+), 36 deletions(-)
diff --git a/src/chrome/content/torbutton.js b/src/chrome/content/torbutton.js
index 8621e7a..e620fec 100644
--- a/src/chrome/content/torbutton.js
+++ b/src/chrome/content/torbutton.js
@@ -3622,42 +3622,17 @@ function torbutton_check_round(browser)
if(torbutton_is_windowed(window)
&& m_tb_prefs.getBoolPref("extensions.torbutton.tor_enabled")
&& m_tb_prefs.getBoolPref("extensions.torbutton.resize_on_toggle")) {
-
- /*
- if(Math.abs(browser.contentWindow.innerHeight -
- Math.floor(Math.round(browser.contentWindow.innerHeight/50.0)*50))
- > 0.1) {
- if(m_tb_window_height < 100 && m_tb_window_width < 100) {
- torbutton_log(3, "Window size damn near zero: ("+
- m_tb_window_height+", "+m_tb_window_width+")");
- m_tb_window_height = window.outerHeight;
- m_tb_window_width = window.outerWidth;
- } else {
- torbutton_log(3, "Restoring orig window size: "+window.windowState);
- window.outerHeight = m_tb_window_height;
- window.outerWidth = m_tb_window_width;
- }
- }
- */
-
- // Always round.
- torbutton_log(3, "Resizing window on load: "+window.windowState);
var bWin = browser.contentWindow;
- /*
- * Instead of direct adjustment, we must update the outer window
- * size, because firefox is sloppy about repositioning widgets
- * properly after inner size changes.
- bWin.innerHeight = Math.round(bWin.innerHeight/50.0)*50;
- bWin.innerWidth = Math.round(bWin.innerWidth/50.0)*50;
- */
+ torbutton_log(2, "About to resize load window: "+bWin.innerWidth+"x"+bWin.innerHeight+" in state "+window.windowState);
- var hDelta = Math.round(bWin.innerHeight/50.0)*50 - bWin.innerHeight;
- var wDelta = Math.round(bWin.innerWidth/50.0)*50 - bWin.innerWidth;
+ var height = Math.round(bWin.innerHeight/50.0)*50;
+ var width = Math.round(bWin.innerWidth/50.0)*50;
- window.resizeBy(wDelta,hDelta);
- torbutton_log(2, "Resized window: ("+window.outerHeight+","+window.outerWidth+") ?= ("
- +bWin.innerHeight+","+bWin.innerWidth+")");
- //+bWin.screen.availHeight+","+bWin.screen.availWidth+")");
+ // This is fun. any attempt to resize the inner window actually resizes the outer width first.
+ // This hack seems to do the trick:
+ bWin.resizeTo(width,height);
+ bWin.resizeBy(width-bWin.innerWidth,height-bWin.innerHeight);
+ torbutton_log(3, "Resized window on load to: "+bWin.innerWidth+"x"+bWin.innerHeight+" in state "+window.windowState);
m_tb_window_height = window.outerHeight;
m_tb_window_width = window.outerWidth;
@@ -3665,6 +3640,43 @@ function torbutton_check_round(browser)
}
}
+function torbutton_set_window_size(bWin) {
+ if (!bWin || typeof(bWin) == "undefined") {
+ torbutton_log(5, "No initial browser content window?");
+ return;
+ }
+
+ if (m_tb_prefs.getBoolPref("extensions.torbutton.resize_new_windows")
+ && m_tb_prefs.getBoolPref("extensions.torbutton.tor_enabled")
+ && torbutton_is_windowed(window)) {
+ // We need to set the inner width to an initial value because it has none
+ // at this point...
+ bWin.innerWidth = 200;
+ bWin.innerHeight = 200;
+ torbutton_log(2, "About to resize new window: "+window.outerWidth+"x"+window.outerHeight+" in state "+window.windowState);
+
+ var maxHeight = window.screen.availHeight - (window.outerHeight - bWin.innerHeight) - 1;
+ var maxWidth = window.screen.availWidth - (window.outerWidth - bWin.innerWidth) -1;
+
+ var width;
+ var height;
+
+ if (maxWidth > 1000) {
+ width = 1000;
+ } else {
+ width = Math.floor(maxWidth/200.0)*200;
+ }
+
+ height = Math.floor(maxHeight/100.0)*100;
+
+ // This is fun. any attempt to resize the inner window actually resizes the outer width first.
+ // This hack seems to do the trick:
+ bWin.resizeTo(width,height);
+ bWin.resizeBy(width-bWin.innerWidth,height-bWin.innerHeight);
+ torbutton_log(3, "Resized new window from: "+bWin.innerWidth+"x"+bWin.innerHeight+" to "+width+"x"+height+" in state "+window.windowState);
+ }
+}
+
function torbutton_new_window(event)
{
torbutton_log(3, "New window");
@@ -3675,15 +3687,14 @@ function torbutton_new_window(event)
return;
}
- // Add tab open listener..
- browser.tabContainer.addEventListener("TabOpen", torbutton_new_tab, false);
-
m_tb_window_height = window.outerHeight;
m_tb_window_width = window.outerWidth;
if (!m_tb_wasinited) {
torbutton_init();
}
+ // Add tab open listener..
+ browser.tabContainer.addEventListener("TabOpen", torbutton_new_tab, false);
torbutton_do_startup();
torbutton_crash_recover();
@@ -3695,6 +3706,8 @@ function torbutton_new_window(event)
!m_tb_prefs.getBoolPref("extensions.torbutton.tor_enabled"),
m_tb_prefs.getBoolPref("extensions.torbutton.no_tor_plugins"));
+ torbutton_set_window_size(browser.contentWindow);
+
//window.addEventListener("resize", torbutton_do_resize, true);
}
diff --git a/src/defaults/preferences/preferences.js b/src/defaults/preferences/preferences.js
index 6c874b6..9a406f5 100644
--- a/src/defaults/preferences/preferences.js
+++ b/src/defaults/preferences/preferences.js
@@ -149,6 +149,7 @@ pref("extensions.torbutton.close_tor",false);
pref("extensions.torbutton.close_nontor",false);
pref("extensions.torbutton.block_js_history",true);
pref("extensions.torbutton.resize_on_toggle",true);
+pref("extensions.torbutton.resize_new_windows",true);
pref("extensions.torbutton.banned_ports","8118,8123,9050,9051");
pref("extensions.torbutton.block_tor_file_net",true);
pref("extensions.torbutton.block_nontor_file_net",false);