Залипшая клавиша Shift при посылке ECTL_PROCESSINPUT

Здесь можно сообщить о найденных багах в Far.
Post Reply
User avatar
4ekucT
Posts: 507
Joined: Tue 05 Apr, 2005 23:44
Location: Беларусь, Минск

Залипшая клавиша Shift при посылке ECTL_PROCESSINPUT

Post by 4ekucT »

Когда я обрабатываю нажатие символа '{' в ProcessEditorInputW() и начинаю выполнять более сложную логику с раскрытием скобок и нажатием клавиши ввода через ECTL_PROCESSINPUT (с.м. код выше), то Far похоже начинает все выполнять как будто Shift еще зажат. Потому что если то же самое делать для символа '[' (для его ввода Shift не зажимается), то все работает отлично.

Вот нацарапал примерчик, когда при перехвате ввода символа '{' мы пытаемся нажать в редакторе Enter, а получается ShiftEnter и вместо перехода на новую строку получаем вставку в текущую позицию имени редактируемого файла:

Code: Select all

intptr_t WINAPI ProcessEditorInputW(const struct ProcessEditorInputInfo *Info)
{
	if
	(
		(Info->Rec.EventType != KEY_EVENT && Info->Rec.EventType != 0x8001) ||
		Info->Rec.Event.KeyEvent.bKeyDown == 0
	) return (PROCESS_EVENT);

	if ((Info->Rec.EventType == KEY_EVENT) && (Info->Rec.Event.KeyEvent.uChar.UnicodeChar == L'{'))
	{
		INPUT_RECORD	tr;
		tr.EventType = KEY_EVENT;
		tr.Event.KeyEvent.bKeyDown = true;
		tr.Event.KeyEvent.wRepeatCount = 1;
		tr.Event.KeyEvent.wVirtualKeyCode = VK_RETURN;
		tr.Event.KeyEvent.wVirtualScanCode = 0;
		tr.Event.KeyEvent.uChar.UnicodeChar = 0;
		tr.Event.KeyEvent.dwControlKeyState = 0;
		::Info.EditorControl (-1, ECTL_PROCESSINPUT, 0, &tr);		
		return IGNORE_EVENT;
	}
	return (PROCESS_EVENT);
}
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Залипшая клавиша Shift при посылке ECTL_PROCESSINPUT

Post by Shmuel »

1. Баг подтверждаю.
2. Можно поместить репорт на мантис.
3. Покуда баг не починен, можно заменить ECTL_PROCESSINPUT на ECTL_INSERTTEXT с последующим ECTL_REDRAW. Пробовал, работает.
User avatar
4ekucT
Posts: 507
Joined: Tue 05 Apr, 2005 23:44
Location: Беларусь, Минск

Re: Залипшая клавиша Shift при посылке ECTL_PROCESSINPUT

Post by 4ekucT »

Ок репорт закину на мантис и пока попробую воркэраунд. Спасибо за подсказку!
User avatar
4ekucT
Posts: 507
Joined: Tue 05 Apr, 2005 23:44
Location: Беларусь, Минск

Re: Залипшая клавиша Shift при посылке ECTL_PROCESSINPUT

Post by 4ekucT »

Нет, я пожалуй подожду фикс. Решение с

Code: Select all

Info.EditorControl (-1, ECTL_INSERTTEXT, 0, L"\n");
мне не подходит, потому что при этом не вызывается ProcessEditorInputW(), который мне необходим, чтобы правильно выравнивать блоки при переводе коректи...
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Залипшая клавиша Shift при посылке ECTL_PROCESSINPUT

Post by Shmuel »

А если попробовать MCTL_SENDSTRING с SequenceText=L"Keys'Enter'" ?
User avatar
4ekucT
Posts: 507
Joined: Tue 05 Apr, 2005 23:44
Location: Беларусь, Минск

Re: Залипшая клавиша Shift при посылке ECTL_PROCESSINPUT

Post by 4ekucT »

Тоже не прокатило, потому что MCTL_SENDSTRING + MSSC_POST не вызывает ProcessEditorInputW() рекурсивно :cry:
User avatar
4ekucT
Posts: 507
Joined: Tue 05 Apr, 2005 23:44
Location: Беларусь, Минск

Re: Залипшая клавиша Shift при посылке ECTL_PROCESSINPUT

Post by 4ekucT »

Спасибо за фикс! Помогло.
Post Reply

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