Index: /trunk/SophyaPI/PI/piapplgen.cc
===================================================================
--- /trunk/SophyaPI/PI/piapplgen.cc	(revision 134)
+++ /trunk/SophyaPI/PI/piapplgen.cc	(revision 135)
@@ -116,9 +116,11 @@
 // void  RedirectOutStream(PIConsole* cons, unsigned char va= PIVA_Def)
 //	Redirige le flot de sortie ("stdout" sous Unix) vers l'objet 
-//	PIConsole "cons".  
+//	PIConsole "cons". si "cons==NULL", redirection 
+//	sur le flot original.
 //
 // void  RedirectErrStream(PIConsole* cons, unsigned char va= PIVA_Def)
 //	Redirige le flot des messages d'erreur ("stderr" sous Unix) 
-//	vers l'objet PIConsole "cons".  
+//	vers l'objet PIConsole "cons". si "cons==NULL", redirection
+//	 sur le flot original.
 //--
 
Index: /trunk/SophyaPI/PI/piapplx.cc
===================================================================
--- /trunk/SophyaPI/PI/piapplx.cc	(revision 134)
+++ /trunk/SophyaPI/PI/piapplx.cc	(revision 135)
@@ -8,4 +8,6 @@
 #include <unistd.h>
 #include <fcntl.h>
+
+#include <iostream.h>
 
 
@@ -218,4 +220,7 @@
 static unsigned char streamva[2] = { PIVA_Def, PIVA_Ital};
 static int streamno[2] = {0,1};
+static XtInputId inputid[2];
+static int origfiledes[2]={-1, -1};   // descripteurs de fichiers de depart
+static bool firstcall[2]={true, true};    // 1er appel a Redirect
 
 static void redirectstream_callback(XtPointer cld, int * fd, XtInputId* /*iid*/)
@@ -226,4 +231,5 @@
 int idx = *((int*)cld);
 if (idx != 1) idx = 0; 
+if (!consstream[idx]) return;
 while ( (nr=read(*fd, buff, 127)) > 0 ) {
   buff[nr] = '\0'; consstream[idx]->AddStr(buff, streamva[idx], false);
@@ -235,7 +241,14 @@
 void PIApplicationX::RedirectOutStream(PIConsole* cons, unsigned char va)
 {
-if (!cons) return;
-
-if (consstream[0]) { consstream[0] = cons; streamva[0] = va; return; }
+if ( origfiledes[0]<0 )  origfiledes[0] = fcntl(1, F_DUPFD);     
+if ( cons == consstream[0]) return;
+if ( (consstream[0]) && (cons) ) { consstream[0] = cons; streamva[0] = va; return; }
+else if (!cons) { 
+  consstream[0] = NULL;  
+  XtRemoveInput(inputid[0]);
+  dup2(origfiledes[0], 1);
+  return;
+  }
+
 consstream[0] = cons; streamva[0] = va;
 
@@ -247,9 +260,12 @@
 close(p[1]);
 fcntl(p[0], F_SETFL, O_NONBLOCK);
+
 setlinebuf(stdout);
+ios::sync_with_stdio();
 
 int szx, szy, szf;
 XtAppContext * appctx = PIXtAppCtx(szx, szy, szf);
-XtAppAddInput(*appctx, p[0], (XtPointer) XtInputReadMask, redirectstream_callback, (XtPointer) streamno);
+inputid[0] = XtAppAddInput(*appctx, p[0], (XtPointer) XtInputReadMask, 
+                           redirectstream_callback, (XtPointer) streamno);
 }
 
@@ -257,21 +273,31 @@
 void PIApplicationX::RedirectErrStream(PIConsole* cons, unsigned char va)
 {
-if (!cons) return;
-
-if (consstream[1]) { consstream[1] = cons; streamva[1] = va; return; }
+if ( origfiledes[1]<0 )  origfiledes[1] = fcntl(2, F_DUPFD);     
+if ( cons == consstream[1]) return;
+if ( (consstream[1]) && (cons) ) { consstream[1] = cons; streamva[1] = va; return; }
+else if (!cons) { 
+  consstream[1] = NULL;  
+  XtRemoveInput(inputid[1]);
+  dup2(origfiledes[1], 2);
+  return;
+  }
+
 consstream[1] = cons; streamva[1] = va;
 
 int p[2];
 pipe(p);
-// Redirection de stderr (fid=0) :
+// Redirection de stderr (fid=2) :
 close(2);
 dup(p[1]);
 close(p[1]);
 fcntl(p[0], F_SETFL, O_NONBLOCK);
+
 setlinebuf(stderr);
+ios::sync_with_stdio();
 
 int szx, szy, szf;
 XtAppContext * appctx = PIXtAppCtx(szx, szy, szf);
-XtAppAddInput(*appctx, p[0], (XtPointer) XtInputReadMask, redirectstream_callback, (XtPointer) (streamno+1));
-}
-
+inputid[1] = XtAppAddInput(*appctx, p[0], (XtPointer) XtInputReadMask, 
+                           redirectstream_callback, (XtPointer) (streamno+1));
+}
+
Index: /trunk/SophyaPI/PI/piwdgx.cc
===================================================================
--- /trunk/SophyaPI/PI/piwdgx.cc	(revision 134)
+++ /trunk/SophyaPI/PI/piwdgx.cc	(revision 135)
@@ -30,4 +30,7 @@
 static XFontStruct * stdfnt = NULL;
 
+// Variable globale Widget qui possede la selection pour le copier-coller
+static PIWdgX* curselwdg = NULL;    // Le PIWdg qui possede la selection
+
 /* Nouvelle-Fonction */
 XtAppContext* PIXtAppCtx(int& szx, int& szy, int& szf)
@@ -179,4 +182,5 @@
 printf("Debug_PIWdgX::~PIWdgX()  %lx %lx \n", (long)this, (long)sdw);
 #endif
+if (curselwdg == this)  { SelectionLost(); curselwdg = NULL; }
 if (!sdw)  XtDestroyWidget(sdw);
 }
@@ -592,5 +596,4 @@
                                  XtPointer value, unsigned long* len, int* format );
 
-static PIWdgX* curselwdg = NULL;    // Le PIWdg qui possede la selection
 static unsigned int curseltype = PICP_string; // Type de selcetion qu'il peut fournir
 static unsigned int reqseltype = PICP_string; // Type de selection demande
