<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">Index: konqueror/konq_mainwindow.cc
===================================================================
RCS file: /home/kde/kdebase/konqueror/konq_mainwindow.cc,v
retrieving revision 1.973.2.2
diff -u -p -r1.973.2.2 konq_mainwindow.cc
--- konqueror/konq_mainwindow.cc	9 Dec 2002 18:39:52 -0000	1.973.2.2
+++ konqueror/konq_mainwindow.cc	4 Aug 2004 21:35:05 -0000
@@ -629,6 +629,7 @@ void KonqMainWindow::slotOpenURLRequest(
 {
   kdDebug(1202) &lt;&lt; "KonqMainWindow::slotOpenURLRequest frameName=" &lt;&lt; args.frameName &lt;&lt; endl;
 
+  KParts::ReadOnlyPart *callingPart = static_cast&lt;KParts::ReadOnlyPart *&gt;( sender()-&gt;parent() );
   QString frameName = args.frameName;
 
   if ( !frameName.isEmpty() )
@@ -649,11 +650,11 @@ void KonqMainWindow::slotOpenURLRequest(
          frameName != _parent )
     {
       KParts::BrowserHostExtension *hostExtension = 0;
-      KonqView *view = childView( frameName, &amp;hostExtension );
+      KonqView *view = childView( callingPart, frameName, &amp;hostExtension, 0 );
       if ( !view )
       {
         KonqMainWindow *mainWindow = 0;
-        view = findChildView( frameName, &amp;mainWindow, &amp;hostExtension );
+        view = findChildView( callingPart, frameName, &amp;mainWindow, &amp;hostExtension, 0 );
 
         if ( !view || !mainWindow )
         {
@@ -676,8 +677,7 @@ void KonqMainWindow::slotOpenURLRequest(
     }
   }
 
-  KParts::ReadOnlyPart *part = static_cast&lt;KParts::ReadOnlyPart *&gt;( sender()-&gt;parent() );
-  KonqView *view = childView( part );
+  KonqView *view = childView( callingPart );
   openURL( view, url, args );
 }
 
@@ -775,16 +775,14 @@ void KonqMainWindow::slotCreateNewWindow
                   &lt;&lt; " args.frameName=" &lt;&lt; args.frameName &lt;&lt; endl;
 
     KonqMainWindow *mainWindow = 0L;
-    KonqView * view = 0L;
     if ( !args.frameName.isEmpty() &amp;&amp; args.frameName != "_blank" )
     {
         KParts::BrowserHostExtension *hostExtension = 0;
-        view = findChildView( args.frameName, &amp;mainWindow, &amp;hostExtension );
-        kdDebug() &lt;&lt; " frame=" &lt;&lt; args.frameName &lt;&lt; " -&gt; found view=" &lt;&lt; view &lt;&lt; endl;
-        if ( view )
+        if ( findChildView( 0, args.frameName, &amp;mainWindow, &amp;hostExtension, &amp;part ) )
         {
             // Found a view. If url isn't empty, we should open it - but this never happens currently
-            part = view-&gt;part();
+            // findChildView put the resulting part in 'part', so we can just return now
+            //kdDebug() &lt;&lt; " frame=" &lt;&lt; args.frameName &lt;&lt; " -&gt; found part=" &lt;&lt; part &lt;&lt; " " &lt;&lt; part-&gt;name() &lt;&lt; endl;
             return;
         }
     }
@@ -806,6 +804,7 @@ void KonqMainWindow::slotCreateNewWindow
 	return;
     }
 
+    KonqView * view = 0L;
     // cannot use activePart/currentView, because the activation through the partmanager
     // is delayed by a singleshot timer (see KonqViewManager::setActivePart)
     if ( mainWindow-&gt;viewMap().count() )
@@ -1728,36 +1727,61 @@ KonqView * KonqMainWindow::childView( KP
     return 0L;
 }
 
-KonqView * KonqMainWindow::childView( const QString &amp;name, KParts::BrowserHostExtension **hostExtension )
+KonqView * KonqMainWindow::childView( KParts::ReadOnlyPart *callingPart, const QString &amp;name, KParts::BrowserHostExtension **hostExtension, KParts::ReadOnlyPart **part )
 {
-  //kdDebug() &lt;&lt; "KonqMainWindow::childView this=" &lt;&lt; this &lt;&lt; " looking for " &lt;&lt; name &lt;&lt; endl;
+  kdDebug() &lt;&lt; "KonqMainWindow::childView this=" &lt;&lt; this &lt;&lt; " looking for " &lt;&lt; name &lt;&lt; endl;
 
   MapViews::ConstIterator it = m_mapViews.begin();
   MapViews::ConstIterator end = m_mapViews.end();
   for (; it != end; ++it )
   {
-    QString viewName = it.data()-&gt;viewName();
-    //kdDebug() &lt;&lt; "       - viewName=" &lt;&lt; viewName &lt;&lt; "   "
-    //          &lt;&lt; "frame names:" &lt;&lt; it.data()-&gt;frameNames().join( "," ) &lt;&lt; endl;
+    KonqView* view = it.data();
+    QString viewName = view-&gt;viewName();
+    kdDebug() &lt;&lt; "       - viewName=" &lt;&lt; viewName &lt;&lt; "   "
+              &lt;&lt; "frame names:" &lt;&lt; view-&gt;frameNames().join( "," ) &lt;&lt; endl;
     if ( !viewName.isEmpty() &amp;&amp; viewName == name )
     {
+      kdDebug() &lt;&lt; "found existing view by name: " &lt;&lt; view &lt;&lt; endl;
       if ( hostExtension )
         *hostExtension = 0;
-      return it.data();
+      if ( part )
+        *part = view-&gt;part();
+      return view;
     }
 
-    if ( it.data()-&gt;frameNames().contains( name ) )
+    // First look for a hostextension containing this frame name
+    KParts::BrowserHostExtension *ext = KParts::BrowserHostExtension::childObject( view-&gt;part() );
+    if ( ext )
     {
-      if ( hostExtension )
-        *hostExtension = KonqView::hostExtension( it.data()-&gt;part(), name );
-      return it.data();
+      ext = ext-&gt;findFrameParent(callingPart, name);
+    }
+    
+//    KParts::BrowserHostExtension* ext = KonqView::hostExtension( view-&gt;part(), name );
+
+    if ( ext )
+    {
+      QPtrList&lt;KParts::ReadOnlyPart&gt; frames = ext-&gt;frames();
+      QPtrListIterator&lt;KParts::ReadOnlyPart&gt; frameIt( frames );
+      for ( ; frameIt.current() ; ++frameIt )
+      {
+        if ( frameIt.current()-&gt;name() == name )
+        {
+          kdDebug() &lt;&lt; "found a frame of name " &lt;&lt; name &lt;&lt; " : " &lt;&lt; frameIt.current() &lt;&lt; endl;
+          if ( hostExtension )
+            *hostExtension = ext;
+          if ( part )
+            *part = frameIt.current();
+          return view;
+        }
+      }
     }
   }
 
   return 0;
 }
 
-KonqView * KonqMainWindow::findChildView( const QString &amp;name, KonqMainWindow **mainWindow, KParts::BrowserHostExtension **hostExtension )
+// static
+KonqView * KonqMainWindow::findChildView( KParts::ReadOnlyPart *callingPart, const QString &amp;name, KonqMainWindow **mainWindow, KParts::BrowserHostExtension **hostExtension, KParts::ReadOnlyPart **part )
 {
   if ( !s_lstViews )
     return 0;
@@ -1765,7 +1789,7 @@ KonqView * KonqMainWindow::findChildView
   QPtrListIterator&lt;KonqMainWindow&gt; it( *s_lstViews );
   for (; it.current(); ++it )
   {
-    KonqView *res = it.current()-&gt;childView( name, hostExtension );
+    KonqView *res = it.current()-&gt;childView( callingPart, name, hostExtension, part );
     if ( res )
     {
       if ( mainWindow )
Index: konqueror/konq_mainwindow.h
===================================================================
RCS file: /home/kde/kdebase/konqueror/konq_mainwindow.h,v
retrieving revision 1.349.2.1
diff -u -p -r1.349.2.1 konq_mainwindow.h
--- konqueror/konq_mainwindow.h	4 Sep 2002 09:22:21 -0000	1.349.2.1
+++ konqueror/konq_mainwindow.h	4 Aug 2004 21:35:05 -0000
@@ -132,10 +132,10 @@ public:
   void insertChildView( KonqView *childView );
   void removeChildView( KonqView *childView );
   KonqView *childView( KParts::ReadOnlyPart *view );
-  KonqView *childView( const QString &amp;name, KParts::BrowserHostExtension **hostExtension );
+  KonqView *childView( KParts::ReadOnlyPart *callingPart, const QString &amp;name, KParts::BrowserHostExtension **hostExtension, KParts::ReadOnlyPart **part );
 
   // dcop idl bug! it can't handle KonqMainWindow *&amp;mainWindow
-  static KonqView *findChildView( const QString &amp;name, KonqMainWindow **mainWindow, KParts::BrowserHostExtension **hostExtension );
+  static KonqView *findChildView( KParts::ReadOnlyPart *callingPart, const QString &amp;name, KonqMainWindow **mainWindow, KParts::BrowserHostExtension **hostExtension, KParts::ReadOnlyPart **part );
 
   // Total number of views
   int viewCount() const { return m_mapViews.count(); }
</pre></body></html>