diff --git a/programs/cmm/TWB/links.h b/programs/cmm/TWB/links.h
index 12c0926d2f..84a904349e 100644
--- a/programs/cmm/TWB/links.h
+++ b/programs/cmm/TWB/links.h
@@ -106,7 +106,7 @@ bool LinksArray::HoverAndProceed(dword mx, my, list_y, list_first)
return false;
}
if (mouse.pkm) && (mouse.up) {
- EventShowLinkMenu(mouse.x, mouse.y);
+ EventShowLinkMenu();
return false;
}
if (active==i) return false;
diff --git a/programs/cmm/browser/WebView.c b/programs/cmm/browser/WebView.c
index 4f35799299..ba65beb48a 100644
--- a/programs/cmm/browser/WebView.c
+++ b/programs/cmm/browser/WebView.c
@@ -72,6 +72,7 @@ enum {
NEW_WINDOW,
VIEW_HISTORY,
DOWNLOAD_MANAGER,
+ CLEAR_CACHE,
UPDATE_BROWSER,
COPY_LINK_URL,
DOWNLOAD_LINK_CONTENTS,
@@ -140,7 +141,7 @@ void main()
mouse.get();
if (PageLinks.HoverAndProceed(mouse.x, WB1.list.first + mouse.y, WB1.list.y, WB1.list.first))
&& (mouse.pkm) && (mouse.up) {
- if (WB1.list.MouseOver(mouse.x, mouse.y)) EventShowPageMenu(mouse.x, mouse.y);
+ if (WB1.list.MouseOver(mouse.x, mouse.y)) EventShowPageMenu();
break;
}
if (WB1.list.MouseScroll(mouse.vert)) WB1.DrawPage();
@@ -202,10 +203,6 @@ void main()
break;
case evReDraw:
- if (menu.cur_y) {
- ProcessEvent(menu.cur_y);
- menu.cur_y = 0;
- }
DefineAndDrawWindow(GetScreenWidth()-800/2-random(80),
GetScreenHeight()-700/2-random(80),800,700,0x73,0,0,0);
GetProcessInfo(#Form, SelfInfo);
@@ -259,6 +256,11 @@ void SetElementSizes()
void draw_window()
{
int i;
+ if (menu.cur_y) {
+ EAX = menu.cur_y;
+ menu.cur_y = 0;
+ ProcessEvent(EAX);
+ }
SetElementSizes();
DrawBar(0,0, Form.cwidth,PADDING, system.color.work);
@@ -341,10 +343,10 @@ void ProcessEvent(dword id__)
}
return;
case CHANGE_ENCODING:
- EventShowEncodingsList(Form.cwidth - 150, status_text.start_y-117);
+ EventShowEncodingsList();
return;
case SANDWICH_BUTTON:
- EventShowMainMenu(Form.cwidth - 215, TOOLBAR_H-6);
+ EventShowMainMenu();
return;
case VIEW_SOURCE:
EventViewSource();
@@ -369,6 +371,10 @@ void ProcessEvent(dword id__)
case UPDATE_BROWSER:
EventUpdateBrowser();
return;
+ case CLEAR_CACHE:
+ pages_cache.clear();
+ notify(#clear_cache_ok);
+ return;
case COPY_LINK_URL:
Clipboard__CopyText(PageLinks.GetURL(PageLinks.active));
notify("'URL copied to clipboard'O");
@@ -628,29 +634,29 @@ void DrawProgress()
DrawBar(address_box.left-1, address_box.top+20, persent*address_box.width+16/100, 2, 0x72B7EB);
}
-void EventShowPageMenu(dword _left, _top)
+void EventShowPageMenu()
{
menu.selected = 0;
- menu.show(Form.left+_left-6,Form.top+_top+skin_height+3, 220, #rmb_menu, VIEW_SOURCE);
+ menu.show(Form.left + mouse.x+4, Form.top + skin_height + mouse.y, 220, #rmb_menu, VIEW_SOURCE);
}
-void EventShowEncodingsList(dword _left, _top)
+void EventShowLinkMenu()
+{
+ menu.selected = 0;
+ menu.show(Form.left + mouse.x+4, Form.top + skin_height + mouse.y, 220, #link_menu, COPY_LINK_URL);
+}
+
+void EventShowEncodingsList()
{
menu.selected = WB1.cur_encoding + 1;
- menu.show(Form.left+_left-6+77,Form.top+_top+skin_height-3, 100,
+ menu.show(Form.left + Form.cwidth - 95, Form.top + skin_height + status_text.start_y - 121, 90,
"UTF-8\nKOI8-RU\nCP1251\nCP1252\nISO8859-5\nCP866", ENCODINGS);
}
-void EventShowMainMenu(dword _left, _top)
+void EventShowMainMenu()
{
menu.selected = 0;
- menu.show(Form.left+_left-6+77,Form.top+_top+skin_height-3, 140, #main_menu, OPEN_FILE);
-}
-
-void EventShowLinkMenu(dword _left, _top)
-{
- menu.selected = 0;
- menu.show(Form.left+_left-6,Form.top+_top+skin_height+3, 220, #link_menu, COPY_LINK_URL);
+ menu.show(Form.left + Form.cwidth - 150, Form.top + skin_height + TOOLBAR_H-8, 140, #main_menu, OPEN_FILE);
}
void EventUpdateProgressBar()
diff --git a/programs/cmm/browser/cache.h b/programs/cmm/browser/cache.h
index ffe27fff1a..e428bfd0a5 100644
--- a/programs/cmm/browser/cache.h
+++ b/programs/cmm/browser/cache.h
@@ -8,6 +8,7 @@ struct PAGES_CACHE
collection size; //it has to be int
void add();
bool has();
+ void clear();
} pages_cache;
void PAGES_CACHE::add(dword _url, _data, _size)
@@ -31,4 +32,13 @@ bool PAGES_CACHE::has(dword _link)
return true;
}
return false;
+}
+
+void PAGES_CACHE::clear()
+{
+ url.drop();
+ data.drop();
+ size.drop();
+ current_page_buf = NULL;
+ current_page_size = NULL;
}
\ No newline at end of file
diff --git a/programs/cmm/browser/html/homepage_en.htm b/programs/cmm/browser/html/homepage_en.htm
index 7bb333dcee..c18a41e21a 100644
--- a/programs/cmm/browser/html/homepage_en.htm
+++ b/programs/cmm/browser/html/homepage_en.htm
@@ -12,6 +12,7 @@
• You can check for browser updates from the main menu.
• To run a web search, type a text in the adress box and press Ctrl+Enter.
• You can also use other Hotkeys.
+• Click on a label in the bottom right corner to change the encoding of a page.
diff --git a/programs/cmm/browser/html/homepage_ru.htm b/programs/cmm/browser/html/homepage_ru.htm
index 78253f3568..f01356522a 100644
--- a/programs/cmm/browser/html/homepage_ru.htm
+++ b/programs/cmm/browser/html/homepage_ru.htm
@@ -12,6 +12,7 @@
• Из главного меню можно проверить наличие обновлений
• Для поиска в Google наберите тест в адресной строке и нажмите Ctrl+Enter
• Есть также другие Горячие клавиши.
+• Можно изменить кодировку страницы, для этого нажмите на надпись в правом нижнем углу окна.
diff --git a/programs/cmm/browser/texts.h b/programs/cmm/browser/texts.h
index b1f448ac31..9c1e1408ae 100644
--- a/programs/cmm/browser/texts.h
+++ b/programs/cmm/browser/texts.h
@@ -1,4 +1,4 @@
-char version[]="WebView 2.25";
+char version[]="WebView 2.26";
#ifdef LANG_RUS
char page_not_found[] = FROM "html\\page_not_found_ru.htm""\0";
@@ -13,6 +13,7 @@ char main_menu[] =
Новое окно
История
Менеджер загрузок
+Очистить кэш
Обновить браузер";
char link_menu[] =
"Копировать ссылку
@@ -22,8 +23,9 @@ char loading_text[] = "
char update_param[] = "-download_and_exit http://builds.kolibrios.org/rus/data/programs/cmm/browser/WebView.com";
char update_download_error[] = "'WebView\nОшибка при получении обновлений!' -tE";
char update_ok[] = "'WebView\nБраузер был успешно обновлен!' -tO";
-char update_is_current[] = "'WebView\nВы уже используете последнюю версию.' -I";
-char update_can_not_copy[] = "'WebView\nНе могу переместить новую версию из папки Downloads на Ramdisk. Возможно, не достаточно места.' -E";
+char update_is_current[] = "'WebView\nВы уже используете последнюю версию.' -tI";
+char update_can_not_copy[] = "'WebView\nНе могу переместить новую версию из папки Downloads на Ramdisk. Возможно, не достаточно места.' -tE";
+char clear_cache_ok[] = "'WebView\nКэш очищен.' -tI";
#else
char page_not_found[] = FROM "html\\page_not_found_en.htm""\0";
char homepage[] = FROM "html\\homepage_en.htm""\0";
@@ -37,6 +39,7 @@ char main_menu[] =
New window
History
Download Manager
+Clear cache
Update browser";
char link_menu[] =
"Copy link
@@ -45,8 +48,9 @@ char loading_text[] = "Loading...";
char update_param[] = "-download_and_exit http://builds.kolibrios.org/eng/data/programs/cmm/browser/WebView.com";
char update_download_error[] = "'WebView\nError receiving an up to date information!' -tE";
char update_ok[] = "'WebView\nThe browser has been updated!' -tO";
-char update_is_current[] = "'WebView\nThe browser is up to date.' -I";
-char update_can_not_copy[] = "'WebView\nError copying a new version from Downloads folder!\nProbably too litle space on Ramdisk.' -E";
+char update_is_current[] = "'WebView\nThe browser is up to date.' -tI";
+char update_can_not_copy[] = "'WebView\nError copying a new version from Downloads folder!\nProbably too litle space on Ramdisk.' -tE";
+char clear_cache_ok[] = "'WebView\nThe cache has been cleared.' -tI";
#endif
#define URL_SERVICE_HISTORY "WebView:history"
diff --git a/programs/cmm/lib/gui/menu.h b/programs/cmm/lib/gui/menu.h
index 8202d4bc50..0c1b35226c 100644
--- a/programs/cmm/lib/gui/menu.h
+++ b/programs/cmm/lib/gui/menu.h
@@ -32,27 +32,26 @@
:void _menu_thread()
{
- proc_info MenuForm;
- SetEventMask(100111b);
+ MOUSE m;
+ DefineAndDrawWindow(menu.appear_x,menu.appear_y,menu.w+2,menu.h+4,0x01, 0, 0, 0x01fffFFF);
+ DrawPopup(0,0,menu.w,menu.h+3,0, 0xE4DFE1,0x9098B0);
+ _menu_draw_list();
+ SetEventMask(EVM_REDRAW + EVM_KEY + EVM_MOUSE + EVM_MOUSE_FILTER);
loop() switch(WaitEvent())
{
case evMouse:
- GetProcessInfo(#MenuForm, SelfInfo);
- if (!CheckActiveProcess(MenuForm.ID)) _menu_no_item_click();
- mouse.get();
- if (menu.ProcessMouse(mouse.x, mouse.y)) _menu_draw_list();
- if (mouse.lkm)&&(mouse.up) _menu_item_click();
+ m.get();
+ if (menu.ProcessMouse(m.x, m.y)) _menu_draw_list();
+ if (m.lkm)&&(m.up) _menu_item_click();
break;
case evKey:
GetKeys();
- if (key_scancode==SCAN_CODE_ESC) _menu_no_item_click();
+ if (key_scancode==SCAN_CODE_ESC) _menu_exit();
if (key_scancode==SCAN_CODE_ENTER) _menu_item_click();
if (menu.ProcessKey(key_scancode)) _menu_draw_list();
break;
case evReDraw:
- DefineAndDrawWindow(menu.appear_x,menu.appear_y,menu.w+2,menu.h+4,0x01, 0, 0, 0x01fffFFF);
- DrawPopup(0,0,menu.w,menu.h+3,0, 0xE4DFE1,0x9098B0);
- _menu_draw_list();
+ _menu_exit();
}
}
@@ -74,7 +73,7 @@
KillProcess(menu_process_id);
}
-:void _menu_no_item_click()
+:void _menu_exit()
{
menu.cur_y = 0;
KillProcess(menu_process_id);