devdraw: plumb drag-n-dropped files Change-Id: I7585870aee57c7482ebdd19c117be7982123ce79 Reviewed-on: https://plan9port-review.googlesource.com/1130 Reviewed-by: Russ Cox <rsc@google.com>
diff --git a/bin/macedit b/bin/macedit new file mode 100755 index 0000000..23a17a2 --- /dev/null +++ b/bin/macedit
@@ -0,0 +1,17 @@ +#!/bin/bash + +PLAN9=${PLAN9:-/usr/local/plan9} +bin=$PLAN9/bin + +file=$1 + +# Blanks are problematic in filenames: just plumb +# the file's content. +if echo "$file" | grep -q " " +then + base=$(basename "$file" | sed 's/ /_/g') + attr="action=showdata filename=/BadName/$base" + cat $file | "$bin/plumb" -i -d edit -a "$attr" +else + "$bin/plumb" -d edit "$file" +fi
diff --git a/mac/Plumb.app/Contents/MacOS/plumb b/mac/Plumb.app/Contents/MacOS/plumb index f98cd2e..850ec0e 100755 --- a/mac/Plumb.app/Contents/MacOS/plumb +++ b/mac/Plumb.app/Contents/MacOS/plumb
@@ -10,14 +10,5 @@ for file in $($bin/macargv) do - # Blanks are problematic in filenames: just plumb - # the file's content. - if echo "$file" | grep -q " " - then - base=$(basename "$file" | sed 's/ /_/g') - attr="action=showdata filename=/BadName/$base" - cat $file | "$bin/plumb" -i -d edit -a "$attr" - else - "$bin/plumb" -d edit "$file" - fi + $bin/macedit "$file" done
diff --git a/src/cmd/devdraw/cocoa-screen.m b/src/cmd/devdraw/cocoa-screen.m index 0335536..fc73814 100644 --- a/src/cmd/devdraw/cocoa-screen.m +++ b/src/cmd/devdraw/cocoa-screen.m
@@ -159,6 +159,7 @@ detachDrawingThread:@selector(callservep9p:) toTarget:[self class] withObject:nil]; } + - (void)windowDidBecomeKey:(id)arg { getmousepos(); @@ -298,6 +299,41 @@ [win.content setHidden:NO]; [super deminiaturize:arg]; } + +- (NSDragOperation)draggingEntered:(id)arg +{ + NSPasteboard *b; + NSDragOperation op; + + op = [arg draggingSourceOperationMask]; + b = [arg draggingPasteboard]; + + if([[b types] containsObject:NSFilenamesPboardType]) + if(op&NSDragOperationLink) + return NSDragOperationLink; + + return NSDragOperationNone; +} + +- (BOOL)performDragOperation:(id)arg +{ + NSPasteboard *b; + NSArray *files; + int i, n; + + b = [arg draggingPasteboard]; + if(![[b types] containsObject:NSFilenamesPboardType]) + return NO; + + files = [b propertyListForType:NSFilenamesPboardType]; + n = [files count]; + for(i=0; i<n; i++) + if(fork() == 0) + execl("macedit", "macedit", [[files objectAtIndex:i] UTF8String], nil); + + return YES; +} + @end double @@ -354,6 +390,9 @@ #endif [w setContentMinSize:NSMakeSize(128,128)]; + [w registerForDraggedTypes:[NSArray arrayWithObjects: + NSFilenamesPboardType, nil]]; + win.ofs[0] = w; win.ofs[1] = [[appwin alloc] initWithContentRect:sr