summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFriedrich Beckmann <friedrich.beckmann@gmx.de>2020-06-16 16:59:06 +0200
committerMatthias Clasen <mclasen@redhat.com>2020-06-16 12:42:48 -0400
commitd468ea3efa4847d310143654472c0829a53b879d (patch)
treef743471c0f23430087bc89c9b8ea43aa7474cc31
parentd2cfe9f69ac7f8a9e05e50c079e84bf3b27512a3 (diff)
downloadgtk+-d468ea3efa4847d310143654472c0829a53b879d.tar.gz
quartz: added open capability to gtk_application
This patch implements the openFiles delegate which is required to open files which are associated with an application via the Finder or via open on the command line. The patch has been proposed by jessevdk@gmail.com. See: https://gitlab.gnome.org/GNOME/gtk/-/issues/463 I tested the patch with the GNU pspp application on MacOS with the quartz backend.
-rw-r--r--gtk/gtkapplication-quartz.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/gtk/gtkapplication-quartz.c b/gtk/gtkapplication-quartz.c
index 38131f4be0..90ab1705f0 100644
--- a/gtk/gtkapplication-quartz.c
+++ b/gtk/gtkapplication-quartz.c
@@ -64,6 +64,7 @@ G_DEFINE_TYPE (GtkApplicationImplQuartz, gtk_application_impl_quartz, GTK_TYPE_A
- (id)initWithImpl:(GtkApplicationImplQuartz*)impl;
- (NSApplicationTerminateReply) applicationShouldTerminate:(NSApplication *)sender;
+- (void)application:(NSApplication *)theApplication openFiles:(NSArray *)filenames;
@end
@implementation GtkApplicationQuartzDelegate
@@ -84,6 +85,35 @@ G_DEFINE_TYPE (GtkApplicationImplQuartz, gtk_application_impl_quartz, GTK_TYPE_A
*/
return quartz->quit_inhibit == 0 ? NSTerminateNow : NSTerminateCancel;
}
+
+-(void)application:(NSApplication *)theApplication openFiles:(NSArray *)filenames
+{
+ GFile **files;
+ gint i;
+ GApplicationFlags flags;
+
+ flags = g_application_get_flags (G_APPLICATION (quartz->impl.application));
+
+ if (~flags & G_APPLICATION_HANDLES_OPEN)
+ {
+ [theApplication replyToOpenOrPrint:NSApplicationDelegateReplyFailure];
+ return;
+ }
+
+ files = g_new (GFile *, [filenames count]);
+
+ for (i = 0; i < [filenames count]; i++)
+ files[i] = g_file_new_for_path ([(NSString *)[filenames objectAtIndex:i] UTF8String]);
+
+ g_application_open (G_APPLICATION (quartz->impl.application), files, [filenames count], "");
+
+ for (i = 0; i < [filenames count]; i++)
+ g_object_unref (files[i]);
+
+ g_free (files);
+
+ [theApplication replyToOpenOrPrint:NSApplicationDelegateReplySuccess];
+}
@end
/* these exist only for accel handling */