Attached Files | close.patch [^] (9,162 bytes) 1969-12-31 19:00 [Show Content] [Hide Content]Index: Rendering/vtkXRenderWindowInteractor.cxx
===================================================================
RCS file: /cvsroot/ParaView/ParaView/VTK/Rendering/vtkXRenderWindowInteractor.cxx,v
retrieving revision 1.117
diff -u -3 -p -r1.117 vtkXRenderWindowInteractor.cxx
--- Rendering/vtkXRenderWindowInteractor.cxx 10 Nov 2004 17:58:28 -0000 1.117
+++ Rendering/vtkXRenderWindowInteractor.cxx 4 Feb 2005 21:27:27 -0000
@@ -327,8 +327,13 @@ void vtkXRenderWindowInteractor::Enable(
ExposureMask | StructureNotifyMask |
EnterWindowMask | LeaveWindowMask |
PointerMotionHintMask | PointerMotionMask,
- False,
+ True, // True means we also observe ClientMessage
vtkXRenderWindowInteractorCallback,(XtPointer)this);
+
+ // Setup for capturing the window deletion
+ this->KillAtom = XInternAtom(this->DisplayId,"WM_DELETE_WINDOW",False);
+ XSetWMProtocols(this->DisplayId,this->WindowId,&this->KillAtom,1);
+
this->Enabled = 1;
this->Modified();
@@ -357,7 +362,7 @@ void vtkXRenderWindowInteractor::Disable
ExposureMask | ButtonReleaseMask |
EnterWindowMask | LeaveWindowMask |
PointerMotionHintMask | PointerMotionMask,
- False,vtkXRenderWindowInteractorCallback,(XtPointer)this);
+ True,vtkXRenderWindowInteractorCallback,(XtPointer)this);
this->Enabled = 0;
this->Modified();
@@ -431,6 +436,10 @@ void vtkXRenderWindowInteractorCallback(
{
case Expose:
{
+ if (!me->Enabled)
+ {
+ return;
+ }
XEvent result;
while (XCheckTypedWindowEvent(me->DisplayId,
me->WindowId,
@@ -448,7 +457,7 @@ void vtkXRenderWindowInteractorCallback(
yp = me->Size[1] - xp - 1;
me->SetEventPosition(xp, yp);
// only render if we are currently accepting events
- if (me->GetEnabled())
+ if (me->Enabled)
{
me->InvokeEvent(vtkCommand::ExposeEvent,NULL);
me->GetRenderWindow()->Render();
@@ -459,7 +468,7 @@ void vtkXRenderWindowInteractorCallback(
case MapNotify:
{
// only render if we are currently accepting events
- if (me->GetEnabled() && me->GetRenderWindow()->GetNeverRendered())
+ if (me->Enabled && me->GetRenderWindow()->GetNeverRendered())
{
me->GetRenderWindow()->Render();
}
@@ -484,7 +493,7 @@ void vtkXRenderWindowInteractorCallback(
yp = (reinterpret_cast<XButtonEvent*>(event))->y;
me->SetEventPosition(xp, me->Size[1] - yp - 1);
// only render if we are currently accepting events
- if (me->GetEnabled())
+ if (me->Enabled)
{
me->InvokeEvent(vtkCommand::ConfigureEvent,NULL);
me->GetRenderWindow()->Render();
@@ -651,17 +660,14 @@ void vtkXRenderWindowInteractorCallback(
case MotionNotify:
{
- if (!me->Enabled) return;
- int ctrl = 0;
- if ((reinterpret_cast<XMotionEvent *>(event))->state & ControlMask)
- {
- ctrl = 1;
- }
- int shift = 0;
- if ((reinterpret_cast<XMotionEvent *>(event))->state & ShiftMask)
+ if (!me->Enabled)
{
- shift = 1;
+ return;
}
+ int ctrl =
+ (reinterpret_cast<XButtonEvent *>(event))->state & ControlMask ? 1 : 0;
+ int shift =
+ (reinterpret_cast<XButtonEvent *>(event))->state & ShiftMask ? 1 : 0;
// Note that even though the (x,y) location of the pointer is event structure,
// we must call XQueryPointer for the hints (motion event compression) to
@@ -671,6 +677,15 @@ void vtkXRenderWindowInteractorCallback(
me->InvokeEvent(vtkCommand::MouseMoveEvent, NULL);
}
break;
+
+ case ClientMessage:
+ {
+ if( static_cast<Atom>(event->xclient.data.l[0]) == me->KillAtom )
+ {
+ me->InvokeEvent(vtkCommand::ExitEvent, NULL);
+ }
+ }
+ break;
}
}
Index: Rendering/vtkXRenderWindowInteractor.h
===================================================================
RCS file: /cvsroot/ParaView/ParaView/VTK/Rendering/vtkXRenderWindowInteractor.h,v
retrieving revision 1.71
diff -u -3 -p -r1.71 vtkXRenderWindowInteractor.h
--- Rendering/vtkXRenderWindowInteractor.h 26 Apr 2004 12:55:52 -0000 1.71
+++ Rendering/vtkXRenderWindowInteractor.h 4 Feb 2005 21:27:27 -0000
@@ -168,6 +168,7 @@ protected:
Display *DisplayId;
Window WindowId;
+ Atom KillAtom;
Widget Top;
int OwnTop;
int OwnApp;
Index: Rendering/vtkXRenderWindowTclInteractor.cxx
===================================================================
RCS file: /cvsroot/ParaView/ParaView/VTK/Rendering/vtkXRenderWindowTclInteractor.cxx,v
retrieving revision 1.47
diff -u -3 -p -r1.47 vtkXRenderWindowTclInteractor.cxx
--- Rendering/vtkXRenderWindowTclInteractor.cxx 28 Jan 2004 14:43:57 -0000 1.47
+++ Rendering/vtkXRenderWindowTclInteractor.cxx 4 Feb 2005 21:27:27 -0000
@@ -225,12 +225,16 @@ void vtkXRenderWindowTclInteractor::Enab
// Select the events that we want to respond to
// (Multiple calls to XSelectInput overrides the previous settings)
XSelectInput(this->DisplayId, this->WindowId,
- KeyPressMask | KeyReleaseMask |
+ KeyPressMask | KeyReleaseMask |
ButtonPressMask | ButtonReleaseMask |
- ExposureMask | StructureNotifyMask |
- EnterWindowMask | LeaveWindowMask |
+ ExposureMask | StructureNotifyMask |
+ EnterWindowMask | LeaveWindowMask |
PointerMotionMask | PointerMotionMask);
+ // Setup for capturing the window deletion
+ this->KillAtom = XInternAtom(this->DisplayId,"WM_DELETE_WINDOW",False);
+ XSetWMProtocols(this->DisplayId,this->WindowId,&this->KillAtom,1);
+
this->Enabled = 1;
this->Modified();
@@ -320,13 +324,23 @@ void vtkXRenderWindowTclInteractorCallba
yp = me->Size[1] - xp - 1;
me->SetEventPosition(xp, yp);
// only render if we are currently accepting events
- if (me->GetEnabled())
+ if (me->Enabled)
{
me->InvokeEvent(vtkCommand::ExposeEvent,NULL);
me->GetRenderWindow()->Render();
}
}
break;
+
+ case MapNotify:
+ {
+ // only render if we are currently accepting events
+ if (me->Enabled && me->GetRenderWindow()->GetNeverRendered())
+ {
+ me->GetRenderWindow()->Render();
+ }
+ }
+ break;
case ConfigureNotify:
{
@@ -348,7 +362,7 @@ void vtkXRenderWindowTclInteractorCallba
yp = (reinterpret_cast<XButtonEvent*>(event))->y;
me->SetEventPosition(xp, me->Size[1] - yp - 1);
// only render if we are currently accepting events
- if (me->GetEnabled())
+ if (me->Enabled)
{
me->InvokeEvent(vtkCommand::ConfigureEvent,NULL);
me->GetRenderWindow()->Render();
@@ -486,6 +500,33 @@ void vtkXRenderWindowTclInteractorCallba
}
break;
+ case KeyRelease:
+ {
+ if (!me->Enabled)
+ {
+ return;
+ }
+ int ctrl =
+ (reinterpret_cast<XButtonEvent *>(event))->state & ControlMask ? 1 : 0;
+ int shift =
+ (reinterpret_cast<XButtonEvent *>(event))->state & ShiftMask ? 1 : 0;
+ KeySym ks;
+ static char buffer[20];
+ buffer[0] = '\0';
+ XLookupString(reinterpret_cast<XKeyEvent *>(event),buffer, 20, &ks,NULL);
+ xp = (reinterpret_cast<XKeyEvent *>(event))->x;
+ yp = (reinterpret_cast<XKeyEvent *>(event))->y;
+ me->SetEventInformationFlipY(xp,
+ yp,
+ ctrl,
+ shift,
+ buffer[0],
+ 1,
+ XKeysymToString(ks));
+ me->InvokeEvent(vtkCommand::KeyReleaseEvent, NULL);
+ }
+ break;
+
case MotionNotify:
{
if (!me->Enabled)
@@ -505,6 +546,15 @@ void vtkXRenderWindowTclInteractorCallba
me->InvokeEvent(vtkCommand::MouseMoveEvent, NULL);
}
break;
+
+ case ClientMessage:
+ {
+ if( static_cast<Atom>(event->xclient.data.l[0]) == me->KillAtom )
+ {
+ me->InvokeEvent(vtkCommand::ExitEvent, NULL);
+ }
+ }
+ break;
}
}
Index: Rendering/vtkXRenderWindowTclInteractor.h
===================================================================
RCS file: /cvsroot/ParaView/ParaView/VTK/Rendering/vtkXRenderWindowTclInteractor.h,v
retrieving revision 1.24
diff -u -3 -p -r1.24 vtkXRenderWindowTclInteractor.h
--- Rendering/vtkXRenderWindowTclInteractor.h 14 Nov 2003 20:43:38 -0000 1.24
+++ Rendering/vtkXRenderWindowTclInteractor.h 4 Feb 2005 21:27:27 -0000
@@ -160,6 +160,7 @@ protected:
Display *DisplayId;
Window WindowId;
+ Atom KillAtom;
Widget top;
Widget oldTop;
XtAppContext App;
|