WebKit:
authorsullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 27 Sep 2004 21:30:50 +0000 (21:30 +0000)
committersullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 27 Sep 2004 21:30:50 +0000 (21:30 +0000)
        Reviewed by Ken.

        - WebKit part of fix for <rdar://problem/3734466> ER: Support standard editing keystrokes
        like Cmd-B while editing rich text

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _toggleBold]):
        new method, toggles font-weight from "bold" to "normal"
        (-[WebHTMLView _toggleItalic]):
        new method, toggles font-style from "italic" to "normal"
        (-[WebHTMLView _handleStyleKeyEquivalent:]):
        new method, if the new preference is set and we're in an editable state, check for standard
        key equivalents for toggling styles (just command-B and command-I for now).
        (-[WebHTMLView performKeyEquivalent:]):
        Moved in file, now calls _handleStyleKeyEquivalent:

        * WebView.subproj/WebPreferenceKeysPrivate.h:
        new preference key WebKitRespectStandardStyleKeyEquivalentsPreferenceKey
        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences initialize]):
        initial value of WebKitRespectStandardStyleKeyEquivalentsPreferenceKey is NO (maybe we'll
        change our minds about this, but this is more guaranteed to be backward-compatible)
        (-[WebPreferences respectStandardStyleKeyEquivalents]):
        read WebKitRespectStandardStyleKeyEquivalentsPreferenceKey
        (-[WebPreferences setRespectStandardStyleKeyEquivalents:]):
        write WebKitRespectStandardStyleKeyEquivalentsPreferenceKey

        * WebView.subproj/WebPreferencesPrivate.h:
        declare getter and setter

        * English.lproj/StringsNotToBeLocalized.txt:
        updated for these and other recent changes

WebBrowser:

        Reviewed by Ken.

        - WebBrowser part of fix for <rdar://problem/3734466> ER: Support standard editing keystrokes
        like Cmd-B while editing rich text

        * AppController.m:
        (-[AppController applicationDidFinishLaunching:]):
        turn on the new WebKit preference that makes command-B and command-I toggle styles in
        editable text.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@7697 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/ChangeLog
WebKit/English.lproj/StringsNotToBeLocalized.txt
WebKit/WebView.subproj/WebHTMLView.m
WebKit/WebView.subproj/WebPreferenceKeysPrivate.h
WebKit/WebView.subproj/WebPreferences.m
WebKit/WebView.subproj/WebPreferencesPrivate.h

index d612c7b28d02e59e356b1484e6afde8146f6c162..6ae283aaa2c7254336444c4763a0919062c5ad64 100644 (file)
@@ -1,3 +1,38 @@
+2004-09-27  John Sullivan  <sullivan@apple.com>
+
+        Reviewed by Ken.
+
+        - WebKit part of fix for <rdar://problem/3734466> ER: Support standard editing keystrokes 
+        like Cmd-B while editing rich text
+
+        * WebView.subproj/WebHTMLView.m:
+        (-[WebHTMLView _toggleBold]):
+        new method, toggles font-weight from "bold" to "normal"
+        (-[WebHTMLView _toggleItalic]):
+        new method, toggles font-style from "italic" to "normal"
+        (-[WebHTMLView _handleStyleKeyEquivalent:]):
+        new method, if the new preference is set and we're in an editable state, check for standard
+        key equivalents for toggling styles (just command-B and command-I for now).
+        (-[WebHTMLView performKeyEquivalent:]):
+        Moved in file, now calls _handleStyleKeyEquivalent:
+        
+        * WebView.subproj/WebPreferenceKeysPrivate.h:
+        new preference key WebKitRespectStandardStyleKeyEquivalentsPreferenceKey
+        * WebView.subproj/WebPreferences.m:
+        (+[WebPreferences initialize]):
+        initial value of WebKitRespectStandardStyleKeyEquivalentsPreferenceKey is NO (maybe we'll
+        change our minds about this, but this is more guaranteed to be backward-compatible)
+        (-[WebPreferences respectStandardStyleKeyEquivalents]):
+        read WebKitRespectStandardStyleKeyEquivalentsPreferenceKey
+        (-[WebPreferences setRespectStandardStyleKeyEquivalents:]):
+        write WebKitRespectStandardStyleKeyEquivalentsPreferenceKey
+        
+        * WebView.subproj/WebPreferencesPrivate.h:
+        declare getter and setter
+        
+        * English.lproj/StringsNotToBeLocalized.txt:
+        updated for these and other recent changes
+
 2004-09-27  Chris Blumenberg  <cblu@apple.com>
 
        Fixed: <rdar://problem/3806649> assertion failure after control-click of webcam
index 8791dc616b3b9f516452139b5d372009576cb6dc..9eabbc487190f2b4d2894dac5d4cd9a2d52ea9e8 100644 (file)
@@ -17,7 +17,6 @@
 "%@"
 "%@/%s"
 "%@/Library/Preferences/%@"
-"%@: Don't know how to pack glyphs for font %@ %f"
 "%@:%u"
 "%@://%@"
 "%d"
@@ -51,7 +50,7 @@
 ";"
 "<!--framePath "
 "<%@ %@>"
-"="
+"<html"
 "=================\nARGUMENT BAD: %s, %s (%s:%d %s)\n=================\n"
 "=================\nASSERTION FAILED: "
 "=================\nASSERTION FAILED: %s (%s:%d %s)\n=================\n"
 "BP_CreatePluginMIMETypesPreferences"
 "BufferTextDrawing"
 "CFBundleVersion"
+"Cache-Control"
 "Content-Length"
 "Courier"
 "DOCBASE"
+"DelayTime"
 "DirectionAL"
 "DirectionAN"
 "DirectionB"
 "GroupName"
 "Helvetica"
 "ISO-8859-1"
+"If-Modified-Since"
 "JoiningCausing"
 "JoiningDual"
 "JoiningOther"
 "NSFileModificationDate"
 "NSFileOwnerAccountName"
 "NSFilePosixPermissions"
+"NeXT smart paste pasteboard type"
 "POST"
 "Papyrus"
+"SAMILang"
+"SAMIStyle"
 "Set-Cookie"
 "SpellingDot"
 "Times"
 "WebKitPageCacheSizePreferenceKey"
 "WebKitPluginsEnabled"
 "WebKitPrivateBrowsingEnabled"
+"WebKitRespectStandardStyleKeyEquivalents"
 "WebKitSansSerifFont"
 "WebKitSerifFont"
 "WebKitShouldPrintBackgroundsPreferenceKey"
 "WebViewDidChangeTypingStyleNotification"
 "WebViewDidEndEditingNotification"
 "WebViewEditingContextMenu"
-"\""
 "\"@?"
 "\"\\"
 "\0"
 "\r"
 "\r\n"
 "\t"
-"__KHTML__"
 "_blank"
 "_current"
 "_parent"
 "com.apple.WebKit"
 "com.apple.hiview"
 "com.apple.universalaccess"
+"com.microsoft.WMP.defaultplugin"
 "destination-atop"
 "destination-in"
 "destination-out"
 "mainFrameTitle"
 "mainFrameURL"
 "missing_image"
+"must-revalidate"
 "nullplugin"
 "pluginspage"
+"proxy-revalidate"
+"public.tiff"
 "rgb(%.0f,%.0f,%.0f)"
+"rgba(%.0f,%.0f,%.0f,%f)"
 "source-atop"
 "source-in"
 "source-out"
 "webarchive"
 "x"
 "x-apple-web-kit/"
+"{GIF}"
 "~/Library/Icons"
 DOM.subproj/WebDOMOperations.m:"background"
 DOM.subproj/WebDOMOperations.m:"data"
@@ -387,10 +397,13 @@ WebCoreSupport.subproj/WebTextRendererFactory.m:"Pashto"
 WebCoreSupport.subproj/WebTextRendererFactory.m:"Urdu"
 WebView.subproj/WebDataSource.m:"Refresh"
 WebView.subproj/WebHTMLView.m:"%0.fpx"
+WebView.subproj/WebHTMLView.m:"Version:"
+WebView.subproj/WebHTMLView.m:"b"
 WebView.subproj/WebHTMLView.m:"baseline"
 WebView.subproj/WebHTMLView.m:"black"
 WebView.subproj/WebHTMLView.m:"bold"
 WebView.subproj/WebHTMLView.m:"center"
+WebView.subproj/WebHTMLView.m:"i"
 WebView.subproj/WebHTMLView.m:"italic"
 WebView.subproj/WebHTMLView.m:"justify"
 WebView.subproj/WebHTMLView.m:"left"
index 9d87361720ecf5b354cf8ba4fc0ad3d14e59c2d4..aef39c806a14d38b42266235b534eeb9f228d346 100644 (file)
@@ -34,6 +34,7 @@
 #import <WebKit/WebNSViewExtras.h>
 #import <WebKit/WebPluginController.h>
 #import <WebKit/WebPreferences.h>
+#import <WebKit/WebPreferencesPrivate.h>
 #import <WebKit/WebResourcePrivate.h>
 #import <WebKit/WebStringTruncator.h>
 #import <WebKit/WebTextRenderer.h>
@@ -2609,16 +2610,6 @@ static WebHTMLView *lastHitView = nil;
     [[self window] setAutodisplay:YES];
 }
 
-- (BOOL)performKeyEquivalent:(NSEvent *)event
-{
-    // Pass command-key combos through WebCore if there is a key binding available for
-    // this event. This lets web pages have a crack at intercepting command-modified keypresses.
-    if ([self _web_firstResponderIsSelfOrDescendantView] && [[self _bridge] interceptKeyEvent:event toView:self]) {
-        return YES;
-    }
-    return [super performKeyEquivalent:event];
-}
-
 - (BOOL)_interceptEditingKeyEvent:(NSEvent *)event
 {   
     // Work around this bug:
@@ -3073,6 +3064,60 @@ static WebHTMLView *lastHitView = nil;
     }
 }
 
+- (void)_toggleBold
+{
+    DOMCSSStyleDeclaration *style = [self _emptyStyle];
+    [style setFontWeight:@"bold"];
+    if ([[self _bridge] selectionStartHasStyle:style])
+        [style setFontWeight:@"normal"];
+    [self _applyStyleToSelection:style];
+}
+
+- (void)_toggleItalic
+{
+    DOMCSSStyleDeclaration *style = [self _emptyStyle];
+    [style setFontStyle:@"italic"];
+    if ([[self _bridge] selectionStartHasStyle:style])
+        [style setFontStyle:@"normal"];
+    [self _applyStyleToSelection:style];
+}
+
+- (BOOL)_handleStyleKeyEquivalent:(NSEvent *)event
+{
+    if (![[WebPreferences standardPreferences] respectStandardStyleKeyEquivalents]) {
+        return NO;
+    }
+    
+    if (![self _canEdit])
+        return NO;
+    
+    NSString *string = [event charactersIgnoringModifiers];
+    if ([string isEqualToString:@"b"]) {
+        [self _toggleBold];
+        return YES;
+    }
+    if ([string isEqualToString:@"i"]) {
+        [self _toggleItalic];
+        return YES;
+    }
+    
+    return NO;
+}
+
+- (BOOL)performKeyEquivalent:(NSEvent *)event
+{
+    if ([self _handleStyleKeyEquivalent:event]) {
+        return YES;
+    }
+    
+    // Pass command-key combos through WebCore if there is a key binding available for
+    // this event. This lets web pages have a crack at intercepting command-modified keypresses.
+    if ([self _web_firstResponderIsSelfOrDescendantView] && [[self _bridge] interceptKeyEvent:event toView:self]) {
+        return YES;
+    }
+    return [super performKeyEquivalent:event];
+}
+
 - (void)copyFont:(id)sender
 {
     // Put RTF with font attributes on the pasteboard.
index d7df8edde28d12b63352416649943118d519f623..15809461a7a212333ec42324eb4188349e3af44c 100644 (file)
@@ -37,3 +37,8 @@
 #define WebKitBackForwardCacheExpirationIntervalKey @"WebKitBackForwardCacheExpirationIntervalKey"
 #define WebKitTabToLinksPreferenceKey @"WebKitTabToLinksPreferenceKey"
 #define WebKitPrivateBrowsingEnabledPreferenceKey @"WebKitPrivateBrowsingEnabled"
+
+// These are private both because callers should be using the cover methods and because the
+// cover methods themselves are private.
+#define WebKitRespectStandardStyleKeyEquivalentsPreferenceKey @"WebKitRespectStandardStyleKeyEquivalents"
+
index 3d4c6fbca3b1a4ff1c3228998d2f3f94e1fe2e15..2c01a15a5b638aea8b78ca278831a309448764cd 100644 (file)
@@ -46,6 +46,13 @@ enum { WebPreferencesVersion = 1 };
 + (NSString *)_IBCreatorID;
 @end
 
+@interface WebPreferences (WebForwardDeclarations)
+// This pseudo-category is needed so these methods can be used from within other category implementations
+// without being in the public header file.
+- (BOOL)_boolValueForKey:(NSString *)key;
+- (void)_setBoolValue:(BOOL)value forKey:(NSString *)key;
+@end
+
 @implementation WebPreferences
 
 - init
@@ -192,6 +199,7 @@ NS_ENDHANDLER
         @"1800",                        WebKitBackForwardCacheExpirationIntervalKey,
         [NSNumber numberWithBool:NO],   WebKitTabToLinksPreferenceKey,
         [NSNumber numberWithBool:NO],   WebKitPrivateBrowsingEnabledPreferenceKey,
+        [NSNumber numberWithBool:NO],   WebKitRespectStandardStyleKeyEquivalentsPreferenceKey,
         nil];
 
     [[NSUserDefaults standardUserDefaults] registerDefaults:dict];
@@ -524,6 +532,16 @@ NS_ENDHANDLER
 
 @implementation WebPreferences (WebPrivate)
 
+- (BOOL)respectStandardStyleKeyEquivalents
+{
+    return [self _boolValueForKey:WebKitRespectStandardStyleKeyEquivalentsPreferenceKey];
+}
+
+- (void)setRespectStandardStyleKeyEquivalents:(BOOL)flag
+{
+    [self _setBoolValue:flag forKey:WebKitRespectStandardStyleKeyEquivalentsPreferenceKey];
+}
+
 - (int)_pageCacheSize
 {
     return [[NSUserDefaults standardUserDefaults] integerForKey:WebKitPageCacheSizePreferenceKey];
index 4a97d358789e40b12e2a03c659f8fc6c1b48d8da..54faa1c86bf7e816473c7de83eb3a9282fbd45c1 100644 (file)
@@ -7,6 +7,11 @@
 
 @interface WebPreferences (WebPrivate)
 
+// Preferences that might be public in a future release
+- (BOOL)respectStandardStyleKeyEquivalents;
+- (void)setRespectStandardStyleKeyEquivalents:(BOOL)flag;
+
+// Other private methods
 - (int)_pageCacheSize;
 - (int)_objectCacheSize;
 - (void)_postPreferencesChangesNotification;