kfar: add mouse double click events, fix mouse in menu

git-svn-id: svn://kolibrios.org@9039 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA 2021-07-08 20:45:01 +00:00
parent 293a74db28
commit 90de905a60
2 changed files with 144 additions and 94 deletions

View File

@ -169,6 +169,8 @@ align 4
pop edx pop edx
mov ebx, [esp+24h+8] ;DLGTEMPLATE* dlg mov ebx, [esp+24h+8] ;DLGTEMPLATE* dlg
cmp dword[ebx+dlgtemplate.size], 0
jne .event ;¥á«¨ ¤¨ «®£®¢®¥ ®ª­® ­¥ áâ ­¤ àâ­®¥ (ᯨ᮪ §­ ç¥­¨©)
cmp edx, [ebx+dlgtemplate.y] cmp edx, [ebx+dlgtemplate.y]
jl .event jl .event
cmp eax, [ebx+dlgtemplate.x] cmp eax, [ebx+dlgtemplate.x]
@ -205,6 +207,12 @@ align 4
cmp [ebx+dlgitemtemplate.y2], edx cmp [ebx+dlgitemtemplate.y2], edx
jl .m_next jl .m_next
cmp [ebx+dlgitemtemplate.type], 2 ;button
jne @f
mov [esp+28+8], ebx ;save to eax
pop ecx ebx
jmp .exit
@@:
mov eax, [ebx+dlgitemtemplate.flags] mov eax, [ebx+dlgitemtemplate.flags]
and eax, 4 and eax, 4
jnz .m_old_focus jnz .m_old_focus
@ -438,6 +446,7 @@ draw_dialog_shadow:
ret ret
; void __stdcall DrawGenericBox(DLGDATA* dlg, void* DlgProc) ; void __stdcall DrawGenericBox(DLGDATA* dlg, void* DlgProc)
align 16
DrawGenericBox: DrawGenericBox:
pushad pushad
mov ebx, [esp+24h] mov ebx, [esp+24h]
@ -720,6 +729,7 @@ restore_console_data:
; int __stdcall menu(void* variants, const char* title, unsigned flags); ; int __stdcall menu(void* variants, const char* title, unsigned flags);
; variants 㪠§ë¢ ¥â ­  ⥪ã騩 í«¥¬¥­â ¢ ¤¢ãá¢ï§­®¬ «¨­¥©­®¬ ᯨ᪥ ; variants 㪠§ë¢ ¥â ­  ⥪ã騩 í«¥¬¥­â ¢ ¤¢ãá¢ï§­®¬ «¨­¥©­®¬ ᯨ᪥
align 16
menu: menu:
pop eax pop eax
push [cur_height] push [cur_height]
@ -734,11 +744,11 @@ menu_centered_in:
pushad pushad
mov ecx, 60 mov ecx, 60
; 40 bytes for dlgtemplate + additional: ; 40 bytes for dlgtemplate + additional:
; +40: dd cur_variant ; +40: dd cur_variant - [???]
; +44: dd num_variants ; +44: dd num_variants - ᪮«ìª® í«¥¬¥­â®¢ ¢« §¨â ¢ ®ª­®
; +48: dd begin_variant ; +48: dd begin_variant - [dd ..,..,???]
; +52: dd end_variant ; +52: dd end_variant - [dd ..,..,???]
; +56: dd cur_variant_idx ; +56: dd cur_variant_idx - ???
call xpgalloc call xpgalloc
test eax, eax test eax, eax
jnz @f jnz @f
@ -749,7 +759,7 @@ menu_centered_in:
@@: @@:
mov ebx, eax mov ebx, eax
mov eax, 1 mov eax, 1
test byte [esp+20h+28], 1 test byte [esp+20h+28], 1 ;unsigned flags
jz @f jz @f
mov al, 3 mov al, 3
@@: @@:
@ -760,7 +770,7 @@ menu_centered_in:
; <EFBFBD> å®¤¨¬ è¨à¨­ã ¨ ¢ëá®âã ®ª­  ; <EFBFBD> å®¤¨¬ è¨à¨­ã ¨ ¢ëá®âã ®ª­ 
xor eax, eax xor eax, eax
xor ecx, ecx xor ecx, ecx
mov esi, [esp+20h+20] mov esi, [esp+20h+20] ;void* variants
mov [ebx+40], esi mov [ebx+40], esi
mov dword [ebx+56], eax mov dword [ebx+56], eax
@@: @@:
@ -889,6 +899,7 @@ menu_centered_in:
popad popad
ret 28 ret 28
align 16
MenuDlgProc: MenuDlgProc:
mov eax, [esp+8] mov eax, [esp+8]
cmp al, 1 cmp al, 1

View File

@ -819,9 +819,14 @@ mouse:
mov eax,SF_MOUSE_GET mov eax,SF_MOUSE_GET
mov ebx,SSF_BUTTON_EXT mov ebx,SSF_BUTTON_EXT
int 0x40 int 0x40
mov byte[mousestate], 1
bt eax,24 ;left but. double click
jc @f
mov byte[mousestate], 0
bt eax,8 ;left but. down bt eax,8 ;left but. down
jnc event jc @f
jmp event
@@:
mov eax,SF_MOUSE_GET mov eax,SF_MOUSE_GET
mov ebx,SSF_WINDOW_POSITION mov ebx,SSF_WINDOW_POSITION
int 0x40 int 0x40
@ -897,9 +902,14 @@ end if
cmp edx, 0 cmp edx, 0
jl @f jl @f
mov [ebp + PanelData.index], edx mov [ebp + PanelData.index], edx
cmp byte[mousestate], 0
je @f
call panels_OnKey.enter
jmp event
@@: @@:
call draw_panel call draw_panel
jmp event jmp event
align 4
.on_panel: .on_panel:
call get_keybar_ind call get_keybar_ind
lea eax, [panels_mouse+4*eax] lea eax, [panels_mouse+4*eax]
@ -908,7 +918,6 @@ end if
mov ebp, [active_panel] mov ebp, [active_panel]
mov ecx, [ebp + PanelData.index] mov ecx, [ebp + PanelData.index]
call dword[eax] call dword[eax]
@@:
jmp event jmp event
;input: ;input:
@ -974,6 +983,14 @@ get_keybar_ind:
pop edi esi edx ecx ebx pop edi esi edx ecx ebx
ret ret
align 4
OnMouse_ctrl_f39:
sub eax, panels_mouse.ctrl+8
shr eax, 2
add eax, 0x3D
call panels_OnKey.ctrl_f39
ret
align 16 align 16
process_ctrl_keys: process_ctrl_keys:
cmp byte [esi], 0 cmp byte [esi], 0
@ -1106,6 +1123,7 @@ enum_associations_callback:
xor eax, eax xor eax, eax
ret 16 ret 16
align 4
enum_plugins_callback: enum_plugins_callback:
; LongBool __stdcall callback(f_name,sec_name,key_name,key_value); ; LongBool __stdcall callback(f_name,sec_name,key_name,key_value);
; [esp+4] = f_name, [esp+8] = sec_name, [esp+12] = key_name, [esp+16] = key_value ; [esp+4] = f_name, [esp+8] = sec_name, [esp+12] = key_name, [esp+16] = key_value
@ -3478,6 +3496,7 @@ close_plugin_panels:
jnz @b jnz @b
ret ret
align 4
close_plugin_panel: close_plugin_panel:
; close plugin and restore old directory ; close plugin and restore old directory
mov esi, [ebp + PanelData.parents] mov esi, [ebp + PanelData.parents]
@ -3515,6 +3534,7 @@ close_plugin_panel:
@@: @@:
pop ebx edx pop ebx edx
align 4
close_handle_if_unused: close_handle_if_unused:
; edx=hPlugin, ebx=hFile ; edx=hPlugin, ebx=hFile
push ebp push ebp
@ -3534,6 +3554,7 @@ close_handle_if_unused:
pop ebp pop ebp
ret ret
align 4
panels_IsHandleUsed: panels_IsHandleUsed:
; edx=hPlugin, ebx=hFile ; edx=hPlugin, ebx=hFile
mov ebp, panel1 mov ebp, panel1
@ -3570,6 +3591,7 @@ panels_IsHandleUsed:
inc esi inc esi
ret ret
align 4
panels_OnExit: panels_OnExit:
; close plugin panels ; close plugin panels
mov ebp, panel1 mov ebp, panel1
@ -3578,6 +3600,7 @@ panels_OnExit:
call close_plugin_panels call close_plugin_panels
ret ret
align 4
panels_OnRedraw: panels_OnRedraw:
or [cursor_x], -1 or [cursor_x], -1
or [cursor_y], -1 or [cursor_y], -1
@ -3590,6 +3613,7 @@ panels_OnRedraw:
call draw_panel call draw_panel
ret ret
align 4
init_console: init_console:
mov ecx, [console_data_ptr] mov ecx, [console_data_ptr]
call pgfree call pgfree
@ -3624,12 +3648,15 @@ init_console:
mov [panel2.height], eax mov [panel2.height], eax
ret ret
align 4
get_curfile_folder_entry: get_curfile_folder_entry:
mov ecx, [ebp + PanelData.index] mov ecx, [ebp + PanelData.index]
shl ecx, 2 shl ecx, 2
add ecx, [ebp + PanelData.files] add ecx, [ebp + PanelData.files]
mov ecx, [ecx] mov ecx, [ecx]
ret ret
align 4
get_curfile_name: get_curfile_name:
call get_curfile_folder_entry call get_curfile_folder_entry
add ecx, 40 add ecx, 40
@ -4970,6 +4997,7 @@ end if
sub ecx, edi sub ecx, edi
ret 8 ret 8
align 4
get_file_color: get_file_color:
mov ah, [esi + 6] mov ah, [esi + 6]
cmp ebp, [active_panel] cmp ebp, [active_panel]
@ -4989,6 +5017,7 @@ get_file_color:
@@: @@:
ret ret
align 4
draw_name_column: draw_name_column:
mov eax, [column_index] mov eax, [column_index]
mov [last_column_index], eax mov [last_column_index], eax
@ -5151,6 +5180,7 @@ draw_name_column:
draw_empty_column: draw_empty_column:
ret ret
align 4
draw_size_column: draw_size_column:
add edi, [column_width] add edi, [column_width]
add edi, [column_width] add edi, [column_width]
@ -5295,6 +5325,7 @@ end if
cld cld
ret ret
align 4
draw_date_column: draw_date_column:
mov ecx, [column_height] mov ecx, [column_height]
dec ecx dec ecx
@ -5361,6 +5392,7 @@ draw_date_column:
cld cld
ret ret
align 4
draw_time_column: draw_time_column:
mov ecx, [column_height] mov ecx, [column_height]
dec ecx dec ecx
@ -5445,6 +5477,7 @@ draw_time_column:
;@@: pop esi ;@@: pop esi
; ret ; ret
align 4
read_folder: read_folder:
mov eax, [ebp + PanelData.nfa] mov eax, [ebp + PanelData.nfa]
mov [dirinfo.size], eax mov [dirinfo.size], eax
@ -7530,8 +7563,12 @@ panels_mouse:
rd 4 rd 4
dd panels_OnKey.shift_f5 dd panels_OnKey.shift_f5
rd 7 rd 7
; Ctrl .ctrl:
rd 12 rd 2
repeat 9-3+1
dd OnMouse_ctrl_f39
end repeat
rd 3
; Ctrl+Shift ; Ctrl+Shift
rd 12 rd 12
; Alt ; Alt
@ -7929,6 +7966,8 @@ FolderShortcuts dd 0,0,0,0,0,0,0,0,0,0
bWasE0 db 0 bWasE0 db 0
ctrlstate db 0 ctrlstate db 0
mousestate db 0
align 4
MemForImage dd 0 MemForImage dd 0
restore_semicolon dd 0 restore_semicolon dd 0
bForHex db 0 bForHex db 0