EMenu: графическое меню вызывается два раза Topic is solved

Здесь можно сообщить о найденных багах в Far.
User avatar
zg
zero-gravity
Posts: 6036
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Emenu графическое меню вызывается два раза

Post by zg »

Latest post of the previous page:

GrAnD wrote:Правильнее, конечно было бы выслать патч разработчикам, но видимо это проблема проявляется только у крайне малого числа людей.
у меня проявляется. правда вот под фаром, запущенным из под студии, нет. а просто — да. не всегда, но часто. но проблема явно не в фаре. при нормальной работе в консоль приходит одно событие — нажатие правой кнопки. при нажатии левой — в консоль ничего не приходит. а вот в варианте, когда меню показывается два раза, то в консоль приходит:
1. нажали правую кнопку -> приходит правая.
2. нажали левую кнопку -> приходит правая. и фар честно показывает меню второй раз.
3. нажали esc -> приходит левая. внезапно.
User avatar
GrAnD
Posts: 351
Joined: Thu 13 Oct, 2005 23:47
Location: Amsterdam
Been thanked: 3 times
Contact:

Re: Emenu графическое меню вызывается два раза

Post by GrAnD »

я с этим столкнулся в первый раз еще когда переносил rcl2apps под второй ФАР, там было то же самое и нужно было посылать нажатие apps в ФАР именно по отпусканию всех кнопок

здесь я сделал то же самое и у меня все починилось. сложно сказать, я дебаггером не смотрел.

как мне кажется(это всего лишь предположение) дело в потере фокуса ФАРОМ в момент вызова графического меню

в нормальном режиме должно прийти:
1) нажатие пкм
2) отпускание пкм
3) движение мышью

а вызов меню и потеря фокуса на обработке шага 1 - привносит какие то проблемы

PS
да похоже на то
написал маленький тест
если консольное окно теряет фокус после пришествия нажатия кнопки то потом при возврате фокуса первым делом прилетает mouse move c этой кнопкой на которой пропал фокус
flags: 0x00000000 butState: 0x00000002 keyState: 0x00000000 right button -> потеря фокуса

возврат
flags: 0x00000001 butState: 0x00000002 keyState: 0x00000000 mouse moved
flags: 0x00000000 butState: 0x00000000 keyState: 0x00000000 button released
flags: 0x00000001 butState: 0x00000000 keyState: 0x00000000 mouse moved

простая проверка на MouseEvent->dwEventFlags == 0 избавляет от появления меню второй раз

но не чинит того что меню не закрывается по ESC и вообще не реагирует на клавиатуру

надо все таки вызывать по отпусканию кнопок, тогда нет проблем
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

Re: Emenu графическое меню вызывается два раза

Post by ccaid »

а не те же ли корни вот у этой проблемы?
Фар делают добрые люди
User avatar
zg
zero-gravity
Posts: 6036
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Emenu графическое меню вызывается два раза

Post by zg »

GrAnD wrote:надо все таки вызывать по отпусканию кнопок, тогда нет проблем
у меня очень большие сомнения, что проблема в фаре, а не скажем в emenu.
User avatar
GrAnD
Posts: 351
Joined: Thu 13 Oct, 2005 23:47
Location: Amsterdam
Been thanked: 3 times
Contact:

Re: Emenu графическое меню вызывается два раза

Post by GrAnD »

Возможно и так, проблема действительно не очевидна, но у меня еще есть один аргумент.

Если открыть любое Windows окно, проводник там, eclipse, да что угодно, не важно. Да чего там даже в cmd как и везде контекстное меню отображается именно по _отпусканию_ правой кнопки. Нигде оно не срабатывает по нажатию.

Только в фаре оно срабатывает по нажатию и именно в нем и не работает.
Как минимум это подозрительно.

Но опять же я не настаиваю, в принципе тот корявенький фикс, что я приложил - лично у меня решил все проблемы.
User avatar
zg
zero-gravity
Posts: 6036
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Emenu графическое меню вызывается два раза

Post by zg »

GrAnD wrote:Только в фаре оно срабатывает по нажатию и именно в нем и не работает.
Как минимум это подозрительно.
в фаре создаётся скрытое окно, которое является родителем для меню. если убрать его удаление после показа меню, то повторного показа меню по левому клику не происходит. это тоже как минимум подозрительно.
User avatar
GrAnD
Posts: 351
Joined: Thu 13 Oct, 2005 23:47
Location: Amsterdam
Been thanked: 3 times
Contact:

Re: Emenu графическое меню вызывается два раза

Post by GrAnD »

Тогда возникает вопрос - почему то же самое GUI меню вызванное по Apps
1) реагирует на клавиатуру и закрывается по ESC
2) не показывает второй раз меню при щелчке мышкой

если бы дело было в удалении этого родительского окна - мы бы не увидили таких расхождений
User avatar
zg
zero-gravity
Posts: 6036
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Emenu графическое меню вызывается два раза

Post by zg »

GrAnD wrote:если бы дело было в удалении этого родительского окна - мы бы не увидили таких расхождений
я не говорил, что в этом всё дело. но если всё дело в потере фокуса фаром, то почему:
1. у меня первый раз после запуска повторно меню не вызывается?
2. при запуске фара из под студии повторно меню не вызывается никогда?
3. куда уходят нажатия кнопок?
User avatar
GrAnD
Posts: 351
Joined: Thu 13 Oct, 2005 23:47
Location: Amsterdam
Been thanked: 3 times
Contact:

Re: Emenu графическое меню вызывается два раза

Post by GrAnD »

Могу лишь предположить что дело в гонке, и зависит от того на сколько быстро запустится EMenu
1) Первый раз оно инициализуется дольше обычного
2) Под студией так же процесс запуска несколько медленней
(думаю можно попробовать внести исскуственную задержку перед созданием окна EMenu и посмотреть будут ли изменения)

3) Это для меня тоже вопрос, еслиб знать куда возможно и решение уже нашлось

PS
Если запускаешь под студией не удается ли воспроизвести проблему если делать не быстрый щелчок ПКМ, а нажать, подождать пока появится меню и отпустить?

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

Re: Emenu графическое меню вызывается два раза

Post by zg »

дублирование меню и то что не работает клавиатура — это две разные проблемы.
клавиатура не работает из-за следующего гениального кода:
  1. if (dwFlags & TPM_RIGHTBUTTON)
  2.  
  3.     {
  4.  
  5.         fButtonDown = (_GetKeyState(VK_RBUTTON) & 0x8000) != 0;
  6.  
  7.     } else {
  8.  
  9.         fButtonDown = (_GetKeyState(VK_LBUTTON) & 0x8000) != 0;
  10.  
  11.     }
и
  1. /*
  2.  
  3.      * Blow off keyboard if mouse down.
  4.  
  5.      */
  6.  
  7.     if ((pMenuState->fButtonDown) && (key != VK_F1)) {
если убрать TPM_RIGHTBUTTON, то она начинает работать.
User avatar
GrAnD
Posts: 351
Joined: Thu 13 Oct, 2005 23:47
Location: Amsterdam
Been thanked: 3 times
Contact:

Re: Emenu графическое меню вызывается два раза

Post by GrAnD »

Это откуда код? Нигде не смог найти его.
User avatar
zg
zero-gravity
Posts: 6036
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Emenu графическое меню вызывается два раза

Post by zg »

GrAnD wrote:Это откуда код? Нигде не смог найти его.
из исходников винды.
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Emenu графическое меню вызывается два раза

Post by John Doe »

GrAnD wrote:Я сделал патч который фиксит проблему,
Идея в том что EMenu надо запускать по отпусканию кнопки мыши, а не по нажатию
Макрос, который открывает меню после отпускания клавиши, действительно решает проблему:

Code: Select all

local RIGHTMOST_BUTTON_PRESSED = 0x0002
Macro{
  area="Shell Disks Tree"; key="MsRClick"; description="Fix FAR bug"; --http://forum.farmanager.com/viewtopic.php?f=9&t=7540
  uid="AADEA56B-7F04-453E-9CA3-3973DFC67270";
  action=function()
    repeat
      mf.waitkey(50)
    until band(Mouse.Button,RIGHTMOST_BUTTON_PRESSED)==0
    Keys"MsRClick"
  end;
}
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Emenu графическое меню вызывается два раза

Post by John Doe »

GrAnD wrote:Макрос мне к сожалению не подходит, там нельзя повешать действие на одновременное нажатие ЛКМ + ПКМ
Почему нельзя? http://forum.farmanager.com/viewtopic.p ... 93#p124193
2useven10
Posts: 5232
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 315 times

Emenu графическое меню вызывается два раза

Post by 2useven10 »

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

Emenu графическое меню вызывается два раза

Post by John Doe »

2useven10, дайте пощупать с патчем.
Помимо прочего там добавлена обработка ЛКМ+ПКМ, что похоже конфликтует с текущими фичами.

Также не исключено, что это стоит править в плагине.
Post Reply

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