Revised Manager_resetMonitorConfiguration() ...
... possibly fixing issue #66 + replaced Monitor_moveWindow with its one-line-content + fixed some naming issues of variables
This commit is contained in:
parent
245608b1af
commit
80b6b8163c
3 changed files with 95 additions and 30 deletions
|
@ -308,7 +308,7 @@ Manager__setWinProperties(wndId, isManaged, m, tags, isDecorated, isFloating, hi
|
|||
|
||||
If Not InStr(Manager_managedWndIds, wndId ";")
|
||||
Manager_managedWndIds .= wndId ";"
|
||||
Monitor_moveWindow(m, wndId)
|
||||
Window_#%wndId%_monitor := m
|
||||
Window_#%wndId%_tags := tags
|
||||
Window_#%wndId%_isDecorated := isDecorated
|
||||
Window_#%wndId%_isFloating := isFloating
|
||||
|
@ -659,43 +659,55 @@ Manager_registerShellHook() {
|
|||
;; SKAN: How to Hook on to Shell to receive its messages? (http://www.autohotkey.com/forum/viewtopic.php?p=123323#123323)
|
||||
|
||||
Manager_resetMonitorConfiguration() {
|
||||
Local GuiN, hWnd, i, m, wndClass, wndIds, wndTitle
|
||||
Local GuiN, hWnd, i, j, m, mPrimary, wndClass, wndIds, wndTitle
|
||||
|
||||
m := Manager_monitorCount
|
||||
SysGet, Manager_monitorCount, MonitorCount
|
||||
If (Manager_monitorCount < m) {
|
||||
Loop, % m - Manager_monitorCount {
|
||||
i := Manager_monitorCount + A_Index
|
||||
GuiN := (i - 1) + 1
|
||||
;; A monitor has been disconnected. Which one?
|
||||
i := Monitor_find(-1, m)
|
||||
If (i > 0) {
|
||||
SysGet, mPrimary, MonitorPrimary
|
||||
GuiN := (m - 1) + 1
|
||||
Gui, %GuiN%: Destroy
|
||||
Loop, % Config_viewCount {
|
||||
If View_#%i%_#%A_Index%_wndIds {
|
||||
View_#1_#%A_Index%_wndIds := View_#%i%_#%A_Index%_wndIds View_#1_#%A_Index%_wndIds
|
||||
|
||||
View_#%mPrimary%_#%A_Index%_wndIds .= View_#%i%_#%A_Index%_wndIds
|
||||
StringTrimRight, wndIds, View_#%i%_#%A_Index%_wndIds, 1
|
||||
Loop, PARSE, wndIds, `;
|
||||
{
|
||||
Loop, % Config_viewCount {
|
||||
StringReplace, View_#%i%_#%A_Index%_wndIds, View_#%i%_#%A_Index%_wndIds, %A_LoopField%`;,
|
||||
View_setActiveWindow(i, A_Index, 0)
|
||||
Window_#%A_LoopField%_monitor := mPrimary
|
||||
}
|
||||
Monitor_moveWindow(1, A_LoopField)
|
||||
}
|
||||
|
||||
;; Manually set the active monitor.
|
||||
Manager_aMonitor := 1
|
||||
If (Manager_aMonitor = i)
|
||||
Manager_aMonitor := mPrimary
|
||||
}
|
||||
}
|
||||
Loop, % m - i {
|
||||
j := i + A_Index
|
||||
Monitor_moveToIndex(j, j - 1)
|
||||
Monitor_getWorkArea(j - 1)
|
||||
Bar_init(j - 1)
|
||||
}
|
||||
}
|
||||
m := Manager_monitorCount
|
||||
} Else If (Manager_monitorCount > m) {
|
||||
Loop, % Manager_monitorCount - m
|
||||
Monitor_init(m + A_Index, True)
|
||||
;; A monitor has been connected. Where has it been put?
|
||||
i := Monitor_find(+1, Manager_monitorCount)
|
||||
If (i > 0) {
|
||||
Loop, % Manager_monitorCount - i {
|
||||
j := Manager_monitorCount - A_Index
|
||||
Monitor_moveToIndex(j, j + 1)
|
||||
Monitor_getWorkArea(j + 1)
|
||||
Bar_init(j + 1)
|
||||
}
|
||||
Loop, % m {
|
||||
Monitor_init(i, True)
|
||||
}
|
||||
} Else {
|
||||
;; Has the resolution of a monitor been changed?
|
||||
Loop, % Manager_monitorCount {
|
||||
Monitor_getWorkArea(A_Index)
|
||||
Bar_init(A_Index)
|
||||
}
|
||||
}
|
||||
Manager_saveState()
|
||||
Loop, % Manager_monitorCount {
|
||||
View_arrange(A_Index, Monitor_#%A_Index%_aView_#1)
|
||||
|
@ -953,8 +965,7 @@ Manager_setViewMonitor(i, d = 0) {
|
|||
StringReplace, View_#%Manager_aMonitor%_#%A_Index%_wndIds, View_#%Manager_aMonitor%_#%A_Index%_wndIds, %A_LoopField%`;,
|
||||
View_setActiveWindow(Manager_aMonitor, A_Index, 0)
|
||||
}
|
||||
|
||||
Monitor_moveWindow(i, A_LoopField)
|
||||
Window_#%A_LoopField%_monitor := i
|
||||
Window_#%A_LoopField%_tags := 1 << v - 1
|
||||
}
|
||||
View_arrange(Manager_aMonitor, aView)
|
||||
|
@ -1015,7 +1026,7 @@ Manager_setWindowMonitor(i, d = 0) {
|
|||
If (i = 0)
|
||||
i := Manager_aMonitor
|
||||
Manager_aMonitor := Manager_loop(i, d, 1, Manager_monitorCount)
|
||||
Monitor_moveWindow(Manager_aMonitor, aWndId)
|
||||
Window_#%aWndId%_monitor := Manager_aMonitor
|
||||
v := Monitor_#%Manager_aMonitor%_aView_#1
|
||||
Window_#%aWndId%_tags := 1 << v - 1
|
||||
View_#%Manager_aMonitor%_#%v%_wndIds := aWndId ";" View_#%Manager_aMonitor%_#%v%_wndIds
|
||||
|
|
|
@ -21,13 +21,14 @@ Monitor_init(m, doRestore) {
|
|||
Monitor_#%m%_showBar := Config_showBar
|
||||
Monitor_#%m%_showTaskBar := Config_showTaskBar
|
||||
Monitor_#%m%_taskBarClass := ""
|
||||
Monitor_%m%_taskBarPos := ""
|
||||
Monitor_#%m%_taskBarPos := ""
|
||||
Loop, % Config_viewCount
|
||||
View_init(m, A_Index)
|
||||
If doRestore
|
||||
Config_restoreLayout(Main_autoLayout, m)
|
||||
Else
|
||||
Config_restoreLayout(Config_filePath, m)
|
||||
SysGet, Monitor_#%m%_name, MonitorName, %m%
|
||||
Monitor_getWorkArea(m)
|
||||
Bar_init(m)
|
||||
}
|
||||
|
@ -102,6 +103,19 @@ Monitor_activateView(i, d = 0) {
|
|||
Manager_winActivate(wndId)
|
||||
}
|
||||
|
||||
Monitor_find(d, n) {
|
||||
Local mName
|
||||
|
||||
If (d < 0 Or d > 0) {
|
||||
Loop, % n {
|
||||
SysGet, mName, MonitorName, %A_Index%
|
||||
If Not (mName = Monitor_#%A_Index%_name)
|
||||
Return, A_Index
|
||||
}
|
||||
}
|
||||
Return, 0
|
||||
}
|
||||
|
||||
Monitor_get(x, y)
|
||||
{
|
||||
Local m
|
||||
|
@ -148,7 +162,7 @@ Monitor_getWorkArea(m) {
|
|||
wndHeight += wndY - monitorTop
|
||||
monitorTop += wndHeight
|
||||
If (A_LoopField = "Shell_TrayWnd") Or (A_LoopField = "Shell_SecondaryTrayWnd")
|
||||
Monitor_%m%_taskBarPos := "top"
|
||||
Monitor_#%m%_taskBarPos := "top"
|
||||
} Else {
|
||||
;; Bottom
|
||||
wndHeight := monitorBottom - wndY
|
||||
|
@ -190,11 +204,23 @@ Monitor_getWorkArea(m) {
|
|||
Monitor_setWorkArea(monitorLeft, monitorTop, monitorRight, monitorBottom)
|
||||
}
|
||||
|
||||
Monitor_moveWindow(m, wndId)
|
||||
{
|
||||
Monitor_moveToIndex(m, n) {
|
||||
Global
|
||||
|
||||
Window_#%wndId%_monitor := m
|
||||
Monitor_#%n%_aView_#1 := Monitor_#%m%_aView_#1
|
||||
Monitor_#%n%_aView_#2 := Monitor_#%m%_aView_#2
|
||||
Monitor_#%n%_name := Monitor_#%m%_name
|
||||
Monitor_#%n%_showBar := Monitor_#%m%_showBar
|
||||
Monitor_#%n%_showTaskBar := Monitor_#%m%_showTaskBar
|
||||
Monitor_#%n%_taskBarClass := Monitor_#%m%_taskBarClass
|
||||
Monitor_#%n%_taskBarPos := Monitor_#%m%_taskBarPos
|
||||
Monitor_#%n%_height := Monitor_#%m%_height
|
||||
Monitor_#%n%_width := Monitor_#%m%_width
|
||||
Monitor_#%n%_x := Monitor_#%m%_x
|
||||
Monitor_#%n%_y := Monitor_#%m%_y
|
||||
Monitor_#%n%_barY := Monitor_#%m%_barY
|
||||
Loop, % Config_viewCount
|
||||
View_moveToIndex(m, A_Index, n, A_Index)
|
||||
}
|
||||
|
||||
Monitor_setWindowTag(i, d = 0) {
|
||||
|
|
28
src/View.ahk
28
src/View.ahk
|
@ -203,6 +203,34 @@ View_ghostWindow(m, v, bodyWndId, ghostWndId)
|
|||
StringReplace, View_#%m%_#%v%_wndIds, View_#%m%_#%v%_wndIds, %search%, %replace%
|
||||
}
|
||||
|
||||
View_moveToIndex(m, v, n, w) {
|
||||
Local wndIds
|
||||
|
||||
View_#%n%_#%w%_area_#0 := View_#%m%_#%v%_area_#0
|
||||
View_#%n%_#%w%_aWndIds := View_#%m%_#%v%_aWndIds
|
||||
View_#%n%_#%w%_layout_#1 := View_#%m%_#%v%_layout_#1
|
||||
View_#%n%_#%w%_layout_#2 := View_#%m%_#%v%_layout_#2
|
||||
View_#%n%_#%w%_layoutAxis_#1 := View_#%m%_#%v%_layoutAxis_#1
|
||||
View_#%n%_#%w%_layoutAxis_#2 := View_#%m%_#%v%_layoutAxis_#2
|
||||
View_#%n%_#%w%_layoutAxis_#3 := View_#%m%_#%v%_layoutAxis_#3
|
||||
View_#%n%_#%w%_layoutGapWidth := View_#%m%_#%v%_layoutGapWidth
|
||||
View_#%n%_#%w%_layoutMFact := View_#%m%_#%v%_layoutMFact
|
||||
View_#%n%_#%w%_layoutMX := View_#%m%_#%v%_layoutMX
|
||||
View_#%n%_#%w%_layoutMY := View_#%m%_#%v%_layoutMY
|
||||
View_#%n%_#%w%_layoutSymbol := View_#%m%_#%v%_layoutSymbol
|
||||
View_#%n%_#%w%_margins := View_#%m%_#%v%_margins
|
||||
View_#%n%_#%w%_showStackArea := View_#%m%_#%v%_showStackArea
|
||||
View_#%n%_#%w%_wndIds := View_#%m%_#%v%_wndIds
|
||||
StringSplit, View_#%n%_#%w%_margin, View_#%n%_#%w%_margin, `;
|
||||
StringTrimRight, wndIds, View_#%n%_#%w%_wndIds, 1
|
||||
Loop, PARSE, wndIds, `;
|
||||
{
|
||||
Window_#%A_LoopField%_monitor := n
|
||||
Window_#%A_LoopField%_tags -= 1 << v - 1
|
||||
Window_#%A_LoopField%_tags += 1 << w - 1
|
||||
}
|
||||
}
|
||||
|
||||
; @TODO: Theoretically, something is wrong here. From the hotkeys this should be manual tiling, but the function says otherwise.
|
||||
View_moveWindow(i=0, d=0) {
|
||||
Local aWndId, m, v
|
||||
|
|
Loading…
Reference in a new issue