Submit Hint Search The Forums LinksStatsPollsHeadlinesRSS
14,000 hints and counting!


Click here to return to the 'ignore minimized windows and fix the resizing of windows in Finder' hint
The following comments are owned by whoever posted them. This site is not responsible for what they say.
ignore minimized windows and fix the resizing of windows in Finder
Authored by: SimonDorfman.com on Jan 15, '06 01:31:53AM
I further hacked this script to ignore minimized windows and fix the resizing of windows in Finder due to the weird menubarHeight 44 instead of 22 bug. Here's the updated script:

--Run via quicksilver trigger to tile all windows

--found in comments here: http://www.macosxhints.com/article.php?story=20060105082728937

property numCols : 2
property screenWidth : 1280
property screenHeight : 854
-- If you don't want to hard-code your screen width, because eg. you use multiple screens with differing properties at different times, then uncomment the 2 lines below:
--set screenWidth to word 3 of (do shell script "defaults read /Library/Preferences/com.apple.windowserver | grep -w Width") as number
--set screenHeight to word 3 of (do shell script "defaults read /Library/Preferences/com.apple.windowserver | grep -w Height") as number

set menubarHeight to 22

tell application "System Events"
	set frontApp to name of first application process whose frontmost is true
end tell

--some apps are wacky and put the windows higher for some reason, adjust for this bug.
if (frontApp is equal to "Finder" or frontApp is equal to "Microsoft Entourage") then
	set menubarHeight to 44
end if
--leave room for the Excel Toolbar
if (frontApp is equal to "Microsoft Excel") then
	set menubarHeight to 55
end if

try
	-- For some reason Finder calls minimized windows "collapsed" while other apps call them "miniaturized", so I deal with this by duplacating lots of code and having this big if/else. It's okay though because Finder's menubarHeight of 44 bug requires some tweaking of the numbers to resize the windows right. So the duplicate code isn't a total waste, but I'm sure there's a way to do this with list repeating.
	if frontApp is "Finder" then
		tell application "Finder"
			-- Ignore windows that are minimized, invisible or that don't have a title
			set windowCount to count of (windows whose visible is true and name is not "" and collapsed is false)
			set allWindowCount to count of windows
			
			-- Set number of rows appropriately
			set numRows to round (windowCount / numCols) rounding up
			
			-- Special case if the number of windows is less than the number of columns preference
			if windowCount is less than or equal to numCols then
				set numRows to 1
				set numCols to windowCount
			end if
			
			-- Special case is there's only one window
			if windowCount = 1 then
				set numRows to 1
				set numCols to 1
			end if
			
			-- skipWindow is for skipping over windows which are invisible or titleless
			set skipWindow to 0
			repeat with j from 0 to numRows - 1
				repeat with i from 0 to numCols - 1
					-- If we've done all the windows, then just get out
					if (j * numCols + i + 1) > windowCount then
						exit repeat
					end if
					-- Get a handle to the window we might want to resize
					set theWindow to window (j * numCols + i + 1 + skipWindow)
					-- Check that the window is visible and titled -- if it's not, then skip it
					repeat while (visible of theWindow is false or name of theWindow is "")
						set skipWindow to skipWindow + 1
						set theWindow to window (j * numRows + i + 1 + skipWindow)
					end repeat
					
					-- resize the window
					set bounds of theWindow to {
						round (i * screenWidth / numCols), 
						menubarHeight + (round (j * (screenHeight - 22) / numRows)), 
						round ((i * screenWidth / numCols) + (screenWidth / numCols)), 
						round ((22 + (round (j * (screenHeight - 22) / numRows))) + (screenHeight - 22) / numRows) 
							}
				end repeat
			end repeat
		end tell
	else
		tell application frontApp
			-- Ignore windows that are minimized, invisible or that don't have a title
			set windowCount to count of (windows whose visible is true and name is not "" and miniaturized is false)
			set allWindowCount to count of windows
			
			-- Set number of rows appropriately
			set numRows to round (windowCount / numCols) rounding up
			
			-- Special case if the number of windows is less than the number of columns preference
			if windowCount is less than or equal to numCols then
				set numRows to 1
				set numCols to windowCount
			end if
			
			-- Special case is there's only one window
			if windowCount = 1 then
				set numRows to 1
				set numCols to 1
			end if
			
			-- skipWindow is for skipping over windows which are invisible or titleless
			set skipWindow to 0
			repeat with j from 0 to numRows - 1
				repeat with i from 0 to numCols - 1
					-- If we've done all the windows, then just get out
					if (j * numCols + i + 1) > windowCount then
						exit repeat
					end if
					-- Get a handle to the window we might want to resize
					set theWindow to window (j * numCols + i + 1 + skipWindow)
					-- Check that the window is visible and titled -- if it's not, then skip it
					repeat while (visible of theWindow is false or name of theWindow is "")
						set skipWindow to skipWindow + 1
						set theWindow to window (j * numRows + i + 1 + skipWindow)
					end repeat
					
					-- resize the window
					set bounds of theWindow to {
						round (i * screenWidth / numCols), 
						menubarHeight + (round (j * (screenHeight - menubarHeight) / numRows)), 
						round ((i * screenWidth / numCols) + (screenWidth / numCols)), 
						round ((menubarHeight + (round (j * (screenHeight - menubarHeight) / numRows))) + (screenHeight - menubarHeight) / numRows) 
							}
				end repeat
			end repeat
		end tell
	end if
on error the error_message number the error_number
	display dialog "Error: " & the error_number & ". " & the error_message buttons {"OK"} default button 1
end try


[ Reply to This | # ]
ignore minimized windows and fix the resizing of windows in Finder
Authored by: ebeffel on Feb 04, '06 03:04:13PM

I dont have a /Library/Preferences/com.apple.windowserver file on my machine. What do I do to create one? Are you aware of alternative ways to get the size of the displays? Do they work with two displays?

Thanks, Ernie



[ Reply to This | # ]