Merge branch 'macos-ci' into 'master'

Macos ci

See merge request GNOME/gtk!3032
This commit is contained in:
Matthias Clasen 2021-01-06 14:52:11 +00:00
commit 5652ab0a61
12 changed files with 158 additions and 41 deletions

View File

@ -144,6 +144,31 @@ msys2-mingw64:
MSYSTEM: "MINGW64"
CHERE_INVOKING: "yes"
macos:
stage: build
tags:
- macos
only:
- master
- merge_requests
needs: []
before_script:
- bash .gitlab-ci/show-execution-environment.sh
- pip3 install --user meson==0.56
- pip3 install --user ninja
- export PATH=/Users/gitlabrunner/Library/Python/3.7/bin:$PATH
script:
- meson -Dx11-backend=false
-Dintrospection=disabled
-Dcpp_std=c++11
-Dpixman:tests=disabled
_build
- ninja -C _build
artifacts:
when: always
paths:
- "${CI_PROJECT_DIR}/_build/meson-logs"
.flatpak-defaults:
image: $FLATPAK_IMAGE
stage: flatpak

View File

@ -0,0 +1,8 @@
#!/bin/bash
set -eux -o pipefail
xcodebuild -version || :
xcodebuild -showsdks || :
system_profiler SPSoftwareDataType || :

View File

@ -38,6 +38,10 @@
#include "gdkmonitorprivate.h"
#include "gdksurfaceprivate.h"
#ifndef AVAILABLE_MAC_OS_X_VERSION_10_15_AND_LATER
typedef NSString *CALayerContentsGravity;
#endif
@implementation GdkMacosWindow
-(BOOL)windowShouldClose:(id)sender
@ -466,7 +470,7 @@
inTrackManualResize = YES;
mouse_location = [self convertPointToScreen:[self mouseLocationOutsideOfEventStream]];
mouse_location = convert_nspoint_to_screen (self, [self mouseLocationOutsideOfEventStream]);
mdx = initialResizeLocation.x - mouse_location.x;
mdy = initialResizeLocation.y - mouse_location.y;
@ -588,7 +592,7 @@
}
initialResizeFrame = [self frame];
initialResizeLocation = [self convertPointToScreen:[self mouseLocationOutsideOfEventStream]];
initialResizeLocation = convert_nspoint_to_screen (self, [self mouseLocationOutsideOfEventStream]);
}
-(NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender

View File

@ -27,6 +27,10 @@
G_BEGIN_DECLS
#ifndef AVAILABLE_MAC_OS_X_VERSION_10_13_AND_LATER
typedef NSString *NSPasteboardType;
#endif
#define GDK_TYPE_MACOS_CLIPBOARD (_gdk_macos_clipboard_get_type())
G_DECLARE_FINAL_TYPE (GdkMacosClipboard, _gdk_macos_clipboard, GDK, MACOS_CLIPBOARD, GdkClipboard)

View File

@ -40,8 +40,56 @@ typedef struct
guint done : 1;
} WriteRequest;
enum {
TYPE_STRING,
TYPE_PBOARD,
TYPE_URL,
TYPE_FILE_URL,
TYPE_COLOR,
TYPE_TIFF,
TYPE_PNG,
TYPE_LAST
};
#define PTYPE(k) (get_pasteboard_type(TYPE_##k))
static NSPasteboardType pasteboard_types[TYPE_LAST];
G_DEFINE_TYPE (GdkMacosClipboard, _gdk_macos_clipboard, GDK_TYPE_CLIPBOARD)
static NSPasteboardType
get_pasteboard_type (int type)
{
static gsize initialized = FALSE;
g_assert (type >= 0);
g_assert (type < TYPE_LAST);
if (g_once_init_enter (&initialized))
{
pasteboard_types[TYPE_PNG] = NSPasteboardTypePNG;
pasteboard_types[TYPE_STRING] = NSPasteboardTypeString;
pasteboard_types[TYPE_TIFF] = NSPasteboardTypeTIFF;
pasteboard_types[TYPE_COLOR] = NSPasteboardTypeColor;
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
pasteboard_types[TYPE_PBOARD] = NSStringPboardType;
G_GNUC_END_IGNORE_DEPRECATIONS
#ifdef AVAILABLE_MAC_OS_X_VERSION_10_13_AND_LATER
pasteboard_types[TYPE_URL] = NSPasteboardTypeURL;
pasteboard_types[TYPE_FILE_URL] = NSPasteboardTypeFileURL;
#else
pasteboard_types[TYPE_URL] = [[NSString alloc] initWithUTF8String:"public.url"];
pasteboard_types[TYPE_FILE_URL] = [[NSString alloc] initWithUTF8String:"public.file-url"];
#endif
g_once_init_leave (&initialized, TRUE);
}
return pasteboard_types[type];
}
static void
write_request_free (WriteRequest *wr)
{
@ -56,17 +104,17 @@ _gdk_macos_clipboard_from_ns_type (NSPasteboardType type)
{
G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
if ([type isEqualToString:NSPasteboardTypeString] ||
[type isEqualToString:NSStringPboardType])
if ([type isEqualToString:PTYPE(STRING)] ||
[type isEqualToString:PTYPE(PBOARD)])
return g_intern_string ("text/plain;charset=utf-8");
else if ([type isEqualToString:NSPasteboardTypeURL] ||
[type isEqualToString:NSPasteboardTypeFileURL])
else if ([type isEqualToString:PTYPE(URL)] ||
[type isEqualToString:PTYPE(FILE_URL)])
return g_intern_string ("text/uri-list");
else if ([type isEqualToString:NSPasteboardTypeColor])
else if ([type isEqualToString:PTYPE(COLOR)])
return g_intern_string ("application/x-color");
else if ([type isEqualToString:NSPasteboardTypeTIFF])
else if ([type isEqualToString:PTYPE(TIFF)])
return g_intern_string ("image/tiff");
else if ([type isEqualToString:NSPasteboardTypePNG])
else if ([type isEqualToString:PTYPE(PNG)])
return g_intern_string ("image/png");
G_GNUC_END_IGNORE_DEPRECATIONS;
@ -83,25 +131,25 @@ _gdk_macos_clipboard_to_ns_type (const char *mime_type,
if (g_strcmp0 (mime_type, "text/plain;charset=utf-8") == 0)
{
return NSPasteboardTypeString;
return PTYPE(STRING);
}
else if (g_strcmp0 (mime_type, "text/uri-list") == 0)
{
if (alternate)
*alternate = NSPasteboardTypeURL;
return NSPasteboardTypeFileURL;
*alternate = PTYPE(URL);
return PTYPE(FILE_URL);
}
else if (g_strcmp0 (mime_type, "application/x-color") == 0)
{
return NSPasteboardTypeColor;
return PTYPE(COLOR);
}
else if (g_strcmp0 (mime_type, "image/tiff") == 0)
{
return NSPasteboardTypeTIFF;
return PTYPE(TIFF);
}
else if (g_strcmp0 (mime_type, "image/png") == 0)
{
return NSPasteboardTypePNG;
return PTYPE(PNG);
}
return nil;
@ -220,7 +268,7 @@ _gdk_macos_clipboard_read_async (GdkClipboard *clipboard,
{
G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
if ([[self->pasteboard types] containsObject:NSPasteboardTypeFileURL])
if ([[self->pasteboard types] containsObject:PTYPE(FILE_URL)])
{
GString *str = g_string_new (NULL);
NSArray *files = [self->pasteboard propertyListForType:NSFilenamesPboardType];
@ -267,12 +315,12 @@ _gdk_macos_clipboard_read_async (GdkClipboard *clipboard,
}
else if (strcmp (mime_type, "image/tiff") == 0)
{
NSData *data = [self->pasteboard dataForType:NSPasteboardTypeTIFF];
NSData *data = [self->pasteboard dataForType:PTYPE(TIFF)];
stream = create_stream_from_nsdata (data);
}
else if (strcmp (mime_type, "image/png") == 0)
{
NSData *data = [self->pasteboard dataForType:NSPasteboardTypePNG];
NSData *data = [self->pasteboard dataForType:PTYPE(PNG)];
stream = create_stream_from_nsdata (data);
}

View File

@ -700,7 +700,7 @@ get_surface_point_from_screen_point (GdkSurface *surface,
NSPoint point;
nswindow = _gdk_macos_surface_get_native (GDK_MACOS_SURFACE (surface));
point = [nswindow convertPointFromScreen:screen_point];
point = convert_nspoint_from_screen (nswindow, screen_point);
*x = point.x;
*y = surface->height - point.y;
@ -821,7 +821,7 @@ get_surface_from_ns_event (GdkMacosDisplay *self,
}
else
{
*screen_point = [(GdkMacosWindow *)[nsevent window] convertPointToScreen:point];
*screen_point = convert_nspoint_to_screen ([nsevent window], point);
*x = point.x;
*y = surface->height - point.y;
}

View File

@ -40,5 +40,36 @@ struct _GdkPoint
};
typedef struct _GdkPoint GdkPoint;
static inline NSPoint
convert_nspoint_from_screen (NSWindow *window,
NSPoint point)
{
#ifdef AVAILABLE_MAC_OS_X_VERSION_10_15_AND_LATER
return [window convertPointFromScreen:point];
#else
/* Apple documentation claims that convertPointFromScreen is available
* on 10.12+. However, that doesn't seem to be the case when using it.
* Instead, we'll just use it on modern 10.15 systems and fallback to
* converting using rects on older systems.
*/
return [window convertRectFromScreen:NSMakeRect (point.x, point.y, 0, 0)].origin;
#endif
}
static inline NSPoint
convert_nspoint_to_screen (NSWindow *window,
NSPoint point)
{
#ifdef AVAILABLE_MAC_OS_X_VERSION_10_15_AND_LATER
return [window convertPointToScreen:point];
#else
/* Apple documentation claims that convertPointToScreen is available
* on 10.12+. However, that doesn't seem to be the case when using it.
* Instead, we'll just use it on modern 10.15 systems and fallback to
* converting using rects on older systems.
*/
return [window convertRectToScreen:NSMakeRect (point.x, point.y, 0, 0)].origin;
#endif
}
#endif /* __GDK_MACOS_UTILS_PRIVATE_H__ */

View File

@ -324,7 +324,9 @@ icon_loaded (GObject *object,
- (void)didChangeToggled
{
[self setState:gtk_menu_tracker_item_get_toggled (trackerItem) ? NSControlStateValueOn : NSControlStateValueOff];
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
[self setState:gtk_menu_tracker_item_get_toggled (trackerItem) ? NSOnState : NSOffState];
G_GNUC_END_IGNORE_DEPRECATIONS
}
- (void)didChangeAccel

View File

@ -79,7 +79,7 @@ static inline gboolean gtk_counting_bloom_filter_may_contain (const GtkCounti
*
* The filter does not need to be freed.
*/
#define GTK_COUNTING_BLOOM_FILTER_INIT { 0, }
#define GTK_COUNTING_BLOOM_FILTER_INIT {{0}}
/*
* gtk_counting_bloom_filter_add:

View File

@ -348,7 +348,8 @@ endif
gmodule_dep = dependency('gmodule-2.0', version: glib_req,
fallback : ['glib', 'libgmodule_dep'])
cairo_dep = dependency('cairo', version: cairo_req,
fallback : ['cairo', 'libcairo_dep'])
fallback : ['cairo', 'libcairo_dep'],
default_options: ['zlib=enabled'])
cairogobj_dep = dependency('cairo-gobject', version: cairo_req,
fallback : ['cairo', 'libcairogobject_dep'])
pango_dep = dependency('pango', version: pango_req,
@ -379,10 +380,17 @@ pixbuf_dep = dependency('gdk-pixbuf-2.0', version: gdk_pixbuf_req,
epoxy_dep = dependency('epoxy', version: epoxy_req,
fallback: ['libepoxy', 'libepoxy_dep'])
harfbuzz_dep = dependency('harfbuzz', version: '>= 0.9', required: false,
fallback: ['harfbuzz', 'libharfbuzz_dep'])
fallback: ['harfbuzz', 'libharfbuzz_dep'],
default_options: ['coretext=enabled'])
xkbdep = dependency('xkbcommon', version: xkbcommon_req, required: wayland_enabled)
graphene_dep = dependency('graphene-gobject-1.0', version: graphene_req,
fallback: ['graphene', 'graphene_dep'])
if os_darwin
graphene_dep = dependency('graphene-gobject-1.0', version: graphene_req,
fallback: ['graphene', 'graphene_dep'],
default_options: ['introspection=false'])
else
graphene_dep = dependency('graphene-gobject-1.0', version: graphene_req,
fallback: ['graphene', 'graphene_dep'])
endif
iso_codes_dep = dependency('iso-codes', required: false)
gtk_doc_dep = dependency('gtk-doc', version: '>=1.33',

View File

@ -1,18 +1,5 @@
print_backends = []
if not cc.has_header('cairo-pdf.h', dependencies : cairo_dep)
error('Cannot find cairo-pdf.h. You must build Cairo with the pdf backend enabled.')
endif
if os_unix
if not cc.has_header('cairo-ps.h', dependencies : cairo_dep)
error('Cannot find cairo-ps.h. You must build Cairo with the postscript backend enabled.')
endif
if not cc.has_header('cairo-svg.h', dependencies : cairo_dep)
error('Cannot find cairo-svg.h. You must build Cairo with the svg backend enabled.')
endif
endif
printbackends_subdir = 'gtk-4.0/@0@/printbackends'.format(gtk_binary_version)
printbackends_install_dir = join_paths(get_option('libdir'), printbackends_subdir)

View File

@ -1,6 +1,6 @@
[wrap-git]
directory=cairo
url=https://gitlab.freedesktop.org/cairo/cairo.git
url=https://github.com/matthiasclasen/cairo.git
push-url=ssh://git@gitlab.freedesktop.org:cairo/cairo.git
revision=master
revision=fix-osx-build
depth=1