implemented feature 'single window action' (i. e. close or maximize) configured by rule

This commit is contained in:
joten 2012-10-07 16:29:45 +02:00
parent 23b4ef559f
commit 8fc99c95cf
2 changed files with 43 additions and 17 deletions

View file

@ -72,17 +72,20 @@ Config_init()
Config_syncMonitorViews := 0 Config_syncMonitorViews := 0
Config_viewFollowsTagged := False Config_viewFollowsTagged := False
Config_rule_#1 := ".*;.*;;1;0;0;0;0;0" ;; default rule ;; Config_rule_#<i> := '<class>;<title>;<style>;<is managed>;<m>;<tags>;<is floating>;<is decorated>;<hide title>;<action>'
Config_rule_#2 := ".*;.*;0x80000000;0;0;0;1;1;1" ;; Pop-up windows (style WS_POPUP=0x80000000) will not be managed, are floating and the titles are hidden. Config_rule_#1 := ".*;.*;;1;0;0;0;0;0;" ;; default rule
Config_rule_#3 := "SWT_Window0;.*;;1;0;0;0;0;0" ;; Windows created by Java (SWT) e. g. Eclipse have the style WS_POPUP, but should be excluded from the second rule. Config_rule_#2 := ".*;.*;0x80000000;0;0;0;1;1;1;" ;; Pop-up windows (style WS_POPUP=0x80000000) will not be managed, are floating and the titles are hidden.
Config_rule_#4 := "QWidget;.*;;1;0;0;0;0;0" ;; ... also windows created by QT (QWidget) Config_rule_#3 := "SWT_Window0;.*;;1;0;0;0;0;0;" ;; Windows created by Java (SWT) e. g. Eclipse have the style WS_POPUP, but should be excluded from the second rule.
Config_rule_#5 := "Xming;.*;;1;0;0;0;0;0" ;; ... and Xming windows Config_rule_#4 := "QWidget;.*;;1;0;0;0;0;0;" ;; ... also windows created by QT (QWidget)
Config_rule_#6 := "MsiDialog(No)?CloseClass;.*;;1;0;0;1;1;0" Config_rule_#5 := "Xming;.*;;1;0;0;0;0;0;" ;; ... and Xming windows
Config_rule_#7 := "AdobeFlashPlayerInstaller;.*;;1;0;0;1;0;1" Config_rule_#6 := "MsiDialog(No)?CloseClass;.*;;1;0;0;1;1;0;"
Config_rule_#8 := "CalcFrame;.*;;1;0;0;1;1;0" Config_rule_#7 := "AdobeFlashPlayerInstaller;.*;;1;0;0;1;0;1;"
Config_rule_#9 := "MozillaDialogClass;.*;;1;0;0;1;1;0" Config_rule_#8 := "CalcFrame;.*;;1;0;0;1;1;0;"
Config_rule_#10 := "_sp;_sp;;1;0;0;1;0;1" Config_rule_#9 := "MozillaDialogClass;.*;;1;0;0;1;1;0;"
Config_ruleCount := 10 ;; This variable has to be set to the total number of active rules above. Config_rule_#10 := "_sp;_sp;;1;0;0;1;0;1;"
Config_rule_#11 := "MozillaWindowClass;.* - Mozilla Firefox;;1;0;0;0;1;0;Maximize"
Config_rule_#12 := "Chrome_WidgetWin_1;.*;;1;0;0;0;1;0;Maximize"
Config_ruleCount := 12 ;; This variable has to be set to the total number of active rules above.
;; Configuration management ;; Configuration management
Config_autoSaveSession := False Config_autoSaveSession := False

View file

@ -88,10 +88,10 @@ Manager_activateMonitor(d)
} }
} }
Manager_applyRules(wndId, ByRef isManaged, ByRef m, ByRef tags, ByRef isFloating, ByRef isDecorated, ByRef hideTitle) Manager_applyRules(wndId, ByRef isManaged, ByRef m, ByRef tags, ByRef isFloating, ByRef isDecorated, ByRef hideTitle, ByRef action)
{ {
Local mouseX, mouseY, wndClass, wndHeight, wndStyle, wndTitle, wndWidth, wndX, wndY Local mouseX, mouseY, wndClass, wndHeight, wndStyle, wndTitle, wndWidth, wndX, wndY
Local rule0, rule1, rule2, rule3, rule4, rule5, rule6, rule7, rule8, rule9 Local rule0, rule1, rule2, rule3, rule4, rule5, rule6, rule7, rule8, rule9, rule10
isManaged := True isManaged := True
m := 0 m := 0
@ -99,6 +99,7 @@ Manager_applyRules(wndId, ByRef isManaged, ByRef m, ByRef tags, ByRef isFloating
isFloating := False isFloating := False
isDecorated := False isDecorated := False
hideTitle := False hideTitle := False
action := ""
WinGetClass, wndClass, ahk_id %wndId% WinGetClass, wndClass, ahk_id %wndId%
WinGetTitle, wndTitle, ahk_id %wndId% WinGetTitle, wndTitle, ahk_id %wndId%
@ -117,6 +118,7 @@ Manager_applyRules(wndId, ByRef isManaged, ByRef m, ByRef tags, ByRef isFloating
isFloating := rule7 isFloating := rule7
isDecorated := rule8 isDecorated := rule8
hideTitle := rule9 hideTitle := rule9
action := rule10
} }
} }
} }
@ -309,7 +311,7 @@ Manager_loop(index, increment, lowerBound, upperBound)
;; Provide a monitor and view preference, but don't override the config. ;; Provide a monitor and view preference, but don't override the config.
Manager_manage(preferredMonitor, preferredView, wndId) Manager_manage(preferredMonitor, preferredView, wndId)
{ {
Local a, c0, hideTitle, i, isDecorated, isFloating, isManaged, l, m, n, replace, search, tags, body Local a, action, c0, hideTitle, i, isDecorated, isFloating, isManaged, l, m, n, replace, search, tags, body
Local wndControlList0, wndId0, wndIds, wndX, wndY, wndWidth, wndHeight, wndProcessName Local wndControlList0, wndId0, wndIds, wndX, wndY, wndWidth, wndHeight, wndProcessName
If Not InStr(Manager_allWndIds, wndId ";") If Not InStr(Manager_allWndIds, wndId ";")
@ -328,6 +330,7 @@ Manager_manage(preferredMonitor, preferredView, wndId)
isDecorated := Manager_#%body%_isDecorated isDecorated := Manager_#%body%_isDecorated
isFloating := Manager_#%body%_isFloating isFloating := Manager_#%body%_isFloating
hideTitle := InStr(Bar_hideTitleWndIds, body ";") hideTitle := InStr(Bar_hideTitleWndIds, body ";")
action := ""
} }
Else Else
{ {
@ -338,7 +341,7 @@ Manager_manage(preferredMonitor, preferredView, wndId)
;; Apply rules, if the window is either a normal window or a ghost without a body. ;; Apply rules, if the window is either a normal window or a ghost without a body.
If (body = 0) If (body = 0)
{ {
Manager_applyRules(wndId, isManaged, m, tags, isFloating, isDecorated, hideTitle) Manager_applyRules(wndId, isManaged, m, tags, isFloating, isDecorated, hideTitle, action)
If (m = 0) If (m = 0)
m := preferredMonitor m := preferredMonitor
If (m < 0) If (m < 0)
@ -360,6 +363,8 @@ Manager_manage(preferredMonitor, preferredView, wndId)
If isManaged If isManaged
{ {
If (action = "Close" Or action = "Maximize")
Manager_win%action%(wndId)
Monitor_moveWindow(m, wndId) Monitor_moveWindow(m, wndId)
Manager_managedWndIds .= wndId ";" Manager_managedWndIds .= wndId ";"
@ -902,6 +907,20 @@ Manager_winHide(wndId)
} }
} }
Manager_winMaximize(wndId)
{
If Manager_isHung(wndId)
{
Debug_logMessage("DEBUG[2] Manager_winMaximize: Potentially hung window " . wndId, 2)
Return 1
}
Else
{
WinMaximize, ahk_id %wndId%
Return 0
}
}
Manager_winMove(wndId, x, y, width, height) Manager_winMove(wndId, x, y, width, height)
{ {
If Manager_isHung(wndId) If Manager_isHung(wndId)
@ -910,7 +929,11 @@ Manager_winMove(wndId, x, y, width, height)
Return 1 Return 1
} }
Else Else
{
WinGet, wndMin, MinMax, ahk_id %wndId%
If (wndMin = -1)
WinRestore, ahk_id %wndId% WinRestore, ahk_id %wndId%
}
WM_ENTERSIZEMOVE = 0x0231 WM_ENTERSIZEMOVE = 0x0231
WM_EXITSIZEMOVE = 0x0232 WM_EXITSIZEMOVE = 0x0232
SendMessage, WM_ENTERSIZEMOVE, , , , ahk_id %wndId% SendMessage, WM_ENTERSIZEMOVE, , , , ahk_id %wndId%