Reviewed by Darin.
authorthatcher <thatcher@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 15 Aug 2007 23:27:50 +0000 (23:27 +0000)
committerthatcher <thatcher@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 15 Aug 2007 23:27:50 +0000 (23:27 +0000)
        <rdar://problem/5410937> HIWebView in SimpleCarbonWeb doesn't seem to be getting adequate invalidation when window is resized

        HIWebViewCreate now just returns a HIViewRef created with HICocoaViewCreate. This eliminates lots of old code and
        makes HIWebView a better citizen starting with Leopard. The old code paths are still needed for Tiger, so now
        most of the files in the WebKit/Carbon directory are #ifdef BUILDING_ON_TIGER.

        The Tiger code is unchanged and dosen't exhibit the invalidation problem when the window resizes.

        * Carbon/CarbonUtils.m:
        (WebInitForCarbon): #ifdef BUILDING_ON_TIGER portions of this code that is not needed on Leopard.
        * Carbon/CarbonWindowAdapter.h: #ifdef BUILDING_ON_TIGER
        * Carbon/CarbonWindowAdapter.m: Ditto.
        * Carbon/CarbonWindowContentView.h: Ditto.
        * Carbon/CarbonWindowContentView.m: Ditto.
        * Carbon/CarbonWindowFrame.h: Ditto.
        * Carbon/CarbonWindowFrame.m: Ditto.
        * Carbon/HIViewAdapter.h: Ditto.
        * Carbon/HIViewAdapter.m: Ditto.
        * Carbon/HIWebView.h: Consolidate two #ifdef __OBJC__ blocks into one.
        * Carbon/HIWebView.m: Implement Leopard specific HIWebViewCreate, HIWebViewCreateWithClass and HIWebViewGetWebView.
        (HIWebViewCreate): Call HIWebViewCreateWithClass passing [WebView class].
        (HIWebViewCreateWithClass): Call HICocoaViewCreate with an instance of the class passed in.
        (HIWebViewGetWebView): Call HICocoaViewGetView.

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

12 files changed:
WebKit/Carbon/CarbonUtils.m
WebKit/Carbon/CarbonWindowAdapter.h
WebKit/Carbon/CarbonWindowAdapter.m
WebKit/Carbon/CarbonWindowContentView.h
WebKit/Carbon/CarbonWindowContentView.m
WebKit/Carbon/CarbonWindowFrame.h
WebKit/Carbon/CarbonWindowFrame.m
WebKit/Carbon/HIViewAdapter.h
WebKit/Carbon/HIViewAdapter.m
WebKit/Carbon/HIWebView.h
WebKit/Carbon/HIWebView.m
WebKit/ChangeLog

index be749c9de31cbb68a36e032980abfdd728aabce4..bde15f781618e8cf2c00e6019d881fdf82c36dc3 100644 (file)
 #ifndef __LP64__
 
 #include "CarbonUtils.h"
+
 #import <WebKitSystemInterface.h>
 
-extern CGImageRef _NSCreateImageRef( unsigned char *const bitmapData[5], int pixelsWide, int pixelsHigh, int bitsPerSample, int samplesPerPixel, int bitsPerPixel, int bytesPerRow, BOOL isPlanar, BOOL hasAlpha, NSString *colorSpaceName, CGColorSpaceRef customColorSpace, id sourceObj);
+extern CGImageRef _NSCreateImageRef(unsigned char *const bitmapData[5], int pixelsWide, int pixelsHigh, int bitsPerSample, int samplesPerPixel, int bitsPerPixel, int bytesPerRow, BOOL isPlanar, BOOL hasAlpha, NSString *colorSpaceName, CGColorSpaceRef customColorSpace, id sourceObj);
 
-static void                            PoolCleaner( EventLoopTimerRef inTimer, EventLoopIdleTimerMessage inState, void *inUserData );
+static void PoolCleaner(EventLoopTimerRef inTimer, EventLoopIdleTimerMessage inState, void *inUserData);
 
-static NSAutoreleasePool*      sPool;
+static NSAutoreleasePool* sPool;
 static unsigned numPools;
 static EventLoopRef poolLoop;
 
-void                    HIWebViewRegisterClass( void );
+#ifdef BUILDING_ON_TIGER
+
+void HIWebViewRegisterClass(void);
+
+#endif
 
-void
-WebInitForCarbon()
+void WebInitForCarbon(void)
 {
-    static bool                        sAppKitLoaded;
+    static bool sAppKitLoaded;
 
-    if ( !sAppKitLoaded )
-    {
-        ProcessSerialNumber    process;
+    if (!sAppKitLoaded) {
+        ProcessSerialNumber process;
 
         // Force us to register with process server, this ensure that the process
         // "flavour" is correctly established.
-        GetCurrentProcess( &process ); 
+        GetCurrentProcess(&process); 
         NSApplicationLoad();
-                
+
+        sAppKitLoaded = true;
+
         sPool = [[NSAutoreleasePool allocWithZone:NULL] init];
         numPools = WKGetNSAutoreleasePoolCount();
-        
-        poolLoop = GetCurrentEventLoop ();
 
-        InstallEventLoopIdleTimer( GetMainEventLoop(), 1.0, 0, PoolCleaner, 0, NULL );
-        
-        sAppKitLoaded = true;
-                
+        poolLoop = GetCurrentEventLoop();
+
+        InstallEventLoopIdleTimer(GetMainEventLoop(), 1.0, 0, PoolCleaner, 0, NULL);
+
+#ifdef BUILDING_ON_TIGER
+
         HIWebViewRegisterClass();
+
+#endif
+
     }
 }
 
@@ -75,22 +83,20 @@ WebInitForCarbon()
     techniques available to Carbon apps, MUST create their our pools around
     their nested event loops.
 */
-static void
-PoolCleaner( EventLoopTimerRef inTimer, EventLoopIdleTimerMessage inState, void *inUserData )
+static void PoolCleaner(EventLoopTimerRef inTimer, EventLoopIdleTimerMessage inState, void *inUserData)
 {
-    if ( inState == kEventLoopIdleTimerStarted ) {
-        CFStringRef mode = CFRunLoopCopyCurrentMode( (CFRunLoopRef)GetCFRunLoopFromEventLoop( GetCurrentEventLoop() ));
-        EventLoopRef thisLoop = GetCurrentEventLoop ();
-        if ( CFEqual( mode, kCFRunLoopDefaultMode ) && thisLoop == poolLoop) {
-            unsigned currentNumPools = WKGetNSAutoreleasePoolCount()-1;            
-            if (currentNumPools == numPools){
+    if (inState == kEventLoopIdleTimerStarted) {
+        CFStringRef mode = CFRunLoopCopyCurrentMode((CFRunLoopRef)GetCFRunLoopFromEventLoop(GetCurrentEventLoop()));
+        EventLoopRef thisLoop = GetCurrentEventLoop();
+        if (CFEqual(mode, kCFRunLoopDefaultMode) && thisLoop == poolLoop) {
+            unsigned currentNumPools = WKGetNSAutoreleasePoolCount() - 1;            
+            if (currentNumPools == numPools) {
                 [sPool drain];
-                
                 sPool = [[NSAutoreleasePool allocWithZone:NULL] init];
                 numPools = WKGetNSAutoreleasePoolCount();
             }
         }
-        CFRelease( mode );
+        CFRelease(mode);
     }
 }
 
index 87c50ea44137f6f90c71cf89b7e3a5e9fbfcc16c..f58f41d1c89a091b1a2e7fd3cf5e768bb5121884 100644 (file)
@@ -26,6 +26,8 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#ifdef BUILDING_ON_TIGER
+
 #import <Foundation/Foundation.h>
 #import <AppKit/AppKit.h>
 #import <HIToolbox/CarbonEvents.h>
@@ -64,3 +66,5 @@
 - (void)relinquishFocus;
 
 @end
+
+#endif
index e34cf7a493b4032c0635c74eac35e78fd9bde01a..96d04bd604847f2a4d9f762a4410feb3734cba0c 100644 (file)
@@ -55,7 +55,7 @@
 
 // Some things would have to be made public if someone wanted to subclass this so as to support more menu item commands.  M.P. Warning - 9/19/00
 
-#ifndef __LP64__
+#ifdef BUILDING_ON_TIGER
 
 #import "CarbonWindowAdapter.h"
 
index 5ba0478d3b7b6c9c891457011a674096fb604c4c..df7248318235480264b989d81cb0f3e94ec02534 100644 (file)
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#ifdef BUILDING_ON_TIGER
+
 #import <AppKit/NSView.h>
 
 @interface CarbonWindowContentView : NSView { }
 
 @end // interface CarbonWindowContentView
+
+#endif
index d49a6ac149e9c2729d261370e10c44630ab91374..24c75b1964726cdef2a8af9435fe82628c30f66a 100644 (file)
@@ -26,7 +26,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef __LP64__
+#ifdef BUILDING_ON_TIGER
 
 #import "CarbonWindowContentView.h"
 
index 4bca98a429608e4edbb5d9554858c99d36c0d4ff..122036bfb3a883c62ac3278d4dada71575890e6e 100644 (file)
@@ -26,6 +26,8 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#ifdef BUILDING_ON_TIGER
+
 #import <AppKit/AppKit.h>
 
 @interface CarbonWindowFrame : NSView
@@ -41,3 +43,5 @@
 }
 
 @end // interface NSCarbonWindowFrame
+
+#endif
index 83f093a7edb845053ff4eb9f01d7ffa0171f02bb..2f0f173eaa223142bb78db600c1aac341169f57b 100644 (file)
@@ -26,7 +26,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef __LP64__
+#ifdef BUILDING_ON_TIGER
 
 #import "CarbonWindowFrame.h"
 #import "CarbonWindowAdapter.h"
index 875566dbf245671b2bb8979e500236415830cc99..abcaa8c014e5bc4723c4c00be2c8bdbb50a4b8b2 100644 (file)
@@ -26,6 +26,8 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#ifdef BUILDING_ON_TIGER
+
 #import <WebKit/WebKit.h>
 #include <HIToolbox/HIView.h>
 
@@ -36,3 +38,5 @@
 + (HIViewRef)getHIViewForNSView:(NSView*)inView;
 
 @end
+
+#endif
index d53bcdcaed07b107b94102860fda87a3a8946f28..19ebf307827de93a2450c9a19608a0aa4d3bcda0 100644 (file)
@@ -26,7 +26,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef __LP64__
+#ifdef BUILDING_ON_TIGER
 
 #import "HIViewAdapter.h"
 
index 44d6d86cc988bf6126b0f6c5d0b54d0099a634d6..36bc7a094e2b6a600a4dd5f38270aa30b2972088 100644 (file)
 extern "C" {
 #endif
 
-#ifdef __OBJC__
-@class WebView;
-#endif
-
 /*
  *  HIWebViewCreate()
  *  
@@ -71,6 +67,8 @@ HIWebViewCreate(HIViewRef * outControl);
 
 #ifdef __OBJC__
 
+@class WebView;
+
 /*
  *  HIWebViewCreateWithClass(HIViewRef * outControl, Class aClass)
  *  
@@ -126,4 +124,5 @@ HIWebViewGetWebView(HIViewRef inView);
 #endif
 
 #endif
+
 #endif /* __HIWebView__ */
index 79b283fab2166af5cba58b539295498a9a1c6ccf..6f93a524aee9fa61c33d1e28e9bd47d9a7ed7974 100644 (file)
 
 #include "HIWebView.h"
 
+#ifndef BUILDING_ON_TIGER
+
+#import "WebView.h"
+
+OSStatus HIWebViewCreate(HIViewRef* outHIView)
+{
+    return HIWebViewCreateWithClass([WebView class], outHIView);
+}
+
+OSStatus HIWebViewCreateWithClass(Class webViewClass, HIViewRef* outHIView)
+{
+    WebView* view = [[webViewClass alloc] init];
+    OSStatus status = HICocoaViewCreate(view, 0, outHIView);
+    [view release];
+    return status;
+}
+
+WebView* HIWebViewGetWebView(HIViewRef inView)
+{
+    NSView* view = HICocoaViewGetView(inView);
+    if ([view isKindOfClass:[WebView class]])
+        return (WebView*)view;
+    return nil;
+}
+
+#else
+
 #include "CarbonWindowAdapter.h"
 
 #include <WebKit/WebKit.h>
@@ -1624,3 +1651,5 @@ UpdateObserver( CFRunLoopObserverRef observer, CFRunLoopActivity activity, void
 }
 
 #endif
+
+#endif
index d104789bb46dd2d228cdb639c34aa54a334d9c0b..7771a216605386956ad975ff6dbe2064e659f863 100644 (file)
@@ -1,3 +1,31 @@
+2007-08-15  Timothy Hatcher  <timothy@apple.com>
+
+        Reviewed by Darin.
+
+        <rdar://problem/5410937> HIWebView in SimpleCarbonWeb doesn't seem to be getting adequate invalidation when window is resized
+
+        HIWebViewCreate now just returns a HIViewRef created with HICocoaViewCreate. This eliminates lots of old code and
+        makes HIWebView a better citizen starting with Leopard. The old code paths are still needed for Tiger, so now
+        most of the files in the WebKit/Carbon directory are #ifdef BUILDING_ON_TIGER.
+
+        The Tiger code is unchanged and dosen't exhibit the invalidation problem when the window resizes.
+
+        * Carbon/CarbonUtils.m:
+        (WebInitForCarbon): #ifdef BUILDING_ON_TIGER portions of this code that is not needed on Leopard.
+        * Carbon/CarbonWindowAdapter.h: #ifdef BUILDING_ON_TIGER
+        * Carbon/CarbonWindowAdapter.m: Ditto.
+        * Carbon/CarbonWindowContentView.h: Ditto.
+        * Carbon/CarbonWindowContentView.m: Ditto.
+        * Carbon/CarbonWindowFrame.h: Ditto.
+        * Carbon/CarbonWindowFrame.m: Ditto.
+        * Carbon/HIViewAdapter.h: Ditto.
+        * Carbon/HIViewAdapter.m: Ditto.
+        * Carbon/HIWebView.h: Consolidate two #ifdef __OBJC__ blocks into one.
+        * Carbon/HIWebView.m: Implement Leopard specific HIWebViewCreate, HIWebViewCreateWithClass and HIWebViewGetWebView.
+        (HIWebViewCreate): Call HIWebViewCreateWithClass passing [WebView class].
+        (HIWebViewCreateWithClass): Call HICocoaViewCreate with an instance of the class passed in.
+        (HIWebViewGetWebView): Call HICocoaViewGetView.
+
 2007-08-14  Brady Eidson  <beidson@apple.com>
 
         Reviewed by Darin, John, Maciej, Oliver, and Tim