Gitweb links:

...log 
http://git.netsurf-browser.org/netsurf.git/shortlog/d4da61807200cdc5b9867c49c37feea22efa675d
...commit 
http://git.netsurf-browser.org/netsurf.git/commit/d4da61807200cdc5b9867c49c37feea22efa675d
...tree 
http://git.netsurf-browser.org/netsurf.git/tree/d4da61807200cdc5b9867c49c37feea22efa675d

The branch, svenw/cocoa has been updated
       via  d4da61807200cdc5b9867c49c37feea22efa675d (commit)
       via  1a142fdd96dc29eebad8175ffa0345f7562e0398 (commit)
       via  8ce6d02fbd4fcf3a660812a7b9e5a60f2beca807 (commit)
       via  f81e8a53d7f532f22da163f3bdd694184b8e72a8 (commit)
       via  8fd52c32bcedaa83a88aa22e4100e66c50c553c2 (commit)
       via  103f99c2103f9c0a74b9da2d1d8958acd0ccb4cb (commit)
      from  f7026ef8b115c4d639aa32033bbf6851834bf998 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commitdiff 
http://git.netsurf-browser.org/netsurf.git/commit/?id=d4da61807200cdc5b9867c49c37feea22efa675d
commit d4da61807200cdc5b9867c49c37feea22efa675d
Merge: 1a142fd 103f99c
Author: Sven Weidauer <[email protected]>
Commit: Sven Weidauer <[email protected]>

    Merge remote-tracking branch 'origin/master' into svenw/cocoa



commitdiff 
http://git.netsurf-browser.org/netsurf.git/commit/?id=1a142fdd96dc29eebad8175ffa0345f7562e0398
commit 1a142fdd96dc29eebad8175ffa0345f7562e0398
Author: Sven Weidauer <[email protected]>
Commit: Sven Weidauer <[email protected]>

    Add helpers for retain/release and use in bitmap.m

diff --git a/frontends/cocoa/NetSurf.xcodeproj/project.pbxproj 
b/frontends/cocoa/NetSurf.xcodeproj/project.pbxproj
index 8c32db7..bc1bee7 100644
--- a/frontends/cocoa/NetSurf.xcodeproj/project.pbxproj
+++ b/frontends/cocoa/NetSurf.xcodeproj/project.pbxproj
@@ -702,6 +702,7 @@
                263A29011EE412B4005C52B9 /* uievents.idl */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = 
uievents.idl; sourceTree = "<group>"; };
                263A29021EE412B4005C52B9 /* urlutils.idl */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = 
urlutils.idl; sourceTree = "<group>"; };
                263A29061EE4196E005C52B9 /* Cocoa.framework */ = {isa = 
PBXFileReference; lastKnownFileType = wrapper.framework; name = 
Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = 
SDKROOT; };
+               26890F951EE89C5F00063C30 /* arc.h */ = {isa = PBXFileReference; 
lastKnownFileType = sourcecode.c.h; path = arc.h; sourceTree = SOURCE_ROOT; };
                2689BB2D1EE543E20090B679 /* PSMTabBarControl+Private.h */ = 
{isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 
"PSMTabBarControl+Private.h"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
@@ -735,11 +736,12 @@
                                261DB2501318444F00C59F12 /* extract-strings.sh 
*/,
                        );
                        name = Tools;
-                       sourceTree = "<group>";
+                       sourceTree = SOURCE_ROOT;
                };
                263A25EF1EE40BD6005C52B9 /* Cocoa */ = {
                        isa = PBXGroup;
                        children = (
+                               26890F951EE89C5F00063C30 /* arc.h */,
                                263A26021EE40BFC005C52B9 /* PSMTabBarControl */,
                                263A262C1EE40BFC005C52B9 /* res */,
                                263A26611EE40BFC005C52B9 /* apple_image.h */,
@@ -807,8 +809,7 @@
                                263A269F1EE40BFC005C52B9 /* URLFieldCell.m */,
                        );
                        name = Cocoa;
-                       path = NetSurfBrowser;
-                       sourceTree = "<group>";
+                       sourceTree = SOURCE_ROOT;
                };
                263A26021EE40BFC005C52B9 /* PSMTabBarControl */ = {
                        isa = PBXGroup;
@@ -845,7 +846,7 @@
                                2689BB2D1EE543E20090B679 /* 
PSMTabBarControl+Private.h */,
                        );
                        path = PSMTabBarControl;
-                       sourceTree = SOURCE_ROOT;
+                       sourceTree = "<group>";
                };
                263A26031EE40BFC005C52B9 /* Images */ = {
                        isa = PBXGroup;
@@ -899,7 +900,7 @@
                                263A26601EE40BFC005C52B9 /* SearchWindow.xib */,
                        );
                        path = res;
-                       sourceTree = SOURCE_ROOT;
+                       sourceTree = "<group>";
                };
                263A264C1EE40BFC005C52B9 /* Icons */ = {
                        isa = PBXGroup;
@@ -925,7 +926,8 @@
                                263A27B81EE40C4B005C52B9 /* utils */,
                        );
                        name = Engine;
-                       sourceTree = "<group>";
+                       path = ../..;
+                       sourceTree = SOURCE_ROOT;
                };
                263A26A11EE40C4A005C52B9 /* content */ = {
                        isa = PBXGroup;
@@ -956,8 +958,7 @@
                                263A273F1EE40C4B005C52B9 /* urldb.c */,
                                263A27401EE40C4B005C52B9 /* urldb.h */,
                        );
-                       name = content;
-                       path = ../../content;
+                       path = content;
                        sourceTree = "<group>";
                };
                263A26AD1EE40C4A005C52B9 /* fetchers */ = {
@@ -1096,8 +1097,7 @@
                                263A277B1EE40C4B005C52B9 /* version.c */,
                                263A277C1EE40C4B005C52B9 /* version.h */,
                        );
-                       name = desktop;
-                       path = ../../desktop;
+                       path = desktop;
                        sourceTree = "<group>";
                };
                263A277D1EE40C4B005C52B9 /* include */ = {
@@ -1105,8 +1105,7 @@
                        children = (
                                263A277E1EE40C4B005C52B9 /* netsurf */,
                        );
-                       name = include;
-                       path = ../../include;
+                       path = include;
                        sourceTree = "<group>";
                };
                263A277E1EE40C4B005C52B9 /* netsurf */ = {
@@ -1176,8 +1175,7 @@
                                263A27B61EE40C4B005C52B9 /* textplain.c */,
                                263A27B71EE40C4B005C52B9 /* textplain.h */,
                        );
-                       name = render;
-                       path = ../../render;
+                       path = render;
                        sourceTree = "<group>";
                };
                263A27B81EE40C4B005C52B9 /* utils */ = {
@@ -1250,8 +1248,7 @@
                                263A280E1EE40C4B005C52B9 /* utsname.h */,
                                263A280F1EE40C4B005C52B9 /* valgrind.supp */,
                        );
-                       name = utils;
-                       path = ../../utils;
+                       path = utils;
                        sourceTree = "<group>";
                };
                263A27CF1EE40C4B005C52B9 /* http */ = {
diff --git a/frontends/cocoa/arc.h b/frontends/cocoa/arc.h
new file mode 100644
index 0000000..bfdf31c
--- /dev/null
+++ b/frontends/cocoa/arc.h
@@ -0,0 +1,22 @@
+#ifndef arc_h
+#define arc_h
+
+/**
+ *  Retains an Objective-C object and returns a pointer that can be passed to 
C.
+ *  @param object The object to retain
+ *  @return Pointer suitable to be stored in C code.
+ */
+static inline void *arc_retain(id object) {
+    return (__bridge_retained void *)object;
+}
+
+/**
+ *  Releases the Objective-C object pointed to by a C pointer.
+ *  @param pointer Object pointer to release.
+ */
+static inline void arc_release(void *pointer) {
+    id object = (__bridge_transfer id)pointer;
+    object = nil;
+}
+
+#endif
diff --git a/frontends/cocoa/bitmap.m b/frontends/cocoa/bitmap.m
index 597a5af..554d5e0 100644
--- a/frontends/cocoa/bitmap.m
+++ b/frontends/cocoa/bitmap.m
@@ -31,6 +31,8 @@
 #import "cocoa/plotter.h"
 #import "cocoa/bitmap.h"
 
+#import "cocoa/arc.h"
+
 #define BITS_PER_SAMPLE (8)
 #define SAMPLES_PER_PIXEL (4)
 #define BITS_PER_PIXEL (BITS_PER_SAMPLE * SAMPLES_PER_PIXEL)
@@ -41,7 +43,6 @@
 #define ALPHA_OFFSET (3)
 
 static CGImageRef cocoa_prepare_bitmap(void *bitmap);
-//static NSMapTable *cocoa_get_bitmap_cache( void );
 
 static inline NSMapTable *cocoa_get_bitmap_cache(void)
 {
@@ -52,40 +53,32 @@ static inline NSMapTable *cocoa_get_bitmap_cache(void)
     return cache;
 }
 
+static inline NSBitmapImageRep *get_bitmap(void *bitmap) {
+    NSCParameterAssert(bitmap);
+    return (__bridge NSBitmapImageRep *)bitmap;
+}
+
 static int bitmap_get_width(void *bitmap)
 {
-    NSCParameterAssert(NULL != bitmap);
-    NSBitmapImageRep *bmp = (__bridge NSBitmapImageRep *)bitmap;
-    return (int)[bmp pixelsWide];
+    return (int)get_bitmap(bitmap).pixelsWide;
 }
 
 static int bitmap_get_height(void *bitmap)
 {
-    NSCParameterAssert(NULL != bitmap);
-    NSBitmapImageRep *bmp = (__bridge NSBitmapImageRep *)bitmap;
-    return (int)[bmp pixelsHigh];
+    return (int)get_bitmap(bitmap).pixelsHigh;
 }
 
 static bool bitmap_get_opaque(void *bitmap)
 {
-    NSCParameterAssert(NULL != bitmap);
-    NSBitmapImageRep *bmp = (__bridge NSBitmapImageRep *)bitmap;
-    return [bmp isOpaque];
+    return get_bitmap(bitmap).isOpaque;
 }
 
 static void bitmap_destroy(void *bitmap)
 {
     NSCParameterAssert(NULL != bitmap);
 
-    NSMapTable *cache = cocoa_get_bitmap_cache();
-    CGImageRef image = NSMapGet(cache, bitmap);
-    if (NULL != image) {
-        CGImageRelease(image);
-        NSMapRemove(cache, bitmap);
-    }
-
-    NSBitmapImageRep *bmp = (__bridge_transfer NSBitmapImageRep *)bitmap;
-    bmp = nil;
+    cocoa_bitmap_modified(bitmap);
+    arc_release(bitmap);
 }
 
 static void *bitmap_create(int width, int height, unsigned int state)
@@ -103,35 +96,27 @@ static void *bitmap_create(int width, int height, unsigned 
int state)
                      bytesPerRow:BYTES_PER_PIXEL * width
                     bitsPerPixel:BITS_PER_PIXEL];
 
-    return (__bridge_retained void *)bmp;
+    return arc_retain(bmp);
 }
 
 static void bitmap_set_opaque(void *bitmap, bool opaque)
 {
-    NSCParameterAssert(NULL != bitmap);
-    NSBitmapImageRep *bmp = (__bridge NSBitmapImageRep *)bitmap;
-    [bmp setOpaque:opaque ? YES : NO];
+    get_bitmap(bitmap).opaque = opaque ? YES : NO;
 }
 
 static unsigned char *bitmap_get_buffer(void *bitmap)
 {
-    NSCParameterAssert(NULL != bitmap);
-    NSBitmapImageRep *bmp = (__bridge NSBitmapImageRep *)bitmap;
-    return [bmp bitmapData];
+    return get_bitmap(bitmap).bitmapData;
 }
 
 static size_t bitmap_get_rowstride(void *bitmap)
 {
-    NSCParameterAssert(NULL != bitmap);
-    NSBitmapImageRep *bmp = (__bridge NSBitmapImageRep *)bitmap;
-    return [bmp bytesPerRow];
+    return get_bitmap(bitmap).bytesPerRow;
 }
 
 static size_t bitmap_get_bpp(void *bitmap)
 {
-    NSCParameterAssert(NULL != bitmap);
-    NSBitmapImageRep *bmp = (__bridge NSBitmapImageRep *)bitmap;
-    return [bmp bitsPerPixel] / 8;
+    return get_bitmap(bitmap).bitsPerPixel / 8;
 }
 
 static bool bitmap_test_opaque(void *bitmap)
@@ -159,11 +144,8 @@ static bool bitmap_test_opaque(void *bitmap)
 
 static bool bitmap_save(void *bitmap, const char *path, unsigned flags)
 {
-    NSCParameterAssert(NULL != bitmap);
-    NSBitmapImageRep *bmp = (__bridge NSBitmapImageRep *)bitmap;
-
-    NSData *tiff = [bmp TIFFRepresentation];
-    return [tiff writeToFile:[NSString stringWithUTF8String:path] 
atomically:YES];
+    NSData *tiff = get_bitmap(bitmap).TIFFRepresentation;
+    return [tiff writeToFile:@(path) atomically:YES];
 }
 
 void cocoa_bitmap_modified(void *bitmap)
@@ -191,17 +173,16 @@ CGImageRef cocoa_get_cgimage(void *bitmap)
 
 static CGImageRef cocoa_prepare_bitmap(void *bitmap)
 {
-    NSCParameterAssert(NULL != bitmap);
+    NSBitmapImageRep *bmp = get_bitmap(bitmap);
 
-    NSBitmapImageRep *bmp = (__bridge NSBitmapImageRep *)bitmap;
+    size_t w = bmp.pixelsWide;
+    size_t h = bmp.pixelsHigh;
 
-    size_t w = [bmp pixelsWide];
-    size_t h = [bmp pixelsHigh];
+    CGImageRef original = bmp.CGImage;
 
-    CGImageRef original = [bmp CGImage];
-
-    if (h <= 1)
+    if (h <= 1) {
         return CGImageRetain(original);
+    }
 
     void *data = malloc(4 * w * h);
 


commitdiff 
http://git.netsurf-browser.org/netsurf.git/commit/?id=8ce6d02fbd4fcf3a660812a7b9e5a60f2beca807
commit 8ce6d02fbd4fcf3a660812a7b9e5a60f2beca807
Author: Sven Weidauer <[email protected]>
Commit: Sven Weidauer <[email protected]>

    Convert URLFieldCell to use dragging sessions instead of the deprecated 
dragImage:... method

diff --git a/frontends/cocoa/URLFieldCell.m b/frontends/cocoa/URLFieldCell.m
index 760052e..54b240d 100644
--- a/frontends/cocoa/URLFieldCell.m
+++ b/frontends/cocoa/URLFieldCell.m
@@ -21,7 +21,10 @@
 #import "utils/nsurl.h"
 #import "netsurf/url_db.h"
 
-@interface URLFieldCell ()
+@interface URLFieldCell () <
+    NSPasteboardWriting,
+    NSDraggingSource
+>
 
 @property (nonatomic) NSButtonCell *refreshCell;
 
@@ -128,13 +131,14 @@
     point.x -= urlBounds.size.height / 2;
     point.y += urlBounds.size.height / 2;
 
-    [view dragImage:image
-                 at:point
-             offset:NSZeroSize
-              event:[NSApp currentEvent]
-         pasteboard:pb
-             source:self
-          slideBack:YES];
+    NSDraggingItem *item = [[NSDraggingItem alloc] initWithPasteboardWriter: 
self];
+    item.imageComponentsProvider = ^NSArray<NSDraggingImageComponent *> * 
_Nonnull{
+        NSDraggingImageComponent *component = [NSDraggingImageComponent 
draggingImageComponentWithKey: NSDraggingImageComponentIconKey];
+        component.contents = image;
+        return @[component];
+    };
+
+    [view beginDraggingSessionWithItems:@[item] event:NSApp.currentEvent 
source:self];
 }
 
 - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal
@@ -219,4 +223,32 @@
     return self.refreshCell.action;
 }
 
+- (nullable id) pasteboardPropertyListForType:(nonnull NSPasteboardType)type {
+    if ([type isEqualToString: NSPasteboardTypeString] || [type 
isEqualToString: @"public.url"]) {
+        return self.stringValue;
+    } else if ([type isEqualToString: @"public.url-name"]) {
+        nsurl *nsurl;
+
+        if (nsurl_create(self.stringValue.UTF8String, &nsurl) == NSERROR_OK) {
+
+            const struct url_data *data = urldb_get_url_data(nsurl);
+            nsurl_unref(nsurl);
+
+            if (data && data->title) {
+                return @(data->title);                
+            }
+        }
+    }
+
+    return nil;
+}
+
+- (nonnull NSArray<NSPasteboardType> *) writableTypesForPasteboard:(nonnull 
NSPasteboard *)pasteboard {
+    return @[NSPasteboardTypeString, @"public.url", @"public.url-name"];
+}
+
+- (NSDragOperation)draggingSession:(NSDraggingSession *)session 
sourceOperationMaskForDraggingContext:(NSDraggingContext)context {
+    return NSDragOperationCopy;
+}
+
 @end


commitdiff 
http://git.netsurf-browser.org/netsurf.git/commit/?id=f81e8a53d7f532f22da163f3bdd694184b8e72a8
commit f81e8a53d7f532f22da163f3bdd694184b8e72a8
Author: Sven Weidauer <[email protected]>
Commit: Sven Weidauer <[email protected]>

    Only adjust frame when minimum size actually changes. Fixes high CPU load.

diff --git a/frontends/cocoa/ScrollableView.m b/frontends/cocoa/ScrollableView.m
index b2210d0..c495b1d 100644
--- a/frontends/cocoa/ScrollableView.m
+++ b/frontends/cocoa/ScrollableView.m
@@ -30,8 +30,10 @@
 
 - (void)setMinimumSize:(NSSize)newSize
 {
-    _minimumSize = newSize;
-    [self adjustFrame];
+    if (!CGSizeEqualToSize(_minimumSize, newSize)) {
+        _minimumSize = newSize;
+        [self adjustFrame];
+    }
 }
 
 - (void)adjustFrame


commitdiff 
http://git.netsurf-browser.org/netsurf.git/commit/?id=8fd52c32bcedaa83a88aa22e4100e66c50c553c2
commit 8fd52c32bcedaa83a88aa22e4100e66c50c553c2
Author: Sven Weidauer <[email protected]>
Commit: Sven Weidauer <[email protected]>

    Update project file (Xcode 9, generate testament.h when building using the 
Xcode build system)

diff --git a/frontends/cocoa/NetSurf.xcodeproj/project.pbxproj 
b/frontends/cocoa/NetSurf.xcodeproj/project.pbxproj
index 94c82d6..8c32db7 100644
--- a/frontends/cocoa/NetSurf.xcodeproj/project.pbxproj
+++ b/frontends/cocoa/NetSurf.xcodeproj/project.pbxproj
@@ -1446,6 +1446,7 @@
                        isa = PBXNativeTarget;
                        buildConfigurationList = 263A25FF1EE40BD6005C52B9 /* 
Build configuration list for PBXNativeTarget "NetSurfBrowser" */;
                        buildPhases = (
+                               26890F931EE88CE100063C30 /* Build Testament 
Header */,
                                263A25EA1EE40BD6005C52B9 /* Sources */,
                                263A25EB1EE40BD6005C52B9 /* Frameworks */,
                                263A25EC1EE40BD6005C52B9 /* Resources */,
@@ -1466,7 +1467,7 @@
                        isa = PBXProject;
                        attributes = {
                                BuildIndependentTargetsInParallel = YES;
-                               LastUpgradeCheck = 0830;
+                               LastUpgradeCheck = 0900;
                                TargetAttributes = {
                                        263A25ED1EE40BD6005C52B9 = {
                                                CreatedOnToolsVersion = 8.3.2;
@@ -1555,6 +1556,25 @@
                };
 /* End PBXResourcesBuildPhase section */
 
+/* Begin PBXShellScriptBuildPhase section */
+               26890F931EE88CE100063C30 /* Build Testament Header */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Build Testament Header";
+                       outputPaths = (
+                               "$(DERIVED_FILE_DIR)/testament.h",
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "ROOT=\"${SRCROOT}/../..\"\nexec perl -w 
\"${ROOT}/utils/git-testament.pl\" \"${ROOT}\" \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+                       showEnvVarsInLog = 0;
+               };
+/* End PBXShellScriptBuildPhase section */
+
 /* Begin PBXSourcesBuildPhase section */
                263A25EA1EE40BD6005C52B9 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
@@ -1981,12 +2001,18 @@
                        isa = XCBuildConfiguration;
                        buildSettings = {
                                CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 
YES;
+                               CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
                                CLANG_WARN_BOOL_CONVERSION = YES;
+                               CLANG_WARN_COMMA = YES;
                                CLANG_WARN_CONSTANT_CONVERSION = YES;
                                CLANG_WARN_EMPTY_BODY = YES;
                                CLANG_WARN_ENUM_CONVERSION = YES;
                                CLANG_WARN_INFINITE_RECURSION = YES;
                                CLANG_WARN_INT_CONVERSION = YES;
+                               CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+                               CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+                               CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+                               CLANG_WARN_STRICT_PROTOTYPES = YES;
                                CLANG_WARN_SUSPICIOUS_MOVE = YES;
                                CLANG_WARN_UNREACHABLE_CODE = YES;
                                CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -2011,12 +2037,18 @@
                        isa = XCBuildConfiguration;
                        buildSettings = {
                                CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 
YES;
+                               CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
                                CLANG_WARN_BOOL_CONVERSION = YES;
+                               CLANG_WARN_COMMA = YES;
                                CLANG_WARN_CONSTANT_CONVERSION = YES;
                                CLANG_WARN_EMPTY_BODY = YES;
                                CLANG_WARN_ENUM_CONVERSION = YES;
                                CLANG_WARN_INFINITE_RECURSION = YES;
                                CLANG_WARN_INT_CONVERSION = YES;
+                               CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+                               CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+                               CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+                               CLANG_WARN_STRICT_PROTOTYPES = YES;
                                CLANG_WARN_SUSPICIOUS_MOVE = YES;
                                CLANG_WARN_UNREACHABLE_CODE = YES;
                                CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;


-----------------------------------------------------------------------

Summary of changes:
 frontends/amiga/os3support.c                      |    2 +-
 frontends/cocoa/NetSurf.xcodeproj/project.pbxproj |   63 ++++++++++++++-----
 frontends/cocoa/ScrollableView.m                  |    6 +-
 frontends/cocoa/URLFieldCell.m                    |   48 +++++++++++---
 frontends/cocoa/arc.h                             |   22 +++++++
 frontends/cocoa/bitmap.m                          |   69 ++++++++-------------
 6 files changed, 138 insertions(+), 72 deletions(-)
 create mode 100644 frontends/cocoa/arc.h

diff --git a/frontends/amiga/os3support.c b/frontends/amiga/os3support.c
index c082602..5c1e40d 100644
--- a/frontends/amiga/os3support.c
+++ b/frontends/amiga/os3support.c
@@ -332,7 +332,7 @@ void CloseOutlineFont(struct OutlineFont *of, struct List 
*list)
 int64 GetFileSize(BPTR fh)
 {
        int32 size = 0;
-       struct FileInfoBlock *fib = malloc(sizeof(struct FileInfoBlock));
+       struct FileInfoBlock *fib = AllocDosObject(DOS_FIB, NULL);
        if(fib == NULL) return 0;
 
        ExamineFH(fh, fib);
diff --git a/frontends/cocoa/NetSurf.xcodeproj/project.pbxproj 
b/frontends/cocoa/NetSurf.xcodeproj/project.pbxproj
index 94c82d6..bc1bee7 100644
--- a/frontends/cocoa/NetSurf.xcodeproj/project.pbxproj
+++ b/frontends/cocoa/NetSurf.xcodeproj/project.pbxproj
@@ -702,6 +702,7 @@
                263A29011EE412B4005C52B9 /* uievents.idl */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = 
uievents.idl; sourceTree = "<group>"; };
                263A29021EE412B4005C52B9 /* urlutils.idl */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = 
urlutils.idl; sourceTree = "<group>"; };
                263A29061EE4196E005C52B9 /* Cocoa.framework */ = {isa = 
PBXFileReference; lastKnownFileType = wrapper.framework; name = 
Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = 
SDKROOT; };
+               26890F951EE89C5F00063C30 /* arc.h */ = {isa = PBXFileReference; 
lastKnownFileType = sourcecode.c.h; path = arc.h; sourceTree = SOURCE_ROOT; };
                2689BB2D1EE543E20090B679 /* PSMTabBarControl+Private.h */ = 
{isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 
"PSMTabBarControl+Private.h"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
@@ -735,11 +736,12 @@
                                261DB2501318444F00C59F12 /* extract-strings.sh 
*/,
                        );
                        name = Tools;
-                       sourceTree = "<group>";
+                       sourceTree = SOURCE_ROOT;
                };
                263A25EF1EE40BD6005C52B9 /* Cocoa */ = {
                        isa = PBXGroup;
                        children = (
+                               26890F951EE89C5F00063C30 /* arc.h */,
                                263A26021EE40BFC005C52B9 /* PSMTabBarControl */,
                                263A262C1EE40BFC005C52B9 /* res */,
                                263A26611EE40BFC005C52B9 /* apple_image.h */,
@@ -807,8 +809,7 @@
                                263A269F1EE40BFC005C52B9 /* URLFieldCell.m */,
                        );
                        name = Cocoa;
-                       path = NetSurfBrowser;
-                       sourceTree = "<group>";
+                       sourceTree = SOURCE_ROOT;
                };
                263A26021EE40BFC005C52B9 /* PSMTabBarControl */ = {
                        isa = PBXGroup;
@@ -845,7 +846,7 @@
                                2689BB2D1EE543E20090B679 /* 
PSMTabBarControl+Private.h */,
                        );
                        path = PSMTabBarControl;
-                       sourceTree = SOURCE_ROOT;
+                       sourceTree = "<group>";
                };
                263A26031EE40BFC005C52B9 /* Images */ = {
                        isa = PBXGroup;
@@ -899,7 +900,7 @@
                                263A26601EE40BFC005C52B9 /* SearchWindow.xib */,
                        );
                        path = res;
-                       sourceTree = SOURCE_ROOT;
+                       sourceTree = "<group>";
                };
                263A264C1EE40BFC005C52B9 /* Icons */ = {
                        isa = PBXGroup;
@@ -925,7 +926,8 @@
                                263A27B81EE40C4B005C52B9 /* utils */,
                        );
                        name = Engine;
-                       sourceTree = "<group>";
+                       path = ../..;
+                       sourceTree = SOURCE_ROOT;
                };
                263A26A11EE40C4A005C52B9 /* content */ = {
                        isa = PBXGroup;
@@ -956,8 +958,7 @@
                                263A273F1EE40C4B005C52B9 /* urldb.c */,
                                263A27401EE40C4B005C52B9 /* urldb.h */,
                        );
-                       name = content;
-                       path = ../../content;
+                       path = content;
                        sourceTree = "<group>";
                };
                263A26AD1EE40C4A005C52B9 /* fetchers */ = {
@@ -1096,8 +1097,7 @@
                                263A277B1EE40C4B005C52B9 /* version.c */,
                                263A277C1EE40C4B005C52B9 /* version.h */,
                        );
-                       name = desktop;
-                       path = ../../desktop;
+                       path = desktop;
                        sourceTree = "<group>";
                };
                263A277D1EE40C4B005C52B9 /* include */ = {
@@ -1105,8 +1105,7 @@
                        children = (
                                263A277E1EE40C4B005C52B9 /* netsurf */,
                        );
-                       name = include;
-                       path = ../../include;
+                       path = include;
                        sourceTree = "<group>";
                };
                263A277E1EE40C4B005C52B9 /* netsurf */ = {
@@ -1176,8 +1175,7 @@
                                263A27B61EE40C4B005C52B9 /* textplain.c */,
                                263A27B71EE40C4B005C52B9 /* textplain.h */,
                        );
-                       name = render;
-                       path = ../../render;
+                       path = render;
                        sourceTree = "<group>";
                };
                263A27B81EE40C4B005C52B9 /* utils */ = {
@@ -1250,8 +1248,7 @@
                                263A280E1EE40C4B005C52B9 /* utsname.h */,
                                263A280F1EE40C4B005C52B9 /* valgrind.supp */,
                        );
-                       name = utils;
-                       path = ../../utils;
+                       path = utils;
                        sourceTree = "<group>";
                };
                263A27CF1EE40C4B005C52B9 /* http */ = {
@@ -1446,6 +1443,7 @@
                        isa = PBXNativeTarget;
                        buildConfigurationList = 263A25FF1EE40BD6005C52B9 /* 
Build configuration list for PBXNativeTarget "NetSurfBrowser" */;
                        buildPhases = (
+                               26890F931EE88CE100063C30 /* Build Testament 
Header */,
                                263A25EA1EE40BD6005C52B9 /* Sources */,
                                263A25EB1EE40BD6005C52B9 /* Frameworks */,
                                263A25EC1EE40BD6005C52B9 /* Resources */,
@@ -1466,7 +1464,7 @@
                        isa = PBXProject;
                        attributes = {
                                BuildIndependentTargetsInParallel = YES;
-                               LastUpgradeCheck = 0830;
+                               LastUpgradeCheck = 0900;
                                TargetAttributes = {
                                        263A25ED1EE40BD6005C52B9 = {
                                                CreatedOnToolsVersion = 8.3.2;
@@ -1555,6 +1553,25 @@
                };
 /* End PBXResourcesBuildPhase section */
 
+/* Begin PBXShellScriptBuildPhase section */
+               26890F931EE88CE100063C30 /* Build Testament Header */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Build Testament Header";
+                       outputPaths = (
+                               "$(DERIVED_FILE_DIR)/testament.h",
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "ROOT=\"${SRCROOT}/../..\"\nexec perl -w 
\"${ROOT}/utils/git-testament.pl\" \"${ROOT}\" \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+                       showEnvVarsInLog = 0;
+               };
+/* End PBXShellScriptBuildPhase section */
+
 /* Begin PBXSourcesBuildPhase section */
                263A25EA1EE40BD6005C52B9 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
@@ -1981,12 +1998,18 @@
                        isa = XCBuildConfiguration;
                        buildSettings = {
                                CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 
YES;
+                               CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
                                CLANG_WARN_BOOL_CONVERSION = YES;
+                               CLANG_WARN_COMMA = YES;
                                CLANG_WARN_CONSTANT_CONVERSION = YES;
                                CLANG_WARN_EMPTY_BODY = YES;
                                CLANG_WARN_ENUM_CONVERSION = YES;
                                CLANG_WARN_INFINITE_RECURSION = YES;
                                CLANG_WARN_INT_CONVERSION = YES;
+                               CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+                               CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+                               CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+                               CLANG_WARN_STRICT_PROTOTYPES = YES;
                                CLANG_WARN_SUSPICIOUS_MOVE = YES;
                                CLANG_WARN_UNREACHABLE_CODE = YES;
                                CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -2011,12 +2034,18 @@
                        isa = XCBuildConfiguration;
                        buildSettings = {
                                CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = 
YES;
+                               CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
                                CLANG_WARN_BOOL_CONVERSION = YES;
+                               CLANG_WARN_COMMA = YES;
                                CLANG_WARN_CONSTANT_CONVERSION = YES;
                                CLANG_WARN_EMPTY_BODY = YES;
                                CLANG_WARN_ENUM_CONVERSION = YES;
                                CLANG_WARN_INFINITE_RECURSION = YES;
                                CLANG_WARN_INT_CONVERSION = YES;
+                               CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+                               CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+                               CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+                               CLANG_WARN_STRICT_PROTOTYPES = YES;
                                CLANG_WARN_SUSPICIOUS_MOVE = YES;
                                CLANG_WARN_UNREACHABLE_CODE = YES;
                                CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
diff --git a/frontends/cocoa/ScrollableView.m b/frontends/cocoa/ScrollableView.m
index b2210d0..c495b1d 100644
--- a/frontends/cocoa/ScrollableView.m
+++ b/frontends/cocoa/ScrollableView.m
@@ -30,8 +30,10 @@
 
 - (void)setMinimumSize:(NSSize)newSize
 {
-    _minimumSize = newSize;
-    [self adjustFrame];
+    if (!CGSizeEqualToSize(_minimumSize, newSize)) {
+        _minimumSize = newSize;
+        [self adjustFrame];
+    }
 }
 
 - (void)adjustFrame
diff --git a/frontends/cocoa/URLFieldCell.m b/frontends/cocoa/URLFieldCell.m
index 760052e..54b240d 100644
--- a/frontends/cocoa/URLFieldCell.m
+++ b/frontends/cocoa/URLFieldCell.m
@@ -21,7 +21,10 @@
 #import "utils/nsurl.h"
 #import "netsurf/url_db.h"
 
-@interface URLFieldCell ()
+@interface URLFieldCell () <
+    NSPasteboardWriting,
+    NSDraggingSource
+>
 
 @property (nonatomic) NSButtonCell *refreshCell;
 
@@ -128,13 +131,14 @@
     point.x -= urlBounds.size.height / 2;
     point.y += urlBounds.size.height / 2;
 
-    [view dragImage:image
-                 at:point
-             offset:NSZeroSize
-              event:[NSApp currentEvent]
-         pasteboard:pb
-             source:self
-          slideBack:YES];
+    NSDraggingItem *item = [[NSDraggingItem alloc] initWithPasteboardWriter: 
self];
+    item.imageComponentsProvider = ^NSArray<NSDraggingImageComponent *> * 
_Nonnull{
+        NSDraggingImageComponent *component = [NSDraggingImageComponent 
draggingImageComponentWithKey: NSDraggingImageComponentIconKey];
+        component.contents = image;
+        return @[component];
+    };
+
+    [view beginDraggingSessionWithItems:@[item] event:NSApp.currentEvent 
source:self];
 }
 
 - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal
@@ -219,4 +223,32 @@
     return self.refreshCell.action;
 }
 
+- (nullable id) pasteboardPropertyListForType:(nonnull NSPasteboardType)type {
+    if ([type isEqualToString: NSPasteboardTypeString] || [type 
isEqualToString: @"public.url"]) {
+        return self.stringValue;
+    } else if ([type isEqualToString: @"public.url-name"]) {
+        nsurl *nsurl;
+
+        if (nsurl_create(self.stringValue.UTF8String, &nsurl) == NSERROR_OK) {
+
+            const struct url_data *data = urldb_get_url_data(nsurl);
+            nsurl_unref(nsurl);
+
+            if (data && data->title) {
+                return @(data->title);                
+            }
+        }
+    }
+
+    return nil;
+}
+
+- (nonnull NSArray<NSPasteboardType> *) writableTypesForPasteboard:(nonnull 
NSPasteboard *)pasteboard {
+    return @[NSPasteboardTypeString, @"public.url", @"public.url-name"];
+}
+
+- (NSDragOperation)draggingSession:(NSDraggingSession *)session 
sourceOperationMaskForDraggingContext:(NSDraggingContext)context {
+    return NSDragOperationCopy;
+}
+
 @end
diff --git a/frontends/cocoa/arc.h b/frontends/cocoa/arc.h
new file mode 100644
index 0000000..bfdf31c
--- /dev/null
+++ b/frontends/cocoa/arc.h
@@ -0,0 +1,22 @@
+#ifndef arc_h
+#define arc_h
+
+/**
+ *  Retains an Objective-C object and returns a pointer that can be passed to 
C.
+ *  @param object The object to retain
+ *  @return Pointer suitable to be stored in C code.
+ */
+static inline void *arc_retain(id object) {
+    return (__bridge_retained void *)object;
+}
+
+/**
+ *  Releases the Objective-C object pointed to by a C pointer.
+ *  @param pointer Object pointer to release.
+ */
+static inline void arc_release(void *pointer) {
+    id object = (__bridge_transfer id)pointer;
+    object = nil;
+}
+
+#endif
diff --git a/frontends/cocoa/bitmap.m b/frontends/cocoa/bitmap.m
index 597a5af..554d5e0 100644
--- a/frontends/cocoa/bitmap.m
+++ b/frontends/cocoa/bitmap.m
@@ -31,6 +31,8 @@
 #import "cocoa/plotter.h"
 #import "cocoa/bitmap.h"
 
+#import "cocoa/arc.h"
+
 #define BITS_PER_SAMPLE (8)
 #define SAMPLES_PER_PIXEL (4)
 #define BITS_PER_PIXEL (BITS_PER_SAMPLE * SAMPLES_PER_PIXEL)
@@ -41,7 +43,6 @@
 #define ALPHA_OFFSET (3)
 
 static CGImageRef cocoa_prepare_bitmap(void *bitmap);
-//static NSMapTable *cocoa_get_bitmap_cache( void );
 
 static inline NSMapTable *cocoa_get_bitmap_cache(void)
 {
@@ -52,40 +53,32 @@ static inline NSMapTable *cocoa_get_bitmap_cache(void)
     return cache;
 }
 
+static inline NSBitmapImageRep *get_bitmap(void *bitmap) {
+    NSCParameterAssert(bitmap);
+    return (__bridge NSBitmapImageRep *)bitmap;
+}
+
 static int bitmap_get_width(void *bitmap)
 {
-    NSCParameterAssert(NULL != bitmap);
-    NSBitmapImageRep *bmp = (__bridge NSBitmapImageRep *)bitmap;
-    return (int)[bmp pixelsWide];
+    return (int)get_bitmap(bitmap).pixelsWide;
 }
 
 static int bitmap_get_height(void *bitmap)
 {
-    NSCParameterAssert(NULL != bitmap);
-    NSBitmapImageRep *bmp = (__bridge NSBitmapImageRep *)bitmap;
-    return (int)[bmp pixelsHigh];
+    return (int)get_bitmap(bitmap).pixelsHigh;
 }
 
 static bool bitmap_get_opaque(void *bitmap)
 {
-    NSCParameterAssert(NULL != bitmap);
-    NSBitmapImageRep *bmp = (__bridge NSBitmapImageRep *)bitmap;
-    return [bmp isOpaque];
+    return get_bitmap(bitmap).isOpaque;
 }
 
 static void bitmap_destroy(void *bitmap)
 {
     NSCParameterAssert(NULL != bitmap);
 
-    NSMapTable *cache = cocoa_get_bitmap_cache();
-    CGImageRef image = NSMapGet(cache, bitmap);
-    if (NULL != image) {
-        CGImageRelease(image);
-        NSMapRemove(cache, bitmap);
-    }
-
-    NSBitmapImageRep *bmp = (__bridge_transfer NSBitmapImageRep *)bitmap;
-    bmp = nil;
+    cocoa_bitmap_modified(bitmap);
+    arc_release(bitmap);
 }
 
 static void *bitmap_create(int width, int height, unsigned int state)
@@ -103,35 +96,27 @@ static void *bitmap_create(int width, int height, unsigned 
int state)
                      bytesPerRow:BYTES_PER_PIXEL * width
                     bitsPerPixel:BITS_PER_PIXEL];
 
-    return (__bridge_retained void *)bmp;
+    return arc_retain(bmp);
 }
 
 static void bitmap_set_opaque(void *bitmap, bool opaque)
 {
-    NSCParameterAssert(NULL != bitmap);
-    NSBitmapImageRep *bmp = (__bridge NSBitmapImageRep *)bitmap;
-    [bmp setOpaque:opaque ? YES : NO];
+    get_bitmap(bitmap).opaque = opaque ? YES : NO;
 }
 
 static unsigned char *bitmap_get_buffer(void *bitmap)
 {
-    NSCParameterAssert(NULL != bitmap);
-    NSBitmapImageRep *bmp = (__bridge NSBitmapImageRep *)bitmap;
-    return [bmp bitmapData];
+    return get_bitmap(bitmap).bitmapData;
 }
 
 static size_t bitmap_get_rowstride(void *bitmap)
 {
-    NSCParameterAssert(NULL != bitmap);
-    NSBitmapImageRep *bmp = (__bridge NSBitmapImageRep *)bitmap;
-    return [bmp bytesPerRow];
+    return get_bitmap(bitmap).bytesPerRow;
 }
 
 static size_t bitmap_get_bpp(void *bitmap)
 {
-    NSCParameterAssert(NULL != bitmap);
-    NSBitmapImageRep *bmp = (__bridge NSBitmapImageRep *)bitmap;
-    return [bmp bitsPerPixel] / 8;
+    return get_bitmap(bitmap).bitsPerPixel / 8;
 }
 
 static bool bitmap_test_opaque(void *bitmap)
@@ -159,11 +144,8 @@ static bool bitmap_test_opaque(void *bitmap)
 
 static bool bitmap_save(void *bitmap, const char *path, unsigned flags)
 {
-    NSCParameterAssert(NULL != bitmap);
-    NSBitmapImageRep *bmp = (__bridge NSBitmapImageRep *)bitmap;
-
-    NSData *tiff = [bmp TIFFRepresentation];
-    return [tiff writeToFile:[NSString stringWithUTF8String:path] 
atomically:YES];
+    NSData *tiff = get_bitmap(bitmap).TIFFRepresentation;
+    return [tiff writeToFile:@(path) atomically:YES];
 }
 
 void cocoa_bitmap_modified(void *bitmap)
@@ -191,17 +173,16 @@ CGImageRef cocoa_get_cgimage(void *bitmap)
 
 static CGImageRef cocoa_prepare_bitmap(void *bitmap)
 {
-    NSCParameterAssert(NULL != bitmap);
+    NSBitmapImageRep *bmp = get_bitmap(bitmap);
 
-    NSBitmapImageRep *bmp = (__bridge NSBitmapImageRep *)bitmap;
+    size_t w = bmp.pixelsWide;
+    size_t h = bmp.pixelsHigh;
 
-    size_t w = [bmp pixelsWide];
-    size_t h = [bmp pixelsHigh];
+    CGImageRef original = bmp.CGImage;
 
-    CGImageRef original = [bmp CGImage];
-
-    if (h <= 1)
+    if (h <= 1) {
         return CGImageRetain(original);
+    }
 
     void *data = malloc(4 * w * h);
 


-- 
NetSurf Browser

_______________________________________________
netsurf-commits mailing list
[email protected]
http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org

Reply via email to