Cambiato meccanismo di sincronizzazione tra le applicazioni
git-svn-id: svn://10.65.10.50/trunk@773 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
1b54d95ee2
commit
6127537a65
@ -149,72 +149,6 @@ void TBanner::handler(WINDOW win, EVENT* ep)
|
|||||||
TWindow::handler(win, ep);
|
TWindow::handler(win, ep);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if XVT_OS == XVT_OS_WIN
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
// Gestione dei processi per Windows(R)
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
const word WM_WAKEUP = RegisterWindowMessage("WAKEUP");
|
|
||||||
DWORD waiting_for = 0;
|
|
||||||
|
|
||||||
HIDDEN BOOLEAN waiting_event_hook(HWND, WORD msg, WORD,
|
|
||||||
DWORD lparam, long far* ret)
|
|
||||||
{
|
|
||||||
if (msg == WM_WAKEUP)
|
|
||||||
{
|
|
||||||
if( lparam == waiting_for || lparam == 0)
|
|
||||||
{
|
|
||||||
waiting_for = 0L;
|
|
||||||
TTemp_window tw(TASK_WIN);
|
|
||||||
tw.maximize();
|
|
||||||
}
|
|
||||||
*ret = 0;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
HIDDEN DWORD name2id(const char* name)
|
|
||||||
{
|
|
||||||
waiting_for = 0L;
|
|
||||||
for (int i = 0; i < 5 && name[i] > ' '; i++)
|
|
||||||
{
|
|
||||||
waiting_for <<= 6;
|
|
||||||
waiting_for |= toupper(name[i]) - '0';
|
|
||||||
}
|
|
||||||
return waiting_for;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void TApplication::wait_for(const char* command)
|
|
||||||
{
|
|
||||||
TTemp_window tw(TASK_WIN);
|
|
||||||
tw.iconize();
|
|
||||||
name2id(cmd2name(command));
|
|
||||||
|
|
||||||
const long old_hook = get_value(TASK_WIN, ATTR_EVENT_HOOK);
|
|
||||||
set_value(TASK_WIN, ATTR_EVENT_HOOK, (long)waiting_event_hook);
|
|
||||||
while (waiting_for) do_events();
|
|
||||||
|
|
||||||
// We need to restore these things
|
|
||||||
set_value(TASK_WIN, ATTR_EVENT_HOOK, old_hook);
|
|
||||||
xvt_statbar_refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TApplication::wake_up_caller() const
|
|
||||||
{
|
|
||||||
name2id(name());
|
|
||||||
SendMessage(-1, WM_WAKEUP, 0, waiting_for);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
long TApplication::task_eh(WINDOW win, EVENT *ep)
|
long TApplication::task_eh(WINDOW win, EVENT *ep)
|
||||||
{
|
{
|
||||||
switch (ep->type)
|
switch (ep->type)
|
||||||
@ -358,10 +292,6 @@ bool TApplication::destroy()
|
|||||||
|
|
||||||
void TApplication::terminate()
|
void TApplication::terminate()
|
||||||
{
|
{
|
||||||
#if XVT_OS == XVT_OS_WIN
|
|
||||||
wake_up_caller(); // Manda il segnale di risveglio al chiamante
|
|
||||||
#endif
|
|
||||||
|
|
||||||
close_all_dialogs();
|
close_all_dialogs();
|
||||||
|
|
||||||
if (_create_ok)
|
if (_create_ok)
|
||||||
@ -559,6 +489,9 @@ void TApplication::enable_menu_item(MENU_TAG item, bool on)
|
|||||||
win_update_menu_bar(TASK_WIN);
|
win_update_menu_bar(TASK_WIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if XVT_OS == XVT_OS_WIN
|
||||||
|
#include <windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
void TApplication::dispatch_e_menu(MENU_TAG item)
|
void TApplication::dispatch_e_menu(MENU_TAG item)
|
||||||
{
|
{
|
||||||
|
@ -85,9 +85,6 @@ public:
|
|||||||
void set_title(const char* t) { _title = t; }
|
void set_title(const char* t) { _title = t; }
|
||||||
const TString& title() const { return _title; }
|
const TString& title() const { return _title; }
|
||||||
|
|
||||||
void wait_for(const char* name);
|
|
||||||
void wake_up_caller() const;
|
|
||||||
|
|
||||||
TPrinter* set_printer(TPrinter* p);
|
TPrinter* set_printer(TPrinter* p);
|
||||||
TPrinter& printer();
|
TPrinter& printer();
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
// fv 6/10/93
|
// fv 6/10/93
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include <xvt.h>
|
#include <xvt.h>
|
||||||
|
|
||||||
#if XVT_OS == XVT_OS_SCOUNIX
|
#if XVT_OS == XVT_OS_SCOUNIX
|
||||||
@ -9,25 +8,20 @@
|
|||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <applicat.h>
|
|
||||||
|
|
||||||
#if XVT_OS == XVT_OS_WIN
|
#if XVT_OS == XVT_OS_WIN
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <toolhelp.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if XVT_OS == XVT_OS_DOS
|
#include <applicat.h>
|
||||||
#include <holdev.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <execp.h>
|
#include <execp.h>
|
||||||
|
|
||||||
|
|
||||||
bool TExternal_app::can_run() const
|
bool TExternal_app::can_run() const
|
||||||
{
|
{
|
||||||
#if XVT_OS == XVT_OS_WIN
|
#if XVT_OS == XVT_OS_WIN
|
||||||
const TFixed_string p(_path);
|
const TFixed_string p(_path);
|
||||||
const bool clifo = p.find("cg0") == 0 && p.right(2) == "-1";
|
const bool big = p.find("cg0") == 0 && p.right(2) == "-1";
|
||||||
const int richieste = clifo ? 50 : 15;
|
const int richieste = big ? 50 : 15;
|
||||||
const int libere = GetFreeSystemResources(GFSR_SYSTEMRESOURCES);
|
const int libere = GetFreeSystemResources(GFSR_SYSTEMRESOURCES);
|
||||||
return libere >= richieste;
|
return libere >= richieste;
|
||||||
#else
|
#else
|
||||||
@ -36,22 +30,13 @@ bool TExternal_app::can_run() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// char _path[120]; // app name
|
|
||||||
// int _error; // last error
|
|
||||||
// int _exitcode; // last exit code
|
|
||||||
// int _count; // count of calls returning 0
|
|
||||||
// int error() { return _error};
|
|
||||||
// int exitcode() { return _exitcode};
|
|
||||||
// int count() { return _count; };
|
|
||||||
|
|
||||||
int TExternal_app::run(bool async, bool iconized)
|
int TExternal_app::run(bool async, bool iconized)
|
||||||
{
|
{
|
||||||
TString256 path(_path);
|
TString256 path(_path);
|
||||||
|
|
||||||
if (!async)
|
if (!async)
|
||||||
{
|
{
|
||||||
if (iconized)
|
if (iconized) path << " -icon";
|
||||||
path << " -icon";
|
|
||||||
path << " -u" << main_app().user();
|
path << " -u" << main_app().user();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,6 +56,7 @@ int TExternal_app::run(bool async, bool iconized)
|
|||||||
|
|
||||||
if (_exitcode == 0)
|
if (_exitcode == 0)
|
||||||
{
|
{
|
||||||
|
CURSOR oldcur = get_cursor(TASK_WIN);
|
||||||
set_cursor(TASK_WIN, CURSOR_WAIT);
|
set_cursor(TASK_WIN, CURSOR_WAIT);
|
||||||
|
|
||||||
const UINT sh = iconized ? SW_SHOWMINIMIZED : SW_SHOW;
|
const UINT sh = iconized ? SW_SHOWMINIMIZED : SW_SHOW;
|
||||||
@ -78,7 +64,29 @@ int TExternal_app::run(bool async, bool iconized)
|
|||||||
|
|
||||||
if (_exitcode >= 32)
|
if (_exitcode >= 32)
|
||||||
{
|
{
|
||||||
if (!async) main_app().wait_for(_path);
|
if (!async)
|
||||||
|
{
|
||||||
|
if (!iconized)
|
||||||
|
{
|
||||||
|
TTemp_window tw(TASK_WIN);
|
||||||
|
tw.iconize();
|
||||||
|
}
|
||||||
|
|
||||||
|
HTASK child = NULL;
|
||||||
|
TASKENTRY te; te.dwSize = sizeof(TASKENTRY);
|
||||||
|
for (bool ok = TaskFirst(&te); ok; ok = TaskNext(&te))
|
||||||
|
if (te.hInst == (HINSTANCE)_exitcode) child = te.hTask;
|
||||||
|
CHECK(child, "Can't find child task");
|
||||||
|
while(TaskFindHandle(&te, child))
|
||||||
|
process_events();
|
||||||
|
|
||||||
|
if (!iconized)
|
||||||
|
{
|
||||||
|
TTemp_window tw(TASK_WIN);
|
||||||
|
tw.maximize();
|
||||||
|
xvt_statbar_refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
_exitcode = 0;
|
_exitcode = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -89,7 +97,7 @@ int TExternal_app::run(bool async, bool iconized)
|
|||||||
error_box("Impossibile eseguire '%s':\nErrore %d", (const char*)_path, _exitcode);
|
error_box("Impossibile eseguire '%s':\nErrore %d", (const char*)_path, _exitcode);
|
||||||
}
|
}
|
||||||
|
|
||||||
set_cursor(TASK_WIN, CURSOR_ARROW);
|
set_cursor(TASK_WIN, oldcur);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
@ -1211,9 +1211,8 @@ void TMask::send_key(KEY key, short to, TMask_field* from)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const int max = fields();
|
|
||||||
const int gr = -to;
|
const int gr = -to;
|
||||||
for (int i = 0; i < max; i++)
|
for (int i = 0; i < fields(); i++)
|
||||||
{
|
{
|
||||||
TMask_field& campo = fld(i);
|
TMask_field& campo = fld(i);
|
||||||
if (campo.in_group(gr))
|
if (campo.in_group(gr))
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// $Id: maskfld.cpp,v 1.61 1994-12-15 18:06:23 guy Exp $
|
// $Id: maskfld.cpp,v 1.62 1994-12-16 15:49:54 guy Exp $
|
||||||
#include <xvt.h>
|
#include <xvt.h>
|
||||||
|
|
||||||
#include <applicat.h>
|
#include <applicat.h>
|
||||||
|
@ -540,6 +540,8 @@ break;
|
|||||||
case XIE_SELECT:
|
case XIE_SELECT:
|
||||||
if (xiev->v.xi_obj->type == XIT_ROW)
|
if (xiev->v.xi_obj->type == XIT_ROW)
|
||||||
{
|
{
|
||||||
|
_check_enabled = FALSE;
|
||||||
|
|
||||||
const int oldrec = _cur_rec;
|
const int oldrec = _cur_rec;
|
||||||
set_pos(xiev->v.select.xi_obj->v.row, xiev->v.select.column);
|
set_pos(xiev->v.select.xi_obj->v.row, xiev->v.select.column);
|
||||||
if (oldrec != _cur_rec)
|
if (oldrec != _cur_rec)
|
||||||
@ -547,10 +549,15 @@ break;
|
|||||||
str2mask(_cur_rec);
|
str2mask(_cur_rec);
|
||||||
_row_dirty = FALSE;
|
_row_dirty = FALSE;
|
||||||
}
|
}
|
||||||
_edit_field = col2field(_cur_col);
|
|
||||||
|
update(_cur_rec);
|
||||||
|
|
||||||
|
TMask_field* button = col2field(_cur_col);
|
||||||
notify_change();
|
notify_change();
|
||||||
_edit_field->on_hit();
|
button->on_hit();
|
||||||
mask2str(_cur_rec);
|
mask2str(_cur_rec);
|
||||||
|
|
||||||
|
_check_enabled = TRUE;
|
||||||
}
|
}
|
||||||
xiev->refused = TRUE;
|
xiev->refused = TRUE;
|
||||||
break;
|
break;
|
||||||
@ -714,7 +721,7 @@ break;
|
|||||||
case K_F8:
|
case K_F8:
|
||||||
case K_F9:
|
case K_F9:
|
||||||
case K_F11:
|
case K_F11:
|
||||||
if (_check_enabled)
|
if (_check_enabled && active())
|
||||||
{
|
{
|
||||||
_check_enabled = FALSE; // Disable checks
|
_check_enabled = FALSE; // Disable checks
|
||||||
notify_change();
|
notify_change();
|
||||||
@ -788,15 +795,27 @@ void TSpreadsheet::activate(bool on)
|
|||||||
XI_OBJ** columns = xi_get_member_list(_list, &num);
|
XI_OBJ** columns = xi_get_member_list(_list, &num);
|
||||||
|
|
||||||
xi_move_focus(_itf); // Set focus to interface
|
xi_move_focus(_itf); // Set focus to interface
|
||||||
att = on ? (att | XI_ATR_TABWRAP) : (att & ~XI_ATR_TABWRAP);
|
if (on)
|
||||||
|
att |= XI_ATR_TABWRAP;
|
||||||
|
else
|
||||||
|
att &= ~XI_ATR_TABWRAP;
|
||||||
|
|
||||||
xi_set_attrib(_list, att);
|
xi_set_attrib(_list, att);
|
||||||
|
|
||||||
for (int col = 1; col < num; col++)
|
for (int col = 1; col < num; col++)
|
||||||
{
|
{
|
||||||
XI_OBJ* column = columns[col];
|
XI_OBJ* column = columns[col];
|
||||||
att = xi_get_attrib(column);
|
att = xi_get_attrib(column);
|
||||||
if (on) att &= ~XI_ATR_READONLY;
|
if (on)
|
||||||
else att |= XI_ATR_READONLY;
|
{
|
||||||
|
att &= ~XI_ATR_READONLY;
|
||||||
|
att |= XI_ATR_AUTOSELECT;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
att |= XI_ATR_READONLY;
|
||||||
|
att &= ~XI_ATR_AUTOSELECT;
|
||||||
|
}
|
||||||
xi_set_attrib(column, att); // Set new attributes
|
xi_set_attrib(column, att); // Set new attributes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// $Id: relapp.cpp,v 1.39 1994-12-07 18:03:46 guy Exp $
|
// $Id: relapp.cpp,v 1.40 1994-12-16 15:50:08 guy Exp $
|
||||||
#include <mailbox.h>
|
#include <mailbox.h>
|
||||||
#include <sheet.h>
|
#include <sheet.h>
|
||||||
#include <urldefid.h>
|
#include <urldefid.h>
|
||||||
@ -18,9 +18,8 @@ HIDDEN bool can_change_firm()
|
|||||||
if (can == 2)
|
if (can == 2)
|
||||||
{
|
{
|
||||||
#if XVT_OS == XVT_OS_WIN
|
#if XVT_OS == XVT_OS_WIN
|
||||||
|
TASKENTRY te; te.dwSize = sizeof(TASKENTRY);
|
||||||
HTASK ct = GetCurrentTask();
|
HTASK ct = GetCurrentTask();
|
||||||
TASKENTRY te;
|
|
||||||
te.dwSize = sizeof(TASKENTRY);
|
|
||||||
TaskFindHandle(&te, ct);
|
TaskFindHandle(&te, ct);
|
||||||
TaskFindHandle(&te, te.hTaskParent);
|
TaskFindHandle(&te, te.hTaskParent);
|
||||||
can = strcmp(te.szModule, "BA0") == 0;
|
can = strcmp(te.szModule, "BA0") == 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user