То, что меняет размер это ожидаемо. Я ошибался, когда считал, что окно нужно подносить к доку и потом курсор обратно вести на область окна. Не нужно. Просто откройте любое окно, сверните его, наведите курсор на док и верните мышь поверх рабочего стола. Свёрнутое окно появится само.
Так воспроизвести баг значительно проще!
Возможно, в этом участке кода и меняется размер нашего активного окошка (но судя по коду, здесь изменение своего окна):
Code: Select all
wnd_hide:
cmp byte[win.state], 0
je main_loop
mov byte[nwin.close], 1
mcall 18, 3, [win.psid]
mov byte[win.state], 0
mov byte[win.button_index], -1
cmp byte[dock_items.ashow],1
je .do_no_hide
mov eax, [win.width_hdn]
mov [win.width], eax
mov eax, [win.x_hdn]
mov [win.x], eax
mov eax, [win.height_hdn]
mov [win.height], eax
mov eax, [win.y_hdn]
mov [win.y], eax
mcall 67, [win.x], [win.y], [win.width], [win.height]
Ведь доку нужно на время стать активным, а потом вернуть как было. И видимо, он не думает, что мы могли свернуть последнее активное окно перед его стартом. Он при старте сохраняет его свёрнутым, а потом восстанавливает таким.
Почему после сворачивания активного окна, оно всё ещё остаётся активным? И как это завешивает систему при выключении?