diff options
author | Perberos <[email protected]> | 2011-11-07 16:46:58 -0300 |
---|---|---|
committer | Perberos <[email protected]> | 2011-11-07 16:46:58 -0300 |
commit | 528c1e5ff51e213936e800fc5a9a25da99c0bdf2 (patch) | |
tree | 77f8aa456b09367ba81f04d4562fc935f898a951 /gedit/osx/gedit-osx-delegate.m | |
download | pluma-528c1e5ff51e213936e800fc5a9a25da99c0bdf2.tar.bz2 pluma-528c1e5ff51e213936e800fc5a9a25da99c0bdf2.tar.xz |
initial
Diffstat (limited to 'gedit/osx/gedit-osx-delegate.m')
-rwxr-xr-x | gedit/osx/gedit-osx-delegate.m | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/gedit/osx/gedit-osx-delegate.m b/gedit/osx/gedit-osx-delegate.m new file mode 100755 index 00000000..41b0b262 --- /dev/null +++ b/gedit/osx/gedit-osx-delegate.m @@ -0,0 +1,84 @@ +#import "gedit-osx-delegate.h" +#import <Foundation/NSAppleEventManager.h> +#import <Foundation/NSAppleEventDescriptor.h> +#import <Foundation/NSData.h> +#include <glib.h> +#include <gedit/gedit-app.h> +#include <gedit/gedit-commands.h> + +@implementation GeditOSXDelegate +-(id)init +{ + if ((self = [super init])) + { + NSAppleEventManager* em = [NSAppleEventManager sharedAppleEventManager]; + + [em setEventHandler:self + andSelector:@selector(openFiles:withReply:) + forEventClass:kCoreEventClass + andEventID:kAEOpenDocuments]; + } + + return self; +} + +static GeditWindow * +get_window(NSAppleEventDescriptor *event) +{ + GeditApp *app = gedit_app_get_default (); + return gedit_app_get_active_window (app); +} + +- (void)openFiles:(NSAppleEventDescriptor*)event + withReply:(NSAppleEventDescriptor*)reply +{ + NSAppleEventDescriptor *fileList = [event paramDescriptorForKeyword:keyDirectObject]; + NSInteger i; + GSList *uris = NULL; + + if (!fileList) + { + return; + } + + for (i = 1; i <= [fileList numberOfItems]; ++i) + { + NSAppleEventDescriptor *fileAliasDesc = [fileList descriptorAtIndex:i]; + NSAppleEventDescriptor *fileURLDesc; + NSData *fileURLData; + gchar *url; + + if (!fileAliasDesc) + { + continue; + } + + fileURLDesc = [fileAliasDesc coerceToDescriptorType:typeFileURL]; + + if (!fileURLDesc) + { + continue; + } + + fileURLData = [fileURLDesc data]; + + if (!fileURLData) + { + continue; + } + + url = g_strndup([fileURLData bytes], [fileURLData length]); + uris = g_slist_prepend (uris, url); + } + + if (uris != NULL) + { + GeditWindow *window = get_window (event); + gedit_commands_load_uris (window, uris, NULL, 0); + + g_slist_foreach (uris, (GFunc)g_free, NULL); + g_slist_free (uris); + } +} + +@end
\ No newline at end of file |