WebView 2.5: open new urls in the process that already exists

git-svn-id: svn://kolibrios.org@7914 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2020-05-11 23:02:41 +00:00
parent 7cdee9c3db
commit 9410fc9d15
8 changed files with 43 additions and 14 deletions

View File

@ -30,6 +30,7 @@
#include "..\lib\patterns\http_downloader.h" #include "..\lib\patterns\http_downloader.h"
#include "..\lib\patterns\simple_open_dialog.h" #include "..\lib\patterns\simple_open_dialog.h"
#include "..\lib\patterns\toolbar_button.h" #include "..\lib\patterns\toolbar_button.h"
#include "..\lib\patterns\restart_process.h"
#include "texts.h" #include "texts.h"
#include "cache.h" #include "cache.h"
@ -101,6 +102,7 @@ edit_box address_box = {, PADDING+TSZE*2+PADDING+6, PADDING+3, 0xffffff,
char editbox_icons[] = FROM "editbox_icons.raw"; char editbox_icons[] = FROM "editbox_icons.raw";
dword shared_url;
void LoadLibraries() void LoadLibraries()
{ {
@ -130,11 +132,18 @@ void HandleParam()
source_mode = true; source_mode = true;
history.add(#param + 8); history.add(#param + 8);
} else { } else {
history.add(#param); if (GetProcessesCount("WEBVIEW") == 1) {
history.add(#param);
} else {
shared_url = memopen(#webview_shared, URL_SIZE+1, SHM_OPEN + SHM_WRITE);
strncpy(shared_url, #param, URL_SIZE);
ExitProcess();
}
} }
} else { } else {
history.add(URL_SERVICE_HOMEPAGE); history.add(URL_SERVICE_HOMEPAGE);
} }
shared_url = memopen(#webview_shared, URL_SIZE+1, SHM_CREATE + SHM_WRITE);
} }
void main() void main()
@ -148,7 +157,7 @@ void main()
WB1.list.no_selection = true; WB1.list.no_selection = true;
WB1.custom_encoding = -1; WB1.custom_encoding = -1;
SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER + EVM_STACK); SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER + EVM_STACK);
loop() switch(WaitEvent()) loop() switch(@WaitEventTimeout(30))
{ {
case evMouse: case evMouse:
edit_box_mouse stdcall (#address_box); edit_box_mouse stdcall (#address_box);
@ -246,6 +255,13 @@ void main()
pages_cache.add(history.current(), http.content_pointer, http.content_received); pages_cache.add(history.current(), http.content_pointer, http.content_received);
LoadInternalPage(http.content_pointer, http.content_received); LoadInternalPage(http.content_pointer, http.content_received);
} }
break;
default:
if (ESDWORD[shared_url] != '\0') {
EventOpenNewTab(shared_url);
ESDWORD[shared_url] = '\0';
ActivateWindow(GetProcessSlot(Form.ID));
}
} }
} }

View File

@ -1,4 +1,4 @@
char version[]="WebView 2.48"; char version[]="WebView 2.5";
#ifdef LANG_RUS #ifdef LANG_RUS
char page_not_found[] = FROM "html\\page_not_found_ru.htm""\0"; char page_not_found[] = FROM "html\\page_not_found_ru.htm""\0";
@ -65,3 +65,4 @@ char clear_cache_ok[] = "'WebView\nThe cache has been cleared.' -tI";
#define URL_SERVICE_HOMEPAGE "WebView:home" #define URL_SERVICE_HOMEPAGE "WebView:home"
#define URL_SERVICE_HELP "WebView:help" #define URL_SERVICE_HELP "WebView:help"
char webview_shared[] = "WEBVIEW";

View File

@ -206,7 +206,13 @@ void main()
if (dir_exists(#param)) { if (dir_exists(#param)) {
strcpy(#path, #param); strcpy(#path, #param);
} else { } else {
notify(T_NOTIFY_APP_PARAM_WRONG); file_size stdcall (#param);
if (EAX==-1) notify(T_NOTIFY_APP_PARAM_WRONG);
else {
param[strrchr(#param, '/')-1] = '\0';
strcpy(#path, #param);
//in future we need also to select file
}
} }
} }

View File

@ -250,7 +250,8 @@ void properties_dialog()
EventApplyProperties(); EventApplyProperties();
break; break;
default: case SCAN_CODE_KEY_A:
case SCAN_CODE_KEY_C:
if (key_modifier & KEY_LCTRL) || (key_modifier & KEY_RCTRL) { if (key_modifier & KEY_LCTRL) || (key_modifier & KEY_RCTRL) {
EAX = key_editbox; EAX = key_editbox;
edit_box_key stdcall(#file_name_ed); edit_box_key stdcall(#file_name_ed);

View File

@ -1,5 +1,5 @@
#define TITLE "Eolite File Manager 4.28" #define TITLE "Eolite File Manager 4.28b"
#define ABOUT_TITLE "EOLITE 4.28" #define ABOUT_TITLE "EOLITE 4.28b"
#ifdef LANG_RUS #ifdef LANG_RUS
?define T_FILE "” ©«" ?define T_FILE "” ©«"

View File

@ -65,7 +65,7 @@ inline fastcall dword Clipboard__ResetBlockingBuffer()
:void Clipboard__CopyText(dword _text) :void Clipboard__CopyText(dword _text)
{ {
int size_buf; dword size_buf;
dword buff_data; dword buff_data;
size_buf = strlen(_text) + 12; size_buf = strlen(_text) + 12;

View File

@ -73,12 +73,6 @@ char program_path[4096];
inline fastcall dword calc(EAX) { return EAX; } inline fastcall dword calc(EAX) { return EAX; }
inline fastcall swap(EAX, EBX)
{
$push ESDWORD[EAX]
ESDWORD[EAX] = ESDWORD[EBX];
$pop ESDWORD[EBX];
}
:struct raw_image { :struct raw_image {
dword w, h, data; dword w, h, data;

View File

@ -37,6 +37,17 @@ enum {
} }
} }
:int GetProcessesCount(dword proc_name) {
int i, count=0;
proc_info Process;
for (i=0; i<MAX_PROCESS_COUNT; i++;)
{
GetProcessInfo(#Process, i);
if (strcmpi(#Process.name, proc_name)==0) count++;
}
return count;
}
:void RestartProcessByName(dword proc_name, byte multiple) { :void RestartProcessByName(dword proc_name, byte multiple) {
KillProcessByName(proc_name + strrchr(proc_name, '/'), multiple); KillProcessByName(proc_name + strrchr(proc_name, '/'), multiple);
RunProgram(proc_name, ""); RunProgram(proc_name, "");