View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001759 | Far Manager | Plugins API.Panel | public | 2011-05-01 16:46 | 2017-10-25 17:56 |
Reporter | Maximus | Assigned To | vskirdin | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | assigned | Resolution | open | ||
Platform | x64 | OS | Windows | OS Version | 7 |
Product Version | 3.0 | ||||
Summary | 0001759: ProcessKeyW вызывается по два раза | ||||
Description | Для плагиновой панели ProcessKeyW вызывается два раза на каждое нажатие (Far3 build 2018) если плагин возвращает FALSE один раз отсюда (manager.cpp:798, int Manager::ProcessKey(DWORD Key)) if (CtrlObject->Cp()->ActivePanel->SendKeyToPlugin(Key,TRUE)) второй раз (manager.cpp:1145) CurrentFrame->ProcessKey(Key); которая вызывает (filepanels.cpp:810) ActivePanel->ProcessKey(Key) | ||||
Tags | No tags attached. | ||||
Build | |||||
|
Уточнение. Первый раз - это то, что раньше было PKF_PREPROCESS. Но теперь, оба вызова неразличимы ( |
|
тут, есть пара путей :-) 1. выкидываем "Pred", в этом случае плагины не будут получать клавишу на предобработку. 2. Плагин::ProcessKey(INPUT_RECORD) - здесь добавляем в INPUT_RECORD::Event::KeyEvent::dwControlKeyState "свой" флаг FAR_PREPROCESS, говорящий, что идет это предобработка либо делаем новый INPUT_RECORD::EventType, например, FARPRED_KEY_EVENT. ы? |
|
Плагин::ProcessKey(pk) struct pk { INPUT_RECORD, Flags } ? |
|
Хмм.. Ну да, не подумал, так будет наверное лучше ;-) |
|
нука... попробуем... http://skirda-file.googlecode.com/files/mantis%230001759.7z enum PROCESSKEYINFO_FLAGS { PKIF_PREPROCESS = 0x00080000, }; struct ProcessKeyInfo { size_t StructSize; const INPUT_RECORD *Rec; PROCESSKEYINFO_FLAGS Flags; }; int WINAPI ProcessKeyW(HANDLE hPanel,const struct ProcessKeyInfo *Info); |
|
Тока надо ещё PKIF_NORMAL = 0x0000000 |
|
Так? typedef unsigned __int64 PROCESSKEYINFO_FLAGS; static const PROCESSKEYINFO_FLAGS PKIF_PREPROCESS = 0x0000000000080000ULL, PKIF_NORMAL = 0x0000000000000000ULL; вот подумалось, а uint64 не перебор? :-) или норм? |
|
Везде уже флаги uint64, пусть будет и здесь тоже. |
|
мысли следующие. 1. убираю нафиг препроцессный вызов ProcessKey (и этот инц решен), оставляя структуру такой: struct ProcessKeyInfo { size_t StructSize; const INPUT_RECORD *Rec; }; 2. добиваем 0001687 (и плагины перестают лазить "на задний двор" ФАРа - в таблицу импорта) |
|
build 2027 ...теперь только для A-плагинов. Препроцессы см. bug#1687 |
|
struct забыл int WINAPI ProcessPanelInputW(HANDLE hPanel,const struct ProcessPanelInputInfo *Info); |
|
int WINAPI ProcessConsoleInputW(struct ProcessConsoleInputInfo *Info); |
|
Можно закрывать? |
Date Modified | Username | Field | Change |
---|---|---|---|
2011-05-01 16:46 | Maximus | New Issue | |
2011-05-08 11:14 | Maximus | Note Added: 0006864 | |
2011-05-10 12:23 | vskirdin | Note Added: 0006867 | |
2011-05-10 12:37 | alexy | Note Added: 0006868 | |
2011-05-10 13:22 | vskirdin | Note Added: 0006869 | |
2011-05-11 07:15 | vskirdin | Note Added: 0006870 | |
2011-05-11 08:18 | alexy | Note Added: 0006871 | |
2011-05-11 09:45 | vskirdin | Assigned To | => vskirdin |
2011-05-11 09:45 | vskirdin | Status | new => assigned |
2011-05-11 09:50 | vskirdin | Note Added: 0006872 | |
2011-05-11 10:21 | Yegor | Note Added: 0006873 | |
2011-05-11 10:35 | vskirdin | Note Added: 0006874 | |
2011-05-11 20:23 | vskirdin | Note Added: 0006879 | |
2011-05-11 20:23 | vskirdin | Status | assigned => feedback |
2011-05-11 21:29 | Maximus | Note Added: 0006880 | |
2011-05-11 21:29 | Maximus | Status | feedback => assigned |
2011-05-11 21:40 | Maximus | Note Added: 0006881 | |
2011-12-23 09:00 | alexy | Note Added: 0008198 | |
2017-10-25 17:56 | JohnDoe | Relationship added | related to 0001687 |