Patch level : 10.0

Files correlati     : xvaga.dll
Ricompilazione Demo : [ ]
Commento            :
Aggiunto supporto per terminazione dei processi


git-svn-id: svn://10.65.10.50/trunk@17706 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2008-11-21 16:54:43 +00:00
parent fadfccbaee
commit d03c1320dd
5 changed files with 42 additions and 6 deletions

View File

@ -597,16 +597,16 @@ static BOOL CALLBACK EnumCampoChildrenProc(HWND hwnd, LPARAM lParam)
return TRUE;
}
static BOOL CALLBACK EnumCampoWindowsProc(HWND hwnd, LPARAM lParam)
static BOOL CALLBACK EnumCampoMenuChildrenProc(HWND hwnd, LPARAM lParam)
{
char str[_MAX_PATH];
if (::GetWindowText(hwnd, str, sizeof(str)))
{
const wxString title = str;
if (title.StartsWith("Base - "))
if (title.StartsWith("Base - ")) // Scandisco solo i figli del menu
{
::EnumChildWindows(hwnd, EnumCampoChildrenProc, lParam);
TFindWindowInfo* w = (TFindWindowInfo*)lParam;
const TFindWindowInfo* w = (TFindWindowInfo*)lParam;
if (w->_hwnd != NULL)
return FALSE;
}
@ -614,12 +614,11 @@ static BOOL CALLBACK EnumCampoWindowsProc(HWND hwnd, LPARAM lParam)
return TRUE;
}
unsigned int OsWin32_FindMenuContainer()
{
TFindWindowInfo w;
w._file = "__CAMPO_HOST_WINDOW__";
::EnumWindows(EnumCampoWindowsProc, LPARAM(&w));
::EnumWindows(EnumCampoMenuChildrenProc, LPARAM(&w));
return (unsigned int)w._hwnd;
}
@ -650,6 +649,30 @@ long OsWin32_CloseChildren(unsigned int parent)
return n;
}
static BOOL CALLBACK CloseSiblingProc(HWND hwnd, LPARAM lParam)
{
if (hwnd != (HWND)lParam)
{
if (!::IsWindowVisible(hwnd))
{
char str[256];
::GetClassName(hwnd, str, sizeof(str));
if (strcmp(str, "wxWindowClassNR") == 0)
{
::GetWindowText(hwnd, str, sizeof(str));
if (str[0] == '\0')
::PostMessage(hwnd, WM_ENDSESSION, 0, 0);
}
}
}
return TRUE;
}
void OsWin32_CloseSiblings(unsigned int parent)
{
::EnumWindows(CloseSiblingProc, parent);
}
///////////////////////////////////////////////////////////
// Hardlock Support
///////////////////////////////////////////////////////////

View File

@ -19,6 +19,7 @@ void OsWin32_PlaceProcessInWindow(unsigned int instance, const char* name, unsig
unsigned int OsWin32_FindMenuContainer();
long OsWin32_GetChildrenCount(unsigned int parent);
long OsWin32_CloseChildren(unsigned int parent);
void OsWin32_CloseSiblings(unsigned int parent);
void OsWin32_UpdateWindow(unsigned int handle);
void OsWin32_NumberFormat(char* str, int size);

View File

@ -3662,6 +3662,16 @@ long xvt_sys_close_children(WINDOW win)
return c;
}
long xvt_sys_close_siblings(WINDOW win)
{
long c = 0; // Non sto a perder tempo a contarli :-)
#ifdef WIN32
CAST_WIN(win, w);
OsWin32_CloseSiblings((unsigned int)w.GetHandle());
#endif
return c;
}
BOOLEAN xvt_sys_goto_url(const char* url, const char* action)
{
#ifdef WIN32
@ -3678,7 +3688,7 @@ BOOLEAN xvt_sys_dongle_server_is_running()
BOOLEAN ok = sic.IsAnotherRunning();
#ifdef WIN32
if (!ok) // Testo anche Frontend!
if (!ok) // Testo anche il buon vecchio Frontend!
ok = ::GlobalFindAtom("DONGLE_SERVER_ATOM") != 0;
#endif

View File

@ -365,6 +365,7 @@ XVTDLL void xvt_sys_beep(int severity);
XVTDLL long xvt_sys_execute(const char* cmdline, BOOLEAN sync, BOOLEAN iconizetask);
XVTDLL long xvt_sys_execute_in_window(const char* cmdline, WINDOW win);
XVTDLL long xvt_sys_close_children(WINDOW win);
XVTDLL long xvt_sys_close_siblings(WINDOW win);
XVTDLL BOOLEAN xvt_sys_get_host_name(char* name, int maxlen);
XVTDLL BOOLEAN xvt_sys_get_user_name(char* name, int maxlen);

View File

@ -1002,6 +1002,7 @@ BEGIN_EVENT_TABLE(TTaskWin, wxFrame)
EVT_MENU_RANGE(1000, 32766, TTaskWin::OnMenu)
EVT_PAINT(TTaskWin::OnPaint)
EVT_SIZE(TTaskWin::OnSize)
EVT_END_SESSION(TTaskWin::OnClose)
END_EVENT_TABLE()
void TTaskWin::OnClose(wxCloseEvent& evt)