Толя вроде делал для этого патч (один из последних)... он точно говорил, что нашел эту ошибку у себя.
Да, там нужно приложить последнюю версию хака с переключением окон (или, если мне не изменяет память, там группа патчей, которые нужно прикладывать друг за другом, тогда проблемы не будет). А тот хак, что исправляет эту штуку маркируется в комментарии .. founded by Vika
Проверили, эта группа патчей добавлена, вот цитата из результирующего кода в этом месте: /* Help with eterbug # 495*/ LOADETER_FUNC(etersoft_1version); if ( etersoft_1version && etersoft_1version() == 7 ) { HWND client = GetParent(hwndTo); SetWindowLongW( hwndPrev, GWL_STYLE, GetWindowLongW( hwndPrev, GWL_STYLE )&~WS_MAXIMIZE ); SetWindowPos( hwndPrev, 0, rect.left, rect.top, rect.right-rect.left, rect.bottom - rect.top, SWP_NOACTIVATE|SWP_NOZORDER|SWP_SHOWWINDOW|SWP_FR MDI_UpdateFrameText( GetParent(client), client, TRUE, NULL ); } else ShowWindow( hwndPrev, SW_RESTORE );
(In reply to comment #2) > Проверили, эта группа патчей добавлена, вот > цитата из результирующего кода в этом > месте: > SetWindowPos( hwndPrev, 0, rect.left, rect.top, > rect.right-rect.left, rect.bottom - rect.top, > SWP_NOACTIVATE|SWP_NOZORDER|SWP_SHOWWINDOW|SWP_FR > Это ошибка возникала из-за того, что в предыдущем патче вместо 0 стояло HWND_BOTTOM (кинуть окно вниз ), игнорирование этого параметра ( SWP_NOZORDER ) исправляло эту ошибку. Возвращайтесь к оригинальному mdi.c и смотрите. Если ошибка есть, значит - это другая проблема. Если уходит, то пристальней смотрите это место. Алгоритм: Максимизировать окно -> поставить его наверх->предыдущее окно вернуть в исходные размеры. При закрытие окна максимизируется предыдущее верхнее.
Если я правильно понял то ошибку можно воспоризвести так: 1) открываем 2 окна (не максимизировано) 2) одно максимизируем 3) переключаемся на 2 окно, и оно тоже становится максимизированым..
wine-1.0.9-alt24 libwine-devel-1.0.9-alt24 wine-etersoft-sql-1.0.9-alt7 libwine-twain-1.0.9-alt24 libwine-1.0.9-alt24 libwine-gl-1.0.9-alt24 тестировал в бутылке 1c77-27
А разве в винде 1С77 ведет себя не также? При этом в 1С8 ни в wine, ни в windows это не наблюдается - то есть максимизируется только указанное окно. Скорее всего это связано с багой #495, сообщение #35.
Ошибка есть независимо от патчей по баге #495.
Похоже, сломалось после моего патча на багу #1129.
Функция MDI_GetWindow отвечает за выбор окна при закрытии текущего и при переключении Alt + Tab / Ctrl + Alt + Tab между окнами. В оригинальном wine в ней используется список окон: WIN_ListChildren( GetParent(hWnd) )) Этот список изменяется при смене активного окна, что не позволяет его использовать для переключения между окнами (переключение происходит только между соседними окнами). В патче на багу #1129 вместо WIN_ListChildren используется список: clientInfo->child Он не изменяется при смене активного окна. Поэтому подходит для реализации переключения между окнами, но дает ложные результаты когда надо вернуться к предыдущему активному окну. Как выбрать какой список использовать в ф-ции MDI_GetWindow?
Выложил патч в нашу рассылку. В ф-цию MDI_GetWindow добавлен входной параметр bStatic. Если он принимает значение TRUE - используется список clientInfo->child (не изменяемый при смене активного окна). Если bStatic равен FALSE - используется WIN_ListChildren (изменяемый при смене активного окна).
(In reply to comment #4) > Если я правильно понял то ошибку можно > воспоризвести так: > 1) открываем 2 окна (не максимизировано) > 2) одно максимизируем > 3) переключаемся на 2 окно, и оно тоже > становится максимизированым.. в Windows 1C ведет себя абсолютно так же.
(In reply to comment #11) > > в Windows 1C ведет себя абсолютно так же. > Подтверждаю. Значит закрываем как не воспоризводимую.
Последние два замечания были не по теме. Багу можно закрыть только после тестирования нового патча Ильи. Илья, опиши пожалуйста в баге, в чём же всё таки проблема, что исправлялось.
Проблема этой баги в том, что после патча на багу #1129 сломалось возвращение к предыдущему активному окну, после закрытия текущего окна (комментарий #9 объясняет почему). Чтобы проверить багу нужно открыть три окна в 1С7, каждое из которых является потомком предыдущего. Например: (бутылка 1С727, "Информационная база #1") 1) Операции -> Журналы документов -> Тестовый журнал -> Ок. 2) Новая строка -> Новый1 -> Ок 3) Описание Откроется окошко help'а. Если его закрыть вернемся к окну "Журнал документов", должны к "Новый1 - Новый" Новый патч, который выложил, по сути решает багу #1129, не ломая эту.
Надо потестировать с последним патчем. Чтобы его приложить надо (для ветки eterhack): 1) приложить патч: user32: Add checking the count of active child MDI windows and ignoring the lParam for WM_MDIGETACTIVE then this count more than one (eterbug #2350) db49255bdca367b0703cd75303f5b3832fc0134c 2) revert патча: user32: Changes in MDI_GetWindow. Using the MDICLIENTINFO child value instead the result of WIN_ListChildren function (eterbug #1129) bc42d65a11c5cc5b13bdcc5019090c6a87060704
(In reply to comment #14) > Проблема этой баги в том, что после патча на > багу #1129 сломалось возвращение к > предыдущему активному окну, после закрытия > текущего окна (комментарий #9 объясняет > почему). > > Чтобы проверить багу нужно открыть три > окна в 1С7, каждое из которых является > потомком предыдущего. Например: (бутылка > 1С727, "Информационная база #1") Это не обязательно. Достаточно открыть любых три окна, переключиться несколько раз между ними и потом закрыть текущее.1с должна открыть предыдущие. Лучшее проводить тестирование при максимизации окон.
Проверил на последней сборке, проблема исправлена. libwine-gl-1.0.9-alt25 libwine-1.0.9-alt25 wine-1.0.9-alt25 wine-etersoft-sql-1.0.9-alt8