Index: /trunk/SophyaPI/PI/pibwdggen.cc
===================================================================
--- /trunk/SophyaPI/PI/pibwdggen.cc	(revision 179)
+++ /trunk/SophyaPI/PI/pibwdggen.cc	(revision 180)
@@ -66,7 +66,4 @@
 // PIPointer  GetPointerShape() 
 //	Renvoie la forme du pointeur
-// void  Refresh()
-//	L'appel à cette méthode permet de retracer le contenu de la 
-//	fenêtre et des "Drawer" associés.
 //--
 
@@ -115,5 +112,5 @@
  
 
-/* --Methode-- */
+/* --Methode-- 
 void PIBaseWdgGen::Refresh()
 {
@@ -124,5 +121,5 @@
 return;
 }
-
+*/
 
 //++
Index: /trunk/SophyaPI/PI/pibwdggen.h
===================================================================
--- /trunk/SophyaPI/PI/pibwdggen.h	(revision 179)
+++ /trunk/SophyaPI/PI/pibwdggen.h	(revision 180)
@@ -55,7 +55,4 @@
   virtual PIPointer  GetPointerShape()                                       = 0;
   virtual void       AssignKeyboard()                                        = 0;
-
-//  Fonction qui doit etre appelee pour rafraichir la fenetre 
-  virtual void       Refresh();
 
 //  Fonctions qui doivent contenir le dessin du contenu du widget lui-meme
Index: /trunk/SophyaPI/PI/pibwdgx.cc
===================================================================
--- /trunk/SophyaPI/PI/pibwdgx.cc	(revision 179)
+++ /trunk/SophyaPI/PI/pibwdgx.cc	(revision 180)
@@ -106,4 +106,17 @@
 
 /* --Methode-- */
+void PIBaseWdgX::Refresh()
+{
+if ( IsVisible() )  {
+//  EraseWindow();   --> Ne pas faire  Reza 12/98 
+  Draw(mWGrC, 0, 0, XSize(), YSize());
+  CallDrawers(mWGrC); 
+  CallDrawHandlers(0, 0, XSize(), YSize());
+  }
+return;
+}
+
+
+/* --Methode-- */
 void PIBaseWdgX::ActivatePtrCross()
 {
Index: /trunk/SophyaPI/PI/pibwdgx.h
===================================================================
--- /trunk/SophyaPI/PI/pibwdgx.h	(revision 179)
+++ /trunk/SophyaPI/PI/pibwdgx.h	(revision 180)
@@ -46,4 +46,7 @@
   virtual bool       IsVisible();
 
+//  Fonction qui doit etre appelee pour rafraichir la fenetre 
+  virtual void       Refresh();
+
 //  Appel depuis le PIXtBaseWidget uniquement (ExposeEvt de Xt )
   virtual void       eXposeProcess(int x0, int y0, int dx, int dy);
Index: /trunk/SophyaPI/PI/pigraphgen.cc
===================================================================
--- /trunk/SophyaPI/PI/pigraphgen.cc	(revision 179)
+++ /trunk/SophyaPI/PI/pigraphgen.cc	(revision 180)
@@ -36,5 +36,5 @@
 //	Constructeur pour les *PIGraphicWin*. Objet "PIGraphic" capable 
 //	de tracer dans un "PIWdg".
-// PIGraphic(PIGraphicBuffer* grb)
+// PIGraphic(PIScreenBuffer* grb)
 //	Constructeur pour objet "PIGraphic" capable de tracer dans un 
 //	buffer graphique.
@@ -47,5 +47,5 @@
 //	Renvoie le type de l'objet "PIGraphic" .
 //	* PI_UnknownGraphics : Objet PIGraphic de type inconnue.
-//	* PI_GrBufferGraphics : Objet PIGraphic associé à un "GraphicBuffer"
+//	* PI_ScrBufferGraphics : Objet PIGraphic associé à un "GraphicBuffer"
 //	* PI_ScrWindowGraphics : Objet PIGraphic associé à une fenêtre sur l'écran (PIWdg)
 //	* PI_PSFileGraphics : Objet PIGraphic à un fichier PostScript (pour impression papier)
@@ -76,5 +76,5 @@
 
 /* --Methode-- */
-PIGraphicGen::PIGraphicGen(PIGraphicBuffer* grb)
+PIGraphicGen::PIGraphicGen(PIScreenBuffer* grb)
 {
 myWdg = NULL;
Index: /trunk/SophyaPI/PI/pigraphgen.h
===================================================================
--- /trunk/SophyaPI/PI/pigraphgen.h	(revision 179)
+++ /trunk/SophyaPI/PI/pigraphgen.h	(revision 180)
@@ -62,5 +62,5 @@
 
 enum PIGraphicsType { PI_UnknownGraphics = 0, 
-                      PI_ScrWindowGraphics = 2, PI_GrBufferGraphics = 3, 
+                      PI_ScrWindowGraphics = 2, PI_ScrBufferGraphics = 3, 
                       PI_PSFileGraphics = 8, 
                       PI_UCGraphics = 32, PI_3DGraphics = 36 };
@@ -73,5 +73,5 @@
                      PIGraphicGen();
                      PIGraphicGen(PIWdg* wdg);
-                     PIGraphicGen(PIGraphicBuffer* grb);
+                     PIGraphicGen(PIScreenBuffer* grb);
   virtual           ~PIGraphicGen();
 
@@ -139,5 +139,5 @@
 // Pour Save/Restore des attributs graphiques 
   PIWdg* myWdg;
-  PIGraphicBuffer* myGrb;
+  PIScreenBuffer* myGrb;
 
   PIColors  sFCol, sBCol;
Index: /trunk/SophyaPI/PI/pigraphx.cc
===================================================================
--- /trunk/SophyaPI/PI/pigraphx.cc	(revision 179)
+++ /trunk/SophyaPI/PI/pigraphx.cc	(revision 180)
@@ -50,5 +50,5 @@
 
 /* --Methode-- */
-PIGraphicX::PIGraphicX(PIGraphicBuffer* grb)
+PIGraphicX::PIGraphicX(PIScreenBuffer* grb)
 : PIGraphicGen(grb)
 {
@@ -56,5 +56,5 @@
 
 mDisp = PIXDisplay();       // Structure Display X associe
-mWId = grb->XGrBuffer();
+mWId = grb->XScrBuffer();
 
 XGCValues  xgv;
@@ -91,5 +91,5 @@
 {
 if (myWdg != NULL) return (PI_ScrWindowGraphics);
-else if (myGrb != NULL) return (PI_GrBufferGraphics);
+else if (myGrb != NULL) return (PI_ScrBufferGraphics);
 else return(PI_UnknownGraphics);
 }
Index: /trunk/SophyaPI/PI/pigraphx.h
===================================================================
--- /trunk/SophyaPI/PI/pigraphx.h	(revision 179)
+++ /trunk/SophyaPI/PI/pigraphx.h	(revision 180)
@@ -14,5 +14,5 @@
 public:
                      PIGraphicX(PIWdg* wdg);
-                     PIGraphicX(PIGraphicBuffer* grb);
+                     PIGraphicX(PIScreenBuffer* grb);
   virtual           ~PIGraphicX();
 
Index: /trunk/SophyaPI/PI/pimsghandler.h
===================================================================
--- /trunk/SophyaPI/PI/pimsghandler.h	(revision 179)
+++ /trunk/SophyaPI/PI/pimsghandler.h	(revision 180)
@@ -5,4 +5,6 @@
 
 #include <stdlib.h>
+
+#include "defs.h"
 
 enum {
Index: /trunk/SophyaPI/PI/piscdrawwdg.h
===================================================================
--- /trunk/SophyaPI/PI/piscdrawwdg.h	(revision 179)
+++ /trunk/SophyaPI/PI/piscdrawwdg.h	(revision 180)
@@ -38,5 +38,5 @@
 
   int                AddScDrawer(PIDrawer*, bool ad=false);   // Ajoute un Drawer en auto 
-  inline PIDrawer*   BaseDrawer() { return mBDrw; };
+  inline PIElDrawer* BaseDrawer() { return mBDrw; };
 
   float XMin() const {return mBDrw->XMin();}
Index: /trunk/SophyaPI/PI/pisurfdr.cc
===================================================================
--- /trunk/SophyaPI/PI/pisurfdr.cc	(revision 179)
+++ /trunk/SophyaPI/PI/pisurfdr.cc	(revision 180)
@@ -98,5 +98,5 @@
 //  g3->SelForeground(PI_White);
   g3->SelBackground(PI_White);
-  g3->Erase(xmin, ymin, xmax-xmin, ymax-ymin);
+//  g3->Erase(xmin, ymin, xmax-xmin, ymax-ymin);
 
   int xsz = mArr->XSize();
Index: /trunk/SophyaPI/PI/piwdggen.cc
===================================================================
--- /trunk/SophyaPI/PI/piwdggen.cc	(revision 179)
+++ /trunk/SophyaPI/PI/piwdggen.cc	(revision 180)
@@ -91,4 +91,13 @@
 // bool  IfSensitive() 
 //	indique si l'objet est répond aux sollicitations utilisateur.
+//--
+
+//++
+// Titre	Rafraîchissement de la fenêtre
+//--
+//++
+// void  Refresh()
+//	L'appel à cette méthode permet de retracer le contenu de la 
+//	fenêtre et des "Drawer" associés.
 //--
 
@@ -237,5 +246,6 @@
 //	La méthode "Draw(PIGraphic* g, ...)" sera appelé pour rafraîchir le contenu de la fenêtre.
 // void RemoveDrawHandler(PIEventHandler* drwh)
-//	Suppression d'un objet gestionnaire de tracé.
+//	Suppression d'un objet gestionnaire de tracé. Toutes les réferences sonnt supprimées en cas 
+//	d' enregistrement multiple.
 // void AddEventHandler(PIEventHandler* evh, unsigned long evtmask, bool ad=false)
 //	Ajout d'un objet gestionnaire d'événements. La variable "evtmask" détermine pour
@@ -248,5 +258,6 @@
 //
 // void RemoveEventHandler(PIEventHandler* evh)
-//	Suppression d'un gestionnaire d'événements.
+//	Suppression d'un gestionnaire d'événements. Toutes les réferences sonnt supprimées en cas
+//	d' enregistrement multiple, même avec différents masques d'événements.
 //--
 
@@ -263,6 +274,10 @@
 {
 list<EvHand>::iterator it;
-for(it= mDHlist.begin(); it != mDHlist.end(); it++) 
-  if ((*it).evh == drwh) { mDHlist.erase(it); break; }
+bool found = true;
+while (found) {
+  found = false;
+  for(it= mDHlist.begin(); it != mDHlist.end(); it++) 
+    if ((*it).evh == drwh) { mDHlist.erase(it); found = true; break; }
+  }
 }
 
@@ -279,6 +294,10 @@
 {
 list<EvHand>::iterator it;
-for(it= mEHlist.begin(); it != mEHlist.end(); it++) 
-  if ((*it).evh == evh) { mEHlist.erase(it); break; }
+bool found = true;
+while (found) {
+  found = false;
+  for(it= mEHlist.begin(); it != mEHlist.end(); it++) 
+    if ((*it).evh == evh) { mEHlist.erase(it); found = true; break; }
+  }
 }
 
Index: /trunk/SophyaPI/PI/piwdggen.h
===================================================================
--- /trunk/SophyaPI/PI/piwdggen.h	(revision 179)
+++ /trunk/SophyaPI/PI/piwdggen.h	(revision 180)
@@ -81,4 +81,7 @@
   virtual bool           IsVisible()=0;
 
+//  Fonction qui doit etre appelee pour rafraichir la fenetre 
+  virtual void       	 Refresh()=0;
+
 //  Pour rendre un composant graphique (PIWdg) sensible/insensible 
 //  aux actions utilisateur (souris, clavier, ...)
@@ -118,14 +121,14 @@
 };
 
-// ---- La classe PIGraphicBuffer doit se conformer a l'interface suivante
-// class PIGraphicBuffer {
+// ---- La classe PIScreenBuffer doit se conformer a l'interface suivante
+// class PIScreenBuffer {
 // public :
-//  			PIGraphicBuffer(int sx, int sy);
-//  virtual		~PIGraphicBuffer();
+//  			PIScreenBuffer(int sx, int sy);
+//  virtual		~PIScreenBuffer();
 //  virtual int         XSize();
 //  virtual int         YSize();
 //  virtual  void 	CopyFromWdg(PIWdg* wdg, int ox, int oy, int dx, int dy, int x, int y);
 //  virtual  void 	CopyToWdg(PIWdg* wdg, int ox, int oy, int dx, int dy, int x, int y);
-//  virtual  void 	CopyFrom(PIGraphicBuffer* grb, int ox, int oy, int dx, int dy, int x, int y);
+//  virtual  void 	CopyFrom(PIScreenBuffer* grb, int ox, int oy, int dx, int dy, int x, int y);
 // };
   
Index: /trunk/SophyaPI/PI/piwdgx.cc
===================================================================
--- /trunk/SophyaPI/PI/piwdgx.cc	(revision 179)
+++ /trunk/SophyaPI/PI/piwdgx.cc	(revision 180)
@@ -245,4 +245,11 @@
    ( (this->XtWdg())->core.visible) )  return(true);
 else return(false);       
+}
+
+/* --Methode-- */
+void PIWdgX::Refresh()
+{
+if (XtIsRealized(XtWdg()))
+  XClearArea(XtDisplay(XtWdg()), XtWindow(XtWdg()), 0, 0, 0, 0, True);
 }
 
@@ -770,5 +777,5 @@
 {
 PIWdgGen::AddDrawHandler(drwh, ad);
-XtAddEventHandler( XtWdg(), ExposureMask, FALSE, evthandler_piwdgx, this);
+XtInsertEventHandler( XtWdg(), ExposureMask, FALSE, evthandler_piwdgx, this, XtListTail);
 }
 
@@ -789,9 +796,9 @@
 if (evtmask & PIEvent_Leave)  mask |= LeaveNotify;
 if (evtmask & PIEvent_But1Press)  mask |= ButtonPressMask;
-if (evtmask & PIEvent_But1Release)  mask |= ButtonRelease;
+if (evtmask & PIEvent_But1Release)  mask |= ButtonReleaseMask;
 if (evtmask & PIEvent_But2Press)  mask |= ButtonPressMask;
-if (evtmask & PIEvent_But2Release)  mask |= ButtonRelease;
+if (evtmask & PIEvent_But2Release)  mask |= ButtonReleaseMask;
 if (evtmask & PIEvent_But3Press)  mask |= ButtonPressMask;
-if (evtmask & PIEvent_But3Release)  mask |= ButtonRelease;
+if (evtmask & PIEvent_But3Release)  mask |= ButtonReleaseMask;
 if (evtmask & PIEvent_PtrMove)  mask |= PointerMotionHintMask;
 if (evtmask & PIEvent_Ptr1Move)  mask |= (PointerMotionHintMask | Button1MotionMask);
@@ -799,5 +806,6 @@
 if (evtmask & PIEvent_Ptr3Move)  mask |= (PointerMotionHintMask | Button3MotionMask);
 if (evtmask & PIEvent_Keyboard)  mask |= KeyPressMask;
-XtAddEventHandler( XtWdg(), mask, FALSE, evthandler_piwdgx, this);
+printf("PIWdgX::AddEventHandler() Mask = %lx \n", (long)mask);
+XtInsertEventHandler( XtWdg(), mask, FALSE, evthandler_piwdgx, this, XtListTail);
 }
 
@@ -807,5 +815,5 @@
 PIWdgGen::RemoveEventHandler(evh);
 if (mEHlist.size() > 0) return; 
-unsigned mask = EnterNotify;
+EventMask mask = EnterNotify;
 mask |= LeaveNotify;
 mask |= ButtonPressMask;
@@ -862,5 +870,5 @@
 {
 
-*cont = FALSE ; 
+*cont = true ; 
 PIWdgX* wx = (PIWdgX*)usd;
 PIEventMask evm = PIEvent_None;
@@ -999,7 +1007,7 @@
 
 
-// -------- La classe PIGraphicBuffer ----------
-/* --Methode-- */
-PIGraphicBuffer::PIGraphicBuffer(int sx, int sy)
+// -------- La classe PIScreenBuffer ----------
+/* --Methode-- */
+PIScreenBuffer::PIScreenBuffer(int sx, int sy)
 {
 if (sx < 1) sx = 1;
@@ -1008,14 +1016,14 @@
 Display * dsx = PIXDisplay();
 Window rw = DefaultRootWindow(dsx);
-xGrbuff = XCreatePixmap(dsx, rw, sx, sy, DefaultDepth(dsx, DefaultScreen(dsx)) );
-}
-/* --Methode-- */
-PIGraphicBuffer::~PIGraphicBuffer()
-{
-XFreePixmap(PIXDisplay(),xGrbuff); 
-}
-
-/* --Methode-- */
-int PIGraphicBuffer::XSize()
+xScrbuff = XCreatePixmap(dsx, rw, sx, sy, DefaultDepth(dsx, DefaultScreen(dsx)) );
+}
+/* --Methode-- */
+PIScreenBuffer::~PIScreenBuffer()
+{
+XFreePixmap(PIXDisplay(),xScrbuff); 
+}
+
+/* --Methode-- */
+int PIScreenBuffer::XSize()
 {
 return(mSx);
@@ -1023,5 +1031,5 @@
 
 /* --Methode-- */
-int PIGraphicBuffer::YSize()
+int PIScreenBuffer::YSize()
 {
 return(mSx);
@@ -1029,22 +1037,22 @@
 
 /* --Methode-- */
-void PIGraphicBuffer::CopyFromWdg(PIWdg* wdg, int ox, int oy, int dx, int dy, int x, int y)
-{
-XCopyArea(XtDisplay(wdg->XtWdg()), XtWindow(wdg->XtWdg()), XGrBuffer(), defgc, ox, oy, 
+void PIScreenBuffer::CopyFromWdg(PIWdg* wdg, int ox, int oy, int dx, int dy, int x, int y)
+{
+XCopyArea(XtDisplay(wdg->XtWdg()), XtWindow(wdg->XtWdg()), XScrBuffer(), defgc, ox, oy, 
           (unsigned int)dx, (unsigned int)dy, x, y);
 }
 
 /* --Methode-- */
-void PIGraphicBuffer::CopyToWdg(PIWdg* wdg, int ox, int oy, int dx, int dy, int x, int y)
-{
-XCopyArea(XtDisplay(wdg->XtWdg()), XGrBuffer(), XtWindow(wdg->XtWdg()), defgc, ox, oy, 
+void PIScreenBuffer::CopyToWdg(PIWdg* wdg, int ox, int oy, int dx, int dy, int x, int y)
+{
+XCopyArea(XtDisplay(wdg->XtWdg()), XScrBuffer(), XtWindow(wdg->XtWdg()), defgc, ox, oy, 
           (unsigned int)dx, (unsigned int)dy, x, y);
 }
 
 /* --Methode-- */
-void PIGraphicBuffer::CopyFrom(PIGraphicBuffer* grb, int ox, int oy, int dx, int dy, int x, int y)
-{
-
-XCopyArea(PIXDisplay(), grb->XGrBuffer(), XGrBuffer(), defgc, ox, oy, 
+void PIScreenBuffer::CopyFrom(PIScreenBuffer* grb, int ox, int oy, int dx, int dy, int x, int y)
+{
+
+XCopyArea(PIXDisplay(), grb->XScrBuffer(), XScrBuffer(), defgc, ox, oy, 
           (unsigned int)dx, (unsigned int)dy, x, y);
 }
Index: /trunk/SophyaPI/PI/piwdgx.h
===================================================================
--- /trunk/SophyaPI/PI/piwdgx.h	(revision 179)
+++ /trunk/SophyaPI/PI/piwdgx.h	(revision 180)
@@ -52,4 +52,8 @@
   virtual bool   IsVisible();
 
+//  Fonction qui doit etre appelee pour rafraichir la fenetre 
+  virtual void       	 Refresh();
+
+//  Pour rendre un composant graphique (PIWdg) sensible/insensible 
   virtual void           SetSensitive();
   virtual void           SetUnSensitive();
@@ -97,9 +101,9 @@
 typedef PIWdgX PIWdg;
 
-// -------- La classe PIGraphicBuffer ----------
-class PIGraphicBuffer {
+// -------- La classe PIScreenBuffer ----------
+class PIScreenBuffer {
 public :
-  			PIGraphicBuffer(int sx, int sy);
-  virtual		~PIGraphicBuffer();
+  			PIScreenBuffer(int sx, int sy);
+  virtual		~PIScreenBuffer();
 
   virtual int         	XSize();
@@ -107,10 +111,10 @@
   virtual  void 	CopyFromWdg(PIWdg* wdg, int ox, int oy, int dx, int dy, int x, int y);
   virtual  void 	CopyToWdg(PIWdg* wdg, int ox, int oy, int dx, int dy, int x, int y);
-  virtual  void 	CopyFrom(PIGraphicBuffer* grb, int ox, int oy, int dx, int dy, int x, int y);
+  virtual  void 	CopyFrom(PIScreenBuffer* grb, int ox, int oy, int dx, int dy, int x, int y);
 
 //  Acces au Drawable X 
-  inline Pixmap		XGrBuffer() { return(xGrbuff); }
+  inline Pixmap		XScrBuffer() { return(xScrbuff); }
 protected :
-  Pixmap xGrbuff;
+  Pixmap xScrbuff;
   int mSx, mSy;
 };
Index: /trunk/SophyaPI/PI/pixtbase.cc
===================================================================
--- /trunk/SophyaPI/PI/pixtbase.cc	(revision 179)
+++ /trunk/SophyaPI/PI/pixtbase.cc	(revision 180)
@@ -198,5 +198,5 @@
 {
 
-*cont = FALSE ; 
+*cont = true ; 
 switch (evt->type) {
   case EnterNotify : 
