/kernel/trunk/const.inc |
---|
513,6 → 513,7 |
move_cursor dd ? |
restore_cursor dd ? |
disable_mouse dd ? |
mask_seqno dd ? |
ends |
struct BOOT_DATA |
/kernel/trunk/core/memory.inc |
---|
166,6 → 166,7 |
ret |
endp |
align 4 |
proc map_io_mem stdcall, base:dword, size:dword, flags:dword |
push ebx |
/kernel/trunk/docs/sysfuncs.txt |
---|
1878,9 → 1878,14 |
* eax = 40 - function number |
* ebx = mask: bit i corresponds to event i+1 (see list of events) |
(set bit permits notice on event) |
bit 31: mouse events filtration |
bit 31 = 1 - inactive window do not receive mouse events |
bit 31 = 0 - windows always recievs mouse events |
bit 31: active/inactive filter |
bit 31 = 0 - inactive window receive mouse events |
bit 31 = 1 - inactive window does not receive mouse events |
bit 30: cursor position filter |
bit 30 = 0 = the window receive mouse events if cursor |
outside window |
bit 30 = 1 - the window does not receive mouse events if cursor |
outside window |
Returned value: |
* eax = previous value of mask |
Remarks: |
/kernel/trunk/gui/event.inc |
---|
463,16 → 463,16 |
ret |
.FlagAutoReset: ; retvals: BgrRedraw=5, Mouse=6, IPC=7, Stack=8, Debug=9 |
cmp eax, 5; Mouse 5+1=6 |
jne @f |
push eax |
; cmp eax, 5; Mouse 5+1=6 |
; jne @f |
; push eax |
; If the window is captured and moved by the user, then no mouse events!!! |
mov al, [mouse.active_sys_window.action] |
and al, WINDOW_MOVE_AND_RESIZE_FLAGS |
test al, al |
pop eax |
jnz .loop |
@@: |
; mov al, [mouse.active_sys_window.action] |
; and al, WINDOW_MOVE_AND_RESIZE_FLAGS |
; test al, al |
; pop eax |
; jnz .loop |
;@@: |
btr [ebx+APPDATA.event_mask], eax |
jnc .loop |
.result: ; retval = eax+1 |
/kernel/trunk/kernel.asm |
---|
3086,21 → 3086,45 |
mov ecx, [TASK_COUNT] |
movzx eax, word [WIN_POS + ecx*2] ; active window |
shl eax, 8 |
push eax |
movzx eax, word [MOUSE_X] |
movzx edx, word [MOUSE_Y] |
align 4 |
.set_mouse_event: |
add edi, 256 |
add ebx, 32 |
test [ebx+TASKDATA.event_mask], 0x80000000 |
jz .pos_filter |
cmp edi, [esp] ; skip if filtration active |
jne .skip |
.pos_filter: |
test [ebx+TASKDATA.event_mask], 0x40000000 |
jz .set |
cmp eax, edi ; skip if filtration active |
jne .skip |
mov esi, [ebx-twdw+WDATA.box.left] |
cmp eax, esi |
jb .skip |
add esi, [ebx-twdw+WDATA.box.width] |
cmp eax, esi |
ja .skip |
mov esi, [ebx-twdw+WDATA.box.top] |
cmp edx, esi |
jb .skip |
add esi, [ebx-twdw+WDATA.box.height] |
cmp edx, esi |
ja .skip |
.set: |
or [edi+SLOT_BASE+APPDATA.event_mask], 100000b |
.skip: |
loop .set_mouse_event |
pop eax |
mouse_not_active: |
cmp byte[BACKGROUND_CHANGED], 0 |
jz no_set_bgr_event |