Windows 10 - определение краев консольного окна с у четом невидимых скролл-баров

Здесь можно сообщить о найденных багах в Far.
Post Reply
agb
Posts: 14
Joined: Sat 22 Dec, 2007 12:27

Windows 10 - определение краев консольного окна с у четом невидимых скролл-баров

Post by agb »

Заметил черные боковые рамки в консоли Windows 10 preview (по ширине они равны скролбарам, но скролбары не видны при открытии окна Far). Не воспроизводится, если в настройках консоли отключить "Экспериментальные опции".

Alt+F9 не помогает развернуть окно на весь экран, т.к. после повторного открытия окна строка меню съезжает под нижний край экрана.

И второй странный глюк. Если выходить из Far по F10 - окно консоли закрывается быстро. А если закрывать окно консоли "крестиком" кнопкой закрыть в заголовке консоли - Far закрывается быстро, а сама консоль еще долго висит на экране с черным содержимым.
Last edited by agb on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Спрятан избыточный снимок экрана
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Windows 10 - определение краев консольного окна с у четом невидимых скролл-баров

Post by DrKnS »

agb wrote: Не воспроизводится, если в настройках консоли отключить "Экспериментальные опции"
О багах в "экспериментальных опциях" надо писать сюда, пока не поздно.

С нашей стороны до релиза windows 10 ничего предприниматься не будет, ибо бессмысленно.
User avatar
HaRT
Moderator
Posts: 10863
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Windows 10 - определение краев консольного окна с у четом невидимых скролл-баров

Post by HaRT »

agb, Как правильно делать снимки экрана. Читать внимательно целиком.
Фар есть инструмент, а не нянька. © 2009 DrKnS
agb
Posts: 14
Joined: Sat 22 Dec, 2007 12:27

Windows 10 - определение краев консольного окна с у четом невидимых скролл-баров

Post by agb »

HaRT, прочитал, спасибо!
По поводу сабжа - не совсем понятно - невидимые скрол-бары при запуске фара это именно баг консоли или её нормальное поведение, которое потом можно будет учесть при подгоне размера панелей..
DesertDragon
Posts: 1
Joined: Thu 12 Feb, 2015 15:29

Windows 10 - определение краев консольного окна с у четом невидимых скролл-баров

Post by DesertDragon »

agb wrote:И второй странный глюк. Если выходить из Far по F10 - окно консоли закрывается быстро. А если закрывать окно консоли "крестиком" кнопкой закрыть в заголовке консоли - Far закрывается быстро, а сама консоль еще долго висит на экране с черным содержимым.
Это баг, кстати, возник не по вине Windows 10. Это вылез боком старый грязный хак в interf.cpp в функции CtrlHandler:

Code: Select all

	case CTRL_CLOSE_EVENT:
		Global->CloseFAR=TRUE;
		Global->AllowCancelExit=FALSE;
		// trick to let wmain() finish correctly
		ExitThread(1);
		// return TRUE;
Данный "трюк" принудительно закрывает системный поток обрабатывающий закрытие окна консоли крестом, чтобы передать управление обратно в основной поток и корректно завершить приложение. В некоторых случаях это возможно срабатывает, но на самом деле абсолютно не гарантировано что wmain успеет завершить работу до того как система убьет процесс. В результате чего, настройки при таком закрытии могут не сохранится.
В windows 10 немного изменили подсистему управления консолью, и теперь системный таймаут на убивание процесса не слетает при закрытии этого потока, а продолжает ожидание.
Вообще, согласно документации Windows, обработчик CtrlHandler нужен для того чтобы корректно завершить приложение в случае экстренного закрытия крестом прямо в этом обработчике или в другом потоке, но не более чем за 5 секунд, это системный таймаут на обработку события CTRL_CLOSE_EVENT, после чего процесс убивается принудительно.

Если вместо некорректного (нарушающего работу системы по обслуживанию консоли) закрытия системного треда (KernelBase.dll, кстати), поставить ожидание, например, события завершения MainThread, то в режиме работы с панелями файлов закрытие происходит нормально, без подвисаний и с сохранением состояния.

Code: Select all

// добавляем в класс global
HANDLE mainThreadFinish;

// добавляем в конструктор global
mainThreadFinish = CreateEvent(NULL, TRUE, FALSE, NULL);

// добавляем в деструктор global
SetEvent( mainThreadFinish );

// легитимизируем обработку
	case CTRL_CLOSE_EVENT:
		Global->CloseFAR=TRUE;
		Global->AllowCancelExit=FALSE;
		WaitForSingleObject( Global->mainThreadFinish, 500 );
		return TRUE;
К сожаление установка флага CloseFAR ничего не делает (под любой виндой, не только 10), если мы находимся в режиме редактирования файла, копирования и т.д. Для корректного завершения работы крестом в таких режимах необходима более масштабная переработка кода закрытия.
2useven10
Posts: 5231
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 315 times

Нелады с консольным окном в Windows 10 (в Win 8 лады)

Post by 2useven10 »

Dr.Usman wrote: Windows 10 x64, FAR x64, ставил 3.4400 и 3.4437
[...]
при запуске FAR'a окно раскрывается не на весь экран. В сборке 3.4437, если его увеличить нажав на квадратик (между свернуть и закрыть) получается такая . Секунд через 10 всё приходит в норму.
Про забавные картинки:
"Забавные картинки' можно убрать, включив legacy режим консоли.
Меняется размер консоли - срабатывает LineWrap, включённый в свойствах новой консоли.
Потом фар отрабатывает изменение размера и исправляет картинку.
Аналогичный эффект виден при ресайзе горизонтального размера окна мышкой.
Откуда задержка 10-15 секунд не знаю (у меня её нет).
Last edited by 2useven10 on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Добавлена ссылка на исходную тему
Post Reply

Return to “Глюки и баги”