diff --git a/programs/cmm/browser/WebView.c b/programs/cmm/browser/WebView.c index 05f5b1bd97..cc71271884 100644 --- a/programs/cmm/browser/WebView.c +++ b/programs/cmm/browser/WebView.c @@ -112,6 +112,7 @@ void main() if (param) strcpy(#URL, #param); else strcpy(#URL, URL_SERVICE_HOME); WB1.DrawBuf.zoom = 1; WB1.list.SetFont(8, 14, 10111000b); + WB1.list.no_selection = true; SetEventMask(0xa7); BEGIN_LOOP_APPLICATION: WaitEventTimeout(2); @@ -280,7 +281,8 @@ void Draw_Window() void Scan(dword id__) { action_buf=0; - switch (id__) + if (WB1.list.ProcessKey(key_scancode)) WB1.DrawPage(); + else switch (id__) { case SCAN_CODE_BS: case BACK_BUTTON: @@ -291,22 +293,6 @@ void Scan(dword id__) if (!BrowserHistory.GoForward()) return; OpenPage(); return; - case SCAN_CODE_HOME: - case SCAN_CODE_END: - case SCAN_CODE_PGUP: - case SCAN_CODE_PGDN: - if (WB1.list.ProcessKey(key_scancode)) WB1.DrawPage(); - return; - case SCAN_CODE_UP: - if (WB1.list.first <= 0) return; - WB1.list.first--; - WB1.DrawPage(); - return; - case SCAN_CODE_DOWN: - if (WB1.list.visible + WB1.list.first >= WB1.list.count) return; - WB1.list.first++; - WB1.DrawPage(); - return; case GOTOURL_BUTTON: case SCAN_CODE_ENTER: if (!strncmp(#editURL,"http:",5)) || (editURL[0]=='/') || (!strncmp(#editURL,"WebView:",9)) diff --git a/programs/cmm/lib/kolibri.h b/programs/cmm/lib/kolibri.h index a4e5bf69fd..591195b447 100644 --- a/programs/cmm/lib/kolibri.h +++ b/programs/cmm/lib/kolibri.h @@ -103,12 +103,24 @@ GETKEYII: $shr eax,8 } + unsigned char key_ascii; dword key_scancode, key_modifier; int GetKeys() { - $mov eax,2 - $int 0x40 + $push edx +GETKEY: + $mov eax,2 + $int 0x40 + $cmp eax,1 + $jne GETKEYI + $mov eax,edx + $jmp GETKEYII +GETKEYI: + $mov edx,eax + $jmp GETKEY +GETKEYII: + $pop edx key_ascii = AH; $shr eax,16 key_scancode = AL; diff --git a/programs/cmm/lib/list_box.h b/programs/cmm/lib/list_box.h index a6df644877..eee1b42ee4 100644 --- a/programs/cmm/lib/list_box.h +++ b/programs/cmm/lib/list_box.h @@ -10,10 +10,11 @@ struct llist { int x, y, w, h, line_h, text_y; - dword font_w, font_h, font_type; int count, visible, first, current, column_max; //visible = row_max - int wheel_size; - int active; + dword font_w, font_h, font_type; + byte wheel_size; + byte active; + byte no_selection; void ClearList(); int MouseOver(int xx, yy); int ProcessMouse(int xx, yy); @@ -125,7 +126,7 @@ int llist::ProcessKey(dword key) int llist::KeyDown() { - if (current-first+1= count) return 0; current++; @@ -146,7 +147,7 @@ int llist::KeyDown() int llist::KeyUp() { - if (current > first) + if (current > first) && (!no_selection) { current--; } diff --git a/programs/cmm/liza/mail_box.c b/programs/cmm/liza/mail_box.c index 4756b3f52d..4d53fefb9c 100644 --- a/programs/cmm/liza/mail_box.c +++ b/programs/cmm/liza/mail_box.c @@ -146,6 +146,7 @@ void MailBoxLoop() { mail_list.h = Form.cheight/4; mail_list.ClearList(); + WB1.list.no_selection = true; SetMailBoxStatus( NULL , NULL); cur_charset = 0; aim = SEND_NSTAT;