Откатить все таки не получится. Если приложению не возвращать код назначенный на горячую клавишу (кстати реализация именно горячих клавиш, а не комбинаций сделана, потому и проблемы возникаю имхается мне), то при назначении горячих комбинаций типа Win (Ctrl, Alt, Shift) + символьная клавиша (в нашем случае R и D) приводит к тому что они становятся недоступными для обычного ввода. Раньше такие комбинации не использовались (назначение символьных клавиш в качестве горячих), потому эта недоработка реализации SVN r.92 не была заметна. С введением же новых горячих комбинаций проблема вылезла во всей красе.Mario wrote:Кроме выше описанных проблем обнаружилась еще одна проблема - при пользовании mousemul управляющие клавиши (стрелки и 5) срабатывают на активном приложении. У меня нет идей как побороть эту ситуацию, если никто не предложит метод решения, то придется откатить ревизию 2611 и закопать мамонта обратно. Черт с ним с залипанием Shift, Ctrl, Alt - благими намерениями вымощена дорога сами знаете куда.
Общесистемные горячие клавиши
Поскольку приложение MOUSEMUL имеет уникальный статус, то я ввел новую пару функций 66.6 и 66.7, для решения проблемы. SVN r. 2709, 2710
Похоже есть баг: f66.3 не присылает комбинации с альтом.
В аттаче приложение: исходник на православном асме и бинарник.
Логика приложения проста: если f66.3 что-то вернула - выход если пусто, продолжает работу.
Ctrl+1, Ctrl+f, Shift+P, Shift+4 - Выход
Alt+n - продолжает работать
Баг?
В аттаче приложение: исходник на православном асме и бинарник.
Логика приложения проста: если f66.3 что-то вернула - выход если пусто, продолжает работу.
Spoiler:
Code: Select all
use32 ; включить 32-битный режим ассемблера
org 0 ; адресация с нуля
db 'MENUET01' ; 8-байтный идентификатор MenuetOS
dd 1 ; версия заголовка (1 либо 2, см. док-ю)
dd START ; адрес первой команды
dd I_END ; размер программы
dd MEM ; количество памяти
dd STACKTOP ; адрес вершины стэка
dd 0
dd 0
include "macros.inc"
START:
red:
call draw_window
still:
mcall 10
cmp eax,1
je red
cmp eax,2
je key
cmp eax,3
je exit
jmp still
;---------------------------------------------------------------------
key:
mcall 2
mcall 66, 3
test eax,0 <------------ мякотка тут
jne still
exit:
mcall -1
jmp still ; вернуться к началу цикла
draw_window:
mcall 12, 1 ; функция 12: сообщить ОС о начале отрисовки
mcall 0, <200,500>, <400,150>, 0x33FFFfff, ,title
mcall 4, <5, 20>, 0x90000000, message
mcall 12, 2 ; функция 12.2, закончили рисовать
ret ; выходим из процедуры
message db 'Любая клавиша закроет окно, кроме Альта и комбинаций с ним.',0
title db 'f66.3',0
I_END: ; метка конца программы
rb 4096 ; память для стека
align 16
STACKTOP:
MEM:Alt+n - продолжает работать
Баг?
- Attachments
-
-
EXAMPLE.ASM (1.16 KiB)Downloaded 271 times
-
EXAMPLE (240 Bytes)Downloaded 252 times
-
Из хаоса в космос
Code: Select all
test eax,0The reason why Alt+letter keys are not sent to the program is that
1. Programs expect ASCII codes by default, not scan codes, and
2. /programs/system/taskbar/trunk/KEYMAP.KEY file doesn't mention any ASCII codes for Alt+letter keys. So the kernel doesn't send any event to the program.
In addition, Alt+number keys are global hotkeys to change keyboard layout.
I can think of two solutions:
1. Add ASCII codes to Alt+letter keys to the keymap file. This way Alt+letter will also put characters to editboxes, is it desirable behavior?
2. Switch the program to receive scan codes.
Hmm... Looks like I have to use scan codes.
Thanks a lot for investigation!
Thanks a lot for investigation!
Из хаоса в космос
Hey guys,
The point is about change language hotley.
I know someone loves Ctrl+Shift because I was that guy. But this is a useful combination for other cases like Ctrl+Shift+Tab so I propose to use Win+Space for language switch as all main OSes.
The point is about change language hotley.
I know someone loves Ctrl+Shift because I was that guy. But this is a useful combination for other cases like Ctrl+Shift+Tab so I propose to use Win+Space for language switch as all main OSes.
Из хаоса в космос
Ok, why not.
Накой нужна система не отличающая Shift+Ctrl от Shift+Ctrl+ещё клавиша?
А выбор шортката должен быть настраиваемым.
А выбор шортката должен быть настраиваемым.
Ты наверное удивишься, но в Линуксе таже проблема, а еще проблема с обработкой шоткартов на не-латинской раскладке.lev wrote:Накой нужна система не отличающая Shift+Ctrl от Shift+Ctrl+ещё клавиша?
А выбор шортката должен быть настраиваемым.
to infinity and beyond
Возможно, это фича? Если приложение A зарегистировало Shift+Ctrl+Alt+F7 как горячую клавишу и при активном приложении B пользователь нажимает Shift+Ctrl+Alt+F7, вряд ли имеет смысл посылать её приложению B, которое может сильно удивиться. 192.168.1.1
panorama charter
panorama charter
Who is online
Users browsing this forum: No registered users and 7 guests