Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

LinkBack 1.0.3 from <http://linkbackproject.org/files/LinkBack-103.zip>

  • Loading branch information...
commit 30285de44a0eebe15a9303111a744ad340db6869 1 parent fcc2958
Timothy J. Wood tjw authored
BIN  Documentation/LinkBack Developer's Guide.pdf
Binary file not shown
1,017 Documentation/LinkBack Developer's Guide.rtf
1,017 additions, 0 deletions not shown
33 LinkBack Release Notes.rtf
@@ -7,16 +7,39 @@
7 7 ;}
8 8 }
9 9 {\colortbl ;\red0 \green0 \blue0 ;}
10   -{\stylesheet {\s3 \nisusnoteplacement0 \nisusreferencestyle7 {\*\nsmpltxt Some text goes here so you can see what your style will look like.}
  10 +{\stylesheet {\*\cs335 {\*\nsmpltxt The quick brown fox jumped over the lazy dogs.}
  11 +\super footnote reference;}
  12 +{\*\cs336 {\*\nsmpltxt The quick brown fox jumped over the lazy dogs.}
  13 +\super endnote reference;}
  14 +{\s337 \nisusnoteplacement0 \nisusreferencestyle335 {\*\nsmpltxt Some text goes here so you can see what your style will look like.}
11 15 \f3 footnote text;}
12   -{\s4 \nisusnoteplacement1 \nisusreferencestyle9 {\*\nsmpltxt Sample text for Foot/End Notes Style}
  16 +{\s338 \nisusnoteplacement1 \nisusreferencestyle336 {\*\nsmpltxt Sample text for Foot/End Notes Style}
13 17 \f3 endnote text;}
14 18 }
15   -\deftab720 \defformat \viewkind1 \viewzk1 {\*\nisuswindow \x70 \y232 \w741 \h638 }
16   -\nshwinv0 \nshwpg1 \hyphauto0 \ftnnar \endnotes \aendnotes \aftnnar \fet2 \ftnbj \paperw12240 \paperh15840 \margl1440 \margr1440 \margt1440 \margb1440 \gutter0 \pgnstart1 \nocolbal \sectd \sbknone \cols1 \ltrsect \colbalsxn0 \marglsxn1440 \margrsxn1440 \margtsxn1440 \margbsxn1440 \guttersxn0 \headery720 \footery720 \pgnstarts1 \pgnrestart \pgndec \sxnstarts1 \sxnrestart \sxndec {\header \par }
17   -{\footer \par }
  19 +\deftab720 \defformat \viewkind1 \viewzk1 {\*\nisuswindow \x70 \y194 \w741 \h638 }
  20 +\nshwinv0 \nshwpg1 \hyphauto0 \ftnnar \endnotes \aendnotes \aftnnar \fet2 \ftnbj \paperw12240 \paperh15840 \margl1440 \margr1440 \margt1440 \margb1440 \gutter0 \pgnstart1 \nocolbal \sectd \sbknone \cols1 \ltrsect \colbalsxn0 \marglsxn1440 \margrsxn1440 \margtsxn1440 \margbsxn1440 \guttersxn0 \headery720 \footery720 \pgnstarts1 \pgnrestart \pgndec \sxnstarts1 \sxnrestart \sxndec {\header \pard \ql \sb0 \sa0 \sl240 \slmult1 \ilvl0 \li0 \lin0 \fi0 \ri0 \rin0 \par }
  21 +{\footer \pard \ql \sb0 \sa0 \sl240 \slmult1 \ilvl0 \li0 \lin0 \fi0 \ri0 \rin0 \par }
18 22 {\pard \ql \sb0 \sa0 \sl240 \slmult1 \ilvl0 \li0 \lin0 \fi0 \ri0 \rin0 {\f1 \fs24 \b \cf1 LinkBack Release Notes\par
19 23 \f2 \b0 \par
  24 +\b LINKBACK 103: \tab (March 29, 2005)\par
  25 +\b0 \par
  26 +\b Missing Items:\b0 \par
  27 +The LinkBack badge mentioned in the documentation is not in the distribution yet. Sorry. This will be forthcoming. \par
  28 +\par
  29 +\b Documentation:\b0 First draft of the LinkBack Developer\rquote s Guide. Hey, its better than nothing. \u9786 ? Seriously though, I have not written many API docs. Any feedback or suggested edits are greatly welcomed!\par
  30 +\par
  31 +\b TextEdit+LinkBack:\b0 Incorporates new framework API. Pretty much this works as before though. Notice the new edit menu item introduces in 102.\par
  32 +\b \par
  33 +LiveSketch:\b0 Incorporates new framework API. Modified to use some new API so that it provides all the information needed to relaunch LiveSketch. Also uses matches the new developer\rquote s guide for the window title. \par
  34 +\par
  35 +\b Cool trick:\b0 Paste a LiveSketch graphic into the new version of TextEdit+LinkBack. Then quit LiveSketch and move the app to the trash. Now double-click the graphic in TextEdit+LinkBack. After a few seconds, a dialog will show telling you that the LiveSketch application should not be found and offering to take you to a web-site to get the application. This is great advertising for you!\par
  36 +\par
  37 +\b LinkBack:\b0 Now server applications can include a suggested refresh rate with their data. Client applications can use this to implement automatic updating. Currently there is no special API support for automatic updating, but this should not be hard for a client to implement.\par
  38 + \par
  39 +\b LinkBack:\b0 Included change sent by Andrew Stone to fix the source application name included in LinkBack data.\par
  40 +\par
  41 +\b LinkBack: \b0 Added improved support for finding server applications if they are not running or if the wrong version is returned by NSWorkspace. This code uses new keys you can add to your application\rquote s Info.plist to determine which version to launch. It will search the standard directories.\par
  42 +\par
20 43 \b LINKBACK 102:\par
21 44 \b0 \par
22 45 \b LinkBack:\b0 LinkBack has several helper methods to make it easier for you to add a menu item in clients to edit LinkBack content. Two functions and one method provide the localized string for the menu name. You should place the menu at the bottom of your edit menu with a separator before it. Make your validateMenuItem: set the menu title based on the current selection. You should set your title based on the number of LinkBack items selected:\par
3  LiveSketch/DocumentModel.subproj/SKTDrawDocument.m
@@ -55,7 +55,8 @@ - (NSString*)displayName
55 55 {
56 56 if (link) {
57 57 NSString* sourceName = [link sourceName] ;
58   - NSString* ret = [NSString stringWithFormat: @"Graphics from %@", sourceName] ;
  58 + NSString* sourceAppName = [link sourceApplicationName] ;
  59 + NSString* ret = [NSString stringWithFormat: @"Graphics from %@ (%@)", sourceName, sourceAppName] ;
59 60 return ret ;
60 61 } else return [super displayName] ;
61 62 }
4 LiveSketch/Sketch.pbxproj/project.pbxproj
@@ -855,8 +855,8 @@
855 855 <string>alpha.01</string>
856 856 <key>LinkBackApplicationURL</key>
857 857 <string>http://www.linkbackproject.org</string>
858   - <key>LinkBackVersion</key>
859   - <string>A</string>
  858 + <key>LinkBackServer</key>
  859 + <string>sketch</string>
860 860 <key>NSAppleScriptEnabled</key>
861 861 <string>YES</string>
862 862 <key>NSMainNibFile</key>
13 Source/English.lproj/Localized.strings
@@ -2,4 +2,15 @@
2 2 "_EditMultiple" = "Edit LinkBack Items" ;
3 3 "_EditNone" = "Edit LinkBack Item" ;
4 4 "_Edit" = "Edit" ;
5   -"_Refresh" = "Refresh" ;
  5 +"_Refresh" = "Refresh" ;
  6 +
  7 +/* Strings used for the LinkBack App Not Found panel */
  8 +"_AppNotFoundTitle" = "The creator application \"%@\" could not be found." ;
  9 +
  10 +"_AppNotFoundMessageWithURL" = "Make sure this application is installed in your Applications folder to use it. If you do not have this software, you can choose \"Get Application\" to download it." ;
  11 +
  12 +"_AppNotFoundMessageNoURL" = "Make sure this application is installed in your Applications folder to use it." ;
  13 +
  14 +"_OK" = "OK" ;
  15 +
  16 +"_GetApplication" = "Get Application" ;
5 Source/LinkBack.h
@@ -115,6 +115,7 @@ BOOL LinkBackDataBelongsToActiveApplication(id data) ;
115 115 NSPasteboard* pboard ;
116 116 id repobj ;
117 117 NSString* sourceName ;
  118 + NSString* sourceApplicationName ;
118 119 NSString* key ;
119 120 }
120 121
@@ -132,6 +133,7 @@ BOOL LinkBackDataBelongsToActiveApplication(id data) ;
132 133 // Applications can use this represented object to attach some meaning to the live link. For example, a client application may set this to the object to be modified when the edit is refreshed. This retains its value.
133 134
134 135 - (NSString*)sourceName ;
  136 +- (NSString*)sourceApplicationName ;
135 137 - (NSString*)itemKey ; // maybe this matters only on the client side.
136 138
137 139 // ...........................................................................
@@ -156,7 +158,8 @@ BOOL LinkBackDataBelongsToActiveApplication(id data) ;
156 158
157 159 - (id)initClientWithSourceName:(NSString*)aName delegate:(id<LinkBackClientDelegate>)aDel itemKey:(NSString*)aKey ;
158 160
159   -- (BOOL)connectToServerWithName:(NSString*)aName inApplication:(NSString*)bundleIdentifier ;
  161 +- (BOOL)connectToServerWithName:(NSString*)aName inApplication:(NSString*)bundleIdentifier fallbackURL:(NSURL*)url appName:(NSString*)appName ;
  162 +
160 163 - (void)requestEdit ;
161 164
162 165 @end
23 Source/LinkBack.m
@@ -118,8 +118,8 @@ + (NSDictionary*)linkBackDataWithServerName:(NSString*)serverName appData:(id)ap
118 118 NSMutableDictionary* ret = [[NSMutableDictionary alloc] init] ;
119 119 NSString* bundleId = [[NSBundle mainBundle] bundleIdentifier] ;
120 120 NSString* url = [appInfo objectForKey: @"LinkBackApplicationURL"] ;
121   - NSString* appName = [[[NSWorkspace sharedWorkspace] activeApplication] objectForKey: @"NSApplicationName"] ;
122   - id version = @"A" ;
  121 + NSString* appName = [[NSProcessInfo processInfo] processName] ;
  122 + id version = @"A" ;
123 123
124 124 if (nil==serverName) [NSException raise: NSInvalidArgumentException format: @"LinkBack Data cannot be created without a server name."] ;
125 125
@@ -226,6 +226,7 @@ - (id)initServerWithClient: (LinkBack*)aLinkBack delegate: (id<LinkBackServerDel
226 226 if (self = [super init]) {
227 227 peer = [aLinkBack retain] ;
228 228 sourceName = [[peer sourceName] copy] ;
  229 + sourceApplicationName = [[peer sourceApplicationName] copy] ;
229 230 key = [[peer itemKey] copy] ;
230 231 isServer = YES ;
231 232 delegate = aDel ;
@@ -241,6 +242,7 @@ - (id)initClientWithSourceName:(NSString*)aName delegate:(id<LinkBackClientDeleg
241 242 isServer = NO ;
242 243 delegate = aDel ;
243 244 sourceName = [aName copy] ;
  245 + sourceApplicationName = [[NSProcessInfo processInfo] processName] ;
244 246 pboard = [[NSPasteboard pasteboardWithUniqueName] retain] ;
245 247 key = [aKey copy] ;
246 248 }
@@ -287,6 +289,11 @@ - (NSString*)sourceName
287 289 return sourceName ;
288 290 }
289 291
  292 +- (NSString*)sourceApplicationName
  293 +{
  294 + return sourceApplicationName ;
  295 +}
  296 +
290 297 - (NSString*)itemKey
291 298 {
292 299 return key ;
@@ -360,12 +367,16 @@ + (LinkBack*)editLinkBackData:(id)data sourceName:(NSString*)aName delegate:(id<
360 367 BOOL ok ;
361 368 NSString* serverName ;
362 369 NSString* serverId ;
363   -
  370 + NSString* appName ;
  371 + NSURL* url ;
  372 +
364 373 // collect server contact information from data.
365 374 ok = [data isKindOfClass: [NSDictionary class]] ;
366 375 if (ok) {
367 376 serverName = [data objectForKey: LinkBackServerNameKey] ;
368 377 serverId = [data objectForKey: LinkBackServerBundleIdentifierKey];
  378 + appName = [data linkBackSourceApplicationName] ;
  379 + url = [data linkBackApplicationURL] ;
369 380 }
370 381
371 382 if (!ok || !serverName || !serverId) [NSException raise: NSInvalidArgumentException format: @"LinkBackData is not of the correct format: %@", data] ;
@@ -373,7 +384,7 @@ + (LinkBack*)editLinkBackData:(id)data sourceName:(NSString*)aName delegate:(id<
373 384 // create the live link object and try to connect to the server.
374 385 ret = [[LinkBack alloc] initClientWithSourceName: aName delegate: del itemKey: aKey] ;
375 386
376   - if (![ret connectToServerWithName: serverName inApplication: serverId]) {
  387 + if (![ret connectToServerWithName: serverName inApplication: serverId fallbackURL: url appName: appName]) {
377 388 [ret release] ;
378 389 ret = nil ;
379 390 }
@@ -397,10 +408,10 @@ + (LinkBack*)editLinkBackData:(id)data sourceName:(NSString*)aName delegate:(id<
397 408 return ret ;
398 409 }
399 410
400   -- (BOOL)connectToServerWithName:(NSString*)aName inApplication:(NSString*)bundleIdentifier
  411 +- (BOOL)connectToServerWithName:(NSString*)aName inApplication:(NSString*)bundleIdentifier fallbackURL:(NSURL*)url appName:(NSString*)appName
401 412 {
402 413 // get the LinkBackServer.
403   - LinkBackServer* server = [LinkBackServer LinkBackServerWithName: aName inApplication: bundleIdentifier launchIfNeeded: YES] ;
  414 + LinkBackServer* server = [LinkBackServer LinkBackServerWithName: aName inApplication: bundleIdentifier launchIfNeeded: YES fallbackURL: url appName: appName] ;
404 415 if (!server) return NO ; // failed to get server
405 416
406 417 peer = [[server initiateLinkBackFromClient: self] retain] ;
3  Source/LinkBackServer.h
@@ -55,7 +55,8 @@ NSString* MakeLinkBackServerName(NSString* bundleIdentifier, NSString* name) ;
55 55 + (LinkBackServer*)LinkBackServerWithName:(NSString*)name ;
56 56 + (BOOL)publishServerWithName:(NSString*)name delegate:(id<LinkBackServerDelegate>)del ;
57 57
58   -+ (LinkBackServer*)LinkBackServerWithName:(NSString*)name inApplication:(NSString*)bundleIdentifier launchIfNeeded:(BOOL)flag ;
  58 ++ (LinkBackServer*)LinkBackServerWithName:(NSString*)name inApplication:(NSString*)bundleIdentifier launchIfNeeded:(BOOL)flag fallbackURL:(NSURL*)url appName:(NSString*)appName ;
  59 +
59 60 // This method is used by clients to connect
60 61
61 62 - (id)initWithName:(NSString*)name delegate:(id<LinkBackServerDelegate>)aDel;
163 Source/LinkBackServer.m
@@ -69,37 +69,154 @@ + (BOOL)publishServerWithName:(NSString*)aName delegate:(id<LinkBackServerDelega
69 69 return ret ;
70 70 }
71 71
72   -+ (LinkBackServer*)LinkBackServerWithName:(NSString*)aName inApplication:(NSString*)bundleIdentifier launchIfNeeded:(BOOL)flag
  72 +BOOL LinkBackServerIsSupported(NSString* name, id supportedServers)
73 73 {
  74 + BOOL ret = NO ;
  75 + int idx ;
  76 + NSString* curServer = supportedServers ;
  77 +
  78 + // NOTE: supportedServers may be nil, an NSArray, or NSString.
  79 + if (supportedServers) {
  80 + if ([supportedServers isKindOfClass: [NSArray class]]) {
  81 + idx = [supportedServers count] ;
  82 + while((NO==ret) && (--idx >= 0)) {
  83 + curServer = [supportedServers objectAtIndex: idx] ;
  84 + ret = [curServer isEqualToString: name] ;
  85 + }
  86 + } else ret = [curServer isEqualToString: name] ;
  87 + }
  88 +
  89 + return ret ;
  90 +}
  91 +
  92 +NSString* FindLinkBackServer(NSString* bundleIdentifier, NSString* serverName, NSString* dir, int level)
  93 +{
  94 + NSString* ret = nil ;
  95 +
  96 + NSFileManager* fm = [NSFileManager defaultManager] ;
  97 + NSArray* contents = [fm directoryContentsAtPath: dir] ;
  98 + int idx ;
  99 +
  100 + NSLog(@"searching for %@ in folder: %@", serverName, dir) ;
  101 +
  102 + // working info
  103 + NSString* cpath ;
  104 + NSBundle* cbundle ;
  105 + NSString* cbundleIdentifier ;
  106 + id supportedServers ;
  107 +
  108 + // resolve any symlinks, expand tildes.
  109 + dir = [dir stringByStandardizingPath] ;
  110 +
  111 + // find all .app bundles in the directory and test them.
  112 + idx = (contents) ? [contents count] : 0 ;
  113 + while((nil==ret) && (--idx >= 0)) {
  114 + cpath = [contents objectAtIndex: idx] ;
  115 +
  116 + if ([[cpath pathExtension] isEqualToString: @"app"]) {
  117 + cpath = [dir stringByAppendingPathComponent: cpath] ;
  118 + cbundle = [NSBundle bundleWithPath: cpath] ;
  119 + cbundleIdentifier = [cbundle bundleIdentifier] ;
  120 +
  121 + if ([cbundleIdentifier isEqualToString: bundleIdentifier]) {
  122 + supportedServers = [[cbundle infoDictionary] objectForKey: @"LinkBackServer"] ;
  123 + ret= (LinkBackServerIsSupported(serverName, supportedServers)) ? cpath : nil ;
  124 + }
  125 + }
  126 + }
  127 +
  128 + // if the app was not found, descend into non-app dirs. only descend 4 levels to avoid taking forever.
  129 + if ((nil==ret) && (level<4)) {
  130 + idx = (contents) ? [contents count] : 0 ;
  131 + while((nil==ret) && (--idx >= 0)) {
  132 + BOOL isdir ;
  133 +
  134 + cpath = [contents objectAtIndex: idx] ;
  135 + [fm fileExistsAtPath: cpath isDirectory: &isdir] ;
  136 + if (isdir && (![[cpath pathExtension] isEqualToString: @"app"])) {
  137 + cpath = [dir stringByAppendingPathComponent: cpath] ;
  138 + ret = FindLinkBackServer(bundleIdentifier, serverName, cpath, level+1) ;
  139 + }
  140 + }
  141 + }
  142 +
  143 + return ret ;
  144 +}
  145 +
  146 +void LinkBackRunAppNotFoundPanel(NSString* appName, NSURL* url)
  147 +{
  148 + int result ;
  149 +
  150 + // strings for panel
  151 + NSBundle* b = [NSBundle bundleForClass: [LinkBack class]] ;
  152 + NSString* title ;
  153 + NSString* msg ;
  154 + NSString* ok ;
  155 + NSString* urlstr ;
  156 +
  157 + title = NSLocalizedStringFromTableInBundle(@"_AppNotFoundTitle", @"Localized", b, @"app not found title") ;
  158 + ok = NSLocalizedStringFromTableInBundle(@"_OK", @"Localized", b, @"ok") ;
  159 +
  160 + msg = (url) ? NSLocalizedStringFromTableInBundle(@"_AppNotFoundMessageWithURL", @"Localized", b, @"app not found msg") : NSLocalizedStringFromTableInBundle(@"_AppNotFoundMessageNoURL", @"Localized", b, @"app not found msg") ;
  161 +
  162 + urlstr = (url) ? NSLocalizedStringFromTableInBundle(@"_GetApplication", @"Localized", b, @"Get application") : nil ;
  163 +
  164 + title = [NSString stringWithFormat: title, appName] ;
  165 +
  166 + result = NSRunCriticalAlertPanel(title, msg, ok, urlstr, nil) ;
  167 + if (NSAlertAlternateReturn == result) {
  168 + [[NSWorkspace sharedWorkspace] openURL: url] ;
  169 + }
  170 +}
  171 +
  172 ++ (LinkBackServer*)LinkBackServerWithName:(NSString*)aName inApplication:(NSString*)bundleIdentifier launchIfNeeded:(BOOL)flag fallbackURL:(NSURL*)url appName:(NSString*)appName ;
  173 +{
  174 + BOOL connect = YES ;
74 175 NSString* serverName = MakeLinkBackServerName(bundleIdentifier, aName) ;
75 176 id ret = nil ;
76 177 NSTimeInterval tryMark ;
77 178
78   - // Let see if its already running
79   - BOOL appLaunched = FALSE;
80   - NSArray *appsArray = [[NSWorkspace sharedWorkspace] launchedApplications];
81   - NSEnumerator *appsArrayEnumerator = [appsArray objectEnumerator];
82   - NSDictionary *appDict;
83   - NSString *appBundleIdentifier;
84   - while (appDict = [appsArrayEnumerator nextObject])
85   - {
86   - appBundleIdentifier = [appDict objectForKey:@"NSApplicationBundleIdentifier"];
87   - if((appBundleIdentifier) && ([appBundleIdentifier isEqualToString:bundleIdentifier]))
88   - appLaunched = TRUE;
89   - }
  179 + // Try to connect
  180 + ret = [NSConnection rootProxyForConnectionWithRegisteredName: serverName host: nil] ;
90 181
91   - // if flag, and not launched try to launch.
92   - if((!appLaunched) && (flag))
93   - [[NSWorkspace sharedWorkspace] launchAppWithBundleIdentifier: bundleIdentifier options: (NSWorkspaceLaunchWithoutAddingToRecents | NSWorkspaceLaunchWithoutActivation) additionalEventParamDescriptor: nil launchIdentifier: nil] ;
  182 + // if launchIfNeeded, and the connection was not available, try to launch.
  183 + if((!ret) && (flag)) {
  184 + NSString* appPath ;
  185 + id linkBackServers ;
  186 +
  187 + // first, try to find the app with the bundle identifier
  188 + appPath = [[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier: bundleIdentifier] ;
  189 + linkBackServers = [[[NSBundle bundleWithPath: appPath] infoDictionary] objectForKey: @"LinkBackServer"] ;
  190 + appPath = (LinkBackServerIsSupported(aName, linkBackServers)) ? appPath : nil ;
  191 +
  192 + // if the found app is not supported, we will need to search for the app ourselves.
  193 + if (nil==appPath) appPath = FindLinkBackServer(bundleIdentifier, aName, @"/Applications",0);
  194 +
  195 + if (nil==appPath) appPath = FindLinkBackServer(bundleIdentifier, aName, @"~/Applications",0);
  196 +
  197 + if (nil==appPath) appPath = FindLinkBackServer(bundleIdentifier, aName, @"/Network/Applications",0);
  198 +
  199 + // if app path has been found, launch the app.
  200 + if (appPath) {
  201 + [[NSWorkspace sharedWorkspace] launchApplication: appName] ;
  202 + } else {
  203 + LinkBackRunAppNotFoundPanel(appName, url) ;
  204 + connect = NO ;
  205 + }
  206 + }
94 207
95   - // now, try to connect. retry connection for a while if we did not succeed at first. This gives the app time to launch.
96   - tryMark = [NSDate timeIntervalSinceReferenceDate] ;
97   - do {
98   - ret = [NSConnection rootProxyForConnectionWithRegisteredName: serverName host: nil] ;
99   - } while ((!ret) && (([NSDate timeIntervalSinceReferenceDate]-tryMark)<10)) ;
  208 + // if needed, try to connect.
  209 + // retry connection for a while if we did not succeed at first. This gives the app time to launch.
  210 + if (connect && (nil==ret)) {
  211 + tryMark = [NSDate timeIntervalSinceReferenceDate] ;
  212 + do {
  213 + ret = [NSConnection rootProxyForConnectionWithRegisteredName: serverName host: nil] ;
  214 + } while ((!ret) && (([NSDate timeIntervalSinceReferenceDate]-tryMark)<10)) ;
  215 +
  216 + }
100 217
101   - [ret setProtocolForProxy: @protocol(LinkBackServer)] ;
102   -
  218 + // setup protocol and return
  219 + if (ret) [ret setProtocolForProxy: @protocol(LinkBackServer)] ;
103 220 return ret ;
104 221 }
105 222
3  TextEdit+LinkBack/LinkBackTextView.m
@@ -23,8 +23,7 @@ - (BOOL)readSelectionFromPasteboard:(NSPasteboard*)pboard
23 23 while(type = [e nextObject]) {
24 24 if ([type isEqual: NSTIFFPboardType]) hasTIFF = YES ;
25 25 if ([type isEqual: NSPDFPboardType]) hasPDF = YES ;
26   -// if ([type isEqual: LinkBackPboardType]) hasLinkBack = YES ;
27   - hasLinkBack = YES ;
  26 + if ([type isEqual: LinkBackPboardType]) hasLinkBack = YES ;
28 27 }
29 28
30 29 if (hasLinkBack && (hasPDF || hasTIFF)) {

0 comments on commit 30285de

Please sign in to comment.
Something went wrong with that request. Please try again.