Промаргивание панелей при перерисовке редактора из-за диалога
Posted: Mon 28 Nov, 2016 21:08
by HaRT
Обнаружилась неприятная косметическая ошибка в перерисовке — воспроизводится часто, но не всегда. Вот самый надёжный способ её увидеть, который мне удалось изобрести: 0. Выставляем для Фара некрупный шрифт (у меня воспроизводится и на Consolas, и на Lucida Console; на растровых не проверял). 1. Запускаем Фар как минимум с плагинами Colorer и NetBox (без них ошибку поймать тоже можно, но гораздо сложнее). 2. Разворачиваем Фар на весь экран по AltF9 (без этого тоже можно, но сложнее). 3. На одной из панелей открываем через NetBox соединение (желательно не очень быстрое) на какой-нибудь удалённый хост, там открываем на редактирование какой-нибудь текстовый файл (желательно, чтобы в нём строчек было не меньше, чем в окне редактора, и чтобы строки были не шире половины окна редактора). 4. Попеременно нажимаем F7 (чтобы открылся диалог) и Esc (чтобы диалог закрылся), при этом наблюдаем за пустым пространством в окне редактора — там при перерисовке регулярно промаргивают панели (особенно хорошо заметны их рамки).
В сборке “Far Manager, version 3.0 (build 4807) x86” ошибка ещё не наблюдается, в сборке “Far Manager, version 3.0 (build 4809) x86” — уже есть.
drkns 06.10.2016 22:59:17 +0200 - build 4809
1. Не сохранялись флаги консоли ENABLE_AUTO_POSITION и ENABLE_INSERT_MODE:
- окно могло неоптимально позиционироваться при разворачивании;
- запущенный из фара, например, cmd мог внезапно оказаться в режиме 'overwrite'.
2. Пара мелочей.
zg 06.10.2016 19:59:25 +0200 - build 4808
1. уточнение 4803 для вложенных диалогов.
2. уточнение 4807.
zg 05.10.2016 20:37:13 +0200 - build 4807
1. уточнение 4803 для граббера.
drkns 04.10.2016 09:47:59 +0200 - build 4806
1. Уточнение 4794 & 4805.
drkns 03.10.2016 21:28:23 +0200 - build 4805
1. 0003318: "Message not found" errors when opening F9 > Options > Colors
drkns 02.10.2016 18:45:31 +0200 - build 4804
1. Рефакторинг.
zg 01.10.2016 18:23:05 +0200 - build 4803
1. 0003051: Вызов ECTL_REDRAW из диалога.
23:32 MSK
Вроде бы воспроизводится только с немодальным редактором, т.е. в случае NetBox должно быть “[x] Allow more than one edited file” в “NetBox - Editor/viewer settings”.
Промаргивание панелей при перерисовке редактора из-за диалога
Posted: Mon 28 Nov, 2016 21:45
by zg
это фича.
Промаргивание панелей при перерисовке редактора из-за диалога
Posted: Mon 28 Nov, 2016 22:06
by HaRT
zg wrote: это фича
Здрасьте пожалста!
В чём же конкретно эта „фича“ заключается и для чего/кого она потребовалась?! Т.е. какая от такого поведения польза для юзера?
Лично мне это промаргивание панелей через редактор очень мешает, т.к. отвлекает при открытии/закрытии диалога замены.
Промаргивание панелей при перерисовке редактора из-за диалога
Posted: Mon 28 Nov, 2016 22:32
by zg
там в ченжлоге есть, мантис 3051.
Промаргивание панелей при перерисовке редактора из-за диалога
Posted: Mon 28 Nov, 2016 22:42
by HaRT
zg wrote: мантис 3051
Читаю:
0003051: Вызов ECTL_REDRAW из диалога wrote:
Description При управлении редактором из диалога вызываем ECTL_SETPOSITION, затем ECTL_REDRAW.
Проблема в том, что ECTL_REDRAW не перерисовывает часть экрана, закрытую диалогом, и при сдвиге диалога мышью можно наблюдать прежнее (до ECTL_SETPOSITION) содержимое экрана.
Из этого описания никак не следует, что в области окна, занятой редактором должны — пусть и кратковременно — просвечивать панели (а также — предвосхищая возможные домыслы — что в области окна, занятой диалогом, должно — пусть и кратковременно просвечивать то, что под ним). Если Фару надо обновить какие-то свои внутренние буферы изображения — на здоровье, но зачем при этом создавать дискомфортное для пользователя мелькание?!
Так что то, о чём я написал, (промаргивание) — это никакая не фича, а самая что ни на есть бага! И я даже удивлён, что Вы пытаетесь выдать одно за другое.
Промаргивание панелей при перерисовке редактора из-за диалога
Posted: Mon 28 Nov, 2016 22:52
by zg
я бы на вашем месте сбавил тон.
Промаргивание панелей при перерисовке редактора из-за диалога
Posted: Tue 29 Nov, 2016 06:16
by DrKnS
Я понимаю, что там происходит и почему оно так, но, действительно, моргание несколько отвлекает.
Промаргивание панелей при перерисовке редактора из-за диалога
Posted: Tue 29 Nov, 2016 18:55
by HaRT
Такое же промаргивание происходит и при открытии/закрытии меню (например, экранов по F12 или плагинов по F11), что, впрочем, и не странно.
Хуже того, когда открывается меню, например, автодополнения ввода в диалоге поиска, весь редактор точно так же моргает панелями.
Одним словом, печаль.
Промаргивание панелей при перерисовке редактора из-за диалога
Posted: Tue 29 Nov, 2016 22:10
by zg
для воспроизведения нужен нетбокс и [x] Allow more than one edited file, все остальные рассуждения про колорер, шрифты, размер консоли, размер строк в редакторе и т.д. — мусор.
как тут видно, netbox в ee_redraw делает ectl_settitle. смотрим в сорцы фара и видим, что ectl_settitle флушит экранный буфер в консоль. т.е. имеем ровно то, что попросили. и у вас два пути, либо попросить автора нетбокса так не делать, либо попросить разработчиков фара (желательно вежливо, а не так, как вы привыкли) что-то сделать флушем в ectl_settitle. по коду видно, что даже автор сомневался в его необходимости. хотя я бы просто так его убирать тоже не стал.
ну и что касается домыслов про 4808 — в очередной раз они ни о чём, просто этот билд много где сделал количество ошибок нечётными.
Промаргивание панелей при перерисовке редактора из-за диалога
Posted: Tue 29 Nov, 2016 22:24
by HaRT
zg wrote: все остальные рассуждения про колорер, шрифты, размер консоли, размер строк в редакторе и т.д. — мусор
Без них нежелательное поведение гораздо труднее надёжно выявить.
zg wrote: имеем ровно то, что попросили
Спасибо, что разобрались.
zg wrote: желательно вежливо, а не так, как вы привыкли
Это поклёп, и оправдываться я не намерен. Пусть это останется на Вашей совести.
zg wrote: что касается домыслов про 4808
Ошибка проявилась именно в 4809, а утверждений о том, когда она была внесена, я и не делал.
Промаргивание панелей при перерисовке редактора из-за диалога
Posted: Tue 29 Nov, 2016 22:28
by HaRT
zg wrote: ectl_settitle флушит экранный буфер в консоль
А как это приводит к прорисовке панелей в редакторе?
Промаргивание панелей при перерисовке редактора из-за диалога
Posted: Tue 29 Nov, 2016 23:00
by zg
HaRT wrote: А как это приводит к прорисовке панелей в редакторе?
ee_redraw приходит до отрисовки редактора, а под ним у вас панели, переключитесь в редактор из просмотра, будет просмотр прорисовываться.
Промаргивание панелей при перерисовке редактора из-за диалога
Posted: Tue 29 Nov, 2016 23:12
by HaRT
zg wrote: ee_redraw приходит до отрисовки редактора
Ага, постепенно проясняется. Спасибо.
zg wrote: что-то сделать флушем в ectl_settitle. по коду видно, что даже автор сомневался в его необходимости. хотя я бы просто так его убирать тоже не стал.
А какие есть соображения, зачем там понадобился flush? И чем чревато его выпиливание?
Промаргивание панелей при перерисовке редактора из-за диалога
Posted: Wed 30 Nov, 2016 12:10
by zg
HaRT wrote:А какие есть соображения, зачем там понадобился flush? И чем чревато его выпиливание?
чтобы заголовок устанавливался сразу.
Промаргивание панелей при перерисовке редактора из-за диалога
Posted: Wed 30 Nov, 2016 12:27
by HaRT
zg wrote: чтобы заголовок устанавливался сразу
Хм, замысловато.
А сложно ли сделать, чтобы можно было флашить заголовок консоли и собственно экранный буфер по раздельности? И тогда в ECTL_SETTITLE можно было бы не трогать картинку…