[tor-commits] [torbutton/master] Bug 9738: Fix for auto-maximizing on browser start
mikeperry at torproject.org
mikeperry at torproject.org
Mon Feb 3 21:12:57 UTC 2014
commit b1d6dbb22fb35bf6954f84dd9f7fc1d5002ffa63
Author: Georg Koppen <gk at torproject.org>
Date: Fri Jan 17 10:03:24 2014 +0000
Bug 9738: Fix for auto-maximizing on browser start
On some OS/desktop combinations there is a auto-maximize feature that
breaks our efforts to resize the inner window to a multiple of 200x100
on start-up. We fix that by listening to the sizemodechange event and
resizing the window again in case it got indeed maximized.
---
src/chrome/content/torbutton.js | 40 +++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/src/chrome/content/torbutton.js b/src/chrome/content/torbutton.js
index 9ee5d0f..b18dcda 100644
--- a/src/chrome/content/torbutton.js
+++ b/src/chrome/content/torbutton.js
@@ -2768,6 +2768,46 @@ var torbutton_resizelistener =
height = Math.floor(maxHeight/100.0)*100;
+ var handler = function() {
+ if (window.windowState === 1) {
+ window.addEventListener("resize",
+ function() {
+ win.resizeBy(width - win.innerWidth, height - win.innerHeight);
+ var calling_function = arguments.callee;
+ setTimeout(function() {
+ torbutton_log(3, "Removing resize listener..");
+ window.removeEventListener("resize",
+ calling_function, false);
+ }, 1000);
+ }, false);
+ }
+ };
+
+ // We need to handle OSes that auto-maximize windows depending on user
+ // settings and/or screen resolution. We add a listener which is
+ // triggerred as soon as the window gets maximized (windowState = 1).
+ // Alas, the Firefox window code is handling the event not itself:
+ // "// Note the current implementation of SetSizeMode just stores
+ // // the new state; it doesn't actually resize. So here we store
+ // // the state and pass the event on to the OS."
+ // (See: https://mxr.mozilla.org/mozilla-esr24/source/xpfe/appshell/src/
+ // nsWebShellWindow.cpp#353)
+ // This means we have to cope with race conditions and resizing in the
+ // sizemodechange listener is likely to fail. Thus, we add a specific
+ // resize listener that is doing the work for us. It seems (at least on
+ // Ubuntu) to be the case that maximizing (and then again normalizing) of
+ // the window triggers more than one resize event the first being not the
+ // one we need. Thus we can't remove the listener after the first resize
+ // event got fired. Thus, we have the rather klunky setTimeout() call.
+ window.addEventListener("sizemodechange", handler, false);
+
+ // We like to remove the sizemodechange listener for everybody again in
+ // order to allow resizing the window after the start-up
+ setTimeout(function() {
+ torbutton_log(3, "Removing sizemodechange listener..");
+ window.removeEventListener("sizemodechange", handler, false);
+ }, 1000);
+
// This is fun. any attempt to directly set the inner window actually
// resizes the outer width to that value instead. Must use resizeBy()
// instead of assignment or resizeTo()
More information about the tor-commits
mailing list