Diff
Modified: trunk/Tools/ChangeLog (210482 => 210483)
--- trunk/Tools/ChangeLog 2017-01-07 21:09:41 UTC (rev 210482)
+++ trunk/Tools/ChangeLog 2017-01-07 21:10:21 UTC (rev 210483)
@@ -1,5 +1,40 @@
2017-01-07 Tim Horton <[email protected]>
+ Add the ability to create empty contentEditable windows in MiniBrowser
+ https://bugs.webkit.org/show_bug.cgi?id=166801
+
+ Reviewed by Wenson Hsieh.
+
+ * MiniBrowser/mac/AppDelegate.h:
+ * MiniBrowser/mac/AppDelegate.m:
+ (-[BrowserAppDelegate createBrowserWindowController:]):
+ (-[BrowserAppDelegate newWindow:]):
+ (-[BrowserAppDelegate newEditorWindow:]):
+ (-[BrowserAppDelegate openDocument:]):
+ (-[BrowserAppDelegate _updateNewWindowKeyEquivalents]):
+ * MiniBrowser/mac/BrowserWindowController.h:
+ * MiniBrowser/mac/BrowserWindowController.m:
+ (-[BrowserWindowController loadHTMLString:]):
+ (-[BrowserWindowController toggleEditable:]):
+ * MiniBrowser/mac/MainMenu.xib:
+ * MiniBrowser/mac/WK1BrowserWindowController.m:
+ (-[WK1BrowserWindowController awakeFromNib]):
+ (-[WK1BrowserWindowController loadHTMLString:]):
+ (-[WK1BrowserWindowController validateMenuItem:]):
+ (-[WK1BrowserWindowController setEditable:]):
+ (-[WK1BrowserWindowController updateTitle:]):
+ * MiniBrowser/mac/WK2BrowserWindowController.m:
+ (-[WK2BrowserWindowController awakeFromNib]):
+ (-[WK2BrowserWindowController validateMenuItem:]):
+ (-[WK2BrowserWindowController setEditable:]):
+ (-[WK2BrowserWindowController updateTitle:]):
+ (-[WK2BrowserWindowController loadHTMLString:]):
+ Merge more functionality from WebEditingTester.
+ Add two menu items for creating empty editable WebKit1/2 windows.
+ Add a menu item to the Edit menu to toggle editability on any window.
+
+2017-01-07 Tim Horton <[email protected]>
+
Implement find-in-page in MiniBrowser
https://bugs.webkit.org/show_bug.cgi?id=166799
Modified: trunk/Tools/MiniBrowser/mac/AppDelegate.h (210482 => 210483)
--- trunk/Tools/MiniBrowser/mac/AppDelegate.h 2017-01-07 21:09:41 UTC (rev 210482)
+++ trunk/Tools/MiniBrowser/mac/AppDelegate.h 2017-01-07 21:10:21 UTC (rev 210483)
@@ -33,6 +33,8 @@
IBOutlet NSMenuItem *_newWebKit1WindowItem;
IBOutlet NSMenuItem *_newWebKit2WindowItem;
+ IBOutlet NSMenuItem *_newWebKit1EditorItem;
+ IBOutlet NSMenuItem *_newWebKit2EditorItem;
}
- (void)browserWindowWillClose:(NSWindow *)window;
Modified: trunk/Tools/MiniBrowser/mac/AppDelegate.m (210482 => 210483)
--- trunk/Tools/MiniBrowser/mac/AppDelegate.m 2017-01-07 21:09:41 UTC (rev 210482)
+++ trunk/Tools/MiniBrowser/mac/AppDelegate.m 2017-01-07 21:10:21 UTC (rev 210483)
@@ -44,7 +44,9 @@
enum {
WebKit1NewWindowTag = 1,
- WebKit2NewWindowTag = 2
+ WebKit2NewWindowTag = 2,
+ WebKit1NewEditorTag = 3,
+ WebKit2NewEditorTag = 4
};
@interface NSApplication (TouchBar)
@@ -120,18 +122,19 @@
#endif
-
-- (IBAction)newWindow:(id)sender
+- (BrowserWindowController *)createBrowserWindowController:(id)sender
{
BrowserWindowController *controller = nil;
-
BOOL useWebKit2 = NO;
+ BOOL makeEditable = NO;
if (![sender respondsToSelector:@selector(tag)])
useWebKit2 = [SettingsController shared].useWebKit2ByDefault;
- else
- useWebKit2 = [sender tag] == WebKit2NewWindowTag;
-
+ else {
+ useWebKit2 = [sender tag] == WebKit2NewWindowTag || [sender tag] == WebKit2NewEditorTag;
+ makeEditable = [sender tag] == WebKit1NewEditorTag || [sender tag] == WebKit2NewEditorTag;
+ }
+
if (!useWebKit2)
controller = [[WK1BrowserWindowController alloc] initWithWindowNibName:@"BrowserWindow"];
#if WK_API_ENABLED
@@ -138,12 +141,25 @@
else
controller = [[WK2BrowserWindowController alloc] initWithConfiguration:defaultConfiguration()];
#endif
+
+ if (makeEditable)
+ controller.editable = YES;
+
if (!controller)
+ return nil;
+
+ [_browserWindowControllers addObject:controller];
+
+ return controller;
+}
+
+- (IBAction)newWindow:(id)sender
+{
+ BrowserWindowController *controller = [self createBrowserWindowController:sender];
+ if (!controller)
return;
[[controller window] makeKeyAndOrderFront:sender];
- [_browserWindowControllers addObject:controller];
-
[controller loadURLString:[SettingsController shared].defaultURL];
}
@@ -163,6 +179,16 @@
#endif
}
+- (IBAction)newEditorWindow:(id)sender
+{
+ BrowserWindowController *controller = [self createBrowserWindowController:sender];
+ if (!controller)
+ return;
+
+ [[controller window] makeKeyAndOrderFront:sender];
+ [controller loadHTMLString:@"<html><body></body></html>"];
+}
+
- (void)browserWindowWillClose:(NSWindow *)window
{
[_browserWindowControllers removeObject:window.windowController];
@@ -222,11 +248,11 @@
if (result != NSFileHandlingPanelOKButton)
return;
- BrowserWindowController *newBrowserWindowController = [[WK1BrowserWindowController alloc] initWithWindowNibName:@"BrowserWindow"];
- [newBrowserWindowController.window makeKeyAndOrderFront:self];
+ BrowserWindowController *controller = [self createBrowserWindowController:nil];
+ [controller.window makeKeyAndOrderFront:self];
NSURL *url = "" objectAtIndex:0];
- [newBrowserWindowController loadURLString:[url absoluteString]];
+ [controller loadURLString:[url absoluteString]];
}];
}
@@ -241,13 +267,13 @@
- (void)_updateNewWindowKeyEquivalents
{
- if ([[SettingsController shared] useWebKit2ByDefault]) {
- [_newWebKit1WindowItem setKeyEquivalentModifierMask:NSEventModifierFlagCommand | NSEventModifierFlagOption];
- [_newWebKit2WindowItem setKeyEquivalentModifierMask:NSEventModifierFlagCommand];
- } else {
- [_newWebKit1WindowItem setKeyEquivalentModifierMask:NSEventModifierFlagCommand];
- [_newWebKit2WindowItem setKeyEquivalentModifierMask:NSEventModifierFlagCommand | NSEventModifierFlagOption];
- }
+ NSEventModifierFlags webKit1Flags = [SettingsController shared].useWebKit2ByDefault ? NSEventModifierFlagOption : 0;
+ NSEventModifierFlags webKit2Flags = [SettingsController shared].useWebKit2ByDefault ? 0 : NSEventModifierFlagOption;
+
+ _newWebKit1WindowItem.keyEquivalentModifierMask = NSEventModifierFlagCommand | webKit1Flags;
+ _newWebKit2WindowItem.keyEquivalentModifierMask = NSEventModifierFlagCommand | webKit2Flags;
+ _newWebKit1EditorItem.keyEquivalentModifierMask = NSEventModifierFlagCommand | webKit1Flags;
+ _newWebKit2EditorItem.keyEquivalentModifierMask = NSEventModifierFlagCommand | webKit2Flags;
}
- (IBAction)showExtensionsManager:(id)sender
Modified: trunk/Tools/MiniBrowser/mac/BrowserWindowController.h (210482 => 210483)
--- trunk/Tools/MiniBrowser/mac/BrowserWindowController.h 2017-01-07 21:09:41 UTC (rev 210482)
+++ trunk/Tools/MiniBrowser/mac/BrowserWindowController.h 2017-01-07 21:10:21 UTC (rev 210483)
@@ -40,6 +40,7 @@
}
- (void)loadURLString:(NSString *)urlString;
+- (void)loadHTMLString:(NSString *)HTMLString;
- (NSString *)addProtocolIfNecessary:(NSString *)address;
- (void)applicationTerminating;
@@ -79,5 +80,8 @@
- (CGFloat)pageScaleForMenuItemTag:(NSInteger)tag;
+@property (nonatomic, assign, getter=isEditable) BOOL editable;
+- (IBAction)toggleEditable:(id)sender;
+
@end
Modified: trunk/Tools/MiniBrowser/mac/BrowserWindowController.m (210482 => 210483)
--- trunk/Tools/MiniBrowser/mac/BrowserWindowController.m 2017-01-07 21:09:41 UTC (rev 210482)
+++ trunk/Tools/MiniBrowser/mac/BrowserWindowController.m 2017-01-07 21:10:21 UTC (rev 210483)
@@ -58,6 +58,10 @@
{
}
+- (void)loadHTMLString:(NSString *)HTMLString
+{
+}
+
- (void)applicationTerminating
{
}
@@ -211,6 +215,11 @@
return nil;
}
+- (IBAction)toggleEditable:(id)sender
+{
+ self.editable = !self.isEditable;
+}
+
#pragma mark -
#pragma mark NSSharingServicePickerDelegate
Modified: trunk/Tools/MiniBrowser/mac/MainMenu.xib (210482 => 210483)
--- trunk/Tools/MiniBrowser/mac/MainMenu.xib 2017-01-07 21:09:41 UTC (rev 210482)
+++ trunk/Tools/MiniBrowser/mac/MainMenu.xib 2017-01-07 21:10:21 UTC (rev 210483)
@@ -88,6 +88,17 @@
<action selector="newPrivateWindow:" target="-1" id="mf5-zi-a5R"/>
</connections>
</menuItem>
+ <menuItem title="New WebKit1 Editor" tag="3" keyEquivalent="N" id="jNR-Z3-YWi" userLabel="New WebKit1 Editor">
+ <connections>
+ <action selector="newEditorWindow:" target="-1" id="Nv5-c0-KRP"/>
+ </connections>
+ </menuItem>
+ <menuItem title="New WebKit2 Editor" tag="4" keyEquivalent="N" id="IdI-wb-1JD" userLabel="New WebKit2 Editor">
+ <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
+ <connections>
+ <action selector="newEditorWindow:" target="-1" id="kk6-R4-iec"/>
+ </connections>
+ </menuItem>
<menuItem title="Openโฆ" keyEquivalent="o" id="72">
<connections>
<action selector="openDocument:" target="-1" id="374"/>
@@ -160,6 +171,15 @@
<action selector="redo:" target="-1" id="231"/>
</connections>
</menuItem>
+ <menuItem isSeparatorItem="YES" id="fUL-7k-Dqg">
+ <modifierMask key="keyEquivalentModifierMask" command="YES"/>
+ </menuItem>
+ <menuItem title="Editable" id="kG4-hS-JbX">
+ <modifierMask key="keyEquivalentModifierMask"/>
+ <connections>
+ <action selector="toggleEditable:" target="-1" id="6my-b2-eff"/>
+ </connections>
+ </menuItem>
<menuItem isSeparatorItem="YES" id="206">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
@@ -566,7 +586,9 @@
</menu>
<customObject id="494" customClass="BrowserAppDelegate">
<connections>
+ <outlet property="_newWebKit1EditorItem" destination="jNR-Z3-YWi" id="6wB-Aa-CK7"/>
<outlet property="_newWebKit1WindowItem" destination="573" id="ZCj-u2-PU7"/>
+ <outlet property="_newWebKit2EditorItem" destination="IdI-wb-1JD" id="DIr-pe-XI8"/>
<outlet property="_newWebKit2WindowItem" destination="571" id="1Gv-mK-aul"/>
</connections>
</customObject>
Modified: trunk/Tools/MiniBrowser/mac/WK1BrowserWindowController.m (210482 => 210483)
--- trunk/Tools/MiniBrowser/mac/WK1BrowserWindowController.m 2017-01-07 21:09:41 UTC (rev 210482)
+++ trunk/Tools/MiniBrowser/mac/WK1BrowserWindowController.m 2017-01-07 21:10:21 UTC (rev 210483)
@@ -44,6 +44,8 @@
_webView = [[WebView alloc] initWithFrame:[containerView bounds] frameName:nil groupName:@"MiniBrowser"];
[_webView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
+ _webView.editable = self.isEditable;
+
[_webView setFrameLoadDelegate:self];
[_webView setUIDelegate:self];
[_webView setResourceLoadDelegate:self];
@@ -79,6 +81,11 @@
[self fetch:nil];
}
+- (void)loadHTMLString:(NSString *)HTMLString
+{
+ [_webView.mainFrame loadHTMLString:HTMLString baseURL:nil];
+}
+
- (IBAction)fetch:(id)sender
{
[urlText setStringValue:[self addProtocolIfNecessary:[urlText stringValue]]];
@@ -139,6 +146,8 @@
[menuItem setTitle:[_webView window] ? @"Remove Web View" : @"Insert Web View"];
else if (action == @selector(toggleZoomMode:))
[menuItem setState:_zoomTextOnly ? NSOnState : NSOffState];
+ else if (action == @selector(toggleEditable:))
+ [menuItem setState:self.isEditable ? NSOnState : NSOffState];
if (action == @selector(setPageScale:))
[menuItem setState:areEssentiallyEqual([_webView _viewScaleFactor], [self pageScaleForMenuItemTag:[menuItem tag]])];
@@ -247,6 +256,12 @@
return _webView;
}
+- (void)setEditable:(BOOL)editable
+{
+ [super setEditable:editable];
+ _webView.editable = editable;
+}
+
- (void)didChangeSettings
{
SettingsController *settings = [SettingsController shared];
@@ -317,8 +332,8 @@
NSURL *url = ""
title = url.lastPathComponent ?: url._web_userVisibleString;
}
-
- [self.window setTitle:[title stringByAppendingString:@" [WK1]"]];
+
+ [self.window setTitle:[title stringByAppendingFormat:@" [WK1]%@", _webView.editable ? @" [Editable]" : @""]];
}
- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request
Modified: trunk/Tools/MiniBrowser/mac/WK2BrowserWindowController.m (210482 => 210483)
--- trunk/Tools/MiniBrowser/mac/WK2BrowserWindowController.m 2017-01-07 21:09:41 UTC (rev 210482)
+++ trunk/Tools/MiniBrowser/mac/WK2BrowserWindowController.m 2017-01-07 21:10:21 UTC (rev 210483)
@@ -69,6 +69,7 @@
_webView.allowsMagnification = YES;
_webView.allowsBackForwardNavigationGestures = YES;
+ _webView._editable = self.isEditable;
[_webView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
[containerView addSubview:_webView];
@@ -201,6 +202,8 @@
[menuItem setTitle:[_webView window] ? @"Remove Web View" : @"Insert Web View"];
else if (action == @selector(toggleZoomMode:))
[menuItem setState:_zoomTextOnly ? NSOnState : NSOffState];
+ else if (action == @selector(toggleEditable:))
+ [menuItem setState:self.isEditable ? NSOnState : NSOffState];
if (action == @selector(setPageScale:))
[menuItem setState:areEssentiallyEqual([_webView _pageScale], [self pageScaleForMenuItemTag:[menuItem tag]])];
@@ -284,6 +287,12 @@
return _webView;
}
+- (void)setEditable:(BOOL)editable
+{
+ [super setEditable:editable];
+ _webView._editable = editable;
+}
+
- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)item
{
SEL action = ""
@@ -415,7 +424,7 @@
title = url.lastPathComponent ?: url._web_userVisibleString;
}
- self.window.title = [NSString stringWithFormat:@"%@%@ [WK2 %d]", _isPrivateBrowsingWindow ? @"๐ " : @"", title, _webView._webProcessIdentifier];
+ self.window.title = [NSString stringWithFormat:@"%@%@ [WK2 %d]%@", _isPrivateBrowsingWindow ? @"๐ " : @"", title, _webView._webProcessIdentifier, _webView._editable ? @" [Editable]" : @""];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
@@ -525,6 +534,11 @@
[self fetch:nil];
}
+- (void)loadHTMLString:(NSString *)HTMLString
+{
+ [_webView loadHTMLString:HTMLString baseURL:nil];
+}
+
static NSSet *dataTypes()
{
return [WKWebsiteDataStore allWebsiteDataTypes];