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);
|
||||
}
|
||||
|
||||
#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)
|
||||
{
|
||||
switch (ep->type)
|
||||
@ -358,10 +292,6 @@ bool TApplication::destroy()
|
||||
|
||||
void TApplication::terminate()
|
||||
{
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
wake_up_caller(); // Manda il segnale di risveglio al chiamante
|
||||
#endif
|
||||
|
||||
close_all_dialogs();
|
||||
|
||||
if (_create_ok)
|
||||
@ -559,6 +489,9 @@ void TApplication::enable_menu_item(MENU_TAG item, bool on)
|
||||
win_update_menu_bar(TASK_WIN);
|
||||
}
|
||||
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
void TApplication::dispatch_e_menu(MENU_TAG item)
|
||||
{
|
||||
|
@ -85,9 +85,6 @@ public:
|
||||
void set_title(const char* t) { _title = t; }
|
||||
const TString& title() const { return _title; }
|
||||
|
||||
void wait_for(const char* name);
|
||||
void wake_up_caller() const;
|
||||
|
||||
TPrinter* set_printer(TPrinter* p);
|
||||
TPrinter& printer();
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
// fv 6/10/93
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <xvt.h>
|
||||
|
||||
#if XVT_OS == XVT_OS_SCOUNIX
|
||||
@ -9,25 +8,20 @@
|
||||
#include <sys/wait.h>
|
||||
#endif
|
||||
|
||||
#include <applicat.h>
|
||||
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
#include <windows.h>
|
||||
#include <toolhelp.h>
|
||||
#endif
|
||||
|
||||
#if XVT_OS == XVT_OS_DOS
|
||||
#include <holdev.h>
|
||||
#endif
|
||||
|
||||
#include <applicat.h>
|
||||
#include <execp.h>
|
||||
|
||||
|
||||
bool TExternal_app::can_run() const
|
||||
{
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
const TFixed_string p(_path);
|
||||
const bool clifo = p.find("cg0") == 0 && p.right(2) == "-1";
|
||||
const int richieste = clifo ? 50 : 15;
|
||||
const bool big = p.find("cg0") == 0 && p.right(2) == "-1";
|
||||
const int richieste = big ? 50 : 15;
|
||||
const int libere = GetFreeSystemResources(GFSR_SYSTEMRESOURCES);
|
||||
return libere >= richieste;
|
||||
#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)
|
||||
{
|
||||
TString256 path(_path);
|
||||
|
||||
if (!async)
|
||||
{
|
||||
if (iconized)
|
||||
path << " -icon";
|
||||
if (iconized) path << " -icon";
|
||||
path << " -u" << main_app().user();
|
||||
}
|
||||
|
||||
@ -70,15 +55,38 @@ int TExternal_app::run(bool async, bool iconized)
|
||||
}
|
||||
|
||||
if (_exitcode == 0)
|
||||
{
|
||||
{
|
||||
CURSOR oldcur = get_cursor(TASK_WIN);
|
||||
set_cursor(TASK_WIN, CURSOR_WAIT);
|
||||
|
||||
const UINT sh = iconized ? SW_SHOWMINIMIZED : SW_SHOW;
|
||||
_exitcode = WinExec((char*)(const char*)path, sh);
|
||||
|
||||
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;
|
||||
}
|
||||
else
|
||||
@ -89,7 +97,7 @@ int TExternal_app::run(bool async, bool iconized)
|
||||
error_box("Impossibile eseguire '%s':\nErrore %d", (const char*)_path, _exitcode);
|
||||
}
|
||||
|
||||
set_cursor(TASK_WIN, CURSOR_ARROW);
|
||||
set_cursor(TASK_WIN, oldcur);
|
||||
}
|
||||
#else
|
||||
|
||||
|
@ -1211,9 +1211,8 @@ void TMask::send_key(KEY key, short to, TMask_field* from)
|
||||
}
|
||||
else
|
||||
{
|
||||
const int max = fields();
|
||||
const int gr = -to;
|
||||
for (int i = 0; i < max; i++)
|
||||
for (int i = 0; i < fields(); i++)
|
||||
{
|
||||
TMask_field& campo = fld(i);
|
||||
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 <applicat.h>
|
||||
@ -452,7 +452,7 @@ void TMask_field::set_prompt(const char* p)
|
||||
|
||||
|
||||
void TMask_field::set(const char* s)
|
||||
{
|
||||
{
|
||||
if (mask().is_running())
|
||||
{
|
||||
set_window_data(s);
|
||||
|
@ -539,18 +539,25 @@ break;
|
||||
break;
|
||||
case XIE_SELECT:
|
||||
if (xiev->v.xi_obj->type == XIT_ROW)
|
||||
{
|
||||
{
|
||||
_check_enabled = FALSE;
|
||||
|
||||
const int oldrec = _cur_rec;
|
||||
set_pos(xiev->v.select.xi_obj->v.row, xiev->v.select.column);
|
||||
if (oldrec != _cur_rec)
|
||||
{
|
||||
str2mask(_cur_rec);
|
||||
_row_dirty = FALSE;
|
||||
}
|
||||
_edit_field = col2field(_cur_col);
|
||||
}
|
||||
|
||||
update(_cur_rec);
|
||||
|
||||
TMask_field* button = col2field(_cur_col);
|
||||
notify_change();
|
||||
_edit_field->on_hit();
|
||||
button->on_hit();
|
||||
mask2str(_cur_rec);
|
||||
|
||||
_check_enabled = TRUE;
|
||||
}
|
||||
xiev->refused = TRUE;
|
||||
break;
|
||||
@ -714,7 +721,7 @@ break;
|
||||
case K_F8:
|
||||
case K_F9:
|
||||
case K_F11:
|
||||
if (_check_enabled)
|
||||
if (_check_enabled && active())
|
||||
{
|
||||
_check_enabled = FALSE; // Disable checks
|
||||
notify_change();
|
||||
@ -788,15 +795,27 @@ void TSpreadsheet::activate(bool on)
|
||||
XI_OBJ** columns = xi_get_member_list(_list, &num);
|
||||
|
||||
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);
|
||||
|
||||
for (int col = 1; col < num; col++)
|
||||
{
|
||||
XI_OBJ* column = columns[col];
|
||||
att = xi_get_attrib(column);
|
||||
if (on) att &= ~XI_ATR_READONLY;
|
||||
else att |= XI_ATR_READONLY;
|
||||
if (on)
|
||||
{
|
||||
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
|
||||
}
|
||||
}
|
||||
|
@ -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 <sheet.h>
|
||||
#include <urldefid.h>
|
||||
@ -18,9 +18,8 @@ HIDDEN bool can_change_firm()
|
||||
if (can == 2)
|
||||
{
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
TASKENTRY te; te.dwSize = sizeof(TASKENTRY);
|
||||
HTASK ct = GetCurrentTask();
|
||||
TASKENTRY te;
|
||||
te.dwSize = sizeof(TASKENTRY);
|
||||
TaskFindHandle(&te, ct);
|
||||
TaskFindHandle(&te, te.hTaskParent);
|
||||
can = strcmp(te.szModule, "BA0") == 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user