forked from KolibriOS/kolibrios
fn.40: ebx bit 30 - do not send mouse events if cursor outside window
git-svn-id: svn://kolibrios.org@2414 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
823a0a9a8f
commit
0735fd9e1b
@ -513,6 +513,7 @@ struct display_t
|
|||||||
move_cursor dd ?
|
move_cursor dd ?
|
||||||
restore_cursor dd ?
|
restore_cursor dd ?
|
||||||
disable_mouse dd ?
|
disable_mouse dd ?
|
||||||
|
mask_seqno dd ?
|
||||||
ends
|
ends
|
||||||
|
|
||||||
struct BOOT_DATA
|
struct BOOT_DATA
|
||||||
@ -647,4 +648,4 @@ struct IRQH
|
|||||||
list LHEAD
|
list LHEAD
|
||||||
handler dd ? ;handler roututine
|
handler dd ? ;handler roututine
|
||||||
data dd ? ;user-specific data
|
data dd ? ;user-specific data
|
||||||
ends
|
ends
|
||||||
|
@ -166,6 +166,7 @@ proc free_page
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
align 4
|
||||||
proc map_io_mem stdcall, base:dword, size:dword, flags:dword
|
proc map_io_mem stdcall, base:dword, size:dword, flags:dword
|
||||||
|
|
||||||
push ebx
|
push ebx
|
||||||
|
@ -1878,9 +1878,14 @@ Parameters:
|
|||||||
* eax = 40 - function number
|
* eax = 40 - function number
|
||||||
* ebx = mask: bit i corresponds to event i+1 (see list of events)
|
* ebx = mask: bit i corresponds to event i+1 (see list of events)
|
||||||
(set bit permits notice on event)
|
(set bit permits notice on event)
|
||||||
bit 31: mouse events filtration
|
bit 31: active/inactive filter
|
||||||
bit 31 = 1 - inactive window do not receive mouse events
|
bit 31 = 0 - inactive window receive mouse events
|
||||||
bit 31 = 0 - windows always recievs 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:
|
Returned value:
|
||||||
* eax = previous value of mask
|
* eax = previous value of mask
|
||||||
Remarks:
|
Remarks:
|
||||||
|
@ -463,16 +463,16 @@ get_event_for_app: ;; used from f10,f11,f23
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
.FlagAutoReset: ; retvals: BgrRedraw=5, Mouse=6, IPC=7, Stack=8, Debug=9
|
.FlagAutoReset: ; retvals: BgrRedraw=5, Mouse=6, IPC=7, Stack=8, Debug=9
|
||||||
cmp eax, 5; Mouse 5+1=6
|
; cmp eax, 5; Mouse 5+1=6
|
||||||
jne @f
|
; jne @f
|
||||||
push eax
|
; push eax
|
||||||
; If the window is captured and moved by the user, then no mouse events!!!
|
; If the window is captured and moved by the user, then no mouse events!!!
|
||||||
mov al, [mouse.active_sys_window.action]
|
; mov al, [mouse.active_sys_window.action]
|
||||||
and al, WINDOW_MOVE_AND_RESIZE_FLAGS
|
; and al, WINDOW_MOVE_AND_RESIZE_FLAGS
|
||||||
test al, al
|
; test al, al
|
||||||
pop eax
|
; pop eax
|
||||||
jnz .loop
|
; jnz .loop
|
||||||
@@:
|
;@@:
|
||||||
btr [ebx+APPDATA.event_mask], eax
|
btr [ebx+APPDATA.event_mask], eax
|
||||||
jnc .loop
|
jnc .loop
|
||||||
.result: ; retval = eax+1
|
.result: ; retval = eax+1
|
||||||
|
@ -3086,21 +3086,45 @@ nocpustart:
|
|||||||
mov ecx, [TASK_COUNT]
|
mov ecx, [TASK_COUNT]
|
||||||
movzx eax, word [WIN_POS + ecx*2] ; active window
|
movzx eax, word [WIN_POS + ecx*2] ; active window
|
||||||
shl eax, 8
|
shl eax, 8
|
||||||
|
push eax
|
||||||
|
|
||||||
|
movzx eax, word [MOUSE_X]
|
||||||
|
movzx edx, word [MOUSE_Y]
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
.set_mouse_event:
|
.set_mouse_event:
|
||||||
add edi, 256
|
add edi, 256
|
||||||
add ebx, 32
|
add ebx, 32
|
||||||
test [ebx+TASKDATA.event_mask], 0x80000000
|
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
|
jz .set
|
||||||
|
|
||||||
cmp eax, edi ; skip if filtration active
|
mov esi, [ebx-twdw+WDATA.box.left]
|
||||||
jne .skip
|
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:
|
.set:
|
||||||
or [edi+SLOT_BASE+APPDATA.event_mask], 100000b
|
or [edi+SLOT_BASE+APPDATA.event_mask], 100000b
|
||||||
.skip:
|
.skip:
|
||||||
loop .set_mouse_event
|
loop .set_mouse_event
|
||||||
|
|
||||||
|
pop eax
|
||||||
|
|
||||||
mouse_not_active:
|
mouse_not_active:
|
||||||
cmp byte[BACKGROUND_CHANGED], 0
|
cmp byte[BACKGROUND_CHANGED], 0
|
||||||
jz no_set_bgr_event
|
jz no_set_bgr_event
|
||||||
|
Loading…
Reference in New Issue
Block a user