<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.comp.graphics.opensg.devel">
    <title>gmane.comp.graphics.opensg.devel</title>
    <link>http://blog.gmane.org/gmane.comp.graphics.opensg.devel</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/132"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/128"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/126"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/123"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/122"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/116"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/114"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/113"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/110"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/76"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/68"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/64"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/63"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/56"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/47"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/46"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/43"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/37"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/32"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/31"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/132">
    <title>800+ daily transactions on git repo?</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/132</link>
    <description>&lt;pre&gt;Hi all,

according to the sourceforge statistics 
(&amp;lt;http://sourceforge.net/projects/opensg/stats/scm?repo=GitRepository&amp;amp;dates=2011-09-16%20to%202011-11-16&amp;gt;) 
our git repo gets about 800 anonymous read only transactions each day.
Popularity is nice, but this looks more like an out of control script to 
me...
Any ideas?

Cheers,
Carsten

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure 
contains a definitive record of customers, application performance, 
security threats, fraudulent activity, and more. Splunk takes this 
data and makes sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-novd2d
&lt;/pre&gt;</description>
    <dc:creator>Carsten Neumann</dc:creator>
    <dc:date>2011-11-17T16:31:16</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/128">
    <title>Make Node::_sfVolume non-internal field?</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/128</link>
    <description>&lt;pre&gt;Hello all,

I'd like to make Node::_sfVolume a non-internal field and modify the OSB 
loader/writer to write it out in certain cases (see attached patch).

If a volume is marked as static or infinite, written to OSB and read 
back in that information is lost. I see this when loading from OGRE 
.mesh files (which can contain an explicit volume in case the mesh is 
animated to contain all motions the mesh goes through) storing to OSB 
and loading that back in.

Luckily the OSB format is robust enough that we don't have to bump the 
version number - old versions of OpenSG load OSBs written by ones with 
the patch applied and the other way around.

Any objections/comments?

Cheers,
Carsten
diff --git a/Source/Base/FieldContainer/Node/OSGNode.cpp b/Source/Base/FieldContainer/Node/OSGNode.cpp
index f132e40..c505e50 100644
--- a/Source/Base/FieldContainer/Node/OSGNode.cpp
+++ b/Source/Base/FieldContainer/Node/OSGNode.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -106,7 +106,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void Node::classDescInserter(TypeObject &amp;amp;oType)
         "volume",
         "Bounding volume for the node.",
         OSG_RC_FIELD_DESC(Node::Volume),
-        true,
+        false,
         Field::SFDefaultFlags,
         static_cast&amp;lt;FieldEditMethodSig&amp;gt;(&amp;amp;Node::editHandleVolume),
         static_cast&amp;lt;FieldGetMethodSig &amp;gt;(&amp;amp;Node::getHandleVolume ));
diff --git a/Source/System/FileIO/OSB/OSGOSBNodeElement.cpp b/Source/System/FileIO/OSB/OSGOSBNodeElement.cpp
index 730c2f1..009cbcf 100644
--- a/Source/System/FileIO/OSB/OSGOSBNodeElement.cpp
+++ b/Source/System/FileIO/OSB/OSGOSBNodeElement.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -97,7 +97,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; OSBNodeElement::read(const std::string &amp;amp;typeName)
     NodeUnrecPtr node = Node::create();
 
     setContainer(node);
-    readFields("'volume'", "");
+    readFields("", "");
 }
 
 void
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -132,5 +132,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; OSBNodeElement::write(void)
     wh-&amp;gt;putValue(OSBCommonElement::FCPtrNode);
     wh-&amp;gt;putValue(getVersion()               );
 
-    writeFields("'volume'", true);
+    Node*       node       = dynamic_cast&amp;lt;Node*&amp;gt;(getContainer());
+    std::string skipFields = "";
+
+    if(node-&amp;gt;getVolume().isStatic  () == false &amp;amp;&amp;amp;
+       node-&amp;gt;getVolume().isInfinite() == false   )
+    {
+        skipFields += "'volume'";
+    }
+
+    writeFields(skipFields, true);
 }
------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security 
threats, fraudulent activity, and more. Splunk takes this data and makes 
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2&lt;/pre&gt;</description>
    <dc:creator>Carsten Neumann</dc:creator>
    <dc:date>2011-07-01T17:35:39</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/126">
    <title>Using OpenSG/Support</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/126</link>
    <description>&lt;pre&gt;
Hi Gerrit,

I was trying to set up my Windows box using the CMakeFiles under /Support/, but 
I can't get that to work.

I started with ZLib, but the structure that the Support/zlib/CMakeLsits expects 
is not the one found in the normal download 
(http://prdownloads.sourceforge.net/libpng/zlib-1.2.5.tar.gz?download) (no 
source/ dir).

Is that an artifact of you using the php downloads originally, or is that not 
how this is supposed to be used?

Thanks

Dirk



------------------------------------------------------------------------------
EditLive Enterprise is the world's most technically advanced content
authoring tool. Experience the power of Track Changes, Inline Image
Editing and ensure content is compliant with Accessibility Checking.
http://p.sf.net/sfu/ephox-dev2dev
&lt;/pre&gt;</description>
    <dc:creator>Dirk Reiners</dc:creator>
    <dc:date>2011-06-21T22:42:03</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/123">
    <title>[PATCH] Use correct ChangedOrigin value duringapply/remote sync</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/123</link>
    <description>&lt;pre&gt;Hello Gerrit, all,

the attached patch changes changedFunctors to receive the change origin 
as an additional argument - so this may break applications that register 
changed functors.
It also makes sure that during a ChangeList::apply or a 
RemoteAspect::receiveSync the changed functions of containers are called 
with ChangedOrigin::Sync instead of the normal ChangedOrigin::Commit.

The motivation for this is that when using GPU skinned characters in a 
cluster where the client renders locally as well, the shader variables 
already have the correct values set, but GPUSkinningAlgorithm marks them 
invalid because it receives a changed notification from the Skeleton. 
Apart from unnecessarily recomputing the values, this produces lots of 
warnings from ShaderVariableAccess::updateSVariable, because the 
variable names are not in the map on the remote side (perhaps that's a 
bug too?).

Comments?

Cheers,
Carsten
diff --git a/Source/Base/Base/OSGContainerForwards.h b/Source/Base/Base/OSGContainerForwards.h
index 81d8666..b87838c 100644
--- a/Source/Base/Base/OSGContainerForwards.h
+++ b/Source/Base/Base/OSGContainerForwards.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -149,7 +149,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class FieldContainerFactoryBase;
 typedef SingletonHolder&amp;lt;FieldContainerFactoryBase&amp;gt; FieldContainerFactory;
 
 typedef boost::function&amp;lt;
-              void (FieldContainer *, ConstFieldMaskArg )&amp;gt; ChangedFunctor;
+    void (FieldContainer *, ConstFieldMaskArg, UInt32)&amp;gt; ChangedFunctor;
 
 typedef boost::function&amp;lt;void (DrawEnv *)&amp;gt; RenderFunctor;
 
diff --git a/Source/Base/FieldContainer/Base/OSGChangeList.cpp b/Source/Base/FieldContainer/Base/OSGChangeList.cpp
index a549ddf..0eb4ad0 100644
--- a/Source/Base/FieldContainer/Base/OSGChangeList.cpp
+++ b/Source/Base/FieldContainer/Base/OSGChangeList.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -66,7 +66,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; OSG_BEGIN_NAMESPACE
 /* ContainerChangeEntry                                                    */
 
 
-void ContainerChangeEntry::commitChanges(void)
+void ContainerChangeEntry::commitChanges(UInt32 origin)
 {
 #ifdef OSG_ENABLE_VALGRIND_CHECKS
     VALGRIND_CHECK_VALUE_IS_DEFINED(uiContainerId);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -93,7 +93,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void ContainerChangeEntry::commitChanges(void)
            whichField            |= *bvUncommittedChanges;
            *bvUncommittedChanges  = TypeTraits&amp;lt;BitVector&amp;gt;::BitsClear;
 
-           pTmp-&amp;gt;changed(tmpChanges, ChangedOrigin::Commit, 0);
+           pTmp-&amp;gt;changed(tmpChanges, origin, 0);
         }
     }
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -385,9 +385,20 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void ChangeList::dump(      UInt32    uiIndent,
             fprintf(stderr, " ");
         }
 
-        fprintf(stderr, "CE : %u %u\n",
+        FieldContainer *pTmp =
+            FieldContainerFactory::the()-&amp;gt;getContainer((*cIt)-&amp;gt;uiContainerId);
+
+        std::string szTmp("Unknown");
+
+        if(pTmp != NULL)
+        {
+            szTmp.assign(pTmp-&amp;gt;getType().getName());
+        }
+
+        fprintf(stderr, "CE : %u %u | %s\n",
                 (*cIt)-&amp;gt;uiEntryDesc,
-                (*cIt)-&amp;gt;uiContainerId);
+                (*cIt)-&amp;gt;uiContainerId,
+                szTmp.c_str());
 
         ++cIt;
     }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -411,7 +422,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void ChangeList::dump(      UInt32    uiIndent,
 
         if(pTmp != NULL)
         {
-            szTmp.assign(pTmp-&amp;gt;getType().getCName());
+            szTmp.assign(pTmp-&amp;gt;getType().getName());
         }
 
         BitVector tmpChanges = 0xDEADBEEF;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -711,7 +722,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void ChangeList::clearPool(void)
 /*-------------------------------------------------------------------------*/
 /* Helper                                                                  */
 
-void ChangeList::doCommitChanges(void)
+void ChangeList::doCommitChanges(UInt32 origin)
 {
     if(_workStore.empty() == false)
     {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -740,7 +751,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void ChangeList::doCommitChanges(void)
 
             if((*changesIt)-&amp;gt;uiEntryDesc == ContainerChangeEntry::Change)
             {
-                (*changesIt)-&amp;gt;commitChanges();
+                (*changesIt)-&amp;gt;commitChanges(origin);
             }
 
             ++changesIt;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -968,9 +979,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void ChangeList::doApply(bool bClear)
         ++cIt;
     }
 
-    commitDelayedSubRefs();
+    pDstCL-&amp;gt;commitChangesAndClear(ChangedOrigin::Sync);
+    pDstCL-&amp;gt;commitDelayedSubRefs ();
 
-    pDstCL-&amp;gt;commitDelayedSubRefs();
 #endif
 }
 
diff --git a/Source/Base/FieldContainer/Base/OSGChangeList.h b/Source/Base/FieldContainer/Base/OSGChangeList.h
index 740b33f..18c7f8b 100644
--- a/Source/Base/FieldContainer/Base/OSGChangeList.h
+++ b/Source/Base/FieldContainer/Base/OSGChangeList.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -43,6 +43,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #endif
 
 #include "OSGBaseTypes.h"
+#include "OSGContainerBase.h"
 #include "OSGLog.h"
 #include "OSGMemoryObject.h"
 #include "OSGThread.h"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -91,7 +92,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; struct OSG_BASE_DLLMAPPING ContainerChangeEntry
     ContainerChangeEntry(void);
 
     void clear        (ChangeList *pListParent);
-    void commitChanges(void                   );
+    void commitChanges(UInt32      origin     );
     void release      (void                   );
 };
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -136,8 +137,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class OSG_BASE_DLLMAPPING ChangeList : public MemoryObject
     /*! \name Commit                                                       */
     /*! \{                                                                 */
 
-    void commitChanges        (void);
-    void commitChangesAndClear(void);
+    void commitChanges        (UInt32 origin = ChangedOrigin::Commit);
+    void commitChangesAndClear(UInt32 origin = ChangedOrigin::Commit);
 
     /*! \}                                                                 */
     /*---------------------------------------------------------------------*/
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -299,7 +300,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class OSG_BASE_DLLMAPPING ChangeList : public MemoryObject
     /*! \name Helper                                                       */
     /*! \{                                                                 */
 
-    void doCommitChanges(void           );
+    void doCommitChanges(UInt32 origin  );
     void doApply        (bool   bClear  );
     void doClear        (void           );
 
diff --git a/Source/Base/FieldContainer/Base/OSGChangeList.inl b/Source/Base/FieldContainer/Base/OSGChangeList.inl
index c56451a..3b06e0b 100644
--- a/Source/Base/FieldContainer/Base/OSGChangeList.inl
+++ b/Source/Base/FieldContainer/Base/OSGChangeList.inl
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -67,16 +67,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void ContainerChangeEntry::clear(ChangeList *pListParent)
 /* Commit                                                                  */
 
 inline
-void ChangeList::commitChanges(void)
+void ChangeList::commitChanges(UInt32 origin)
 {
-    doCommitChanges();
+    doCommitChanges(origin);
 }
 
 inline
-void ChangeList::commitChangesAndClear(void)
+void ChangeList::commitChangesAndClear(UInt32 origin)
 {
-    doCommitChanges();
-    clear          ();
+    doCommitChanges(origin);
+    clear          (      );
 }
 
 /*-------------------------------------------------------------------------*/
diff --git a/Source/Base/FieldContainer/Base/OSGFieldContainer.cpp b/Source/Base/FieldContainer/Base/OSGFieldContainer.cpp
index fa039ad..9fdb5bc 100644
--- a/Source/Base/FieldContainer/Base/OSGFieldContainer.cpp
+++ b/Source/Base/FieldContainer/Base/OSGFieldContainer.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -318,7 +318,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; bool FieldContainer::deregister(UInt32 uiContainerId)
 
 void FieldContainer::resolveLinks(void)
 {
-    callChangedFunctors(0);
+    callChangedFunctors(0, ChangedOrigin::External);
 }
 
 FieldContainer *FieldContainer::findNamedComponent(const Char8 *)
diff --git a/Source/Base/FieldContainer/Base/OSGFieldContainer.h b/Source/Base/FieldContainer/Base/OSGFieldContainer.h
index 9d5f279..5006eba 100644
--- a/Source/Base/FieldContainer/Base/OSGFieldContainer.h
+++ b/Source/Base/FieldContainer/Base/OSGFieldContainer.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -155,9 +155,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class FieldContainer : public ReflexiveContainer
 
     virtual void changed            (ConstFieldMaskArg whichField,
                                      UInt32            origin,
-                                     BitVector         details);
+                                     BitVector         details    );
 
-            void callChangedFunctors(ConstFieldMaskArg whichField );
+            void callChangedFunctors(ConstFieldMaskArg whichField,
+                                     UInt32            origin     );
 
     /*! \}                                                                 */
     /*---------------------------------------------------------------------*/
diff --git a/Source/Base/FieldContainer/Base/OSGFieldContainer.inl b/Source/Base/FieldContainer/Base/OSGFieldContainer.inl
index 6195569..8e9bed8 100644
--- a/Source/Base/FieldContainer/Base/OSGFieldContainer.inl
+++ b/Source/Base/FieldContainer/Base/OSGFieldContainer.inl
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -63,14 +63,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; UInt16 FieldContainer::getClassGroupId(void)
 
 inline
 void FieldContainer::changed(ConstFieldMaskArg whichField, 
-                             UInt32            ,
-                             BitVector         )
+                             UInt32            origin,
+                             BitVector         details)
 {
-    callChangedFunctors(whichField);
+    callChangedFunctors(whichField, origin);
 }
 
 inline
-void FieldContainer::callChangedFunctors(ConstFieldMaskArg whichField)
+void FieldContainer::callChangedFunctors(ConstFieldMaskArg whichField,
+                                         UInt32            origin     )
 {
     MFChangedFunctorCallback::iterator       cfIt = _mfChangedFunctors.begin();
     MFChangedFunctorCallback::const_iterator cfEnd= _mfChangedFunctors.end();
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -78,7 +79,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void FieldContainer::callChangedFunctors(ConstFieldMaskArg whichField)
     for(; cfIt != cfEnd; ++cfIt)
     {
         if(cfIt-&amp;gt;_func)
-            (cfIt-&amp;gt;_func)(this, whichField);
+            (cfIt-&amp;gt;_func)(this, whichField, origin);
     }
 }
 
diff --git a/Source/Base/FieldContainer/Base/testChangedCallback.cpp b/Source/Base/FieldContainer/Base/testChangedCallback.cpp
index d6d7765..0c3668b 100644
--- a/Source/Base/FieldContainer/Base/testChangedCallback.cpp
+++ b/Source/Base/FieldContainer/Base/testChangedCallback.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -9,15 +9,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class Foo
 {
   public:
 
-    void testCB(OSG::FieldContainer *pObj, OSG::BitVector whichField)
+    void testCB(OSG::FieldContainer *pObj, OSG::BitVector whichField, OSG::UInt32 origin)
     {
-        fprintf(stderr, "Foo::testCB %"PRIx64"\n", whichField);
+        fprintf(stderr, "Foo::testCB %"PRIx64" origin %u\n", whichField, origin);
     }
 };
 
-void testCB(OSG::FieldContainer *pObj, OSG::BitVector whichField)
+void testCB(OSG::FieldContainer *pObj, OSG::BitVector whichField, OSG::UInt32 origin)
 {
-    fprintf(stderr, "testCB %"PRIx64"\n", whichField);
+    fprintf(stderr, "testCB %"PRIx64" origin %u\n", whichField, origin);
 }
 
 int main (int argc, char **argv)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -30,7 +30,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int main (int argc, char **argv)
 
     OSG::NodeRecPtr pNode = OSG::Node::create();
 
-    OSG::ChangedFunctor objCB = boost::bind(&amp;amp;Foo::testCB, &amp;amp;foo, _1, _2);
+    OSG::ChangedFunctor objCB = boost::bind(&amp;amp;Foo::testCB, &amp;amp;foo, _1, _2, _3);
 
     pNode-&amp;gt;addChangedFunctor(testCB, "");
     pNode-&amp;gt;addChangedFunctor(objCB, "");
diff --git a/Source/Base/FieldContainer/Connector/OSGConnectorAttachment.cpp b/Source/Base/FieldContainer/Connector/OSGConnectorAttachment.cpp
index 8fe1974..101081f 100644
--- a/Source/Base/FieldContainer/Connector/OSGConnectorAttachment.cpp
+++ b/Source/Base/FieldContainer/Connector/OSGConnectorAttachment.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -124,8 +124,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void ConnectorAttachment::addConnection (BasicFieldConnector *pConnector)
     }
 }
 
-void ConnectorAttachment::processChanged(FieldContainer      *pObj, 
-                                         BitVector            whichField)
+void ConnectorAttachment::processChanged(FieldContainer *pObj,
+                                         BitVector       whichField,
+                                         UInt32          origin     )
 {
     ConnectionStore::const_iterator cIt  = _vConnections.begin();
     ConnectionStore::const_iterator cEnd = _vConnections.end  ();
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -141,8 +142,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void ConnectorAttachment::processChanged(FieldContainer      *pObj,
     }
 }
 
-void ConnectorAttachment::targetDestroyed(FieldContainer      *pObj, 
-                                          BitVector            whichField)
+void ConnectorAttachment::targetDestroyed(FieldContainer *pObj,
+                                          BitVector       whichField,
+                                          UInt32          origin     )
 {
     if(whichField == 0x0000)
     {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -233,7 +235,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void ConnectorAttachment::removeConnections(      BitVector       bSrcMask,
                 boost::bind(&amp;amp;ConnectorAttachment::targetDestroyed, 
                             this, 
                             _1, 
-                            _2));
+                            _2,
+                            _3));
         }
 
         ++ccIt;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -272,7 +275,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; bool ConnectorAttachment::unlinkParent(FieldContainer * const pParent,
         boost::bind(&amp;amp;ConnectorAttachment::processChanged, 
                     this, 
                     _1, 
-                    _2));
+                    _2,
+                    _3));
     
     return Inherited::unlinkParent(pParent, parentFieldId);
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -287,7 +291,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void ConnectorAttachment::resolveLinks(void)
             boost::bind(&amp;amp;ConnectorAttachment::targetDestroyed, 
                         this, 
                         _1, 
-                        _2));
+                        _2,
+                        _3));
 
         delete _vConnections[i];
     }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -332,7 +337,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void addConnector(OSG::AttachmentContainer *pContainer,
             boost::bind(&amp;amp;ConnectorAttachment::processChanged, 
                         pCA.get(), 
                         _1, 
-                        _2),
+                        _2,
+                        _3),
             "");
 
         pContainer-&amp;gt;addAttachment(pCA);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -356,7 +362,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void addConnector(OSG::AttachmentContainer *pContainer,
             boost::bind(&amp;amp;ConnectorAttachment::targetDestroyed, 
                         pCA.get(), 
                         _1, 
-                        _2),
+                        _2,
+                        _3),
             "");
     }
 
diff --git a/Source/Base/FieldContainer/Connector/OSGConnectorAttachment.h b/Source/Base/FieldContainer/Connector/OSGConnectorAttachment.h
index a888d1b..ff34d8c 100644
--- a/Source/Base/FieldContainer/Connector/OSGConnectorAttachment.h
+++ b/Source/Base/FieldContainer/Connector/OSGConnectorAttachment.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -78,13 +78,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class OSG_BASE_DLLMAPPING ConnectorAttachment :
     /*! \name                     Output                                   */
     /*! \{                                                                 */
 
-    void addConnection  (BasicFieldConnector *pConnector);
+    void addConnection  (BasicFieldConnector *pConnector );
 
     void processChanged (FieldContainer      *pObj, 
-                         BitVector            whichField);
+                         BitVector            whichField,
+                         UInt32               origin     );
 
     void targetDestroyed(FieldContainer      *pObj, 
-                         BitVector            whichField);
+                         BitVector            whichField,
+                         UInt32               origin     );
 
     /*! \}                                                                 */
     /*---------------------------------------------------------------------*/
diff --git a/Source/Contrib/Manipulators/testManipulatorsPivot.cpp b/Source/Contrib/Manipulators/testManipulatorsPivot.cpp
index 8a5e851..e6bea1c 100644
--- a/Source/Contrib/Manipulators/testManipulatorsPivot.cpp
+++ b/Source/Contrib/Manipulators/testManipulatorsPivot.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -333,13 +333,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; namespace
         {
             if (!use_changed_functor_) {
                 xformTranslationN-&amp;gt;getCore()-&amp;gt;
-                    addChangedFunctor(boost::bind(&amp;amp;object_type::changed_cb, this, xformTranslationN, _1, _2),
+                    addChangedFunctor(boost::bind(&amp;amp;object_type::changed_cb, this, xformTranslationN, _1, _2, _3),
                                       "xform_translation_changed_cb");
                 xformRotationN-&amp;gt;getCore()-&amp;gt;
-                    addChangedFunctor(boost::bind(&amp;amp;object_type::changed_cb, this, xformRotationN,    _1, _2),
+                    addChangedFunctor(boost::bind(&amp;amp;object_type::changed_cb, this, xformRotationN,    _1, _2, _3),
                                       "xform_rotation_changed_cb");
                 xformScaleN-&amp;gt;getCore()-&amp;gt;
-                    addChangedFunctor(boost::bind(&amp;amp;object_type::changed_cb, this, xformScaleN,       _1, _2),
+                    addChangedFunctor(boost::bind(&amp;amp;object_type::changed_cb, this, xformScaleN,       _1, _2, _3),
                                       "xform_scale_changed_cb");
             } else {
                 xformTranslationN-&amp;gt;getCore()-&amp;gt;clearChangedFunctors();
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -397,7 +397,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; namespace
         bool use_changed_functor_;
 
         void
-        changed_cb(OSG::NodeRefPtr a, OSG::FieldContainer* fc, OSG::BitVector fm)
+        changed_cb(OSG::NodeRefPtr a, OSG::FieldContainer* fc, OSG::BitVector fm, OSG::UInt32 origin)
         {
             std::cout &amp;lt;&amp;lt; "object_type::changed_cb(" &amp;lt;&amp;lt; OSG::getName(a) &amp;lt;&amp;lt; ")" &amp;lt;&amp;lt; std::endl;
 
diff --git a/Source/System/Cluster/Base/OSGRemoteAspect.cpp b/Source/System/Cluster/Base/OSGRemoteAspect.cpp
index de953fc..b5ab3c1 100644
--- a/Source/System/Cluster/Base/OSGRemoteAspect.cpp
+++ b/Source/System/Cluster/Base/OSGRemoteAspect.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -257,11 +257,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void RemoteAspect::receiveSync(Connection &amp;amp;connection, bool applyToChangelist)
 
     if(applyToChangelist)
     {
-        commitChanges();
+        Thread::getCurrentChangeList()-&amp;gt;commitChanges(ChangedOrigin::Sync);
     }
     else
     {
-        commitChangesAndClear();
+        Thread::getCurrentChangeList()-&amp;gt;commitChangesAndClear(ChangedOrigin::Sync);
     }
 
     // unregister mapper into factory
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -547,9 +547,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void RemoteAspect::receiveNewType(Connection                &amp;amp;con,
 
 #ifndef OSG_REMOTE_ASPECT_SILENT
     SLOG &amp;lt;&amp;lt; "Receive NEWTYPE: type name '" &amp;lt;&amp;lt; typeName
-         &amp;lt;&amp;lt; "' remote type '"              &amp;lt;&amp;lt; remoteTypeId
-         &amp;lt;&amp;lt; "' local type '"               &amp;lt;&amp;lt; localTypeId
-         &amp;lt;&amp;lt; "'\n";
+         &amp;lt;&amp;lt; "' type id (r/l) '" &amp;lt;&amp;lt; remoteTypeId
+         &amp;lt;&amp;lt; "/" &amp;lt;&amp;lt; localTypeId &amp;lt;&amp;lt; "'\n";
 #endif
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -590,10 +589,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void RemoteAspect::receiveCreated(Connection                &amp;amp;con,
             newContainers.push_back(fcPtr);
 
 #ifndef OSG_REMOTE_ASPECT_SILENT
-            SLOG &amp;lt;&amp;lt; "Receive CREATED: remote type '" &amp;lt;&amp;lt; remoteTypeId
-                 &amp;lt;&amp;lt; "' local type '"                 &amp;lt;&amp;lt; localTypeId
-                 &amp;lt;&amp;lt; "' remote id '"                  &amp;lt;&amp;lt; remoteId
-                 &amp;lt;&amp;lt; "' local id '"
+            SLOG &amp;lt;&amp;lt; "Receive CREATED: type (r/l) '" &amp;lt;&amp;lt; remoteTypeId
+                 &amp;lt;&amp;lt; "/" &amp;lt;&amp;lt; localTypeId
+                 &amp;lt;&amp;lt; "' id (r/l) '" &amp;lt;&amp;lt; remoteId &amp;lt;&amp;lt; "/"
                  &amp;lt;&amp;lt; (fcPtr  != NULL ? fcPtr-&amp;gt;getId()     : 0)
                  &amp;lt;&amp;lt; "' type name '"
                  &amp;lt;&amp;lt; (fcType != NULL ? fcType-&amp;gt;getName() : "")
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -602,7 +600,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void RemoteAspect::receiveCreated(Connection                &amp;amp;con,
         }
         else
         {
-            SWARNING &amp;lt;&amp;lt; "Already created a local container for "
+            SWARNING &amp;lt;&amp;lt; "Already created a local container ("
+                     &amp;lt;&amp;lt; _localFC[fullRemoteId] &amp;lt;&amp;lt; ") for "
                      &amp;lt;&amp;lt; "remote container id '" &amp;lt;&amp;lt; remoteId
                      &amp;lt;&amp;lt; "'" &amp;lt;&amp;lt; std::endl;
         }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -633,11 +632,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void RemoteAspect::receiveChanged(Connection                &amp;amp;con,
         fcPtr = fcFactory-&amp;gt;getContainer(localId);
 
 #ifndef OSG_REMOTE_ASPECT_SILENT
-        SLOG &amp;lt;&amp;lt; "Receive CHANGED: remote id '" &amp;lt;&amp;lt; remoteId
-             &amp;lt;&amp;lt; "' local id '"                 &amp;lt;&amp;lt; localId
+        SLOG &amp;lt;&amp;lt; "Receive CHANGED: id (r/l) '" &amp;lt;&amp;lt; remoteId
+             &amp;lt;&amp;lt; "/" &amp;lt;&amp;lt; localId
              &amp;lt;&amp;lt; "' mask '0x"
              &amp;lt;&amp;lt; std::hex &amp;lt;&amp;lt; fieldMask &amp;lt;&amp;lt; std::dec
-             &amp;lt;&amp;lt; "' len '"                      &amp;lt;&amp;lt; len
+             &amp;lt;&amp;lt; "' len '" &amp;lt;&amp;lt; len
              &amp;lt;&amp;lt; "' type name '"
              &amp;lt;&amp;lt; (fcPtr != NULL ? fcPtr-&amp;gt;getType().getName() : "")
              &amp;lt;&amp;lt; "'\n";
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -690,9 +689,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void RemoteAspect::receiveAddRefed(Connection                &amp;amp;con,
         fcPtr = fcFactory-&amp;gt;getContainer(localId);
 
 #ifndef OSG_REMOTE_ASPECT_SILENT
-        SLOG &amp;lt;&amp;lt; "Receive ADDREFED: remote id '" &amp;lt;&amp;lt; remoteId
-             &amp;lt;&amp;lt; "' local id '"                  &amp;lt;&amp;lt; localId
-             &amp;lt;&amp;lt; "' type name '"
+        SLOG &amp;lt;&amp;lt; "Receive ADDREFED: id (r/l) '" &amp;lt;&amp;lt; remoteId
+             &amp;lt;&amp;lt; "/" &amp;lt;&amp;lt; localId &amp;lt;&amp;lt; "' type name '"
              &amp;lt;&amp;lt; (fcPtr != NULL ? fcPtr-&amp;gt;getType().getName() : "")
              &amp;lt;&amp;lt; "'\n";
 #endif
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -728,9 +726,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void RemoteAspect::receiveSubRefed(Connection                &amp;amp;con,
         fcPtr = fcFactory-&amp;gt;getContainer(localId);
 
 #ifndef OSG_REMOTE_ASPECT_SILENT
-        SLOG &amp;lt;&amp;lt; "Receive SUBREFED: remote id '" &amp;lt;&amp;lt; remoteId
-             &amp;lt;&amp;lt; "' local id '"                  &amp;lt;&amp;lt; localId
-             &amp;lt;&amp;lt; "' type name '"
+        SLOG &amp;lt;&amp;lt; "Receive SUBREFED: id (r/l) '" &amp;lt;&amp;lt; remoteId
+             &amp;lt;&amp;lt; "/" &amp;lt;&amp;lt; localId &amp;lt;&amp;lt; "' type name '"
              &amp;lt;&amp;lt; (fcPtr != NULL ? fcPtr-&amp;gt;getType().getName() : "")
              &amp;lt;&amp;lt; "'\n";
 #endif
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -762,9 +759,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void RemoteAspect::receiveIdMapping(Connection &amp;amp;con)
     con.getValue(localId);
 
 #ifndef OSG_REMOTE_ASPECT_SILENT
-    SLOG &amp;lt;&amp;lt; "Receive IDMAPPING: remote id '" &amp;lt;&amp;lt; remoteId
-         &amp;lt;&amp;lt; "' local id '"                   &amp;lt;&amp;lt; localId
-         &amp;lt;&amp;lt; "' local aspect '"               &amp;lt;&amp;lt; localAspect
+    SLOG &amp;lt;&amp;lt; "Receive IDMAPPING: id (r/l) '" &amp;lt;&amp;lt; remoteId
+         &amp;lt;&amp;lt; "/" &amp;lt;&amp;lt; localId
+         &amp;lt;&amp;lt; "' local aspect '"              &amp;lt;&amp;lt; localAspect
          &amp;lt;&amp;lt; "'\n";
 #endif
 
diff --git a/Source/System/Dynamics/Animation/OSGAnimation.cpp b/Source/System/Dynamics/Animation/OSGAnimation.cpp
index b7ca5cc..7122c47 100644
--- a/Source/System/Dynamics/Animation/OSGAnimation.cpp
+++ b/Source/System/Dynamics/Animation/OSGAnimation.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -132,7 +132,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void Animation::setTimeSensor(AnimTimeSensor *value)
     if(_sfTimeSensor.getValue() != NULL)
     {
         _sfTimeSensor.getValue()-&amp;gt;subChangedFunctor(
-            boost::bind(&amp;amp;Animation::timeSensorChanged, this, _1, _2));
+            boost::bind(&amp;amp;Animation::timeSensorChanged, this, _1, _2, _3));
     }
 
     Inherited::setTimeSensor(value);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -141,7 +141,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void Animation::setTimeSensor(AnimTimeSensor *value)
     {
         _sfTimeSensor.getValue()-&amp;gt;setEnabled       (false               );
         _sfTimeSensor.getValue()-&amp;gt;addChangedFunctor(
-            boost::bind(&amp;amp;Animation::timeSensorChanged, this, _1, _2), "");
+            boost::bind(&amp;amp;Animation::timeSensorChanged, this, _1, _2, _3), "");
     }
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -218,7 +218,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void Animation::stop(void)
     ts-&amp;gt;setEnabled(false);
 }
 
-void Animation::timeSensorChanged(FieldContainer *fc, BitVector whichField)
+void Animation::timeSensorChanged(FieldContainer *fc,
+                                  BitVector       whichField,
+                                  UInt32          origin     )
 {
     AnimTimeSensor *ts = _sfTimeSensor.getValue();
 
diff --git a/Source/System/Dynamics/Animation/OSGAnimation.h b/Source/System/Dynamics/Animation/OSGAnimation.h
index b9ec3f3..8ae0e3f 100644
--- a/Source/System/Dynamics/Animation/OSGAnimation.h
+++ b/Source/System/Dynamics/Animation/OSGAnimation.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -141,7 +141,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class OSG_DYNAMICS_DLLMAPPING Animation : public AnimationBase
     /*! \{                                                                 */
 
     void timeSensorChanged(FieldContainer *fc,
-                           BitVector       whichField);
+                           BitVector       whichField,
+                           UInt32          origin     );
 
     void calcLength(void) const;
 
diff --git a/Source/System/Dynamics/Skeleton/OSGGPUSkinningAlgorithm.cpp b/Source/System/Dynamics/Skeleton/OSGGPUSkinningAlgorithm.cpp
index f286a90..1601e61 100644
--- a/Source/System/Dynamics/Skeleton/OSGGPUSkinningAlgorithm.cpp
+++ b/Source/System/Dynamics/Skeleton/OSGGPUSkinningAlgorithm.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -305,12 +305,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void GPUSkinningAlgorithm::changed(ConstFieldMaskArg whichField,
     {
         if(_sfSkeleton.getValue()-&amp;gt;hasChangedFunctor(boost::bind(
                &amp;amp;GPUSkinningAlgorithm::skeletonChanged,
-               this, _1, _2                                )) == false)
+               this, _1, _2, _3                            )) == false)
         {
             _sfSkeleton.getValue()-&amp;gt;addChangedFunctor(boost::bind(
                 &amp;amp;GPUSkinningAlgorithm::skeletonChanged,
-                this, _1, _2                                ),
-                "GPUSkinningAlgorithm::skeletonChanged"  );
+                this, _1, _2, _3                           ),
+                "GPUSkinningAlgorithm::skeletonChanged");
         }
     }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -325,9 +325,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void GPUSkinningAlgorithm::dump(      UInt32    ,
 
 void
 GPUSkinningAlgorithm::skeletonChanged(FieldContainer    *fc,
-                                      ConstFieldMaskArg  whichField)
+                                      ConstFieldMaskArg  whichField,
+                                      UInt32             origin     )
 {
-    if(((Skeleton::JointMatricesFieldMask      |
+    // if the skeleton was changed by a sync we don't invalidate
+    // the data - it either is updated by the same sync or
+    // the sync marks it as invalid.
+
+    if(origin != ChangedOrigin::Sync  &amp;amp;&amp;amp;
+       ((Skeleton::JointMatricesFieldMask      |
          Skeleton::JointNormalMatricesFieldMask) &amp;amp; whichField) != 0)
     {
         OSG_ASSERT(fc == _sfSkeleton.getValue());
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -347,7 +353,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; GPUSkinningAlgorithm::resolveLinks(void)
     {
         _sfSkeleton.getValue()-&amp;gt;subChangedFunctor(boost::bind(
             &amp;amp;GPUSkinningAlgorithm::skeletonChanged,
-            this, _1, _2                                ));
+            this, _1, _2, _3                       ));
     }
 
     Inherited::resolveLinks();
diff --git a/Source/System/Dynamics/Skeleton/OSGGPUSkinningAlgorithm.h b/Source/System/Dynamics/Skeleton/OSGGPUSkinningAlgorithm.h
index c9b9972..76954ee 100644
--- a/Source/System/Dynamics/Skeleton/OSGGPUSkinningAlgorithm.h
+++ b/Source/System/Dynamics/Skeleton/OSGGPUSkinningAlgorithm.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -134,7 +134,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class OSG_DYNAMICS_DLLMAPPING GPUSkinningAlgorithm : public GPUSkinningAlgorithm
     /*! \name                  Skeleton Change                             */
     /*! \{                                                                 */
 
-    void skeletonChanged(FieldContainer *fc, ConstFieldMaskArg whichField);
+    void skeletonChanged(FieldContainer    *fc,
+                         ConstFieldMaskArg  whichField,
+                         UInt32             origin     );
 
     /*! \}                                                                 */
     /*---------------------------------------------------------------------*/
diff --git a/Source/System/FieldContainer/Mixins/OSGTraversalValidationHandlerMixin.inl b/Source/System/FieldContainer/Mixins/OSGTraversalValidationHandlerMixin.inl
index 0986427..7e00367 100644
--- a/Source/System/FieldContainer/Mixins/OSGTraversalValidationHandlerMixin.inl
+++ b/Source/System/FieldContainer/Mixins/OSGTraversalValidationHandlerMixin.inl
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -527,7 +527,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void TraversalValidationHandlerMixin&amp;lt;ParentT&amp;gt;::onDestroyAspect(
         for(; cfIt != cfEnd; ++cfIt)
         {
             if(cfIt-&amp;gt;_func)
-                (cfIt-&amp;gt;_func)(this, 0x0000);
+                (cfIt-&amp;gt;_func)(this, 0x0000, ChangedOrigin::External);
         }
     }
 }
diff --git a/Source/System/NodeCores/Drawables/Base/OSGDrawableStatsAttachment.cpp b/Source/System/NodeCores/Drawables/Base/OSGDrawableStatsAttachment.cpp
index 52c5bfb..9c531af 100644
--- a/Source/System/NodeCores/Drawables/Base/OSGDrawableStatsAttachment.cpp
+++ b/Source/System/NodeCores/Drawables/Base/OSGDrawableStatsAttachment.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -283,7 +283,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void DrawableStatsAttachment::operator -=(DrawableStatsAttachment *arg)
 
 void DrawableStatsAttachment::invalidateFunctor(
     FieldContainer *obj,
-    BitVector       mask)
+    BitVector       whichField,
+    UInt32          origin     )
 {
     invalidate(obj);
 }
diff --git a/Source/System/NodeCores/Drawables/Base/OSGDrawableStatsAttachment.h b/Source/System/NodeCores/Drawables/Base/OSGDrawableStatsAttachment.h
index 3d39d9e..eeac8a2 100644
--- a/Source/System/NodeCores/Drawables/Base/OSGDrawableStatsAttachment.h
+++ b/Source/System/NodeCores/Drawables/Base/OSGDrawableStatsAttachment.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -152,9 +152,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class OSG_SYSTEM_DLLMAPPING DrawableStatsAttachment :
     /*! \{                                                                 */
     
     static void invalidateFunctor(FieldContainer *obj,
-                                  BitVector       mask);
-    
-    static void invalidate       (FieldContainer *obj );
+                                  BitVector       whichField,
+                                  UInt32          origin    );
+    static void invalidate       (FieldContainer *obj       );
 
     /*! \}                                                                 */
     /*==========================  PRIVATE  ================================*/
diff --git a/Source/System/NodeCores/Groups/Misc/OSGInline.cpp b/Source/System/NodeCores/Groups/Misc/OSGInline.cpp
index f5d2c5a..a1f70f4 100644
--- a/Source/System/NodeCores/Groups/Misc/OSGInline.cpp
+++ b/Source/System/NodeCores/Groups/Misc/OSGInline.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -168,7 +168,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void Inline::postOSGLoading(void)
         if(pFile != NULL)
         {
             pFile-&amp;gt;addChangedFunctor(
-                boost::bind(&amp;amp;Inline::rootChanged, this, _1, _2),
+                boost::bind(&amp;amp;Inline::rootChanged, this, _1, _2, _3),
                 "");
 
             setRoot(pFile);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -190,7 +190,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void Inline::postOSGLoading(void)
     if(i == _mfUrl.size() &amp;amp;&amp;amp; _sfRoot.getValue() != NULL)
     {
         _sfRoot.getValue()-&amp;gt;subChangedFunctor(
-            boost::bind(&amp;amp;Inline::rootChanged, this, _1, _2));
+            boost::bind(&amp;amp;Inline::rootChanged, this, _1, _2, _3));
 
         setRoot(NULL);
     }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -218,7 +218,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void Inline::adjustVolume(Volume &amp;amp;volume)
     }
 }
 
-void Inline::rootChanged(FieldContainer *pFC, ConstFieldMaskArg whichField)
+void Inline::rootChanged(FieldContainer    *pFC,
+                         ConstFieldMaskArg  whichField,
+                         UInt32             origin     )
 {
     if(0x0000 != (whichField &amp;amp; Node::VolumeFieldMask))
     {
diff --git a/Source/System/NodeCores/Groups/Misc/OSGInline.h b/Source/System/NodeCores/Groups/Misc/OSGInline.h
index bd5c26b..e126b0d 100644
--- a/Source/System/NodeCores/Groups/Misc/OSGInline.h
+++ b/Source/System/NodeCores/Groups/Misc/OSGInline.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -118,7 +118,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class OSG_GROUP_DLLMAPPING Inline : public InlineBase
     /*! \name                     Init                                     */
     /*! \{                                                                 */
 
-    void rootChanged(FieldContainer *pFC, ConstFieldMaskArg whichField);
+    void rootChanged(FieldContainer    *pFC,
+                     ConstFieldMaskArg  whichField,
+                     UInt32             origin     );
 
     /*! \}                                                                 */
     /*---------------------------------------------------------------------*/
diff --git a/Source/System/NodeCores/Groups/Misc/OSGVisitSubTree.cpp b/Source/System/NodeCores/Groups/Misc/OSGVisitSubTree.cpp
index 9e8a964..1d41297 100644
--- a/Source/System/NodeCores/Groups/Misc/OSGVisitSubTree.cpp
+++ b/Source/System/NodeCores/Groups/Misc/OSGVisitSubTree.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -80,13 +80,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void VisitSubTree::setSubTreeRoot(Node * const value)
     if(_sfSubTreeRoot.getValue() != NULL)
     {
         _sfSubTreeRoot.getValue()-&amp;gt;subChangedFunctor(
-            boost::bind(&amp;amp;VisitSubTree::rootChanged, this, _1, _2));
+            boost::bind(&amp;amp;VisitSubTree::rootChanged, this, _1, _2, _3));
     }
 
     if(value != NULL)
     {
         value-&amp;gt;addChangedFunctor(
-            boost::bind(&amp;amp;VisitSubTree::rootChanged, this, _1, _2),
+            boost::bind(&amp;amp;VisitSubTree::rootChanged, this, _1, _2, _3),
             "");
     }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -94,7 +94,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void VisitSubTree::setSubTreeRoot(Node * const value)
 }
 
 void VisitSubTree::rootChanged(FieldContainer    *pFC, 
-                               ConstFieldMaskArg  whichField)
+                               ConstFieldMaskArg  whichField,
+                               UInt32             origin     )
 {
     if(0x0000 != (whichField &amp;amp; Node::VolumeFieldMask))
     {
diff --git a/Source/System/NodeCores/Groups/Misc/OSGVisitSubTree.h b/Source/System/NodeCores/Groups/Misc/OSGVisitSubTree.h
index e0a3c55..0db16f3 100644
--- a/Source/System/NodeCores/Groups/Misc/OSGVisitSubTree.h
+++ b/Source/System/NodeCores/Groups/Misc/OSGVisitSubTree.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -138,10 +138,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class OSG_GROUP_DLLMAPPING VisitSubTree : public VisitSubTreeBase
     /*! \name                      NodeCore Specific                       */
     /*! \{                                                                 */
 
-    void adjustVolume(Volume            &amp;amp;volume    );
+    void adjustVolume(Volume            &amp;amp;volume     );
 
     void rootChanged (FieldContainer    *pFC, 
-                      ConstFieldMaskArg  whichField);
+                      ConstFieldMaskArg  whichField,
+                      UInt32             origin     );
 
     /*! \}                                                                 */
     /*==========================  PRIVATE  ================================*/
diff --git a/Source/System/State/Shader/Base/OSGShaderProgram.cpp b/Source/System/State/Shader/Base/OSGShaderProgram.cpp
index 5c0a34c..4bb44b0 100644
--- a/Source/System/State/Shader/Base/OSGShaderProgram.cpp
+++ b/Source/System/State/Shader/Base/OSGShaderProgram.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -499,7 +499,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void ShaderProgram::resolveLinks(void)
     for(; dfIt != dfEnd; ++dfIt)
     {
         if(dfIt-&amp;gt;_func.empty() == false)
-            (dfIt-&amp;gt;_func)(this, 0x0000);
+            (dfIt-&amp;gt;_func)(this, 0x0000, ChangedOrigin::External);
     }
 
     Inherited::resolveLinks();
diff --git a/Source/System/State/Shader/Chunks/OSGShaderProgramVariableChunk.cpp b/Source/System/State/Shader/Chunks/OSGShaderProgramVariableChunk.cpp
index 3f34501..34f60ca 100644
--- a/Source/System/State/Shader/Chunks/OSGShaderProgramVariableChunk.cpp
+++ b/Source/System/State/Shader/Chunks/OSGShaderProgramVariableChunk.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -289,7 +289,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void ShaderProgramVariableChunk::resolveLinks(void)
     for(; cfIt != cfEnd; ++cfIt)
     {
         if(cfIt-&amp;gt;_func)
-            (cfIt-&amp;gt;_func)(this, 0x0000);
+            (cfIt-&amp;gt;_func)(this, 0x0000, ChangedOrigin::External);
     }
 
     Inherited::resolveLinks();
------------------------------------------------------------------------------
EditLive Enterprise is the world's most technically advanced content
authoring tool. Experience the power of Track Changes, Inline Image
Editing and ensure content is compliant with Accessibility Checking.
http://p.sf.net/sfu/ephox-dev2dev&lt;/pre&gt;</description>
    <dc:creator>Carsten Neumann</dc:creator>
    <dc:date>2011-06-17T19:43:51</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/122">
    <title>RFC: Don't derive QT4Window from NativeWindow</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/122</link>
    <description>&lt;pre&gt;Hello Gerrit,

attached patch modifies QT4Window to not derive from NativeWindow (but 
from Window instead). It also brings the examples for rendering from the 
GUI thread and for rendering from a separate thread into the QGLWidget 
back to working condition (only tested on X11).

I believe the motivation for deriving from NativeWindow was the parallel 
drawer that needs to be able to activate the context when needed, but 
the proposed solution should keep that and seems neater than attempting 
to capture the Qt created context with platform specific code.

Comments?

Cheers,
Carsten
From: Carsten Neumann &amp;lt;carstenneumann-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f&amp;lt; at &amp;gt;public.gmane.org&amp;gt;
Date: Wed, 18 May 2011 19:02:17 -0500
Subject: [PATCH] changed: derive QT4Window from Window (not NativeWindow)
        : rename OSGQ4GLWidget -&amp;gt; OSGQT4GLWidget
 fixed  : single/multi thread Qt render example

---
 Source/WindowSystem/QT4/OSGQ4GLWidget_qt.cpp     |  125 -----------
 Source/WindowSystem/QT4/OSGQ4GLWidget_qt.h       |  134 ------------
 Source/WindowSystem/QT4/OSGQ4GLWidget_qt.inl     |   39 ----
 Source/WindowSystem/QT4/OSGQT4GLWidget_qt.cpp    |  173 +++++++++++++++
 Source/WindowSystem/QT4/OSGQT4GLWidget_qt.h      |  125 +++++++++++
 Source/WindowSystem/QT4/OSGQT4GLWidget_qt.inl    |   39 ++++
 Source/WindowSystem/QT4/OSGQT4Window.cpp         |   78 ++++----
 Source/WindowSystem/QT4/OSGQT4Window.fcd         |    8 +-
 Source/WindowSystem/QT4/OSGQT4Window.h           |   14 ++-
 Source/WindowSystem/QT4/OSGQT4WindowBase.cpp     |   22 +--
 Source/WindowSystem/QT4/OSGQT4WindowBase.h       |    8 +-
 Source/WindowSystem/QT4/OSGQT4WindowDataFields.h |    2 +-
 Source/WindowSystem/QT4/testWindowQT4SSM_qt.cpp  |  251 +++++++++++++++-------
 Source/WindowSystem/QT4/testWindowQT4_qt.cpp     |  102 +++------
 14 files changed, 609 insertions(+), 511 deletions(-)
 delete mode 100644 Source/WindowSystem/QT4/OSGQ4GLWidget_qt.cpp
 delete mode 100644 Source/WindowSystem/QT4/OSGQ4GLWidget_qt.h
 delete mode 100644 Source/WindowSystem/QT4/OSGQ4GLWidget_qt.inl
 create mode 100644 Source/WindowSystem/QT4/OSGQT4GLWidget_qt.cpp
 create mode 100644 Source/WindowSystem/QT4/OSGQT4GLWidget_qt.h
 create mode 100644 Source/WindowSystem/QT4/OSGQT4GLWidget_qt.inl

diff --git a/Source/WindowSystem/QT4/OSGQ4GLWidget_qt.cpp b/Source/WindowSystem/QT4/OSGQ4GLWidget_qt.cpp
deleted file mode 100644
index df70279..0000000
--- a/Source/WindowSystem/QT4/OSGQ4GLWidget_qt.cpp
+++ /dev/null
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,125 +0,0 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-/*---------------------------------------------------------------------------*\
- *                                OpenSG                                     *
- *                                                                           *
- *                                                                           *
- *             Copyright (C) 2000-2002 by the OpenSG Forum                   *
- *                                                                           *
- *                            www.opensg.org                                 *
- *                                                                           *
- *   contact: dirk-eecb1hfXAsQdnm+yROfE0A&amp;lt; at &amp;gt;public.gmane.org, gerrit.voss-pKHMZwtRCR/YtjvyW6yDsg&amp;lt; at &amp;gt;public.gmane.org, jbehr-V3PxM5WXsvk&amp;lt; at &amp;gt;public.gmane.org          *
- *                                                                           *
-\*---------------------------------------------------------------------------*/
-/*---------------------------------------------------------------------------*\
- *                                License                                    *
- *                                                                           *
- * This library is free software; you can redistribute it and/or modify it   *
- * under the terms of the GNU Library General Public License as published    *
- * by the Free Software Foundation, version 2.                               *
- *                                                                           *
- * This library is distributed in the hope that it will be useful, but       *
- * WITHOUT ANY WARRANTY; without even the implied warranty of                *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         *
- * Library General Public License for more details.                          *
- *                                                                           *
- * You should have received a copy of the GNU Library General Public         *
- * License along with this library; if not, write to the Free Software       *
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                 *
- *                                                                           *
-\*---------------------------------------------------------------------------*/
-/*---------------------------------------------------------------------------*\
- *                                Changes                                    *
- *                                                                           *
- *                                                                           *
- *                                                                           *
- *                                                                           *
- *                                                                           *
- *                                                                           *
-\*---------------------------------------------------------------------------*/
-
-//---------------------------------------------------------------------------
-//  Includes
-//---------------------------------------------------------------------------
-
-#include "OSGQ4GLWidget_qt.h"
-
-#ifdef OSG_WITH_QT
-
-OSG_USING_NAMESPACE
-
-/*! \class OSG::QTWindow
-
-The class for QT-based windows. See \ref PageWindowQT for a description.
-
-*/
-
-/***************************************************************************\
- *                           Instance methods                              *
-\***************************************************************************/
-
-/*-------------------------------------------------------------------------*\
- -  public                                                                 -
-\*-------------------------------------------------------------------------*/
-
-/*------------- constructors &amp;amp; destructors --------------------------------*/
-
-/*! Constructor
-*/
-
-
-OSGQGLWidget::OSGQGLWidget(      QWidget    *parent,
-                           const char       *name,
-                           const QGLWidget  *shareWidget,
-                                 Qt::WFlags  f           ) :
-    QGLWidget( parent, shareWidget, f ) 
-{
-}
-
-OSGQGLWidget::OSGQGLWidget(      QGLContext      *context,
-                                 QWidget         *parent ,
-                           const QGLWidget       *shareWidget,
-                                 Qt::WindowFlags  f           ) :
-    QGLWidget(context, parent, shareWidget, f)
-{
-}
-
-OSGQGLWidget::OSGQGLWidget(const QGLFormat  &amp;amp;format,
-                                 QWidget    *parent,
-                           const char       *name,
-                           const QGLWidget  *shareWidget,
-                                 Qt::WFlags  f           ) :
-    QGLWidget(format, parent, shareWidget, f)
-{
-}
-
-
-/*! Destructor
-*/
-
-OSGQGLWidget::~OSGQGLWidget( void )
-{
-}
-
-
-/*------------------------------ access -----------------------------------*/
-
-void OSGQGLWidget::initializeGL(void) 
-{
-}
-
-void OSGQGLWidget::paintGL(void) 
-{
-}
-
-void OSGQGLWidget::resizeGL(int, int) 
-{
-}
-
-void OSGQGLWidget::makeCurrent(void)
-{
-}
-
-void OSGQGLWidget::swapBuffers(void)
-{
-}
-
-#endif /* OSG_WITH_QT */
diff --git a/Source/WindowSystem/QT4/OSGQ4GLWidget_qt.h b/Source/WindowSystem/QT4/OSGQ4GLWidget_qt.h
deleted file mode 100644
index f912636..0000000
--- a/Source/WindowSystem/QT4/OSGQ4GLWidget_qt.h
+++ /dev/null
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,134 +0,0 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-/*---------------------------------------------------------------------------*\
- *                                OpenSG                                     *
- *                                                                           *
- *                                                                           *
- *             Copyright (C) 2000-2002 by the OpenSG Forum                   *
- *                                                                           *
- *                            www.opensg.org                                 *
- *                                                                           *
- *   contact: dirk-eecb1hfXAsQdnm+yROfE0A&amp;lt; at &amp;gt;public.gmane.org, gerrit.voss-pKHMZwtRCR/YtjvyW6yDsg&amp;lt; at &amp;gt;public.gmane.org, jbehr-V3PxM5WXsvk&amp;lt; at &amp;gt;public.gmane.org          *
- *                                                                           *
-\*---------------------------------------------------------------------------*/
-/*---------------------------------------------------------------------------*\
- *                                License                                    *
- *                                                                           *
- * This library is free software; you can redistribute it and/or modify it   *
- * under the terms of the GNU Library General Public License as published    *
- * by the Free Software Foundation, version 2.                               *
- *                                                                           *
- * This library is distributed in the hope that it will be useful, but       *
- * WITHOUT ANY WARRANTY; without even the implied warranty of                *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         *
- * Library General Public License for more details.                          *
- *                                                                           *
- * You should have received a copy of the GNU Library General Public         *
- * License along with this library; if not, write to the Free Software       *
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                 *
- *                                                                           *
-\*---------------------------------------------------------------------------*/
-/*---------------------------------------------------------------------------*\
- *                                Changes                                    *
- *                                                                           *
- *                                                                           *
- *                                                                           *
- *                                                                           *
- *                                                                           *
- *                                                                           *
-\*---------------------------------------------------------------------------*/
-
-#ifndef _OSG_QGLWIDGET_H_
-#define _OSG_QGLWIDGET_H_
-#ifdef __sgi
-#pragma once
-#endif
-
-//---------------------------------------------------------------------------
-//  Includes
-//---------------------------------------------------------------------------
-
-#include "OSGConfig.h"
-
-#ifdef OSG_WITH_QT
-
-#include "OSGWindowQT4Def.h"
-#include "OSGBaseTypes.h"
-
-namespace OSG 
-{
-
-/*! \brief OSGQGL widget class. See \ref PageWindowQT for a description. 
-    \ingroup GrpWindowQt4Obj
-    \ingroup GrpLibOSGWindowQt4
-    \includebasedoc
- */
-
-class OSG_WINDOWQT4_DLLMAPPING OSGQGLWidget : public QGLWidget
-{
-  Q_OBJECT
-
-    /*==========================  PUBLIC  =================================*/
-  public:
-    /*---------------------------------------------------------------------*/
-    /*! \name                   Constructors                               */
-    /*! \{                                                                 */
-
-    OSGQGLWidget(      QWidget        *parent,
-                 const Char8          *name         = 0,
-                 const QGLWidget      *shareWidget  = 0,
-                       Qt::WFlags      f            = 0 );
-    OSGQGLWidget(      QGLContext      *context,
-                       QWidget         *parent      = 0,
-                 const QGLWidget       *shareWidget = 0,
-                       Qt::WindowFlags  f           = 0 );
-
-    OSGQGLWidget(const QGLFormat  &amp;amp;format      = QGLFormat::defaultFormat(),
-                       QWidget    *parent      = 0,
-                 const Char8      *name        = 0,
-                 const QGLWidget  *shareWidget = 0,
-                       Qt::WFlags  f           = 0 );
-    /*! \}                                                                 */
-    /*---------------------------------------------------------------------*/
-    /*! \name                   Desstructor                                */
-    /*! \{                                                                 */
-
-    virtual ~OSGQGLWidget();
-
-    /*! \}                                                                 */
-    /*---------------------------------------------------------------------*/
-    /*! \name                 OpenGL handling                              */
-    /*! \{                                                                 */
-    
-    virtual void makeCurrent(void);
-    virtual void swapBuffers(void);
-
-    /*! \}                                                                 */
-    /*=========================  PROTECTED  ===============================*/
-  protected:
-
-    /*---------------------------------------------------------------------*/
-    /*! \name                 OpenGL handling                              */
-    /*! \{                                                                 */
-
-    virtual void initializeGL(void);
-    virtual void paintGL     (void);
-    virtual void resizeGL    (int w, int h);
-
-    /*! \}                                                                 */
-    /*==========================  PRIVATE  ================================*/
-  private:
-
-    /* prohibit default function (move to 'public' if needed) */
-    OSGQGLWidget(const OSGQGLWidget &amp;amp;source);
-    /* prohibit default function (move to 'public' if needed) */
-    void operator =(const OSGQGLWidget &amp;amp;source);
-};
-
-typedef OSGQGLWidget * OSGQGLWidgetP;                      
-
-} // OSG namespace
-
-#include "OSGQ4GLWidget_qt.inl"
-
-#endif // OSG_WITH_QT
-
-#endif // _OSG_QGLWIDGET_H_
diff --git a/Source/WindowSystem/QT4/OSGQ4GLWidget_qt.inl b/Source/WindowSystem/QT4/OSGQ4GLWidget_qt.inl
deleted file mode 100644
index f923c4d..0000000
--- a/Source/WindowSystem/QT4/OSGQ4GLWidget_qt.inl
+++ /dev/null
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,39 +0,0 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-/*---------------------------------------------------------------------------*\
- *                                OpenSG                                     *
- *                                                                           *
- *                                                                           *
- *                     Copyright 2000-2002 by OpenSG Forum                   *
- *                                                                           *
- *   contact: dirk-eecb1hfXAsQdnm+yROfE0A&amp;lt; at &amp;gt;public.gmane.org, gerrit.voss-pKHMZwtRCR/YtjvyW6yDsg&amp;lt; at &amp;gt;public.gmane.org, jbehr-V3PxM5WXsvk&amp;lt; at &amp;gt;public.gmane.org          *
- *                                                                           *
-\*---------------------------------------------------------------------------*/
-/*---------------------------------------------------------------------------*\
- *                                License                                    *
- *                                                                           *
- * This library is free software; you can redistribute it and/or modify it   *
- * under the terms of the GNU Library General Public License as published    *
- * by the Free Software Foundation, version 2.                               *
- *                                                                           *
- * This library is distributed in the hope that it will be useful, but       *
- * WITHOUT ANY WARRANTY; without even the implied warranty of                *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         *
- * Library General Public License for more details.                          *
- *                                                                           *
- * You should have received a copy of the GNU Library General Public         *
- * License along with this library; if not, write to the Free Software       *
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                 *
- *                                                                           *
-\*---------------------------------------------------------------------------*/
-/*---------------------------------------------------------------------------*\
- *                                Changes                                    *
- *                                                                           *
- *                                                                           *
- *                                                                           *
- *                                                                           *
- *                                                                           *
- *                                                                           *
-\*---------------------------------------------------------------------------*/
-
-//---------------------------------------------------------------------------
-//  Includes
-//---------------------------------------------------------------------------
diff --git a/Source/WindowSystem/QT4/OSGQT4GLWidget_qt.cpp b/Source/WindowSystem/QT4/OSGQT4GLWidget_qt.cpp
new file mode 100644
index 0000000..8c7e5fb
--- /dev/null
+++ b/Source/WindowSystem/QT4/OSGQT4GLWidget_qt.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,173 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+/*---------------------------------------------------------------------------*\
+ *                                OpenSG                                     *
+ *                                                                           *
+ *                                                                           *
+ *             Copyright (C) 2000-2002 by the OpenSG Forum                   *
+ *                                                                           *
+ *                            www.opensg.org                                 *
+ *                                                                           *
+ *   contact: dirk-eecb1hfXAsQdnm+yROfE0A&amp;lt; at &amp;gt;public.gmane.org, gerrit.voss-pKHMZwtRCR/YtjvyW6yDsg&amp;lt; at &amp;gt;public.gmane.org, jbehr-V3PxM5WXsvk&amp;lt; at &amp;gt;public.gmane.org          *
+ *                                                                           *
+\*---------------------------------------------------------------------------*/
+/*---------------------------------------------------------------------------*\
+ *                                License                                    *
+ *                                                                           *
+ * This library is free software; you can redistribute it and/or modify it   *
+ * under the terms of the GNU Library General Public License as published    *
+ * by the Free Software Foundation, version 2.                               *
+ *                                                                           *
+ * This library is distributed in the hope that it will be useful, but       *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of                *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         *
+ * Library General Public License for more details.                          *
+ *                                                                           *
+ * You should have received a copy of the GNU Library General Public         *
+ * License along with this library; if not, write to the Free Software       *
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                 *
+ *                                                                           *
+\*---------------------------------------------------------------------------*/
+/*---------------------------------------------------------------------------*\
+ *                                Changes                                    *
+ *                                                                           *
+ *                                                                           *
+ *                                                                           *
+ *                                                                           *
+ *                                                                           *
+ *                                                                           *
+\*---------------------------------------------------------------------------*/
+
+//---------------------------------------------------------------------------
+//  Includes
+//---------------------------------------------------------------------------
+
+#include "OSGQT4GLWidget_qt.h"
+
+#ifdef OSG_WITH_QT
+
+#include &amp;lt;QtGui/QResizeEvent&amp;gt;
+
+OSG_USING_NAMESPACE
+
+/*! \class OSG::QTWindow
+
+The class for QT-based windows. See \ref PageWindowQT for a description.
+
+*/
+
+namespace
+{
+    // Qt unfortunately makes the QGLContext::initialize/setInitialized
+    // functions protected and only QGLWidget is a friend of QGLContext,
+    // so we can't use them from our OSGQGLWidget directly.
+    //
+    // To work around that we derive a dummy OSGQGLContext that makes the
+    // functions public and static_cast&amp;lt;&amp;gt; the real context to this
+    // dummy type when needed.
+
+    class OSGQGLContext : public QGLContext
+    {
+      public:
+        bool initialized()
+        {
+            return QGLContext::initialized();
+        }
+
+        void setInitialized(bool value)
+        {
+            QGLContext::setInitialized(value);
+        }
+    };
+}
+
+/***************************************************************************\
+ *                           Instance methods                              *
+\***************************************************************************/
+
+/*-------------------------------------------------------------------------*\
+ -  public                                                                 -
+\*-------------------------------------------------------------------------*/
+
+/*------------- constructors &amp;amp; destructors --------------------------------*/
+
+/*! Constructor
+*/
+
+
+OSGQGLWidget::OSGQGLWidget(      QWidget    *parent,
+                           const char       *name,
+                           const QGLWidget  *shareWidget,
+                                 Qt::WFlags  f           ) :
+    QGLWidget( parent, shareWidget, f ) 
+{
+}
+
+OSGQGLWidget::OSGQGLWidget(      QGLContext      *context,
+                                 QWidget         *parent ,
+                           const QGLWidget       *shareWidget,
+                                 Qt::WindowFlags  f           ) :
+    QGLWidget(context, parent, shareWidget, f)
+{
+}
+
+OSGQGLWidget::OSGQGLWidget(const QGLFormat  &amp;amp;format,
+                                 QWidget    *parent,
+                           const char       *name,
+                           const QGLWidget  *shareWidget,
+                                 Qt::WFlags  f           ) :
+    QGLWidget(format, parent, shareWidget, f)
+{
+}
+
+
+/*! Destructor
+*/
+
+OSGQGLWidget::~OSGQGLWidget( void )
+{
+}
+
+
+/*--------------------------- Event Handling --------------------------------*/
+
+/*! Ensures the context is initialized and calls the virtual paintGL function.
+ */
+void OSGQGLWidget::paintEvent(QPaintEvent *event)
+{
+    if(isValid       () == false ||
+       updatesEnabled() == false   )
+    {
+        return;
+    }
+
+    QGLContext    *qctx = const_cast &amp;lt;QGLContext    *&amp;gt;(context());
+    OSGQGLContext *octx = static_cast&amp;lt;OSGQGLContext *&amp;gt;(qctx);
+
+    if(octx != NULL &amp;amp;&amp;amp; octx-&amp;gt;initialized() == false)
+    {
+        initializeGL();
+        octx-&amp;gt;setInitialized(true);
+    }
+
+    paintGL();
+}
+
+/*! Ensures the context is initialized and calls the virtual resizeGL function.
+ */
+void OSGQGLWidget::resizeEvent(QResizeEvent *event)
+{
+    if(isValid() == false)
+        return;
+
+    QGLContext    *qctx = const_cast &amp;lt;QGLContext    *&amp;gt;(context());
+    OSGQGLContext *octx = static_cast&amp;lt;OSGQGLContext *&amp;gt;(qctx);
+
+    if(octx != NULL &amp;amp;&amp;amp; octx-&amp;gt;initialized() == false)
+    {
+        initializeGL();
+        octx-&amp;gt;setInitialized(true);
+    }
+
+    resizeGL(event-&amp;gt;size().width(), event-&amp;gt;size().height());
+}
+
+#endif /* OSG_WITH_QT */
diff --git a/Source/WindowSystem/QT4/OSGQT4GLWidget_qt.h b/Source/WindowSystem/QT4/OSGQT4GLWidget_qt.h
new file mode 100644
index 0000000..30b9c03
--- /dev/null
+++ b/Source/WindowSystem/QT4/OSGQT4GLWidget_qt.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,125 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+/*---------------------------------------------------------------------------*\
+ *                                OpenSG                                     *
+ *                                                                           *
+ *                                                                           *
+ *             Copyright (C) 2000-2002 by the OpenSG Forum                   *
+ *                                                                           *
+ *                            www.opensg.org                                 *
+ *                                                                           *
+ *   contact: dirk-eecb1hfXAsQdnm+yROfE0A&amp;lt; at &amp;gt;public.gmane.org, gerrit.voss-pKHMZwtRCR/YtjvyW6yDsg&amp;lt; at &amp;gt;public.gmane.org, jbehr-V3PxM5WXsvk&amp;lt; at &amp;gt;public.gmane.org          *
+ *                                                                           *
+\*---------------------------------------------------------------------------*/
+/*---------------------------------------------------------------------------*\
+ *                                License                                    *
+ *                                                                           *
+ * This library is free software; you can redistribute it and/or modify it   *
+ * under the terms of the GNU Library General Public License as published    *
+ * by the Free Software Foundation, version 2.                               *
+ *                                                                           *
+ * This library is distributed in the hope that it will be useful, but       *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of                *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         *
+ * Library General Public License for more details.                          *
+ *                                                                           *
+ * You should have received a copy of the GNU Library General Public         *
+ * License along with this library; if not, write to the Free Software       *
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                 *
+ *                                                                           *
+\*---------------------------------------------------------------------------*/
+/*---------------------------------------------------------------------------*\
+ *                                Changes                                    *
+ *                                                                           *
+ *                                                                           *
+ *                                                                           *
+ *                                                                           *
+ *                                                                           *
+ *                                                                           *
+\*---------------------------------------------------------------------------*/
+
+#ifndef _OSG_QGLWIDGET_H_
+#define _OSG_QGLWIDGET_H_
+#ifdef __sgi
+#pragma once
+#endif
+
+//---------------------------------------------------------------------------
+//  Includes
+//---------------------------------------------------------------------------
+
+#include "OSGConfig.h"
+
+#ifdef OSG_WITH_QT
+
+#include "OSGWindowQT4Def.h"
+#include "OSGBaseTypes.h"
+
+namespace OSG 
+{
+
+/*! \brief OSGQGL widget class. See \ref PageWindowQT for a description. 
+    \ingroup GrpWindowQt4Obj
+    \ingroup GrpLibOSGWindowQt4
+    \includebasedoc
+ */
+
+class OSG_WINDOWQT4_DLLMAPPING OSGQGLWidget : public QGLWidget
+{
+  Q_OBJECT
+
+    /*==========================  PUBLIC  =================================*/
+  public:
+    /*---------------------------------------------------------------------*/
+    /*! \name                   Constructors                               */
+    /*! \{                                                                 */
+
+    OSGQGLWidget(      QWidget        *parent,
+                 const Char8          *name         = 0,
+                 const QGLWidget      *shareWidget  = 0,
+                       Qt::WFlags      f            = 0 );
+    OSGQGLWidget(      QGLContext      *context,
+                       QWidget         *parent      = 0,
+                 const QGLWidget       *shareWidget = 0,
+                       Qt::WindowFlags  f           = 0 );
+
+    OSGQGLWidget(const QGLFormat  &amp;amp;format      = QGLFormat::defaultFormat(),
+                       QWidget    *parent      = 0,
+                 const Char8      *name        = 0,
+                 const QGLWidget  *shareWidget = 0,
+                       Qt::WFlags  f           = 0 );
+    /*! \}                                                                 */
+    /*---------------------------------------------------------------------*/
+    /*! \name                    Destructor                                */
+    /*! \{                                                                 */
+
+    virtual ~OSGQGLWidget();
+
+    /*! \}                                                                 */
+    /*=========================  PROTECTED  ===============================*/
+  protected:
+
+    /*---------------------------------------------------------------------*/
+    /*! \name                  Event handling                              */
+    /*! \{                                                                 */
+
+    virtual void paintEvent (QPaintEvent  *event);
+    virtual void resizeEvent(QResizeEvent *event);
+
+    /*! \}                                                                 */
+    /*==========================  PRIVATE  ================================*/
+  private:
+
+    /* prohibit default function (move to 'public' if needed) */
+    OSGQGLWidget(const OSGQGLWidget &amp;amp;source);
+    /* prohibit default function (move to 'public' if needed) */
+    void operator =(const OSGQGLWidget &amp;amp;source);
+};
+
+typedef OSGQGLWidget * OSGQGLWidgetP;                      
+
+} // OSG namespace
+
+#include "OSGQT4GLWidget_qt.inl"
+
+#endif // OSG_WITH_QT
+
+#endif // _OSG_QGLWIDGET_H_
diff --git a/Source/WindowSystem/QT4/OSGQT4GLWidget_qt.inl b/Source/WindowSystem/QT4/OSGQT4GLWidget_qt.inl
new file mode 100644
index 0000000..f923c4d
--- /dev/null
+++ b/Source/WindowSystem/QT4/OSGQT4GLWidget_qt.inl
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,39 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+/*---------------------------------------------------------------------------*\
+ *                                OpenSG                                     *
+ *                                                                           *
+ *                                                                           *
+ *                     Copyright 2000-2002 by OpenSG Forum                   *
+ *                                                                           *
+ *   contact: dirk-eecb1hfXAsQdnm+yROfE0A&amp;lt; at &amp;gt;public.gmane.org, gerrit.voss-pKHMZwtRCR/YtjvyW6yDsg&amp;lt; at &amp;gt;public.gmane.org, jbehr-V3PxM5WXsvk&amp;lt; at &amp;gt;public.gmane.org          *
+ *                                                                           *
+\*---------------------------------------------------------------------------*/
+/*---------------------------------------------------------------------------*\
+ *                                License                                    *
+ *                                                                           *
+ * This library is free software; you can redistribute it and/or modify it   *
+ * under the terms of the GNU Library General Public License as published    *
+ * by the Free Software Foundation, version 2.                               *
+ *                                                                           *
+ * This library is distributed in the hope that it will be useful, but       *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of                *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         *
+ * Library General Public License for more details.                          *
+ *                                                                           *
+ * You should have received a copy of the GNU Library General Public         *
+ * License along with this library; if not, write to the Free Software       *
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                 *
+ *                                                                           *
+\*---------------------------------------------------------------------------*/
+/*---------------------------------------------------------------------------*\
+ *                                Changes                                    *
+ *                                                                           *
+ *                                                                           *
+ *                                                                           *
+ *                                                                           *
+ *                                                                           *
+ *                                                                           *
+\*---------------------------------------------------------------------------*/
+
+//---------------------------------------------------------------------------
+//  Includes
+//---------------------------------------------------------------------------
diff --git a/Source/WindowSystem/QT4/OSGQT4Window.cpp b/Source/WindowSystem/QT4/OSGQT4Window.cpp
index 8dd8791..6426c38 100644
--- a/Source/WindowSystem/QT4/OSGQT4Window.cpp
+++ b/Source/WindowSystem/QT4/OSGQT4Window.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -49,12 +49,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 #include "OSGQT4Window.h"
 
-#ifndef WIN32
-#include &amp;lt;QtGui/qx11info_x11.h&amp;gt;
-#include &amp;lt;GL/glx.h&amp;gt;
-#endif
-
-
 OSG_BEGIN_NAMESPACE
 
 /*! \class OSG::QT4Window
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -104,7 +98,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static StaticInitFuncWrapper qtVersionCheck(qtVersionCheckWrapper);
 
 void QT4Window::initMethod (InitPhase ePhase)
 {
-    //Inherited::initMethod(ePhase);
+    Inherited::initMethod(ePhase);
 }
 
 //! react to field changes
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -130,44 +124,54 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void QT4Window::dump(      UInt32    ,
 //! init the window: create the context
 void QT4Window::init(GLInitFunctor oFunc)
 {
-#ifdef WIN32
+    Inherited::init(oFunc);
+}
+
+void QT4Window::terminate(void)
+{
+    Inherited::doTerminate();
+}
+
+void QT4Window::doActivate(void)
+{
     if(getGlWidget() != NULL)
     {
-        setHwnd(getGlWidget()-&amp;gt;winId());
+        getGlWidget()-&amp;gt;makeCurrent();
+    }
+}
 
-        Inherited::init();
+void QT4Window::doDeactivate(void)
+{
+    if(getGlWidget() != NULL)
+    {
+        getGlWidget()-&amp;gt;doneCurrent();
     }
-#else
-    XVisualInfo *vi;
-
-    ///// create a new GLX context
-    setDisplay(XOpenDisplay(NULL));
-    setWindow(static_cast&amp;lt;QWidget*&amp;gt;(getGlWidget())-&amp;gt;winId());
-
-    // get the existing glWidget's visual-id and a visual for the new context
-    XVisualInfo visInfo;
-    memset(&amp;amp;visInfo, 0, sizeof(XVisualInfo));
-    visInfo.visualid = XVisualIDFromVisual(
-        static_cast&amp;lt;Visual*&amp;gt;(QX11Info::appVisual()));
-    int nvis;
-    vi = XGetVisualInfo( getDisplay(), VisualIDMask, &amp;amp;visInfo, &amp;amp;nvis );
-
-    // is the visual GL-capable ?
-    int useGL;
-    glXGetConfig( getDisplay(),
-                  vi,
-                  GLX_USE_GL,
-                  &amp;amp;useGL );
-    if (!useGL)
+}
+
+bool QT4Window::doSwap(void)
+{
+    bool result(false);
+
+    if(getGlWidget() != NULL)
     {
-        SFATAL &amp;lt;&amp;lt; "Visual is not OpenGL-capable!" &amp;lt;&amp;lt; endLog;
+        getGlWidget()-&amp;gt;swapBuffers();
+
+        result = true;
     }
 
-    // create the new context
-    setContext(glXCreateContext(getDisplay(), vi, None, GL_TRUE));
-#endif
+    return true;
+}
+
+bool QT4Window::hasContext(void)
+{
+    bool result(false);
+
+    if(getGlWidget() != NULL)
+    {
+        result = getGlWidget()-&amp;gt;isValid();
+    }
 
-    Window::init(oFunc);
+    return result;
 }
 
 OSG_END_NAMESPACE
diff --git a/Source/WindowSystem/QT4/OSGQT4Window.fcd b/Source/WindowSystem/QT4/OSGQT4Window.fcd
index 10fcd42..f78d679 100755
--- a/Source/WindowSystem/QT4/OSGQT4Window.fcd
+++ b/Source/WindowSystem/QT4/OSGQT4Window.fcd
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2,7 +2,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 &amp;lt;FieldContainer
    name="QT4Window"
-   parent="NativeWindow"
+   parent="Window"
    library="WindowQT4"
    pointerfieldtypes="both"
    structure="concrete"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -10,11 +10,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
    parentsystemcomponent="true"
    docGroupBase="GrpWindowQt4"
    &amp;gt;
-  The class for QT windows.
-
-  Do *NOT* use this fcd to recreate the QTWindow code. The QT window is a hybrid
-  beast that derives from XWindow on Unix and WIN32Window on Windows, and as
-  such can't be recreated automatically.
+  The class for Qt4 windows.
   &amp;lt;Field
  name="GlWidget"
  type="OSGQGLWidgetP"
diff --git a/Source/WindowSystem/QT4/OSGQT4Window.h b/Source/WindowSystem/QT4/OSGQT4Window.h
index 6507b38..6f08ebe 100644
--- a/Source/WindowSystem/QT4/OSGQT4Window.h
+++ b/Source/WindowSystem/QT4/OSGQT4Window.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -82,7 +82,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class OSG_WINDOWQT4_DLLMAPPING QT4Window : public QT4WindowBase
     /*! \{                                                                 */
 
     // init the window: create the context
-    virtual void init(GLInitFunctor oFunc = GLInitFunctor());
+    virtual void init     (GLInitFunctor oFunc = GLInitFunctor());
+    virtual void terminate(void);
 
     /*! \}                                                                 */
     /*=========================  PROTECTED  ===============================*/
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -113,6 +114,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class OSG_WINDOWQT4_DLLMAPPING QT4Window : public QT4WindowBase
     static void initMethod(InitPhase ePhase);
 
     /*! \}                                                                 */
+    /*---------------------------------------------------------------------*/
+    /*! \name      Window system implementation functions                  */
+    /*! \{                                                                 */
+
+    virtual void doActivate  (void);
+    virtual void doDeactivate(void);
+    virtual bool doSwap      (void);
+
+    virtual bool hasContext  (void);
+
+    /*! \}                                                                 */
     /*==========================  PRIVATE  ================================*/
   
   private:
diff --git a/Source/WindowSystem/QT4/OSGQT4WindowBase.cpp b/Source/WindowSystem/QT4/OSGQT4WindowBase.cpp
index 3cdf83b..cd8d157 100644
--- a/Source/WindowSystem/QT4/OSGQT4WindowBase.cpp
+++ b/Source/WindowSystem/QT4/OSGQT4WindowBase.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -74,11 +74,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; OSG_BEGIN_NAMESPACE
 \***************************************************************************/
 
 /*! \class OSG::QT4Window
-    The class for QT windows.
-
-    Do *NOT* use this fcd to recreate the QTWindow code. The QT window is a hybrid
-    beast that derives from XWindow on Unix and WIN32Window on Windows, and as
-    such can't be recreated automatically.
+    The class for Qt4 windows.
  */
 
 /***************************************************************************\
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -95,7 +91,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; OSG_BEGIN_NAMESPACE
 \***************************************************************************/
 
 #if !defined(OSG_DO_DOC) || defined(OSG_DOC_DEV)
-DataType FieldTraits&amp;lt;QT4Window *&amp;gt;::_type("QT4WindowPtr", "NativeWindowPtr");
+DataType FieldTraits&amp;lt;QT4Window *&amp;gt;::_type("QT4WindowPtr", "WindowPtr");
 #endif
 
 OSG_FIELDTRAITS_GETTYPE(QT4Window *)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -146,7 +142,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; QT4WindowBase::TypeObject QT4WindowBase::_type(
     "\n"
     "&amp;lt;FieldContainer\n"
     "   name=\"QT4Window\"\n"
-    "   parent=\"NativeWindow\"\n"
+    "   parent=\"Window\"\n"
     "   library=\"WindowQT4\"\n"
     "   pointerfieldtypes=\"both\"\n"
     "   structure=\"concrete\"\n"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -154,11 +150,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; QT4WindowBase::TypeObject QT4WindowBase::_type(
     "   parentsystemcomponent=\"true\"\n"
     "   docGroupBase=\"GrpWindowQt4\"\n"
     "   &amp;gt;\n"
-    "  The class for QT windows.\n"
-    "\n"
-    "  Do *NOT* use this fcd to recreate the QTWindow code. The QT window is a hybrid\n"
-    "  beast that derives from XWindow on Unix and WIN32Window on Windows, and as\n"
-    "  such can't be recreated automatically.\n"
+    "  The class for Qt4 windows.\n"
     "  &amp;lt;Field\n"
     "\t name=\"GlWidget\"\n"
     "\t type=\"OSGQGLWidgetP\"\n"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -170,11 +162,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; QT4WindowBase::TypeObject QT4WindowBase::_type(
     "\t &amp;gt;\n"
     "  &amp;lt;/Field&amp;gt;\n"
     "&amp;lt;/FieldContainer&amp;gt;\n",
-    "The class for QT windows.\n"
-    "\n"
-    "Do *NOT* use this fcd to recreate the QTWindow code. The QT window is a hybrid\n"
-    "beast that derives from XWindow on Unix and WIN32Window on Windows, and as\n"
-    "such can't be recreated automatically.\n"
+    "The class for Qt4 windows.\n"
     );
 
 /*------------------------------ get -----------------------------------*/
diff --git a/Source/WindowSystem/QT4/OSGQT4WindowBase.h b/Source/WindowSystem/QT4/OSGQT4WindowBase.h
index 3e6ce8c..fd010e1 100644
--- a/Source/WindowSystem/QT4/OSGQT4WindowBase.h
+++ b/Source/WindowSystem/QT4/OSGQT4WindowBase.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -63,7 +63,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 //#include "OSGBaseTypes.h"
 
-#include "OSGNativeWindow.h" // Parent
+#include "OSGWindow.h" // Parent
 
 #include "OSGQT4WindowDataFields.h"     // GlWidget type
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -75,12 +75,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; class QT4Window;
 
 //! \brief QT4Window Base Class.
 
-class OSG_WINDOWQT4_DLLMAPPING QT4WindowBase : public NativeWindow
+class OSG_WINDOWQT4_DLLMAPPING QT4WindowBase : public Window
 {
   public:
 
-    typedef NativeWindow Inherited;
-    typedef NativeWindow ParentContainer;
+    typedef Window Inherited;
+    typedef Window ParentContainer;
 
     typedef Inherited::TypeObject TypeObject;
     typedef TypeObject::InitPhase InitPhase;
diff --git a/Source/WindowSystem/QT4/OSGQT4WindowDataFields.h b/Source/WindowSystem/QT4/OSGQT4WindowDataFields.h
index a0a778b..d694a2d 100644
--- a/Source/WindowSystem/QT4/OSGQT4WindowDataFields.h
+++ b/Source/WindowSystem/QT4/OSGQT4WindowDataFields.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -48,7 +48,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 #include "OSGWindowQT4Def.h"
 
-#include "OSGQ4GLWidget_qt.h"
+#include "OSGQT4GLWidget_qt.h"
 
 #include "OSGWindowFields.h"
 
diff --git a/Source/WindowSystem/QT4/testWindowQT4SSM_qt.cpp b/Source/WindowSystem/QT4/testWindowQT4SSM_qt.cpp
index ed334f6..3f2cc4d 100644
--- a/Source/WindowSystem/QT4/testWindowQT4SSM_qt.cpp
+++ b/Source/WindowSystem/QT4/testWindowQT4SSM_qt.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -13,93 +13,132 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 #include "OSGQT4Window.h"
 
-const int nwindows = 2;
+#ifdef Q_WS_X11
+#include &amp;lt;X11/Xlib.h&amp;gt;
+#endif
 
-// We need our own context to prevent Qt to set its own context current
-class MyQGLContext : public QGLContext
-{
-public:
-    MyQGLContext (const QGLFormat &amp;amp; format) :
-        QGLContext(format)
-        {};
-    virtual void makeCurrent (){}; // on makeCurrent() just do pretty nothing
-};
+const int nwindows = 2;
 
 class MyOSGQGLWidget : public OSG::OSGQGLWidget
 {
     //Q_OBJECT
 
-    public:
-        MyOSGQGLWidget(      QWidget         *parent = 0,
-                       const char            *name   = 0 );
-        MyOSGQGLWidget(      MyQGLContext    *context,
-                             QWidget         *parent      = 0,
-                       const QGLWidget       *shareWidget = 0,
-                             Qt::WindowFlags  f           = 0 );
-
-        virtual ~MyOSGQGLWidget(void);
-
-        OSG::SimpleSceneManager *m_manager;
-
-    protected:
-        virtual void initializeGL (void);
-        virtual void paintGL (void);
-        virtual void resizeGL (int w, int h);
-        virtual void mousePressEvent ( QMouseEvent* );
-        virtual void mouseReleaseEvent ( QMouseEvent* );
-        virtual void mouseMoveEvent ( QMouseEvent* );
-        virtual void keyPressEvent ( QKeyEvent* );
+  public:
+    MyOSGQGLWidget(      QWidget         *parent = 0,
+                   const char            *name   = 0 );
+    MyOSGQGLWidget(      QGLContext      *context,
+                         QWidget         *parent      = 0,
+                   const QGLWidget       *shareWidget = 0,
+                         Qt::WindowFlags  f           = 0 );
+
+    virtual ~MyOSGQGLWidget(void);
+
+    OSG::SimpleSceneManager *_manager;
+
+  protected:
+    virtual void initializeGL(void                 );
+    virtual void paintGL     (void                 );
+    virtual void resizeGL    (int width, int height);
+
+    virtual void closeEvent (QCloseEvent  *ce);
+
+    virtual void mousePressEvent  (QMouseEvent *me);
+    virtual void mouseReleaseEvent(QMouseEvent *me);
+    virtual void mouseMoveEvent   (QMouseEvent *me);
+    virtual void keyPressEvent    (QKeyEvent   *ke);
+
+    void commonInit(void);
+
+    static void renderThreadFunc(void *threadData);
+
+    OSG::ThreadRefPtr  _renderThread;
+    OSG::CondVarRefPtr _renderThreadCondVar;
+
+    bool               _initialized;
+    bool               _requestPaint;
+    bool               _requestExit;
 };
 
 MyOSGQGLWidget    *glWidgets[nwindows];
 QApplication      *a;
 
-MyOSGQGLWidget::MyOSGQGLWidget ( QWidget *parent, const char *name ) :
-    OSGQGLWidget( parent, name )
+MyOSGQGLWidget::MyOSGQGLWidget(QWidget    *parent,
+                               const char *name   ) :
+    OSGQGLWidget        (parent, name),
+    _manager            (NULL),
+    _renderThread       (NULL),
+    _renderThreadCondVar(NULL),
+    _initialized        (false),
+    _requestPaint       (false),
+    _requestExit        (false)
 {
-    m_manager = new OSG::SimpleSceneManager;
-    m_manager-&amp;gt;setUseTraversalAction(true);
+    commonInit();
 }
 
-MyOSGQGLWidget::MyOSGQGLWidget( MyQGLContext * context,
-    QWidget * parent,
-    const QGLWidget * shareWidget,
-    Qt::WindowFlags f) :
-OSGQGLWidget(context, parent, shareWidget, f)
+MyOSGQGLWidget::MyOSGQGLWidget(QGLContext      *context,
+                               QWidget         *parent,
+                               const QGLWidget *shareWidget,
+                               Qt::WindowFlags  f           ) :
+    OSGQGLWidget        (context, parent, shareWidget, f),
+    _manager            (NULL),
+    _renderThread       (NULL),
+    _renderThreadCondVar(NULL),
+    _initialized        (false),
+    _requestPaint       (false),
+    _requestExit        (false)
 {
-    m_manager = new OSG::SimpleSceneManager;
-    m_manager-&amp;gt;setUseTraversalAction(true);
+    commonInit();
 }
 
 MyOSGQGLWidget::~MyOSGQGLWidget(void)
 {
-    delete m_manager;
-    m_manager = NULL;
+    _renderThreadCondVar-&amp;gt;acquire();
+    _requestExit = true;
+    _renderThreadCondVar-&amp;gt;signal ();
+    _renderThreadCondVar-&amp;gt;release();
+
+    OSG::Thread::join(_renderThread);
+
+    delete _manager;
+    _manager = NULL;
+}
+
+void MyOSGQGLWidget::initializeGL(void)
+{
+    _manager-&amp;gt;getWindow()-&amp;gt;init();
 }
 
-void MyOSGQGLWidget::initializeGL ( void )
+void MyOSGQGLWidget::paintGL(void)
 {
-    m_manager-&amp;gt;getWindow()-&amp;gt;init();       // create the context
-//    m_manager-&amp;gt;getWindow()-&amp;gt;activate();   // and activate it
+    _renderThreadCondVar-&amp;gt;acquire();
+    _requestPaint = true;
+    _renderThreadCondVar-&amp;gt;signal ();
+    _renderThreadCondVar-&amp;gt;release();
 }
 
-void MyOSGQGLWidget::paintGL ( void )
+void MyOSGQGLWidget::resizeGL(int width, int height)
 {
-    m_manager-&amp;gt;idle();
-    m_manager-&amp;gt;redraw();
-    OSG::Thread::getCurrentChangeList()-&amp;gt;clear();
+    _renderThreadCondVar-&amp;gt;acquire();
+    _manager-&amp;gt;resize(width, height);
+    _renderThreadCondVar-&amp;gt;release();
+
+    update();
 }
 
-void MyOSGQGLWidget::resizeGL ( int w, int h )
+void MyOSGQGLWidget::closeEvent(QCloseEvent *ce)
 {
-    m_manager-&amp;gt;resize(w, h);
-    repaint();
+    _renderThreadCondVar-&amp;gt;acquire();
+    _requestExit = true;
+    _renderThreadCondVar-&amp;gt;signal ();
+    _renderThreadCondVar-&amp;gt;release();
+
+    OSG::Thread::join(_renderThread);
 }
 
-void MyOSGQGLWidget::mousePressEvent ( QMouseEvent *me )
+void MyOSGQGLWidget::mousePressEvent(QMouseEvent *me)
 {
-    OSG::UInt16 but;
-    switch ( me-&amp;gt;button() ) 
+    OSG::UInt16 but = OSG::SimpleSceneManager::NoButton;
+    switch(me-&amp;gt;button())
     {
     case Qt::LeftButton:    but=OSG::SimpleSceneManager::MouseLeft;   break;
     case Qt::MidButton:     but=OSG::SimpleSceneManager::MouseMiddle; break;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -107,14 +146,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void MyOSGQGLWidget::mousePressEvent ( QMouseEvent *me )
         default: break;
     }
 
-    m_manager-&amp;gt;mouseButtonPress( but, me-&amp;gt;pos().x(), me-&amp;gt;pos().y() );
-    repaint();
+    _renderThreadCondVar-&amp;gt;acquire();
+    _manager-&amp;gt;mouseButtonPress(but, me-&amp;gt;pos().x(), me-&amp;gt;pos().y());
+    _renderThreadCondVar-&amp;gt;release();
+
+    update();
 }
 
-void MyOSGQGLWidget::mouseReleaseEvent ( QMouseEvent *me )
+void MyOSGQGLWidget::mouseReleaseEvent(QMouseEvent *me)
 {
     OSG::UInt16 but = OSG::SimpleSceneManager::NoButton;
-    switch ( me-&amp;gt;button() ) 
+    switch(me-&amp;gt;button())
     {
     case Qt::LeftButton:    but=OSG::SimpleSceneManager::MouseLeft;   break;
     case Qt::MidButton:     but=OSG::SimpleSceneManager::MouseMiddle; break;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -122,36 +164,85 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void MyOSGQGLWidget::mouseReleaseEvent ( QMouseEvent *me )
     default:                                                 break;
     }
 
-    m_manager-&amp;gt;mouseButtonRelease( but, me-&amp;gt;pos().x(), me-&amp;gt;pos().y() );
-    repaint();
+    _renderThreadCondVar-&amp;gt;acquire();
+    _manager-&amp;gt;mouseButtonRelease( but, me-&amp;gt;pos().x(), me-&amp;gt;pos().y() );
+    _renderThreadCondVar-&amp;gt;release();
+
+    update();
 }
 
-void MyOSGQGLWidget::mouseMoveEvent ( QMouseEvent *me )
+void MyOSGQGLWidget::mouseMoveEvent(QMouseEvent *me)
 {
-    m_manager-&amp;gt;mouseMove( me-&amp;gt;pos().x(), me-&amp;gt;pos().y() );
-    repaint();
-}
+    _renderThreadCondVar-&amp;gt;acquire();
+    _manager-&amp;gt;mouseMove( me-&amp;gt;pos().x(), me-&amp;gt;pos().y() );
+    _renderThreadCondVar-&amp;gt;release();
 
+    update();
+}
 
-void MyOSGQGLWidget::keyPressEvent ( QKeyEvent *ke )
+void MyOSGQGLWidget::keyPressEvent(QKeyEvent *ke)
 {
-    if ( ke-&amp;gt;key() == Qt::Key_Escape )
+    if(ke-&amp;gt;key() == Qt::Key_Escape)
     {
         a-&amp;gt;quit();
     }
     else
     {
-        repaint();
+        update();
+    }
+}
+
+void MyOSGQGLWidget::commonInit(void)
+{
+    setAutoBufferSwap(false);
+
+    _manager             = new OSG::SimpleSceneManager;
+    _renderThread        = OSG::Thread::get(NULL, false);
+    _renderThreadCondVar = OSG::CondVar::get(NULL, false);
+
+    _renderThread-&amp;gt;runFunction(&amp;amp;MyOSGQGLWidget::renderThreadFunc,
+                               OSG::Thread::getCurrentAspect(),
+                               this);
+}
+
+void MyOSGQGLWidget::renderThreadFunc(void *threadData)
+{
+    MyOSGQGLWidget *pThis = static_cast&amp;lt;MyOSGQGLWidget *&amp;gt;(threadData);
+
+    pThis-&amp;gt;_renderThreadCondVar-&amp;gt;acquire();
+
+    while(pThis-&amp;gt;_requestExit == false)
+    {
+        if(pThis-&amp;gt;_requestPaint == true)
+        {
+            pThis-&amp;gt;_requestPaint = false;
+
+            pThis-&amp;gt;_manager-&amp;gt;idle  ();
+            pThis-&amp;gt;_manager-&amp;gt;redraw();
+
+            pThis-&amp;gt;_manager-&amp;gt;getWindow()-&amp;gt;swap      ();
+            pThis-&amp;gt;_manager-&amp;gt;getWindow()-&amp;gt;deactivate();
+        }
+
+        pThis-&amp;gt;_renderThreadCondVar-&amp;gt;wait();
     }
+
+    pThis-&amp;gt;_renderThreadCondVar-&amp;gt;release();
 }
 
 
+
+
 int main( int argc, char **argv )
 {
+#ifdef Q_WS_X11
+    XInitThreads();
+#endif
+
     // OSG init
 
     OSG::osgInit(argc, argv);
-    
+
     // QT init
 
     QApplication::setColorSpec( QApplication::CustomColor );
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -165,18 +256,18 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int main( int argc, char **argv )
 
     // Create Windows
 
-    QGLFormat::setDefaultFormat(QGLFormat(QGL::DirectRendering | 
-                                          QGL::DoubleBuffer    |  
+    QGLFormat::setDefaultFormat(QGLFormat(QGL::DirectRendering |
+                                          QGL::DoubleBuffer    |
                                           QGL::DepthBuffer     |
                                           QGL::Rgba            ));
-    
-    
+
+
     for(int i = 0; i &amp;lt; nwindows; ++i)
     {
-        glWidgets[i] = new MyOSGQGLWidget(new MyQGLContext(QGLFormat::defaultFormat()), 0, 0, 0);;
+        glWidgets[i] = new MyOSGQGLWidget(new QGLContext(QGLFormat::defaultFormat()), 0, 0, 0);;
 
         OSG::QT4WindowRecPtr win = OSG::QT4Window::create();
-        win-&amp;gt;setGlWidget( glWidgets[i] );
+        win-&amp;gt;setGlWidget(glWidgets[i]);
 
         // note: you can't share the scene between the windows, as the SSM
         // adds it to his lightsource, and that can only be done for one
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -186,10 +277,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int main( int argc, char **argv )
         OSG::NodeUnrecPtr scene = OSG::makeTorus( .5, 2, 16, 16 );
 
         OSG::commitChanges();
- 
-        glWidgets[i]-&amp;gt;m_manager-&amp;gt;setWindow( win );
-        glWidgets[i]-&amp;gt;m_manager-&amp;gt;setRoot( scene );
-        glWidgets[i]-&amp;gt;m_manager-&amp;gt;showAll();
+
+        glWidgets[i]-&amp;gt;_manager-&amp;gt;setWindow(win);
+        glWidgets[i]-&amp;gt;_manager-&amp;gt;setRoot(scene);
+        glWidgets[i]-&amp;gt;_manager-&amp;gt;showAll();
 
         a-&amp;gt;processEvents();
 
diff --git a/Source/WindowSystem/QT4/testWindowQT4_qt.cpp b/Source/WindowSystem/QT4/testWindowQT4_qt.cpp
index 3337a78..0f644ef 100644
--- a/Source/WindowSystem/QT4/testWindowQT4_qt.cpp
+++ b/Source/WindowSystem/QT4/testWindowQT4_qt.cpp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -48,26 +48,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 #include "OSGTrackball.h"
 
-// We need our own context to prevent Qt to set its own context current
-class MyQGLContext : public QGLContext
-{
-public:
-    MyQGLContext (const QGLFormat &amp;amp; format) :
-        QGLContext(format)
-        {};
-    virtual void makeCurrent (){}; // on makeCurrent() just do pretty nothing
-};
-
 class MyOSGQGLWidget : public OSG::OSGQGLWidget
 {
-    public:
-        MyOSGQGLWidget( QWidget *parent=0, const char *name=0 );
-        MyOSGQGLWidget( MyQGLContext * context,
-            QWidget * parent = 0,
-            const QGLWidget * shareWidget = 0,
-            Qt::WindowFlags f = 0);
-
-        OSG::Trackball   tball;
+  public:
+    MyOSGQGLWidget(      QWidget         *parent      = 0,
+                   const char            *name        = 0 );
+    MyOSGQGLWidget(      QGLContext      *context,
+                         QWidget         *parent      = 0,
+                   const QGLWidget       *shareWidget = 0,
+                         Qt::WindowFlags  f           = 0 );
+
+        OSG::Trackball       tball;
         OSG::QT4WindowRecPtr osgWin;
 
     protected:      
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -98,19 +89,31 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; OSG::PerspectiveCameraRecPtr cam;
 
 OSG::QT4WindowRecPtr osgTWin;
 
-MyOSGQGLWidget::MyOSGQGLWidget ( QWidget *parent, const char *name ) :
-    OSG::OSGQGLWidget( parent, name )
+MyOSGQGLWidget::MyOSGQGLWidget(QWidget    *parent,
+                               const char *name   ) :
+    OSGQGLWidget(parent, name),
+    tball       (),
+    osgWin      (NULL),
+    mouseb      (0),
+    lastx       (0),
+    lasty       (0)
 {
 }
 
-MyOSGQGLWidget::MyOSGQGLWidget( MyQGLContext * context,
-    QWidget * parent,
-    const QGLWidget * shareWidget,
-    Qt::WindowFlags f) :
-OSG::OSGQGLWidget(context, parent, shareWidget, f)
-{}
+MyOSGQGLWidget::MyOSGQGLWidget(QGLContext       *context,
+                               QWidget          *parent,
+                               const QGLWidget  *shareWidget,
+                               Qt::WindowFlags   f) :
+    OSG::OSGQGLWidget(context, parent, shareWidget, f),
+    tball       (),
+    osgWin      (NULL),
+    mouseb      (0),
+    lastx       (0),
+    lasty       (0)
+{
+}
 
-void MyOSGQGLWidget::initOpenGL ( void )
+void MyOSGQGLWidget::initOpenGL( void )
 {
     // some manual init
     glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -132,31 +135,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void MyOSGQGLWidget::initializeGL ( void )
 {
     osgWin-&amp;gt;init(&amp;amp;MyOSGQGLWidget::initOpenGL);     // create the context
 
-#if 0
-    osgWin-&amp;gt;activate(); // and activate it
-
-    // some manual init
-    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
-    glPixelStorei(GL_PACK_ALIGNMENT,   1);
-
-    glDepthFunc(GL_LEQUAL    );
-    glEnable   (GL_DEPTH_TEST);
-
-    glEnable   (GL_NORMALIZE );
-
-    // switch off default light
-    Real32 nul[4]={0.f,0.f,0.f,0.f};
-
-    glLightfv(GL_LIGHT0, GL_DIFFUSE,  nul);
-    glLightfv(GL_LIGHT0, GL_SPECULAR, nul);
-#endif
-
     OSG::commitChanges();
-
-#if 0
-    osgWin-&amp;gt;frameInit();    // call it to setup extensions
-    osgWin-&amp;gt;frameExit();    // for symmetry
-#endif
 }
 
 void MyOSGQGLWidget::paintGL ( void )
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -164,10 +143,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void MyOSGQGLWidget::paintGL ( void )
     OSG::Matrix m1, m2, m3;
     OSG::Quaternion q1;
 
-#if 0
-    osgWin-&amp;gt;frameInit();    // frame-init
-#endif
-
     tball.getRotation().getValue(m3);
     q1.setValue(m3);
     m1.setRotate(q1);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -177,18 +152,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void MyOSGQGLWidget::paintGL ( void )
 
     OSG::commitChanges();
 
-    osgWin-&amp;gt;render(ract);   // draw the viewports     
-
-#if 0
-    osgWin-&amp;gt;renderAllViewports( ract );   // draw the viewports     
-    osgWin-&amp;gt;swap(); 
-
-    osgWin-&amp;gt;frameExit();    // frame-cleanup
-#endif
+    osgWin-&amp;gt;render(ract);   // draw the viewports
 }
 
 void MyOSGQGLWidget::resizeGL ( int w, int h )
-{   
+{
     osgWin-&amp;gt;resize( w, h );
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -331,8 +299,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int main( int argc, char **argv )
 
     dlight-&amp;gt;addChild( file );
 
-    std::cerr &amp;lt;&amp;lt; "Tree: " &amp;lt;&amp;lt; std::endl;
-    root-&amp;gt;dump();
+    // std::cerr &amp;lt;&amp;lt; "Tree: " &amp;lt;&amp;lt; std::endl;
+    // root-&amp;gt;dump();
 
     // Camera
     OSG::PerspectiveCameraRecPtr cam = OSG::PerspectiveCamera::create();
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -369,7 +337,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int main( int argc, char **argv )
     OSG::Vec3f pos( 0, 0, max[2] + ( max[2] - min[2] ) * 1.5 );
 
     // Create Window
-    glWidget = new MyOSGQGLWidget(new MyQGLContext(QGLFormat::defaultFormat()), 0, 0, 0);
+    glWidget = new MyOSGQGLWidget(new QGLContext(QGLFormat::defaultFormat()), 0, 0, 0);
 
     glWidget-&amp;gt;tball.setMode( OSG::Trackball::OSGObject );
     glWidget-&amp;gt;tball.setStartPosition( pos, true );
&lt;/pre&gt;</description>
    <dc:creator>Carsten Neumann</dc:creator>
    <dc:date>2011-05-19T00:09:58</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/116">
    <title>OpenSG  WebGL client?</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/116</link>
    <description>&lt;pre&gt;
Hi All,

on the OSG list there is some discussion about embedding OSG ina web page, and 
this just came through:

Message: 2
Date: Thu, 07 Apr 2011 15:27:54 -0400
From: Peter Amstutz &amp;lt;peter.amstutz-Tm69T9whmJaaMJb+Lgu22Q&amp;lt; at &amp;gt;public.gmane.org&amp;gt;
To: OpenSceneGraph Users &amp;lt;osg-users-ZwoEplunGu0hajLcUbyfC12AsgEQdTeF&amp;lt; at &amp;gt;public.gmane.org&amp;gt;
Subject: Re: [osg-users] OSG plugin for browsers
Message-ID: &amp;lt;4D9E103A.9060901-Tm69T9whmJaaMJb+Lgu22Q&amp;lt; at &amp;gt;public.gmane.org&amp;gt;
Content-Type: text/plain; charset=ISO-8859-1

On 4/7/2011 5:30 AM, Thibault Genessay wrote:
 &amp;gt; &amp;gt; Other people have thought of alternatives to display 3D content:
 &amp;gt; &amp;gt; - osgjs - which re-implements the OSG in Javascript. Although the API
 &amp;gt; &amp;gt; is very close to the C++ one, it is not a way to embed an OSG app in a
 &amp;gt; &amp;gt; browser
 &amp;gt; &amp;gt; - webGL. If I am not mistaken, this leaves out the OSG entirely, and
 &amp;gt; &amp;gt; only aims at displaying 3D models. Kind of a new VRML thing.
 &amp;gt; &amp;gt;
Just to clarify, WebGL consists of Javascript bindings for OpenGL, which
are used by osgjs for rendering.  So if you already have a C++ program,
you would need to port it to javascript in order to use such libraries.
Possibly you could emit opengl calls from the C++ server side and
execute them in the client with WebGL, but that would be pretty
bandwidth intensive and subject to lag.

Broadly speaking, if the goal is to execute native code using OSG in the
browser, you're going to run up against all the security, hardware
architecture etc problems that plague all such efforts.

My preference would be for a solution that transmits the scene graph to
the browser to be rendered using something like osgjs and the server
sends scene graph updates, but that is somewhat complex and difficult to
do transparently as osg lacks the necessary "value changed" hooks to
record the changes that occur in the scene graph from frame to frame.



... but OpenSG has them. :)

Just as a thought experiment, what would it take to have a web application that 
could connect to an OpenSG program on a server and receive RemoteAspect syncs 
through HTTP? Would that be something interesting to try?

I'm not advocating working on it just yet, but somehow the idea is intriguing...

What do you think?

Dirk


------------------------------------------------------------------------------
Xperia(TM) PLAY
It's a major breakthrough. An authentic gaming
smartphone on the nation's most reliable network.
And it wants your games.
http://p.sf.net/sfu/verizon-sfdev
&lt;/pre&gt;</description>
    <dc:creator>Dirk Reiners</dc:creator>
    <dc:date>2011-04-08T15:22:13</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/114">
    <title>IEEE VR 2011</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/114</link>
    <description>&lt;pre&gt;
Hi,

I will be there so if anybody wants to talk about OpenSG,
where it is going, where problems are, what we should change,
what we should fix, what we did wrong, what we should address, ... 

Just drop me a line ;)

kind regards
  gerrit


&lt;/pre&gt;</description>
    <dc:creator>Gerrit Voß</dc:creator>
    <dc:date>2011-03-15T04:14:48</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/113">
    <title>FYI post-receive email script installed</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/113</link>
    <description>&lt;pre&gt;Hello all,

just as an FYI I've set up a post-receive hook for the git repo on 
sourceforge to sent commit mails, the script is the one recommended by 
sf here: 
&amp;lt;https://sourceforge.net/apps/trac/sourceforge/wiki/Git#Commitemailhooksetup&amp;gt;
and lives in /home/scm_git/o/op/opensg/opensg/hooks when using a sf 
shell - in case you feel like tuning it or there are problems and you 
need to disable it (just remove the post-receive symlink to the actual 
script).

Cheers,
Carsten

------------------------------------------------------------------------------
Free Software Download: Index, Search &amp;amp; Analyze Logs and other IT data in 
Real-Time with Splunk. Collect, index and harness all the fast moving IT data 
generated by your applications, servers and devices whether physical, virtual
or in the cloud. Deliver compliance at lower cost and gain new business 
insights. http://p.sf.net/sfu/splunk-dev2dev 
&lt;/pre&gt;</description>
    <dc:creator>Carsten Neumann</dc:creator>
    <dc:date>2011-03-03T16:53:14</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/110">
    <title>github cvs tree -&gt; sf cvs repository</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/110</link>
    <description>&lt;pre&gt;
Dear all,

as the sf cvs is back (with log mails ;)) I pushed the github commits
back to sf so both repositories are identical again. If nobody
wants me to keep him around I will remove the github tree 
and go back to let the cvs repository be the master.

As I don't know how many people have adjusted their build scripts
I'll leave the tree until early next week.

kind regards
  gerrit

&lt;/pre&gt;</description>
    <dc:creator>Gerrit Voß</dc:creator>
    <dc:date>2011-02-26T00:46:57</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/76">
    <title>Separate library doxygen documentation</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/76</link>
    <description>&lt;pre&gt;I would like to submit a patch that adds support for separate doxygen
documentation for each OpenSG library similar to the discussion
here&amp;lt;http://www.opensg.org/wiki/Dev/Documentation&amp;gt;
.

 I added support for building separate doxygen documentation for each OpenSG
library.  The separate documentation trees reference the documentation of
dependent libraries.  New build targets are made for building the
documentation of a library, e.g. to make the OSGDrawable library
documentation use: make OSGDrawableDoc.  This will build the dependent
library docs first.

The new cmake option OSG_GENERATE_SEPARATE_LIB_DOC can be used to turn  the
building of separate doxygen documentation on or off.  By default it is off.

I also added cmake configuration for installing doxygen documentation. If
the new cmake option OSG_INSTALL_DOXYDOC is on then the doxygen
documentation will be installed to
&amp;lt;INSTALL_PREFIX&amp;gt;/share/OpenSG/documentation. By default OSG_INSTALL_DOXYDOC
is off.

The following is a link to an example build of the documentation.  Note,
this is a doc build from a fork of the OpenSG 2 repository with some of my
own additions to the core OpenSG source.
http://www.vrac.iastate.edu/~dkabala/OpenSGDocExample&amp;lt;http://www.vrac.iastate.edu/%7Edkabala/OpenSGDocExample&amp;gt;

Findings: Preliminary testing indicates that separating the libraries does
not decrease the time needed to build ALL of the library's documentation.
However, building is faster on a per-library basis than when the build is
not separated.  The real benefit is realized when only part of the
documentation needs to be rebuilt, in that case only the documentation of
the changed library needs to be built.  Also, given the size of some contrib
libraries to OpenSG, mine in particular :), a single monolithic build takes
a very long time, and can consume a large amount of memory.

Future work: Currently there is no main html page that can be used to
navigate between the separate documentation trees.  I would like to create a
template html file that would have a tree gui component that linked to each
of the libraries documentation trees.  This template html file would be
filled with the correct structure and linking information during cmake
configuration if the OSG_GENERATE_SEPARATE_LIB_DOC is on.  Suggestions on
other strategies?

I am willing to help with any bugs, deficiencies, changes that this
contribution may have/need if you choose to add it.

Thanks,
David Kabala
------------------------------------------------------------------------------
Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)!
Finally, a world-class log management solution at an even better price-free!
Download using promo code Free_Logger_4_Dev2Dev. Offer expires 
February 28th, so secure your free ArcSight Logger TODAY! 
http://p.sf.net/sfu/arcsight-sfd2d&lt;/pre&gt;</description>
    <dc:creator>David Kabala</dc:creator>
    <dc:date>2011-01-21T00:05:45</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/68">
    <title>OpenSG 2 python bindings</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/68</link>
    <description>&lt;pre&gt;
Hi,

as this came up internally, can somebody give me a hint as to
the status and where I can get started to look at it. It seems
more sooner than later that I will need some form of (at least basic)
script support. So I would like to have another structured go at it ;)

kind regards
  gerrit

&lt;/pre&gt;</description>
    <dc:creator>Gerrit Voß</dc:creator>
    <dc:date>2011-01-11T07:49:36</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/64">
    <title>Some File I/O WIP - RFC</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/64</link>
    <description>&lt;pre&gt;Hello all,

I've a patch set (attached) that adds support for reading containers 
(not just nodes) to the SceneFileHandler and all SceneFileTypes in trunk 
(there was some talk about this a while back).
I've taken the opportunity to also do some cleanup on the 
SFHandler/SFType interface, the most notable change is that the handler 
now gets passed down to the SFType. The motivation here is that 
currently it is not possible to safely load more than one file in 
parallel [1], because there is only one SFH and loaders access the 
singleton whenever they need to pull in additional files (changing e.g. 
the state of the PathHandler).
If we allow the SFH to be cloned, each clone can operate in parallel 
with the others, as long as the loaders only operate on the instance 
passed to them. Of course for convenience a global instance remains 
accessible with SceneFileHandler::the().

Some things that I'd also like to add (so not in the patch yet):

- For the parallel load to also work for images, I want to give the SFH 
a pointer to an associated ImageFileHandler, that then gets used by the 
loaders instead of going through the singleton.

- Do we want to keep the read/write callback in SFH? What are they good 
for anyway, it looks as if they hijack the loading process?

- Do we want to keep the progress callbacks?

- If we keep any of the above, can I convert them to use boost::function?

- I would like to have some support for caching in the loader 
infrastructure [2]. My current thinking is to define an abstract 
ContainerCache:

class ContainerCache
{
typedef std::vector&amp;lt;FieldContainerUnrecPtr&amp;gt; ContainerVecType;

virtual Int32 insert(const ContainerVecType &amp;amp;containers,
                      const std::string      &amp;amp;fileName,
             const std::string      &amp;amp;name = "",
     const FieldContainerType &amp;amp;type =
                          FieldContainer::getClassType()) = 0;

virtual Int32 lookup(const std::string      &amp;amp;fileName,
             const std::string      &amp;amp;name = "",
     const FieldContainerType &amp;amp;type =
                          FieldContainer::getClassType()) const = 0;

virtual ContainerVecType clone(Int32 handle) const = 0;


// plus some bookkeeping stuff like clear(), empty()
};

and leave it up to applications to provide an implementation that meets 
their requirements. The name and type argument are meant to be more or 
less optional, just to give the cache implementation a better hint what 
is being asked for. SFH could then first query the cache if it has 
something suitable and then obtain a clone (shallow/deep up to the cache 
implementation/app) to use.

Comments welcome :)

Cheers,
Carsten


[1] BTW, this makes using Contrib/BackgroundLoader with more than one 
thread somewhat unsafe :-/

[2] we've switched to the OGRE file format for our characters where the 
skeleton/animations live in a separate file from the meshes. All our 
characters use the same skeleton/anims so when loading the mesh file 
(which contains the name of the skeleton file) I would like to avoid 
loading the skeleton/animations again every time.
------------------------------------------------------------------------------
Gaining the trust of online customers is vital for the success of any company
that requires sensitive data to be transmitted over the Web.   Learn how to 
best implement a security strategy that keeps consumers' information secure 
and instills the confidence they need to proceed with transactions.
http://p.sf.net/sfu/oracle-sfdevnl &lt;/pre&gt;</description>
    <dc:creator>Carsten Neumann</dc:creator>
    <dc:date>2011-01-07T23:19:44</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/63">
    <title>OpenSG website and subversion outage</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/63</link>
    <description>&lt;pre&gt;Hello all,

there is a planned network outage today in the building that houses the 
OpenSG web and subversion server. It is scheduled from 6PM - 12AM CDT.

Apologies for the short notice.

Cheers,
Carsten

------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing.
http://p.sf.net/sfu/novell-sfdev2dev
&lt;/pre&gt;</description>
    <dc:creator>Carsten Neumann</dc:creator>
    <dc:date>2010-09-20T22:21:58</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/56">
    <title>AttachmentContainer ref counting</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/56</link>
    <description>&lt;pre&gt;Hello Gerrit,

we are having one more problem with our app. The setup is like this:

editor:
Aspect 0: multiple threads implementing the editor logic
Aspect 1: one thread sending changes to our cave

cave:
Aspect 0: one thread rendering
Aspect 1: one thread receiving changes

The cave part crashes under certain (reproducible) circumstances in 
AttachmentContainer::resolveLinks on the unlinkParent call. It looks 
like the attachment is already gone.
Looking through the ref counting for the attachments I've noticed that 
there is the isMTLocal() check and depending on that a recorded or 
unrecorded ref change is made. I don't think that is correct, since the 
attachment map essentially behaves like a field and we never record the 
ref count changes made by a field, so I believe these should all be 
unrecorded.
Indeed the attached patch fixes our problem. What do you think?
The isMTLocal() change was done in r1357, maybe the commit message 
"record attachment refcounts if container is a bundle to fix multi 
aspect mem leak" allows you to recall what the problem addressed by it was?

Thanks &amp;amp; Cheers,
Carsten

------------------------------------------------------------------------------
This SF.net email is sponsored by 

Make an app they can't live without
Enter the BlackBerry Developer Challenge
http://p.sf.net/sfu/RIM-dev2dev &lt;/pre&gt;</description>
    <dc:creator>Carsten Neumann</dc:creator>
    <dc:date>2010-08-18T21:07:23</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/47">
    <title>CL Entry cache in FC and multiple threads on oneaspect</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/47</link>
    <description>&lt;pre&gt;Hello all,

we've run into a problem with our app that runs multiple threads on one 
aspect when connecting it to a cluster server.
Consider the following scenario:

Thread A:
- changes field F0 in container C
in FC::registerChangedContainer _pContainerChanges points to an entry in 
the CL of Thread A.
- commitChanges();

Thread B:
- changes field F1 in container C
because of the commitChanges _bvChanges == 0x00
so FC::registerChangedContainer runs, but only puts an uncommitted 
change for F1 into the CL of Thread B.
- commitChanges();

The change to F1 will not be transmitted over the cluster, because it is 
lost after the commitChanges clears the uncommitedChanges list of the CL 
of Thread B.
Attached is a patch that changes the behaviour of 
FC::registerChangedContainer() to only skip creation of a new CL entry 
if _pContainerChanges points into the current thread's CL.

Comments? Other ideas to solve this?

Cheers,
Carsten

------------------------------------------------------------------------------
This SF.net email is sponsored by 

Make an app they can't live without
Enter the BlackBerry Developer Challenge
http://p.sf.net/sfu/RIM-dev2dev &lt;/pre&gt;</description>
    <dc:creator>Carsten Neumann</dc:creator>
    <dc:date>2010-08-13T22:40:43</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/46">
    <title>New shaders (System/State/Shader/Chunks) and cluster</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/46</link>
    <description>&lt;pre&gt;Hello Gerrit,

I'm trying to find out what is causing our application to crash when I 
connect it to a render server and afterwards move the camera to bring an 
animated character into view (everything works fine if I connect after 
the character was already in view on the client).
This is on Fedora 10, x86_64, OpenSG r2474.

The problem seems to be related to 
ShaderProgramVariables/ShaderExecutable{,Var}Chunks, because the server 
prints messages about changes for unknown FC from 
RemoteAspect::receiveSync. Earlier in the logs (attached) these FC are 
created (in response to a CREATE message), but seem to die at the end of 
RemoteAspect::receiveSync.

It is (sort of) possible to reproduce the problem with a slightly 
modified testClusterClient (attached) and unchanged testClusterServer 
[1]. As long as there is a call to 
Thread::getCurrentChangelist()-&amp;gt;clear() in display() the program works, 
but the server complains about unknown FC. This makes sense because the 
CL entries for the creation of ShaderExeChunks are created after 
testClusterClient transmits the CL, but before the clear, so they are 
simply lost [2]. Commenting out the clear() however makes the server 
crash on an assertion in ShaderValueVariable::changed (_mfParents.size() 
== _mfVariableIdx.size()) - the same place our server dies too.

Should the 'backend' parts of the new shader stuff (ShaderExeChunks, 
etc.) actually be transmitted in the cluster?
Any other ideas, or hints where I should look?

Cheers,
Carsten

[1] the changes add a box with an almost trivial shader 'behind' the 
camera, when it comes into view the server starts complaining or crashes 
depending on whether the client clears the CL in display().

[2] this is a problem for the test programs, but not our app, because 
there we merge changes from multiple threads into a 'global' changelist 
and transmit that over the network.
------------------------------------------------------------------------------
This SF.net email is sponsored by 

Make an app they can't live without
Enter the BlackBerry Developer Challenge
http://p.sf.net/sfu/RIM-dev2dev &lt;/pre&gt;</description>
    <dc:creator>Carsten Neumann</dc:creator>
    <dc:date>2010-08-13T22:27:02</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/43">
    <title>RFC/PATCH: Change return type of Thread::getCurrent</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/43</link>
    <description>&lt;pre&gt;Hello,

any objections to installing the attached patch?
The static_cast in Thread::getCurrent() is actually wrong if the current 
thread is an ExternalThread.
There is some (low IMHO) potential to break applications, but doing the 
illegal cast is probably worse long term.

Comments?

Cheers,
Carsten
------------------------------------------------------------------------------

&lt;/pre&gt;</description>
    <dc:creator>Carsten Neumann</dc:creator>
    <dc:date>2010-05-07T02:42:55</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/37">
    <title>Difference between ChunkBlock and State?</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/37</link>
    <description>&lt;pre&gt;Hello Gerrit,

I've been looking a bit at the details of Material and State (originally 
while analysing Micheal Raab's cluster problem [1]).
One thing I've stumbled over is the ChunkBlock, which seems to behave 
very similar to State (i.e. different types of StateChunks end up at 
indices determined by their type). What is the difference between the two?
I've also been wondering if it would make sense to make State not a 
FieldContainer - it mostly seems to be used as a cache for chunks in 
internal parts and especially in Material the multi buffering from being 
a FC is wasted because every aspect creates its very own State object. 
Any objections if I give this a try or reasons why this is a bad idea?

Thanks,
Carsten

[1] see thread "OpenSG1.8 - Destroying Materials in ClusterMode" on 
opensg-users.

------------------------------------------------------------------------------
&lt;/pre&gt;</description>
    <dc:creator>Carsten Neumann</dc:creator>
    <dc:date>2010-04-23T16:01:04</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/32">
    <title>RFC/PATCH: Create RenderTreeNodes from TreeBuilders</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/32</link>
    <description>&lt;pre&gt;Hello all,

attached patch series changes the way we create RenderTreeNodes from 
doing it inside RenderPartition::dropFunctor to TreeBuilderBase::add (or 
derived).
This seems a cleaner interface as the RPart now does not have to care 
what the different TreeBuilder actually store in the RTNode. It also 
allows moving occlusion culling specific data into OCRenderTreeNode that 
is only used by the OcclusionCullingTreeBuilder, reducing the size of 
the base RTNode.

Comments? [1]

Cheers,
Carsten

[1] I'll commit this at the end of the week if nobody objects.
------------------------------------------------------------------------------
&lt;/pre&gt;</description>
    <dc:creator>Carsten Neumann</dc:creator>
    <dc:date>2010-04-20T19:37:20</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/31">
    <title>NSIS packager for cpack</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/31</link>
    <description>&lt;pre&gt;------------------------------------------------------------------------------
Download Intel&amp;amp;#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev&lt;/pre&gt;</description>
    <dc:creator>David Kabala</dc:creator>
    <dc:date>2010-04-13T16:39:02</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.graphics.opensg.devel/28">
    <title>OSG::Path vs boost::path</title>
    <link>http://comments.gmane.org/gmane.comp.graphics.opensg.devel/28</link>
    <description>&lt;pre&gt;
Hi,

does anybody has a problem if we retire the OSG::Path / OSG::Dir stuff
and switch to boost::filesystem instead ??.

The only drawback I see is that we always have to link against a
boost library. 

Comments ??

kind regards
  gerrit



------------------------------------------------------------------------------
Download Intel&amp;amp;#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
&lt;/pre&gt;</description>
    <dc:creator>Gerrit Voß</dc:creator>
    <dc:date>2010-04-09T07:07:04</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.comp.graphics.opensg.devel">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.comp.graphics.opensg.devel</link>
  </textinput>
</rdf:RDF>
