[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677
mjs
mjs at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 06:37:51 UTC 2009
The following commit has been merged in the debian/unstable branch:
commit 162b6d3f3d3187f606354035c050add47ee4e4fa
Author: mjs <mjs at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Tue Sep 10 23:07:48 2002 +0000
WebCore:
WebCore part of fix for:
2952837 - Slide shows on homepage.mac.com don't show pictures, captions
2942073 - Deferring [BrowserDocument goToInitialURL] can cause problems
3021360 - second window pops up on 'Search' at chrysler.com
3030485 - Unexpected new window created with no scroll bars at sony.com
* kwq/KWQKHTMLPartBrowserExtension.mm:
(KHTMLPartBrowserExtension::createNewWindow): Reuse existing
frame if possible. Pass frame name when opening a new window.
* kwq/KWQKHTMLPartImpl.mm:
(KWQKHTMLPartImpl::bridgeForFrameName): Don't warn when opening a
new window. Check non-descendant frames too.
(KWQKHTMLPartImpl::urlSelected): Pass frame name when opening window.
* kwq/WebCoreBridge.h: Add frameName argument to openNewWindowWithURL:.
WebKit:
WebKit part of fix for:
2952837 - Slide shows on homepage.mac.com don't show pictures, captions
2942073 - Deferring [BrowserDocument goToInitialURL] can cause problems
3021360 - second window pops up on 'Search' at chrysler.com
3030485 - Unexpected new window created with no scroll bars at sony.com
This is done by adding a concept of named controller sets, so that
less browser-like uses of WebKit won't be affected.
* WebCoreSupport.subproj/WebBridge.m:
(-[WebBridge openNewWindowWithURL:frameName:]): Pass frameName
parameter to controller initializer.
* WebView.subproj/WebController.h:
* WebView.subproj/WebController.m:
(-[WebController init]): Pass nil for controllerSetName.
(-[WebController dealloc]):
(-[WebController frameNamed:]): Check other windows in the same set too.
* WebView.subproj/WebControllerPrivate.h:
* WebView.subproj/WebControllerPrivate.m:
(-[WebControllerPrivate dealloc]):
(-[WebController _setDefersCallbacks:]):
(-[WebController _setTopLevelFrameName:]):
(-[WebController _frameInThisWindowNamed:]):
* WebView.subproj/WebControllerSets.h: Added.
* WebView.subproj/WebControllerSets.m: Added.
(+[WebControllerSets addController:toSetNamed:]): Method to
maintain controller sets.
(+[WebControllerSets removeController:fromSetNamed:]): Likewise.
* WebKit.pbproj/project.pbxproj: Add new files.
WebBrowser:
WebBrowser part of fix for:
2952837 - Slide shows on homepage.mac.com don't show pictures, captions
2942073 - Deferring [BrowserDocument goToInitialURL] can cause problems
3021360 - second window pops up on 'Search' at chrysler.com
3030485 - Unexpected new window created with no scroll bars at sony.com
* BrowserWebController.m:
(-[BrowserWebController initWithBrowserDocument:]): Pass
controller set name when creating WebController.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2022 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog-2002-12-03 b/WebCore/ChangeLog-2002-12-03
index d282bef..f6d0e07 100644
--- a/WebCore/ChangeLog-2002-12-03
+++ b/WebCore/ChangeLog-2002-12-03
@@ -1,3 +1,21 @@
+2002-09-10 Maciej Stachowiak <mjs at apple.com>
+
+ WebCore part of fix for:
+
+ 2952837 - Slide shows on homepage.mac.com don't show pictures, captions
+ 2942073 - Deferring [BrowserDocument goToInitialURL] can cause problems
+ 3021360 - second window pops up on 'Search' at chrysler.com
+ 3030485 - Unexpected new window created with no scroll bars at sony.com
+
+ * kwq/KWQKHTMLPartBrowserExtension.mm:
+ (KHTMLPartBrowserExtension::createNewWindow): Reuse existing
+ frame if possible. Pass frame name when opening a new window.
+ * kwq/KWQKHTMLPartImpl.mm:
+ (KWQKHTMLPartImpl::bridgeForFrameName): Don't warn when opening a
+ new window. Check non-descendant frames too.
+ (KWQKHTMLPartImpl::urlSelected): Pass frame name when opening window.
+ * kwq/WebCoreBridge.h: Add frameName argument to openNewWindowWithURL:.
+
2002-09-10 Darin Adler <darin at apple.com>
Add back the APPLE_CHANGES for a few frame cases. We need to do some real testing
diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index d282bef..f6d0e07 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,21 @@
+2002-09-10 Maciej Stachowiak <mjs at apple.com>
+
+ WebCore part of fix for:
+
+ 2952837 - Slide shows on homepage.mac.com don't show pictures, captions
+ 2942073 - Deferring [BrowserDocument goToInitialURL] can cause problems
+ 3021360 - second window pops up on 'Search' at chrysler.com
+ 3030485 - Unexpected new window created with no scroll bars at sony.com
+
+ * kwq/KWQKHTMLPartBrowserExtension.mm:
+ (KHTMLPartBrowserExtension::createNewWindow): Reuse existing
+ frame if possible. Pass frame name when opening a new window.
+ * kwq/KWQKHTMLPartImpl.mm:
+ (KWQKHTMLPartImpl::bridgeForFrameName): Don't warn when opening a
+ new window. Check non-descendant frames too.
+ (KWQKHTMLPartImpl::urlSelected): Pass frame name when opening window.
+ * kwq/WebCoreBridge.h: Add frameName argument to openNewWindowWithURL:.
+
2002-09-10 Darin Adler <darin at apple.com>
Add back the APPLE_CHANGES for a few frame cases. We need to do some real testing
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index d282bef..f6d0e07 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,21 @@
+2002-09-10 Maciej Stachowiak <mjs at apple.com>
+
+ WebCore part of fix for:
+
+ 2952837 - Slide shows on homepage.mac.com don't show pictures, captions
+ 2942073 - Deferring [BrowserDocument goToInitialURL] can cause problems
+ 3021360 - second window pops up on 'Search' at chrysler.com
+ 3030485 - Unexpected new window created with no scroll bars at sony.com
+
+ * kwq/KWQKHTMLPartBrowserExtension.mm:
+ (KHTMLPartBrowserExtension::createNewWindow): Reuse existing
+ frame if possible. Pass frame name when opening a new window.
+ * kwq/KWQKHTMLPartImpl.mm:
+ (KWQKHTMLPartImpl::bridgeForFrameName): Don't warn when opening a
+ new window. Check non-descendant frames too.
+ (KWQKHTMLPartImpl::urlSelected): Pass frame name when opening window.
+ * kwq/WebCoreBridge.h: Add frameName argument to openNewWindowWithURL:.
+
2002-09-10 Darin Adler <darin at apple.com>
Add back the APPLE_CHANGES for a few frame cases. We need to do some real testing
diff --git a/WebCore/kwq/KWQKHTMLPart.mm b/WebCore/kwq/KWQKHTMLPart.mm
index d900a0e..2304f1b 100644
--- a/WebCore/kwq/KWQKHTMLPart.mm
+++ b/WebCore/kwq/KWQKHTMLPart.mm
@@ -124,9 +124,11 @@ WebCoreBridge *KWQKHTMLPartImpl::bridgeForFrameName(const QString &frameName)
}
} else {
frame = [_bridge descendantFrameNamed:frameName.getNSString()];
+ if (frame == nil) {
+ frame = [_bridge frameNamed:frameName.getNSString()];
+ }
if (frame == nil) {
- NSLog (@"WARNING: unable to find frame named %@, creating new window with \"_blank\" name. New window will not be named until 2942073 is fixed.\n", frameName.getNSString());
- frame = [_bridge descendantFrameNamed:@"_blank"];
+ frame = [bridge() openNewWindowWithURL:nil frameName:frameName.getNSString()];
}
}
@@ -184,7 +186,7 @@ void KWQKHTMLPartImpl::urlSelected(const QString &url, int button, int state, co
// Open new window on command-click
if (state & MetaButton) {
- [_bridge openNewWindowWithURL:cocoaURL];
+ [_bridge openNewWindowWithURL:cocoaURL frameName:nil];
return;
}
@@ -643,4 +645,4 @@ void KWQKHTMLPartImpl::saveDocumentState()
void KWQKHTMLPartImpl::restoreDocumentState()
{
[_bridge restoreDocumentState];
-}
\ No newline at end of file
+}
diff --git a/WebCore/kwq/KWQKHTMLPartBrowserExtension.mm b/WebCore/kwq/KWQKHTMLPartBrowserExtension.mm
index 6b09089..d4147e4 100644
--- a/WebCore/kwq/KWQKHTMLPartBrowserExtension.mm
+++ b/WebCore/kwq/KWQKHTMLPartBrowserExtension.mm
@@ -57,33 +57,49 @@ void KHTMLPartBrowserExtension::createNewWindow(const KURL &url,
const KParts::WindowArgs &winArgs,
KParts::ReadOnlyPart **partResult)
{
- WebCoreBridge *bridge = [m_part->impl->bridge() openNewWindowWithURL:url.getNSURL()];
+ NSString *frameName = urlArgs.frameName.length() == 0 ? nil : urlArgs.frameName.getNSString();
+ WebCoreBridge *bridge;
+
+ if (frameName != nil) {
+ bridge = [m_part->impl->bridge() frameNamed:frameName];
+ if (bridge != nil) {
+ if (!url.isEmpty()) {
+ [bridge openURL:url.getNSURL()];
+ }
+ *partResult = [bridge part];
+ return;
+ }
+ }
+
+ NSURL *cocoaURL = url.isEmpty() ? nil : url.getNSURL();
+ bridge = [m_part->impl->bridge() openNewWindowWithURL:cocoaURL frameName:frameName];
+
if (!winArgs.toolBarsVisible) {
[bridge setToolbarsVisible:NO];
}
-
+
if (!winArgs.statusBarVisible) {
[bridge setStatusBarVisible:NO];
}
-
+
if (!winArgs.scrollbarsVisible) {
[bridge setScrollbarsVisible:NO];
}
-
+
if (!winArgs.resizable) {
[[bridge window] setShowsResizeIndicator:NO];
}
-
+
if (winArgs.xSet || winArgs.ySet || winArgs.widthSet || winArgs.heightSet) {
-
+
NSRect screenFrame = [[[bridge window] screen] frame];
NSRect frame = [[bridge window] frame];
-
+
if (winArgs.xSet) {
frame.origin.x = winArgs.x;
}
-
+
if (winArgs.ySet) {
if (winArgs.heightSet) {
frame.origin.y = screenFrame.size.height - winArgs.y + frame.size.height - winArgs.height;
@@ -91,7 +107,7 @@ void KHTMLPartBrowserExtension::createNewWindow(const KURL &url,
frame.origin.y = screenFrame.size.height - winArgs.y;
}
}
-
+
if (winArgs.widthSet) {
frame.size.width = winArgs.width;
}
@@ -102,7 +118,7 @@ void KHTMLPartBrowserExtension::createNewWindow(const KURL &url,
[bridge setWindowFrame:frame];
}
-
+
[[[bridge window] windowController] showWindow:nil];
*partResult = [bridge part];
diff --git a/WebCore/kwq/KWQKHTMLPartImpl.mm b/WebCore/kwq/KWQKHTMLPartImpl.mm
index d900a0e..2304f1b 100644
--- a/WebCore/kwq/KWQKHTMLPartImpl.mm
+++ b/WebCore/kwq/KWQKHTMLPartImpl.mm
@@ -124,9 +124,11 @@ WebCoreBridge *KWQKHTMLPartImpl::bridgeForFrameName(const QString &frameName)
}
} else {
frame = [_bridge descendantFrameNamed:frameName.getNSString()];
+ if (frame == nil) {
+ frame = [_bridge frameNamed:frameName.getNSString()];
+ }
if (frame == nil) {
- NSLog (@"WARNING: unable to find frame named %@, creating new window with \"_blank\" name. New window will not be named until 2942073 is fixed.\n", frameName.getNSString());
- frame = [_bridge descendantFrameNamed:@"_blank"];
+ frame = [bridge() openNewWindowWithURL:nil frameName:frameName.getNSString()];
}
}
@@ -184,7 +186,7 @@ void KWQKHTMLPartImpl::urlSelected(const QString &url, int button, int state, co
// Open new window on command-click
if (state & MetaButton) {
- [_bridge openNewWindowWithURL:cocoaURL];
+ [_bridge openNewWindowWithURL:cocoaURL frameName:nil];
return;
}
@@ -643,4 +645,4 @@ void KWQKHTMLPartImpl::saveDocumentState()
void KWQKHTMLPartImpl::restoreDocumentState()
{
[_bridge restoreDocumentState];
-}
\ No newline at end of file
+}
diff --git a/WebCore/kwq/WebCoreBridge.h b/WebCore/kwq/WebCoreBridge.h
index 39ac036..9a7f170 100644
--- a/WebCore/kwq/WebCoreBridge.h
+++ b/WebCore/kwq/WebCoreBridge.h
@@ -144,7 +144,7 @@ typedef khtml::RenderPart KHTMLRenderPart;
- (void)loadURL:(NSURL *)URL;
- (void)postWithURL:(NSURL *)URL data:(NSData *)data;
-- (WebCoreBridge *)openNewWindowWithURL:(NSURL *)URL;
+- (WebCoreBridge *)openNewWindowWithURL:(NSURL *)URL frameName:(NSString *)name;
- (NSString *)userAgentForURL:(NSURL *)URL;
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index b06c0fd..aec85e4 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,38 @@
+2002-09-10 Maciej Stachowiak <mjs at apple.com>
+
+ WebKit part of fix for:
+
+ 2952837 - Slide shows on homepage.mac.com don't show pictures, captions
+ 2942073 - Deferring [BrowserDocument goToInitialURL] can cause problems
+ 3021360 - second window pops up on 'Search' at chrysler.com
+ 3030485 - Unexpected new window created with no scroll bars at sony.com
+
+ This is done by adding a concept of named controller sets, so that
+ less browser-like uses of WebKit won't be affected.
+
+ * WebCoreSupport.subproj/WebBridge.m:
+ (-[WebBridge openNewWindowWithURL:frameName:]): Pass frameName
+ parameter to controller initializer.
+
+ * WebView.subproj/WebController.h:
+ * WebView.subproj/WebController.m:
+ (-[WebController init]): Pass nil for controllerSetName.
+
+ (-[WebController dealloc]):
+ (-[WebController frameNamed:]): Check other windows in the same set too.
+ * WebView.subproj/WebControllerPrivate.h:
+ * WebView.subproj/WebControllerPrivate.m:
+ (-[WebControllerPrivate dealloc]):
+ (-[WebController _setDefersCallbacks:]):
+ (-[WebController _setTopLevelFrameName:]):
+ (-[WebController _frameInThisWindowNamed:]):
+ * WebView.subproj/WebControllerSets.h: Added.
+ * WebView.subproj/WebControllerSets.m: Added.
+ (+[WebControllerSets addController:toSetNamed:]): Method to
+ maintain controller sets.
+ (+[WebControllerSets removeController:fromSetNamed:]): Likewise.
+ * WebKit.pbproj/project.pbxproj: Add new files.
+
2002-09-10 Ken Kocienda <kocienda at apple.com>
Changed API for setting the WebResourceClient for a request/load.
diff --git a/WebKit/ChangeLog-2002-12-03 b/WebKit/ChangeLog-2002-12-03
index b06c0fd..aec85e4 100644
--- a/WebKit/ChangeLog-2002-12-03
+++ b/WebKit/ChangeLog-2002-12-03
@@ -1,3 +1,38 @@
+2002-09-10 Maciej Stachowiak <mjs at apple.com>
+
+ WebKit part of fix for:
+
+ 2952837 - Slide shows on homepage.mac.com don't show pictures, captions
+ 2942073 - Deferring [BrowserDocument goToInitialURL] can cause problems
+ 3021360 - second window pops up on 'Search' at chrysler.com
+ 3030485 - Unexpected new window created with no scroll bars at sony.com
+
+ This is done by adding a concept of named controller sets, so that
+ less browser-like uses of WebKit won't be affected.
+
+ * WebCoreSupport.subproj/WebBridge.m:
+ (-[WebBridge openNewWindowWithURL:frameName:]): Pass frameName
+ parameter to controller initializer.
+
+ * WebView.subproj/WebController.h:
+ * WebView.subproj/WebController.m:
+ (-[WebController init]): Pass nil for controllerSetName.
+
+ (-[WebController dealloc]):
+ (-[WebController frameNamed:]): Check other windows in the same set too.
+ * WebView.subproj/WebControllerPrivate.h:
+ * WebView.subproj/WebControllerPrivate.m:
+ (-[WebControllerPrivate dealloc]):
+ (-[WebController _setDefersCallbacks:]):
+ (-[WebController _setTopLevelFrameName:]):
+ (-[WebController _frameInThisWindowNamed:]):
+ * WebView.subproj/WebControllerSets.h: Added.
+ * WebView.subproj/WebControllerSets.m: Added.
+ (+[WebControllerSets addController:toSetNamed:]): Method to
+ maintain controller sets.
+ (+[WebControllerSets removeController:fromSetNamed:]): Likewise.
+ * WebKit.pbproj/project.pbxproj: Add new files.
+
2002-09-10 Ken Kocienda <kocienda at apple.com>
Changed API for setting the WebResourceClient for a request/load.
diff --git a/WebKit/WebCoreSupport.subproj/WebBridge.m b/WebKit/WebCoreSupport.subproj/WebBridge.m
index 8801b50..41aaa59 100644
--- a/WebKit/WebCoreSupport.subproj/WebBridge.m
+++ b/WebKit/WebCoreSupport.subproj/WebBridge.m
@@ -87,11 +87,13 @@
return [newFrame _bridge];
}
-- (WebCoreBridge *)openNewWindowWithURL:(NSURL *)URL
+- (WebCoreBridge *)openNewWindowWithURL:(NSURL *)URL frameName:(NSString *)name
{
ASSERT(frame != nil);
WebController *newController = [[[frame controller] windowContext] openNewWindowWithURL:URL];
+ [newController _setTopLevelFrameName:name];
+
WebFrame *newFrame = [newController mainFrame];
return [newFrame _bridge];
diff --git a/WebKit/WebKit.pbproj/project.pbxproj b/WebKit/WebKit.pbproj/project.pbxproj
index 51dafb3..7076c60 100644
--- a/WebKit/WebKit.pbproj/project.pbxproj
+++ b/WebKit/WebKit.pbproj/project.pbxproj
@@ -272,6 +272,7 @@
F528E3EE031E91AD01CA2ACA,
931A72D303265920008635CE,
93AEB17F032C1735008635CE,
+ 6523FAD1032DA06B005EFCFF,
);
isa = PBXHeadersBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
@@ -359,6 +360,7 @@
F560BEBF030DAF4401C1A526,
F528E3ED031E91AD01CA2ACA,
93AEB180032C1735008635CE,
+ 6523FAD2032DA06B005EFCFF,
);
isa = PBXSourcesBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
@@ -1095,6 +1097,40 @@
//392
//393
//394
+//650
+//651
+//652
+//653
+//654
+ 6523FACF032DA06B005EFCFF = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = WebControllerSets.h;
+ refType = 4;
+ };
+ 6523FAD0032DA06B005EFCFF = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = WebControllerSets.m;
+ refType = 4;
+ };
+ 6523FAD1032DA06B005EFCFF = {
+ fileRef = 6523FACF032DA06B005EFCFF;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 6523FAD2032DA06B005EFCFF = {
+ fileRef = 6523FAD0032DA06B005EFCFF;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+//650
+//651
+//652
+//653
+//654
//930
//931
//932
@@ -1188,6 +1224,8 @@
F649E40502EE0D1901CA2ACD,
354F25FE02EF441D0ACA2ACA,
354F25FF02EF441D0ACA2ACA,
+ 6523FACF032DA06B005EFCFF,
+ 6523FAD0032DA06B005EFCFF,
);
isa = PBXGroup;
name = WebView;
diff --git a/WebKit/WebView.subproj/WebController.h b/WebKit/WebView.subproj/WebController.h
index f998c89..aa12255 100644
--- a/WebKit/WebView.subproj/WebController.h
+++ b/WebKit/WebView.subproj/WebController.h
@@ -142,7 +142,7 @@ extern NSString *WebContextMenuElementFrameKey;
- init;
// Designated initializer.
-- initWithView: (WebView *)view provisionalDataSource: (WebDataSource *)dataSource;
+- initWithView: (WebView *)view provisionalDataSource: (WebDataSource *)dataSource controllerSetName: (NSString *)name;
- (void)setWindowContext: (id<WebWindowContext>)context;
- (id<WebWindowContext>)windowContext;
diff --git a/WebKit/WebView.subproj/WebController.m b/WebKit/WebView.subproj/WebController.m
index a5fb18f..3cee138 100644
--- a/WebKit/WebView.subproj/WebController.m
+++ b/WebKit/WebView.subproj/WebController.m
@@ -7,6 +7,7 @@
#import <WebKit/WebBackForwardList.h>
#import <WebKit/WebController.h>
+#import <WebKit/WebControllerSets.h>
#import <WebKit/WebControllerPolicyHandler.h>
#import <WebKit/WebControllerPrivate.h>
#import <WebKit/WebDataSourcePrivate.h>
@@ -35,15 +36,19 @@ NSString * WebContextMenuElementFrameKey = @"WebContextFrame";
- init
{
- return [self initWithView: nil provisionalDataSource: nil];
+ return [self initWithView: nil provisionalDataSource: nil controllerSetName: nil];
}
-- initWithView: (WebView *)view provisionalDataSource: (WebDataSource *)dataSource
+- initWithView: (WebView *)view provisionalDataSource: (WebDataSource *)dataSource controllerSetName: (NSString *)name;
{
[super init];
_private = [[WebControllerPrivate alloc] init];
_private->mainFrame = [[WebFrame alloc] initWithName: @"_top" webView: view provisionalDataSource: dataSource controller: self];
+ _private->controllerSetName = [name retain];
+ if (_private->controllerSetName != nil) {
+ [WebControllerSets addController:self toSetNamed:_private->controllerSetName];
+ }
[self setUseBackForwardList: YES];
@@ -54,6 +59,10 @@ NSString * WebContextMenuElementFrameKey = @"WebContextFrame";
- (void)dealloc
{
+ if (_private->controllerSetName != nil) {
+ [WebControllerSets removeController:self fromSetNamed:_private->controllerSetName];
+ }
+
--WebControllerCount;
[_private release];
@@ -244,7 +253,23 @@ NSString * WebContextMenuElementFrameKey = @"WebContextFrame";
- (WebFrame *)frameNamed: (NSString *)name
{
- return [[self mainFrame] frameNamed: name];
+ // Try this controller first
+ WebFrame *frame = [self _frameInThisWindowNamed:name];
+
+ if (frame != nil) {
+ return frame;
+ }
+
+ // Try other controllers in the same set
+ if (_private->controllerSetName != nil) {
+ NSEnumerator *enumerator = [WebControllerSets controllersInSetNamed:_private->controllerSetName];
+ WebController *controller;
+ while ((controller = [enumerator nextObject]) != nil && frame == nil) {
+ frame = [controller _frameInThisWindowNamed:name];
+ }
+ }
+
+ return frame;
}
- (WebFrame *)mainFrame
diff --git a/WebKit/WebView.subproj/WebControllerPrivate.h b/WebKit/WebView.subproj/WebControllerPrivate.h
index a355117..9b0f314 100644
--- a/WebKit/WebView.subproj/WebControllerPrivate.h
+++ b/WebKit/WebView.subproj/WebControllerPrivate.h
@@ -32,6 +32,9 @@
NSLock *userAgentLock;
BOOL defersCallbacks;
+
+ NSString *controllerSetName;
+ NSString *topLevelFrameName;
}
@end
@@ -50,4 +53,7 @@
- (BOOL)_defersCallbacks;
- (void)_setDefersCallbacks:(BOOL)defers;
+- (void)_setTopLevelFrameName:(NSString *)name;
+- (WebFrame *)_frameInThisWindowNamed:(NSString *)name;
+
@end
diff --git a/WebKit/WebView.subproj/WebControllerPrivate.m b/WebKit/WebView.subproj/WebControllerPrivate.m
index 92da62c..90a35ba 100644
--- a/WebKit/WebView.subproj/WebControllerPrivate.m
+++ b/WebKit/WebView.subproj/WebControllerPrivate.m
@@ -71,6 +71,9 @@
[userAgentOverride release];
[userAgentLock release];
+ [controllerSetName release];
+ [topLevelFrameName release];
+
[super dealloc];
}
@@ -220,4 +223,19 @@
[_private->mainFrame _defersCallbacksChanged];
}
+- (void)_setTopLevelFrameName:(NSString *)name
+{
+ [_private->topLevelFrameName release];
+ _private->topLevelFrameName = [name retain];
+}
+
+- (WebFrame *)_frameInThisWindowNamed:(NSString *)name
+{
+ if ([_private->topLevelFrameName isEqualToString:name]) {
+ return [self mainFrame];
+ } else {
+ return [[self mainFrame] frameNamed:name];
+ }
+}
+
@end
diff --git a/WebKit/WebView.subproj/WebControllerSets.h b/WebKit/WebView.subproj/WebControllerSets.h
new file mode 100644
index 0000000..25da98d
--- /dev/null
+++ b/WebKit/WebView.subproj/WebControllerSets.h
@@ -0,0 +1,18 @@
+/*
+ WebControllerSets.h
+ Copyright 2002, Apple Computer, Inc.
+
+*/
+
+#import <Foundation/Foundation.h>
+
+ at class WebController;
+
+ at interface WebControllerSets : NSObject
++(void)addController:(WebController *)controller toSetNamed:(NSString *)name;
++(void)removeController:(WebController *)controller fromSetNamed:(NSString *)name;
++(NSEnumerator *)controllersInSetNamed:(NSString *)name;
+ at end
+
+
+
diff --git a/WebKit/WebView.subproj/WebControllerSets.m b/WebKit/WebView.subproj/WebControllerSets.m
new file mode 100644
index 0000000..d099bf4
--- /dev/null
+++ b/WebKit/WebView.subproj/WebControllerSets.m
@@ -0,0 +1,69 @@
+/*
+ WebControllerSets.m
+ Copyright 2002, Apple Computer, Inc.
+*/
+
+#import <WebKit/WebControllerSets.h>
+
+static CFSetCallBacks NonRetainingSetCallbacks = {
+0,
+NULL,
+NULL,
+CFCopyDescription,
+CFEqual,
+CFHash
+};
+
+ at implementation WebControllerSets
+
+NSMutableDictionary *sets = nil;
+
++(void)addController:(WebController *)controller toSetNamed: (NSString *)name
+{
+ if (sets == nil) {
+ sets = [[NSMutableDictionary alloc] init];
+ }
+
+ CFMutableSetRef set = (CFMutableSetRef)[sets objectForKey:name];
+
+ if (set == NULL) {
+ set = CFSetCreateMutable(NULL, 0, &NonRetainingSetCallbacks);
+ [sets setObject:(id)set forKey:name];
+ CFRelease(set);
+ }
+
+
+ CFSetSetValue(set, controller);
+}
+
++(void)removeController:(WebController *)controller fromSetNamed: (NSString *)name
+{
+ CFMutableSetRef set = (CFMutableSetRef)[sets objectForKey:name];
+
+ if (set == NULL) {
+ return;
+ }
+
+ CFSetRemoveValue(set, controller);
+
+ if (CFSetGetCount(set) == 0) {
+ [sets removeObjectForKey:name];
+ }
+}
+
+
++(NSEnumerator *)controllersInSetNamed:(NSString *)name;
+{
+ CFMutableSetRef set = (CFMutableSetRef)[sets objectForKey:name];
+
+ if (set == NULL) {
+ return [[[NSEnumerator alloc] init] autorelease];
+ }
+
+ return [(NSSet *)set objectEnumerator];
+}
+
+ at end
+
+
+
diff --git a/WebKit/WebView.subproj/WebView.h b/WebKit/WebView.subproj/WebView.h
index f998c89..aa12255 100644
--- a/WebKit/WebView.subproj/WebView.h
+++ b/WebKit/WebView.subproj/WebView.h
@@ -142,7 +142,7 @@ extern NSString *WebContextMenuElementFrameKey;
- init;
// Designated initializer.
-- initWithView: (WebView *)view provisionalDataSource: (WebDataSource *)dataSource;
+- initWithView: (WebView *)view provisionalDataSource: (WebDataSource *)dataSource controllerSetName: (NSString *)name;
- (void)setWindowContext: (id<WebWindowContext>)context;
- (id<WebWindowContext>)windowContext;
diff --git a/WebKit/WebView.subproj/WebView.m b/WebKit/WebView.subproj/WebView.m
index a5fb18f..3cee138 100644
--- a/WebKit/WebView.subproj/WebView.m
+++ b/WebKit/WebView.subproj/WebView.m
@@ -7,6 +7,7 @@
#import <WebKit/WebBackForwardList.h>
#import <WebKit/WebController.h>
+#import <WebKit/WebControllerSets.h>
#import <WebKit/WebControllerPolicyHandler.h>
#import <WebKit/WebControllerPrivate.h>
#import <WebKit/WebDataSourcePrivate.h>
@@ -35,15 +36,19 @@ NSString * WebContextMenuElementFrameKey = @"WebContextFrame";
- init
{
- return [self initWithView: nil provisionalDataSource: nil];
+ return [self initWithView: nil provisionalDataSource: nil controllerSetName: nil];
}
-- initWithView: (WebView *)view provisionalDataSource: (WebDataSource *)dataSource
+- initWithView: (WebView *)view provisionalDataSource: (WebDataSource *)dataSource controllerSetName: (NSString *)name;
{
[super init];
_private = [[WebControllerPrivate alloc] init];
_private->mainFrame = [[WebFrame alloc] initWithName: @"_top" webView: view provisionalDataSource: dataSource controller: self];
+ _private->controllerSetName = [name retain];
+ if (_private->controllerSetName != nil) {
+ [WebControllerSets addController:self toSetNamed:_private->controllerSetName];
+ }
[self setUseBackForwardList: YES];
@@ -54,6 +59,10 @@ NSString * WebContextMenuElementFrameKey = @"WebContextFrame";
- (void)dealloc
{
+ if (_private->controllerSetName != nil) {
+ [WebControllerSets removeController:self fromSetNamed:_private->controllerSetName];
+ }
+
--WebControllerCount;
[_private release];
@@ -244,7 +253,23 @@ NSString * WebContextMenuElementFrameKey = @"WebContextFrame";
- (WebFrame *)frameNamed: (NSString *)name
{
- return [[self mainFrame] frameNamed: name];
+ // Try this controller first
+ WebFrame *frame = [self _frameInThisWindowNamed:name];
+
+ if (frame != nil) {
+ return frame;
+ }
+
+ // Try other controllers in the same set
+ if (_private->controllerSetName != nil) {
+ NSEnumerator *enumerator = [WebControllerSets controllersInSetNamed:_private->controllerSetName];
+ WebController *controller;
+ while ((controller = [enumerator nextObject]) != nil && frame == nil) {
+ frame = [controller _frameInThisWindowNamed:name];
+ }
+ }
+
+ return frame;
}
- (WebFrame *)mainFrame
diff --git a/WebKit/WebView.subproj/WebViewPrivate.h b/WebKit/WebView.subproj/WebViewPrivate.h
index a355117..9b0f314 100644
--- a/WebKit/WebView.subproj/WebViewPrivate.h
+++ b/WebKit/WebView.subproj/WebViewPrivate.h
@@ -32,6 +32,9 @@
NSLock *userAgentLock;
BOOL defersCallbacks;
+
+ NSString *controllerSetName;
+ NSString *topLevelFrameName;
}
@end
@@ -50,4 +53,7 @@
- (BOOL)_defersCallbacks;
- (void)_setDefersCallbacks:(BOOL)defers;
+- (void)_setTopLevelFrameName:(NSString *)name;
+- (WebFrame *)_frameInThisWindowNamed:(NSString *)name;
+
@end
diff --git a/WebKit/WebView.subproj/WebViewPrivate.m b/WebKit/WebView.subproj/WebViewPrivate.m
index 92da62c..90a35ba 100644
--- a/WebKit/WebView.subproj/WebViewPrivate.m
+++ b/WebKit/WebView.subproj/WebViewPrivate.m
@@ -71,6 +71,9 @@
[userAgentOverride release];
[userAgentLock release];
+ [controllerSetName release];
+ [topLevelFrameName release];
+
[super dealloc];
}
@@ -220,4 +223,19 @@
[_private->mainFrame _defersCallbacksChanged];
}
+- (void)_setTopLevelFrameName:(NSString *)name
+{
+ [_private->topLevelFrameName release];
+ _private->topLevelFrameName = [name retain];
+}
+
+- (WebFrame *)_frameInThisWindowNamed:(NSString *)name
+{
+ if ([_private->topLevelFrameName isEqualToString:name]) {
+ return [self mainFrame];
+ } else {
+ return [[self mainFrame] frameNamed:name];
+ }
+}
+
@end
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list