From 550486164904a5faa8a50c907be25eeda3faa633 Mon Sep 17 00:00:00 2001 From: "Evgeny Grechnikov (Diamond)" Date: Thu, 20 Sep 2007 16:35:52 +0000 Subject: [PATCH] * @panel from Alver with corrections for minimize/restore button * icon: corrected restart of all icons with 'Apply' git-svn-id: svn://kolibrios.org@633 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/system/icon/trunk/icon.asm | 7 +- programs/system/panel/trunk/@PANEL.ASM | 220 +++++++++++++++++++---- programs/system/panel/trunk/build_en.bat | 1 + programs/system/panel/trunk/build_et.bat | 1 + programs/system/panel/trunk/build_ru.bat | 1 + programs/system/panel/trunk/ctx_menu.asm | 107 +++++++---- programs/system/panel/trunk/detect.asm | 22 +-- 7 files changed, 282 insertions(+), 77 deletions(-) diff --git a/programs/system/icon/trunk/icon.asm b/programs/system/icon/trunk/icon.asm index f30de92bf0..60c2d55fd9 100644 --- a/programs/system/icon/trunk/icon.asm +++ b/programs/system/icon/trunk/icon.asm @@ -160,8 +160,13 @@ still: cmp esi,eax jg all_terminated - cmp [I_END+10],dword '@ICO' + mov eax,[I_END+10] + and eax,not 20202020h + cmp eax,'@ICO' + jz @f + cmp eax,'ICON' jne newread + @@: mov eax,51 cmp eax,[I_END+42] jne newread diff --git a/programs/system/panel/trunk/@PANEL.ASM b/programs/system/panel/trunk/@PANEL.ASM index 08436535a2..cf7c56d2c4 100644 --- a/programs/system/panel/trunk/@PANEL.ASM +++ b/programs/system/panel/trunk/@PANEL.ASM @@ -23,7 +23,7 @@ soften_up dd 1 ; 0 no ; 1 yes soften_down dd 0 ; 0 no ; 1 yes minimize_left dd 1 minimize_right dd 1 -icons_position dd 95 +icons_position dd 95 menu_enable dd 1 setup_enable dd 0 graph_text dd 1 @@ -93,7 +93,7 @@ begin_1: kill_active_application: mcall 18, 7 mov ecx,eax - + ;//{SPraid.simba do not kill panel and icon push eax mov eax,9 @@ -361,6 +361,17 @@ START: lea edx,[ebx-PANEL_HEIGHT-1] mcall 48,6 +; // Alver 26.08.2007 // { + mov eax, 9 ; info of process + mov ebx, process_info_buffer + mov ecx, -1 + mcall + mov ecx, dword [process_info_buffer+30] + mcall 18,21 + mov [this_slot], eax + mov [max_slot], 255 +; } \\ Alver \\ + call set_variables start_after_minimize: @@ -443,6 +454,15 @@ still: cmp ah,102 ; minimize to right je right_button +; // Alver 26.08.2007 // { + cmp ah, 103 + je clean_desktop ; minimize all windows + cmp ah, 104 + je restore_desktop ; restore minimized windows + cmp ah, 105 + je swap_minimized_desktop ; minimize normal windows, and restore minimized windows +; } \\ Alver \\ + cmp ah,byte 1 ; start/terminate menu jnz noselect call menu_handler @@ -518,8 +538,12 @@ still: noid20: cmp ah,21 jnz noid21 - cmp [page_list],15 - je @f +; // Alver 25.08.2007 // { + cmp [page_list], 99 + jnc @f + ; cmp [page_list],15 + ; je @f +; } \\ Alver \\ inc [page_list] jmp red @@: @@ -539,7 +563,68 @@ still: jmp still +; // Alver 26.08.2007 //{ +restore_desktop: + mcall 9,process_info_buffer,-1 + mov [max_slot], eax + mov ecx, 2 + mov edx, 2 +@@: + mcall 18, 22 + inc edx + cmp edx, [max_slot] + jbe @b + jmp still +swap_minimized_desktop: + xor esi, esi + inc esi + jmp min_swap_desktop +clean_desktop: + xor esi,esi + min_swap_desktop: ; input esi 0 - min, <>0 swap + mov ecx, 2 ; Начальный номер слота процесса + mov ebx, process_info_buffer + +.loop1: + cmp ecx, [this_slot] + je .loop1xx + mcall 9 + mov [max_slot], eax + mov dx, word [process_info_buffer+50] + cmp dx, 9 ; Проверка свободен ли данный слот + jz .loop1xx + mov edx, dword [ebx+10] + cmp dl, '@' + je .loop1xx + cmp dword [ebx+10], 'ICON' + jnz @f + cmp [ebx+42], dword 51 + jnz @f + cmp [ebx+46], dword 51 + jz .loop1xx +@@: + cmp [ebx+10], dword ' ' + jz .loop1xx + + pushad + mov edx, ecx + xor ecx, ecx + or esi, esi + jz @f + movzx eax, byte [process_info_buffer+70] + and eax, 2 ; mask minimize + jz @f + mov ecx, 2 ; restore +@@: + mcall 18, 22 + popad +.loop1xx: + inc ecx + cmp ecx, [max_slot] + jbe .loop1 + jmp still +; } \\ Alver \\ draw_running_applications: @@ -610,7 +695,10 @@ redraw_window_tabs: mov eax, 13 imul ebx, edi, 6*10*10000h - add ebx, 6*10*10000h + 7*10000h + 54 +; // Alver 26.08.2007 // { +; add ebx, 6*10*10000h + 7*10000h + 54 + add ebx, 12*10*10000h + 7*10000h + 54 +; } // Alver // mov ecx, 3*10000h + 14 xor edx, edx int 0x40 @@ -718,23 +806,35 @@ draw_application_buttons: shr eax,16 - cmp eax,639 - jne now1 - mov [max_applications],7 ;6 - now1: - cmp eax,799 - jne now2 - mov [max_applications],9 ;10 ;8 - now2: - cmp eax,1023 - jne now3 - mov [max_applications],12 ;13 ;8 - now3: - cmp eax,1279 - jne now4 - mov [max_applications],17 ;18 ;8 - now4: - mov edi,1 +; // Alver 25.08.2007 // { + ; cmp eax,639 + ; jne now1 + ; mov [max_applications],7 ;6 + ; now1: + ; cmp eax,799 + ; jne now2 + ; mov [max_applications],9 ;10 ;8 + ; now2: + ; cmp eax,1023 + ; jne now3 + ; mov [max_applications],12 ;13 ;8 + ; now3: + ; cmp eax,1279 + ; jne now4 + ; mov [max_applications],17 ;18 ;8 + ; now4: + ; mov edi,1 + + sub eax, 281 + jnc ._01 + xor eax, eax +._01: + mov bl, 60 + div bl + xor ah, ah ; eax - количество умещаюшихся пиктов + mov [max_applications], eax + mov edi,1 +; } \\ Alver \\ nb: @@ -742,7 +842,7 @@ draw_application_buttons: mov ebx,edi shl ebx,16 imul ebx,6*10 ;13 - add ebx,15*65536+10*6-1 ;13 + add ebx,75*65536+10*6-1 ; << Alver 25.08.2007 >> 15*65536+10*6-1 ;13 mov ecx,1*65536+17 mov edx,edi add edx,51 @@ -1135,7 +1235,7 @@ draw_window: mov edi, [wcolor] mov [panel_x_pos], ebx - mov [panel_y_pos], ecx ; ╧юър ўЄю Єръ. + mov [panel_y_pos], ecx ; Пока что так. int 0x40 @@ -1269,12 +1369,46 @@ draw_window: popa ret - +; // Alver 26.08.2007 // { +dr_button_clean: + mov ecx, 3*65536+13 + mcall 8 + ret +; } \\ Alver \\ draw_menuet_icon: pusha +; // Alver 26.08.2007 // { +; Inserted code for drowing buttons 103, 104, 105 (Clean, Restore, Exchange windows) + mov esi, dword [system_colours+24] ; drawing buttons + and esi, 0x00ffffff + mov edx, 103 + mov ebx, 67*65536+13 + call dr_button_clean + inc edx + mov ebx, 86*65536+13 + call dr_button_clean + inc edx + mov ebx, 105*65536+13 + call dr_button_clean + mov ecx, dword [system_colours+28] + and ecx, 0x00ffffff + xor esi, esi + inc esi + mov edx, page_clean_but + mov eax, 4 + mov ebx, 71*65536+6 + int 0x40 + inc edx + mov ebx, 90*65536+6 + int 0x40 + inc edx + mov ebx, 109*65536+6 + int 0x40 +; } \\ Alver \\ + cmp [menu_enable],1 jne no_menu @@ -1658,7 +1792,7 @@ draw_info: ; draw cpu usage, time, date mov ecx,6 shl 16+10 inc edx ;button 21 int 0x40 - sub ebx,18 shl 16 + sub ebx,24 shl 16 ; << Alver 25.08.2007 >> 18 shl 16 inc edx ;button 22 int 0x40 @@ -1774,32 +1908,43 @@ dalshe: mov bx,9 mov ecx,6 shl 16+11 int 0x40 - sub ebx,18 shl 16 +; // Alver 25.08.2007 // { + ; sub ebx,18 shl 16 + ; int 0x40 + ; add ebx,19 shl 16 + sub ebx,24 shl 16 ; 18 shl 16 int 0x40 - add ebx,19 shl 16 + add ebx,25 shl 16 ; 19 shl 16 +; } \\ Alver \\ sub bx,2 mov ecx,7 shl 16+9 mov edx,0xffffff int 0x40 - sub ebx,18 shl 16 +; // Alver 25.08.2007 // { + ; sub ebx,18 shl 16 + sub ebx,24 shl 16 +; } \\ Alver \\ int 0x40 mov eax,4 mov edx,page_a1 mov ebx,[maxx] - sub ebx,133;150 +; // Alver 25.08.2007 // { + ; sub ebx,133;150 + sub ebx, 139 +; } \\ Alver \\ shl ebx,16 mov bx,8 - mov esi,4 + mov esi,5 ;4 int 0x40 add ebx,1 shl 16 int 0x40 mov eax,47 - mov ebx,0x10100 + mov ebx,0x20000 ; 0x10100 (' +; // Alver 25.08.2007 // { +;page_a1 db '< >' +page_a1 db '< >' +page_clean_but db 25,24,18 +; } \\ Alver \\ bte dd 0xccddee wcolor dd 0x506070 @@ -2114,11 +2263,14 @@ screen_size: .height dw ? .width dw ? +this_slot dd 0 ; Slot of this process +max_slot dd 255 system_colours rd 10 app_list rd 50 alt_tab_list rd 256*2 alt_tab_list_size dd ? process_info_buffer rb 1024 +procinfo_for_detect rb 1024 tictable: rd 256 diff --git a/programs/system/panel/trunk/build_en.bat b/programs/system/panel/trunk/build_en.bat index e1b5f652de..a736c1d45a 100644 --- a/programs/system/panel/trunk/build_en.bat +++ b/programs/system/panel/trunk/build_en.bat @@ -1,3 +1,4 @@ +@erase lang.inc @echo lang fix en >lang.inc @fasm @panel.asm @panel @erase lang.inc diff --git a/programs/system/panel/trunk/build_et.bat b/programs/system/panel/trunk/build_et.bat index 549ee833e6..7e6b1cdd5e 100644 --- a/programs/system/panel/trunk/build_et.bat +++ b/programs/system/panel/trunk/build_et.bat @@ -1,3 +1,4 @@ +@erase lang.inc @echo lang fix et >lang.inc @fasm @panel.asm @panel @erase lang.inc diff --git a/programs/system/panel/trunk/build_ru.bat b/programs/system/panel/trunk/build_ru.bat index d35d783a3e..d3170f094a 100644 --- a/programs/system/panel/trunk/build_ru.bat +++ b/programs/system/panel/trunk/build_ru.bat @@ -1,3 +1,4 @@ +@erase lang.inc @echo lang fix ru >lang.inc @fasm @panel.asm @panel @erase lang.inc diff --git a/programs/system/panel/trunk/ctx_menu.asm b/programs/system/panel/trunk/ctx_menu.asm index 5607aeafc3..17e80e9397 100644 --- a/programs/system/panel/trunk/ctx_menu.asm +++ b/programs/system/panel/trunk/ctx_menu.asm @@ -6,20 +6,21 @@ ;call draw_ctx_menu - mov ebp, 2 ; 2 ўрёЄю шёяюы№чєхЄё . - - xor ecx, ecx - mov edx, [ctx_menu_PID] - find_slot: - inc ecx - - mov eax, 9 - mov ebx, process_info_buffer - int 0x40 - - cmp dword [process_info_buffer + 30], edx - jne find_slot - + mov ebp, 2 ; 2 часто используется. +; // Alver 26.08.2007 // { +; xor ecx, ecx +; mov edx, [ctx_menu_PID] +; find_slot: +; inc ecx +; mov eax, 9 +; mov ebx, process_info_buffer +; int 0x40 +; cmp dword [process_info_buffer + 30], edx +; jne find_slot + mov ecx, [ctx_menu_PID] + mcall 18,21 + mov ecx, eax +; } \\ Alver \\ mov eax, 18 mov ebx, 3 ;mov ecx, ecx ; :) @@ -50,11 +51,29 @@ mov eax, 17 int 0x40 cmp ah, 1 - jne ctx_menu_still +; // Alver 26.08.2007 // { +; jne ctx_menu_still + jne @f +; } \\ Alver \\ mov eax, 18 mov ebx, ebp ; mov eax, 2 mov ecx, [n_slot] - +; // Alver 26.08.2007 // { + jmp .lllxxx +@@: + cmp ah, 2 + jne ctx_menu_still + mov eax, 18 + mov ebx, 22 + mov edx, [n_slot] + xor ecx, ecx +; \begin{diamond}[20.09.2007] + test byte [procinfo_for_detect+70], 2 + setnz cl + add cl, cl +; \end{diamond}[20.09.2007] + .lllxxx: +; } \\ Alver \\ int 0x40 jmp ctx_menu_exit @@ -63,8 +82,8 @@ mov ebx, ebp ; mov ebx, 2 int 0x40 - xchg eax, ecx ; cmp eax, 0 ┼ёыш эх юфэр шч ъэюяюъ эх эрцрЄр тючтЁр∙рхьё  - ; т уыртэ√щ Ўшъы яюЄюър + xchg eax, ecx ; cmp eax, 0 Если не одна из кнопок не нажата возвращаемся + ; в главный цикл потока jecxz ctx_menu_still mov eax, 37 @@ -72,9 +91,9 @@ inc ebx int 0x40 - cmp ax, 0 ; ╥єЄ яЁютхЁ хь яЁюшчю°╕ы-ыш ъышъ чр яЁхфхырьш юъэр ъюэЄхъёЄэюую - jb ctx_menu_exit ; ьхэ■, хёыш чр яЁхфхырьш Єю чръЁ√трхь ъюэЄхъёЄэюх ьхэ■ - cmp ax, 41 + cmp ax, 0 ; Тут проверяем произошёл-ли клик за пределами окна контекстного + jb ctx_menu_exit ; меню, если за пределами то закрываем контекстное меню + cmp ax, 60 ; 41 ja ctx_menu_exit shr eax, 16 cmp ax, 0 @@ -101,9 +120,9 @@ func draw_ctx_menu shl ebx, 16 add ebx, 133 movzx ecx, [y_coord] - sub ecx, 41 + sub ecx, 60 ; 41 shl ecx, 16 - add ecx, 41 + add ecx, 60 ; 41 mov edx, [system_colours + 20] ; sc.work mov esi, [system_colours + 4] ; sc.grab or esi, 0x81000000 @@ -112,16 +131,23 @@ func draw_ctx_menu mov eax, 8 mov ebx, 0 * 65536 + 133 - mov ecx, 22 * 65536 + 18 + mov ecx, 22 * 65536 + 16 mov edx, 0x40000001 int 0x40 + mov eax, 8 + mov ebx, 0 * 65536 + 133 + mov ecx, 40 * 65536 + 18 + mov edx, 0x40000002 + int 0x40 + shr eax, 1 ; mov eax, 4 mov ebx, 36 * 65536 + 7 mov ecx, [system_colours + 16] ; sc.grab_text or ecx, 0x10000000 mov edx, ctx_menu_title + mov esi, ctx_menu_title_end - ctx_menu_title int 0x40 @@ -129,11 +155,20 @@ func draw_ctx_menu int 0x40 mov ebx, 4 * 65536 + 28 - xor ecx, ecx ; mov ecx, 0x00000000 + mov ecx, 0x80000000 mov edx, ctx_menu_text - mov esi, ctx_menu_text_end - ctx_menu_text +; // Alver 26.08.2007 // { int 0x40 - + add bx, 18 + mov edx, ctx_menu_text2 +; \begin{diamond}[20.09.2007] + test byte [procinfo_for_detect+70], 2 + jz @f + mov edx, ctx_menu_text3 +@@: +; \end{diamond}[20.09.2007] + int 0x40 +; } \\ Alver \\ mov eax, 12 mov ebx, ebp ; mov ebx, 2 int 0x40 @@ -146,11 +181,19 @@ x_coord rw 1 y_coord rw 1 n_slot rd 1 lsz ctx_menu_text,\ - ru, "X Закрыть Alt + F4",\ - en, "X Close Alt + F4",\ - et, "X Sulge Alt + F4" ; Now correct - -ctx_menu_text_end: + ru, <"X Закрыть Alt + F4",0>,\ + en, <"X Close Alt + F4",0>,\ + et, <"X Sulge Alt + F4",0> ; Now correct +; // Alver 26.08.2007 // { +lsz ctx_menu_text2,\ + ru, <25," Свернуть ",0>,\ + en, <25," Minimize ",0>,\ +; } \\ Alver \\ +; \begin{diamond}[20.09.2007] +lsz ctx_menu_text3,\ + ru, <24," Восстановить ",0>,\ + en, <24," Restore ",0> +; \end{diamond}[20.09.2007] ctx_menu_PID rd 1 ctx_menu_title: diff --git a/programs/system/panel/trunk/detect.asm b/programs/system/panel/trunk/detect.asm index 199fe49488..28bb8246db 100644 --- a/programs/system/panel/trunk/detect.asm +++ b/programs/system/panel/trunk/detect.asm @@ -7,7 +7,7 @@ detect_start: int 0x40 detect_still: - ;mov eax, 10 ; ╨рсюЄрхЄ эх ёютёхь ъюЁЁхъЄэю, яюўхьє їч. + ;mov eax, 10 ; Работает не совсем корректно, почему хз. mov eax, 23 mov ebx, 4 int 0x40 @@ -15,11 +15,11 @@ detect_start: ;jne detect_still mov eax, 37 - mov ebx, 2 ; ╬яЁр°штрхь ъэюяъш ь√°ш + mov ebx, 2 ; Опрашиваем кнопки мыши int 0x40 - test eax, ebx ; test eax, 00000010b ╚эЄхЁхёєхЄ Єюы№ъю яЁртр  ъэюяър - jz detect_still ; ═хЄ - ? ┬ючтЁр∙рхьё  т уыртэ√щ Ўшъы яюЄюър + test eax, ebx ; test eax, 00000010b Интересует только правая кнопка + jz detect_still ; Нет - ? Возвращаемся в главный цикл потока mouse_btn_up: mov eax, 37 @@ -50,7 +50,10 @@ detect_start: detect_button: mov ebx, edx imul ebx, 6 * 10 - add ebx, 4 +; // Alver 26.08.2007 // { +; add ebx, 4 + add ebx, 64 +; } \\ Alver \\ cmp eax, ebx jb detect_still @@ -74,6 +77,10 @@ detect_start: mov [n_slot], ecx + mov eax, 9 + mov ebx, procinfo_for_detect + int 0x40 + mov eax, 51 mov ebx, 1 mov ecx, context_menu_start @@ -89,8 +96,3 @@ detect_start: jae detect_still inc edx jmp detect_button - - - - -