Minimally revised i. a. "Manager_onShellMessage"

This commit is contained in:
joten 2015-03-05 21:06:18 +01:00
parent 770349754d
commit 93311c865e
2 changed files with 26 additions and 9 deletions

View File

@ -46,7 +46,6 @@ Manager_init()
If Not Config_showTaskBar If Not Config_showTaskBar
Monitor_toggleTaskBar() Monitor_toggleTaskBar()
Manager_focus := False
Manager_hideShow := False Manager_hideShow := False
Bar_hideTitleWndIds := "" Bar_hideTitleWndIds := ""
Manager_allWndIds := "" Manager_allWndIds := ""
@ -96,7 +95,7 @@ Manager_activateMonitor(i, d = 0) {
} }
Manager_applyRules(wndId, ByRef isManaged, ByRef m, ByRef tags, ByRef isFloating, ByRef isDecorated, ByRef hideTitle, ByRef action) { Manager_applyRules(wndId, ByRef isManaged, ByRef m, ByRef tags, ByRef isFloating, ByRef isDecorated, ByRef hideTitle, ByRef action) {
Local i, mouseX, mouseY, wndClass, wndHeight, wndTitle, wndWidth, wndX, wndY Local i, wndClass, wndTitle
Local rule0, rule1, rule2, rule3, rule4, rule5, rule6, rule7, rule8, rule9, rule10 Local rule0, rule1, rule2, rule3, rule4, rule5, rule6, rule7, rule8, rule9, rule10
isManaged := True isManaged := True
@ -109,7 +108,6 @@ Manager_applyRules(wndId, ByRef isManaged, ByRef m, ByRef tags, ByRef isFloating
WinGetClass, wndClass, ahk_id %wndId% WinGetClass, wndClass, ahk_id %wndId%
WinGetTitle, wndTitle, ahk_id %wndId% WinGetTitle, wndTitle, ahk_id %wndId%
WinGetPos, wndX, wndY, wndWidth, wndHeight, ahk_id %wndId%
If (wndClass Or wndTitle) { If (wndClass Or wndTitle) {
Loop, % Config_ruleCount { Loop, % Config_ruleCount {
;; The rules are traversed in reverse order. ;; The rules are traversed in reverse order.
@ -439,7 +437,7 @@ Manager_onDisplayChange(a, wParam, uMsg, lParam) {
title change: 6 or 32774 title change: 6 or 32774
*/ */
Manager_onShellMessage(wParam, lParam) { Manager_onShellMessage(wParam, lParam) {
Local a, isChanged, aWndClass, aWndHeight, aWndId, aWndTitle, aWndWidth, aWndX, aWndY, i, m, t, wndClass, wndId, wndId0, wndIds, wndTitle, x, y Local a, isChanged, aWndClass, aWndHeight, aWndId, aWndTitle, aWndWidth, aWndX, aWndY, i, m, t, wndClass, wndId, wndId0, wndIds, wndIsDesktop, wndIsHidden, wndTitle, x, y
;; HSHELL_* become global. ;; HSHELL_* become global.
;; MESSAGE NAME AND ... NUMBER COMMENTS, POSSIBLE EVENTS ;; MESSAGE NAME AND ... NUMBER COMMENTS, POSSIBLE EVENTS
@ -464,14 +462,13 @@ Manager_onShellMessage(wParam, lParam) {
;; Any message may be missed, if bug.n is hung or they come in too quickly. ;; Any message may be missed, if bug.n is hung or they come in too quickly.
SetFormat, Integer, hex SetFormat, Integer, hex
lParam := lParam+0 lParam := lParam + 0
SetFormat, Integer, d SetFormat, Integer, d
Debug_logMessage("DEBUG[2] Manager_onShellMessage( wParam: " . wParam . ", lParam: " . lParam . " )", 2) Debug_logMessage("DEBUG[2] Manager_onShellMessage( wParam: " . wParam . ", lParam: " . lParam . " )", 2)
WinGetClass, wndClass, ahk_id %lParam% wndIsHidden := Window_getHidden(lParam, wndClass, wndTitle)
WinGetTitle, wndTitle, ahk_id %lParam% If wndIsHidden {
If Not wndClass And Not wndTitle {
;; If there is no window class or title, it is assumed that the window is not identifiable. ;; If there is no window class or title, it is assumed that the window is not identifiable.
;; The problem was, that i. a. claws-mail triggers Manager_sync, but the application window ;; The problem was, that i. a. claws-mail triggers Manager_sync, but the application window
;; would not be ready for being managed, i. e. class and title were not available. Therefore more ;; would not be ready for being managed, i. e. class and title were not available. Therefore more
@ -479,6 +476,11 @@ Manager_onShellMessage(wParam, lParam) {
Return Return
} }
wndIsDesktop := (lParam = 0)
If wndIsDesktop {
WinGetClass, wndClass, A
WinGetTitle, wndTitle, A
}
WinGet, aWndId, ID, A WinGet, aWndId, ID, A
WinGetClass, aWndClass, ahk_id %aWndId% WinGetClass, aWndClass, ahk_id %aWndId%
WinGetTitle, aWndTitle, ahk_id %aWndId% WinGetTitle, aWndTitle, ahk_id %aWndId%
@ -510,7 +512,7 @@ Manager_onShellMessage(wParam, lParam) {
;; trying to protect against. If another process (hotkey) enters a hideShow block after Manager_hideShow has ;; trying to protect against. If another process (hotkey) enters a hideShow block after Manager_hideShow has
;; been checked here, bad things could happen. I've personally observed that windows may be permanently hidden. ;; been checked here, bad things could happen. I've personally observed that windows may be permanently hidden.
;; Look into the use of AHK synchronization primitives. ;; Look into the use of AHK synchronization primitives.
If (wParam = 1 Or wParam = 2 Or wParam = 4 Or wParam = 6 Or wParam = 32772) And lParam And Not Manager_hideShow And Not Manager_focus If (wParam = 1 Or wParam = 2 Or wParam = 4 Or wParam = 6 Or wParam = 32772) And lParam And Not Manager_hideShow
{ {
isChanged := Manager_sync(wndIds) isChanged := Manager_sync(wndIds)
If wndIds If wndIds

View File

@ -57,6 +57,21 @@ Window_findHung(ghostWndId) {
Return, 0 Return, 0
} }
Window_getHidden(wndId, ByRef wndClass, ByRef wndTitle) {
WinGetClass, wndClass, ahk_id %wndId%
WinGetTitle, wndTitle, ahk_id %wndId%
If Not wndClass And Not wndTitle {
detectHiddenWnds := A_DetectHiddenWindows
DetectHiddenWindows, On
WinGetClass, wndClass, ahk_id %wndId%
WinGetTitle, wndTitle, ahk_id %wndId%
DetectHiddenWindows, %detectHiddenWnds%
;; If now wndClass Or wndTitle, but Not wndClass And Not wndTitle before, wnd is hidden.
Return, (wndClass Or wndTitle)
} Else
Return, False
}
Window_hide(wndId) { Window_hide(wndId) {
If Window_isHung(wndId) { If Window_isHung(wndId) {
Debug_logMessage("DEBUG[2] Window_hide: Potentially hung window " . wndId, 2) Debug_logMessage("DEBUG[2] Window_hide: Potentially hung window " . wndId, 2)