Меню: события прорисовки

Здесь можно сообщить о найденных багах в Far.
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Меню: события прорисовки

Post by John Doe »

В покое при открытом меню в обработчик приходит непрерывный поток событий

Code: Select all

DN_ENTERIDLE 0 0

DN_DRAWDIALOG 0 0
DN_CTLCOLORDIALOG 0 table: 0x0482e670
DN_DRAWDLGITEM 1 table: 0x041e8858
DN_CTLCOLORDLGLIST 1 table: 0x041f9828
DN_DRAWDLGITEMDONE 1 0
DN_DRAWDIALOGDONE 0 0

--и т.д. по кругу
В обычных диалогах с листбоксами такого не происходит.

Дополнение
При нажатии курсорной клавиши наблюдаю следующую последовательность событий

Code: Select all

DN_CONTROLINPUT 1 table: 0x0b7a6d80

DN_DRAWDIALOG 0 0
DN_CTLCOLORDIALOG 0 table: 0x0b5dc218
DN_DRAWDLGITEM 1 table: 0x03b0bf90
DN_CTLCOLORDLGLIST 1 table: 0x0b7a6a70
DN_DRAWDLGITEMDONE 1 0
DN_DRAWDIALOGDONE 0 0

DN_DRAWDLGITEM 1 table: 0x03b00990
DN_CTLCOLORDLGLIST 1 table: 0x0b5ec650
DN_DRAWDLGITEMDONE 1 0

DN_ENTERIDLE 0 0
Т.е. вначале полностью перерисовывается всё меню вместе со списком, а потом ещё и список отдельно.
(похоже полная перерисовка тут лишняя, во всяком случае в обычных диалогах такого не происходит)
Shmuel
Posts: 6839
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Меню: события прорисовки

Post by Shmuel »

John Doe wrote: В обычных диалогах с листбоксами такого не происходит.
А если вызвать far.SubscribeDialogDrawEvents(true) ?
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Post by John Doe »

Вызываю в обоих случаях.
В диалогах события тоже приходят, но по делу, а не в покое.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Меню: события прорисовки

Post by zg »

в исходниках достаточно очевидно почему. зачем — спрашивайте автора.
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Меню: события прорисовки

Post by John Doe »

Автора не очень-то и спросишь. Не отвечает.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Меню: события прорисовки

Post by DrKnS »

Так в меню у нас официально вроде бы никаких событий нет, не?
То, что сейчас они базируются на диалоговом движке и что-то приходит - детали реализации.
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Меню: события прорисовки

Post by John Doe »

DrKnS wrote: Так в меню у нас официально вроде бы никаких событий нет, не?
Странно, что вы это расцениваете иначе чем недостаток документации.

Если "официально" событий нет, то не должно быть проблемой отключить их и фактически.
(Правда отвалятся написанные за несколько лет скрипты, но кого это волнует)
DrKnS wrote: То, что сейчас они базируются на диалоговом движке и что-то приходит - детали реализации.
Эти самые "детали реализации" уже как-то выходили боком: http://bugs.farmanager.com/view.php?id=2644 (в результате в LuaFar пришлось сделать затычку).
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Меню: события прорисовки

Post by zg »

John Doe wrote:Если "официально" событий нет, то не должно быть проблемой отключить их и фактически.
вы этим чего добиваетесь?
John Doe wrote:Эти самые "детали реализации" уже как-то выходили боком: http://bugs.farmanager.com/view.php?id=2644 (в результате в LuaFar пришлось сделать затычку).
какая связь между указанным инцидентом и этой темой?
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Меню: события прорисовки

Post by John Doe »

zg wrote: вы этим чего добиваетесь?
Признания (и документирования) фактического положения вещей, т.е. того, что меню есть диалог, со всеми его свойствами.
zg wrote: какая связь между указанным инцидентом и этой темой?
Тормоза в меню были вызваны именно потоком избыточных сообщений, указанных в первом посте данной темы.

P.S.
Для ясности: я завёл данную тему для информирования всех заинтересованных.
Но вовсе не считаю что надо бросать всё, и немедленно фиксить.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Меню: события прорисовки

Post by zg »

John Doe wrote:Признания (и документирования) фактического положения вещей, т.е. того, что меню есть диалог, со всеми его свойствами.
вам уже неоднократно сказали, что нет. как я понимаю, вы избрали тактику упоминать об этом при каждом удобном и не очень случае. какую реакцию, кроме раздражения, вы ожидаете на такое поведение?
John Doe wrote:Тормоза в меню были вызваны именно потоком избыточных сообщений, указанных в первом посте данной темы.
я ж вроде умею читать:
Торможение можно наблюдать при простом перемещении курсора
«избыточные» же сообщения приходят только при отсутствии ввода. как-то не сходится, не?
John Doe wrote:Для ясности: я завёл данную тему для информирования всех заинтересованных.
Но вовсе не считаю что надо бросать всё, и немедленно фиксить.
там исправлений-то — одну строку убрать. вопрос, зачем там эта строка. вы бы вместо переливаний из пустого в порожнее убрали бы и посмотрели, а что собственно произойдёт и нам бы рассказали. пользы было бы гораздо больше.
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Меню: события прорисовки

Post by John Doe »

zg wrote: вам уже неоднократно сказали, что нет.
Может один раз объясните почему?
zg wrote: «избыточные» же сообщения приходят только при отсутствии ввода. как-то не сходится, не?
Я хотел подчеркнуть что они приходят даже при отсутствии ввода.
А уж при вводе их приходит на порядок больше.
zg wrote: вы бы вместо переливаний из пустого в порожнее убрали бы и посмотрели, а что собственно произойдёт и нам бы рассказали.
У меня нет среды разработки.
Но если это поможет делу, то готов выкачать, настроить, и собрать фар с исправлением, которое вы укажете.

P.S.
zg wrote: вы избрали тактику упоминать об этом при каждом удобном и не очень случае.
Ну так пользуюсь я обработчиками в меню, плотно.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Меню: события прорисовки

Post by zg »

John Doe wrote:Может один раз объясните почему?
не раз объясняли. отдача подробностей внутренней реализации наружу очень часто влечёт за собой проблемы в будущем. хотя в момент отдачи кажется, что это хорошее решение. есть у вас недокументированные события в меню, помогают они вам по жизни, пользуйтесь с оглядкой на недокументированность, возникают проблемы — помогайте решить. все довольны будут. но вам надо активно форсить документацию этих событий. лично у меня это формирует ваш имидж, как человека активно пытающегося создать мне проблемы в будущем. какую реакцию вы ожидаете после этого?
John Doe wrote:
zg wrote: «избыточные» же сообщения приходят только при отсутствии ввода. как-то не сходится, не?
Я хотел подчеркнуть что они приходят даже при отсутствии ввода.
А уж при вводе их приходит на порядок больше.
надо не хотеть, надо в код смотреть. и видеть, что меню перерисовываются при каждом приходе DN_ENTERIDLE. т.е. с вводом это вообще с большой вероятностью не связано. т.е. вполне вероятно ситуация, когда перерисовку в простое вам исправят, а вы всё равно останитесь традиционно недовольны.
John Doe wrote:У меня нет среды разработки.
Но если это поможет делу, то готов выкачать, настроить, и собрать фар с исправлением, которое вы укажете.
gcc-ая сборка настраивается за 5 минут. закомментировать строчку и собрать фар — ещё 5 минут. и вы уже будете видеть, остались тормоза или нет. мне же для начала нужно воспроизвести эти ваши тормоза.
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Меню: события прорисовки

Post by John Doe »

zg wrote: возникают проблемы — помогайте решить.
Для начала их надо зафиксировать, что я попытался например сделать в первом посте, на что получил ответ, что это мол "детали реализации".
Не буду возражать, пусть это называется так, но всё равно в перспективе стремиться надо к избавлению от таких деталей.
Или нет?
zg wrote: но вам надо активно форсить документацию этих событий.
Ок, оставим в покое документацию.
Но багрепорты пожелания в любом случае не вредят?
zg wrote: т.е. вполне вероятно ситуация, когда перерисовку в простое вам исправят, а вы всё равно останитесь традиционно недовольны.
Разве можно активность на багтрекере считать недовольством?
Да, бывает что-то правится, и правками следуют новые репорты. Что плохого-то?
zg wrote: мне же для начала нужно воспроизвести эти ваши тормоза.
В данной теме суть не в тормозах, а в желании поток событий, приходящих в обработчик, сделать осмысленнее.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Меню: события прорисовки

Post by zg »

John Doe wrote:
zg wrote: возникают проблемы — помогайте решить.
Для начала их надо зафиксировать, что я попытался например сделать в первом посте, на что получил ответ, что это мол "детали реализации".
Не буду возражать, пусть это называется так, но всё равно в перспективе стремиться надо к избавлению от таких деталей.
Или нет?
в первом посте у вас типичная the xy problem. вы вообще такое любите. реальную проблему вы так и не озвучили, но могу догадаться, для каких-то целей вы вызываете far.SubscribeDialogDrawEvents(true), после чего у вас в меню с историями тормозит навигация. и вот конкретно с этим надо разбираться. из того, что я вижу, в VMenu2::Call (которая вызывается на каждый чих) дёргается DM_ENABLEREDRAW, что возможно приводит к частым перерисовкам. т.е. если была нажата стрелка вверх, то будет как минимум 4 перерисовки: собственно перерисовка из-за смены позиции, DN_INPUT для нажатия, DN_INPUT для отжатия, DN_CONTROLINPUT для нажатия. реально — что-то ещё. это плохо. но это абсолютно никак не связано с тем, что у вас в первом посте.
John Doe wrote:Но багрепорты пожелания в любом случае не вредят?
зависит от пожеланий.
John Doe wrote:Да, бывает что-то правится, и правками следуют новые репорты. Что плохого-то?
the xy problem.
John Doe wrote:В данной теме суть не в тормозах, а в желании поток событий, приходящих в обработчик, сделать осмысленнее.
вот с таким подходом — вообще не надо ни баг-репортов, ни пожеланий. лечить нужно причину, а не следствие.
User avatar
John Doe
Бюрократ
Posts: 13861
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Меню: события прорисовки

Post by John Doe »

zg wrote: но могу догадаться, для каких-то целей вы вызываете far.SubscribeDialogDrawEvents(true), после чего у вас в меню с историями тормозит навигация.
Для каких-то целей мне понадобилось воспользоваться событиями перерисовки, это верно.
Но попытавшись это сделать я обнаружил что это абсолютно невозможно ни для каких целей.
Это проблема АПИ, а не xy.
(Разумеется пока в меню "официально" событий нет, это "официально" не проблема, а, скажем, пожелание)
zg wrote: из того, что я вижу, в VMenu2::Call (которая вызывается на каждый чих) дёргается DM_ENABLEREDRAW, что возможно приводит к частым перерисовкам[...]но это абсолютно никак не связано с тем, что у вас в первом посте.
Да, мне следовало сразу дать общую картину, а не ограничиваться описание того, что происходит в покое.
zg wrote: the xy problem.
С каждым бывает, но не замечал что склонен описывать проблемы такого рода (и сейчас в упор не вижу).
zg wrote: лечить нужно причину, а не следствие.
Бесспорно. Но я не владею c++, и не могу проанализировать исходники фара, поэтому излагаю проблему в терминах того, что получаю через АПИ.
Не могу судить, что тут нужно лечить, а могу лишь описать, как оно проявляется.

С этой точки зрения задача в том, чтобы иметь в ProcessDialogEventW понятные (а значит пригодные для использования) события.
И это не какое-то абстрактное оторванное от практики желание, это реальная необходимость в условиях скудной документации фара, в которой не описывается ряд существенных деталей (таких как например порядок событий, и т.п.).
Post Reply

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