Revision: 7804
          http://skim-app.svn.sourceforge.net/skim-app/?rev=7804&view=rev
Author:   hofman
Date:     2012-11-18 18:24:47 +0000 (Sun, 18 Nov 2012)
Log Message:
-----------
Use our own code for running a kqueue, based on Adam's custom object with the 
kqueue run by its class, as we only need a shared queue anyway. Also make sure 
multiple instances for the same path are properly released only when all 
instances are removed by using a counted set.

Modified Paths:
--------------
    trunk/Dutch.lproj/Credits.rtf
    trunk/English.lproj/Credits.rtf
    trunk/French.lproj/Credits.rtf
    trunk/German.lproj/Credits.rtf
    trunk/Italian.lproj/Credits.rtf
    trunk/Japanese.lproj/Credits.rtf
    trunk/SKFileUpdateChecker.m
    trunk/Skim.xcodeproj/project.pbxproj
    trunk/Spanish.lproj/Credits.rtf
    trunk/pl.lproj/Credits.rtf
    trunk/ru.lproj/Credits.rtf
    trunk/zh_CN.lproj/Credits.rtf
    trunk/zh_TW.lproj/Credits.rtf

Added Paths:
-----------
    trunk/SKWatchedPath.h
    trunk/SKWatchedPath.m

Modified: trunk/Dutch.lproj/Credits.rtf
===================================================================
--- trunk/Dutch.lproj/Credits.rtf       2012-11-18 18:18:15 UTC (rev 7803)
+++ trunk/Dutch.lproj/Credits.rtf       2012-11-18 18:24:47 UTC (rev 7804)
@@ -40,7 +40,6 @@
 \b0 \
 Andy Matuschak voor {\field{\*\fldinst{HYPERLINK 
"http://sparkle.andymatuschak.org"}}{\fldrslt Sparkle}}\
 IOSPIRIT voor {\field{\*\fldinst{HYPERLINK 
"http://www.martinkahr.com/source-code"}}{\fldrslt HID Remote}}\
-M. Uli Kusterer voor {\field{\*\fldinst{HYPERLINK 
"http://www.zathras.de"}}{\fldrslt UKKqueue}}\
 J\'e9r\'f4me Laurens voor {\field{\*\fldinst{HYPERLINK 
"http://itexmac.sourceforge.net/SyncTeX.html"}}{\fldrslt SyncTeX}}\
 \
 

Modified: trunk/English.lproj/Credits.rtf
===================================================================
--- trunk/English.lproj/Credits.rtf     2012-11-18 18:18:15 UTC (rev 7803)
+++ trunk/English.lproj/Credits.rtf     2012-11-18 18:24:47 UTC (rev 7804)
@@ -40,7 +40,6 @@
 \b0 \
 Andy Matuschak for {\field{\*\fldinst{HYPERLINK 
"http://sparkle.andymatuschak.org"}}{\fldrslt Sparkle}}\
 IOSpirit for {\field{\*\fldinst{HYPERLINK 
"http://www.iospirit.com/developers/"}}{\fldrslt HID Remote}}\
-M. Uli Kusterer for {\field{\*\fldinst{HYPERLINK 
"http://www.zathras.de"}}{\fldrslt UKKqueue}}\
 J\'e9r\'f4me Laurens for {\field{\*\fldinst{HYPERLINK 
"http://itexmac.sourceforge.net/SyncTeX.html"}}{\fldrslt SyncTeX}}\
 \
 

Modified: trunk/French.lproj/Credits.rtf
===================================================================
--- trunk/French.lproj/Credits.rtf      2012-11-18 18:18:15 UTC (rev 7803)
+++ trunk/French.lproj/Credits.rtf      2012-11-18 18:24:47 UTC (rev 7804)
@@ -40,7 +40,6 @@
 \b0 \
 Andy Matuschak pour {\field{\*\fldinst{HYPERLINK 
"http://sparkle.andymatuschak.org"}}{\fldrslt Sparkle}}\
 IOSpirit pour {\field{\*\fldinst{HYPERLINK 
"http://www.iospirit.com/developers/"}}{\fldrslt HID Remote}}\
-M. Uli Kusterer pour {\field{\*\fldinst{HYPERLINK 
"http://www.zathras.de"}}{\fldrslt UKKqueue}}\
 J\'e9r\'f4me Laurens pour {\field{\*\fldinst{HYPERLINK 
"http://itexmac.sourceforge.net/SyncTeX.html"}}{\fldrslt SyncTeX}}\
 \
 

Modified: trunk/German.lproj/Credits.rtf
===================================================================
--- trunk/German.lproj/Credits.rtf      2012-11-18 18:18:15 UTC (rev 7803)
+++ trunk/German.lproj/Credits.rtf      2012-11-18 18:24:47 UTC (rev 7804)
@@ -40,7 +40,6 @@
 \b0 \
 Andy Matuschak f\'fcr {\field{\*\fldinst{HYPERLINK 
"http://sparkle.andymatuschak.org"}}{\fldrslt Sparkle}}\
 IOSPIRIT f\'fcr {\field{\*\fldinst{HYPERLINK 
"http://www.martinkahr.com/source-code"}}{\fldrslt HID Remote}}\
-M. Uli Kusterer f\'fcr {\field{\*\fldinst{HYPERLINK 
"http://www.zathras.de"}}{\fldrslt UKKqueue}}\
 J\'e9r\'f4me Laurens f\'fcr {\field{\*\fldinst{HYPERLINK 
"http://itexmac.sourceforge.net/SyncTeX.html"}}{\fldrslt SyncTeX}}\
 \
 

Modified: trunk/Italian.lproj/Credits.rtf
===================================================================
--- trunk/Italian.lproj/Credits.rtf     2012-11-18 18:18:15 UTC (rev 7803)
+++ trunk/Italian.lproj/Credits.rtf     2012-11-18 18:24:47 UTC (rev 7804)
@@ -40,7 +40,6 @@
 \b0 \
 Andy Matuschak per {\field{\*\fldinst{HYPERLINK 
"http://sparkle.andymatuschak.org"}}{\fldrslt Sparkle}}\
 IOSPIRIT per {\field{\*\fldinst{HYPERLINK 
"http://www.martinkahr.com/source-code"}}{\fldrslt HID Remote}}\
-M. Uli Kusterer per {\field{\*\fldinst{HYPERLINK 
"http://www.zathras.de"}}{\fldrslt UKKqueue}}\
 J\'e9r\'f4me Laurens per {\field{\*\fldinst{HYPERLINK 
"http://itexmac.sourceforge.net/SyncTeX.html"}}{\fldrslt SyncTeX}}\
 \
 

Modified: trunk/Japanese.lproj/Credits.rtf
===================================================================
--- trunk/Japanese.lproj/Credits.rtf    2012-11-18 18:18:15 UTC (rev 7803)
+++ trunk/Japanese.lproj/Credits.rtf    2012-11-18 18:24:47 UTC (rev 7804)
@@ -69,7 +69,6 @@
 \f0\b0 \
 Andy Matuschak for {\field{\*\fldinst{HYPERLINK 
"http://sparkle.andymatuschak.org"}}{\fldrslt Sparkle}}\
 IOSpirit for {\field{\*\fldinst{HYPERLINK 
"http://www.iospirit.com/developers/"}}{\fldrslt HID Remote}}\
-M. Uli Kusterer for {\field{\*\fldinst{HYPERLINK 
"http://www.zathras.de"}}{\fldrslt UKKqueue}}\
 J\'e9r\'f4me Laurens for {\field{\*\fldinst{HYPERLINK 
"http://itexmac.sourceforge.net/SyncTeX.html"}}{\fldrslt SyncTeX}}\
 \
 

Modified: trunk/SKFileUpdateChecker.m
===================================================================
--- trunk/SKFileUpdateChecker.m 2012-11-18 18:18:15 UTC (rev 7803)
+++ trunk/SKFileUpdateChecker.m 2012-11-18 18:24:47 UTC (rev 7804)
@@ -37,7 +37,6 @@
  */
 
 #import "SKFileUpdateChecker.h"
-#import "UKKQueue.h"
 #import "SKStringConstants.h"
 #import "NSDocument_SKExtensions.h"
 #import "NSData_SKExtensions.h"
@@ -45,6 +44,7 @@
 #import "NSUserDefaultsController_SKExtensions.h"
 #import "NSString_SKExtensions.h"
 #import "NSError_SKExtensions.h"
+#import "SKWatchedPath.h"
 
 #define SKAutoReloadFileUpdateKey @"SKAutoReloadFileUpdate"
 
@@ -85,12 +85,11 @@
 - (void)stopCheckingFileUpdates {
     if (watchedFile) {
         // remove from kqueue and invalidate timer; maybe we've changed 
filesystems
-        UKKQueue *kQueue = [UKKQueue sharedFileWatcher];
-        [kQueue removePath:watchedFile];
+        [SKWatchedPath removeWatchedPath:watchedFile];
         NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
-        [nc removeObserver:self name:UKFileWatcherWriteNotification 
object:kQueue];
-        [nc removeObserver:self name:UKFileWatcherRenameNotification 
object:kQueue];
-        [nc removeObserver:self name:UKFileWatcherDeleteNotification 
object:kQueue];
+        [nc removeObserver:self name:SKWatchedPathWriteNotification 
object:nil];
+        [nc removeObserver:self name:SKWatchedPathRenameNotification 
object:nil];
+        [nc removeObserver:self name:SKWatchedPathDeleteNotification 
object:nil];
         SKDESTROY(watchedFile);
     }
     if (fileUpdateTimer) {
@@ -141,12 +140,11 @@
             if (isFileOnHFSVolume(fileName)) {
                 watchedFile = [fileName retain];
                 
-                UKKQueue *kQueue = [UKKQueue sharedFileWatcher];
-                [kQueue addPath:watchedFile];
+                [SKWatchedPath addWatchedPath:watchedFile];
                 NSNotificationCenter *nc = [NSNotificationCenter 
defaultCenter];
-                [nc addObserver:self 
selector:@selector(handleFileUpdateNotification:) 
name:UKFileWatcherWriteNotification object:kQueue];
-                [nc addObserver:self 
selector:@selector(handleFileMoveNotification:) 
name:UKFileWatcherRenameNotification object:kQueue];
-                [nc addObserver:self 
selector:@selector(handleFileDeleteNotification:) 
name:UKFileWatcherDeleteNotification object:kQueue];
+                [nc addObserver:self 
selector:@selector(handleFileUpdateNotification:) 
name:SKWatchedPathWriteNotification object:nil];
+                [nc addObserver:self 
selector:@selector(handleFileMoveNotification:) 
name:SKWatchedPathRenameNotification object:nil];
+                [nc addObserver:self 
selector:@selector(handleFileDeleteNotification:) 
name:SKWatchedPathDeleteNotification object:nil];
             } else if (nil == fileUpdateTimer) {
                 // Let the runloop retain the timer; timer retains us.  Use a 
fairly long delay since this is likely a network volume.
                 fileUpdateTimer = [NSTimer 
scheduledTimerWithTimeInterval:(double)2.0 target:self 
selector:@selector(checkForFileModification:) userInfo:nil repeats:YES];

Added: trunk/SKWatchedPath.h
===================================================================
--- trunk/SKWatchedPath.h                               (rev 0)
+++ trunk/SKWatchedPath.h       2012-11-18 18:24:47 UTC (rev 7804)
@@ -0,0 +1,60 @@
+//
+//  SKWatchedPath.h
+//  Skim
+//
+//  Created by Christiaan Hofmanon 11/18/12.
+/*
+ This software is Copyright (c) 2010-2012
+ Christiaan Hofman. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ - Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+ - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+
+ - Neither the name of Christiaan Hofman nor the names of any
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <Cocoa/Cocoa.h>
+
+extern NSString *SKWatchedPathRenameNotification;
+extern NSString *SKWatchedPathWriteNotification;
+extern NSString *SKWatchedPathDeleteNotification;
+
+@interface SKWatchedPath : NSObject {
+    NSString *path;
+    int fd;
+}
+
++ (void)addWatchedPath:(NSString *)path;
++ (void)removeWatchedPath:(NSString *)path;
+
+- (id)initWithPath:(NSString *)path;
+
+- (int)fileDescriptor;
+- (NSString *)path;
+
++ (void)watcherThread:(id)sender;
+
+@end

Added: trunk/SKWatchedPath.m
===================================================================
--- trunk/SKWatchedPath.m                               (rev 0)
+++ trunk/SKWatchedPath.m       2012-11-18 18:24:47 UTC (rev 7804)
@@ -0,0 +1,189 @@
+//
+//  SKWatchedPath.m
+//  Skim
+//
+//  Created by Christiaan Hofmanon 11/18/12.
+/*
+ This software is Copyright (c) 2010-2012
+ Christiaan Hofman. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ - Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+ - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+
+ - Neither the name of Christiaan Hofman nor the names of any
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "SKWatchedPath.h"
+#include <sys/types.h>
+#include <sys/event.h>
+#import <unistd.h>
+#import <fcntl.h>
+
+NSString *SKWatchedPathRenameNotification = @"SKWatchedPathRenameNotification";
+NSString *SKWatchedPathWriteNotification = @"SKWatchedPathWriteNotification";
+NSString *SKWatchedPathDeleteNotification = @"SKWatchedPathDeleteNotification";
+
+#define PATH_KEY @"path"
+
+@implementation SKWatchedPath
+
+// open() is documented to return -1 in case of an error and >=0 for success
+static const NSInteger UNOPENED_DESCRIPTOR = -2;
+
+static int kQueue = -1;
+static NSCountedSet *watchedPaths = nil;
+
++ (void)initialize {
+    SKINITIALIZE;
+    
+    watchedPaths = [[NSCountedSet alloc] init];
+    kQueue = kqueue();
+    
+    if (kQueue != -1)
+        [NSThread detachNewThreadSelector:@selector(watcherThread:) 
toTarget:self withObject:nil];
+}
+
+- (id)initWithPath:(NSString *)fullPath {
+    self = [super init];
+    if (self) {
+        // copy since the hash mustn't change
+        path = [fullPath copy];
+        // allows us to open files lazily, since these may be created just for 
a path comparison when removing from the queue
+        fd = UNOPENED_DESCRIPTOR;
+    }
+    return self;
+}
+
+- (void)dealloc {
+    SKDESTROY(path);
+    // don't bother closing a descriptor that wasn't created; this may have 
been instantiated for comparison and immediately discarded
+       if (fd >= 0 && close(fd) == -1)
+        perror(NULL);
+    [super dealloc];
+}
+
+- (NSUInteger)hash { return [path hash]; }
+
+// implement in terms of -isEqualToString: since that's what NSPathStore2 uses
+- (BOOL)isEqual:(id)other { return [other isKindOfClass:[self class]] ? [path 
isEqualToString:[other path]] : NO; }
+
+- (int)fileDescriptor { 
+    if (fd == UNOPENED_DESCRIPTOR)
+        fd = open([path fileSystemRepresentation], O_EVTONLY, 0);
+    return fd; 
+}
+
+- (NSString *)path { return path; }
+
++ (void)addWatchedPath:(NSString *)path {
+    SKWatchedPath *watchedPath = [[self alloc] initWithPath:path];
+    
+    // see if we're altready watching this path
+    SKWatchedPath *observedWatchedPath = [watchedPaths member:watchedPath];
+    
+    if (observedWatchedPath == nil || [observedWatchedPath fileDescriptor] < 
0) {
+        // this will be closed when watchedPath is dealloced
+        int fd = [watchedPath fileDescriptor];
+        if (fd >= 0) {
+            // add the instance that we know will be retained by watchedPaths
+            struct kevent ev;
+            EV_SET(&ev, fd, EVFILT_VNODE, EV_ADD | EV_ENABLE | EV_CLEAR, 
NOTE_RENAME | NOTE_WRITE | NOTE_DELETE, 0, (void *)watchedPath);
+            kevent(kQueue, &ev, 1, NULL, 0, NULL);
+            
+            if (observedWatchedPath) {
+                // replace observedWatchedPath by watchedPath in the 
NSCountedSet with the same count, the docs give us no guarantee that we can 
rely on the fact that -addObject: will do this for us
+                NSUInteger i, count = [watchedPaths 
countForObject:observedWatchedPath];
+                for (i = 0; i < count; i++)
+                    [watchedPaths removeObject:observedWatchedPath];
+                for (i = 0; i < count; i++)
+                    [watchedPaths addObject:watchedPath];
+            }
+            observedWatchedPath = watchedPath;
+        } else if (observedWatchedPath == nil) {
+            observedWatchedPath = watchedPath;
+        }
+    }
+    // don't add watchedPath, because that may replace observedWatchedPath in 
the NSCountedSet, which is a problem because observedWatchedPath knows the 
fileDescriptor
+    // the docs say -addObject: does not replace an existing object, but my 
tests say it always does
+    [watchedPaths addObject:observedWatchedPath];
+    
+    [watchedPath release];
+}
+
++ (void)removeWatchedPath:(NSString *)path {
+    SKWatchedPath *watchedPath = [[self alloc] initWithPath:path];
+    [watchedPaths removeObject:watchedPath];
+    [watchedPath release];
+}
+
++ (void)watcherThread:(id)sender {
+       int n;
+    struct kevent ev;
+       int theFD = kQueue;     // So we don't have to risk accessing iVars 
when the thread is terminated.
+    
+    while (YES) {
+        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+        
+        @try{
+            n = kevent(kQueue, NULL, 0, &ev, 1, NULL);
+            if (n > 0) {
+                if (ev.filter == EVFILT_VNODE) {
+                    if (ev.fflags) {
+                        // retain in case one of the notified folks removes 
the path.
+                        NSString *name = nil;
+                        
+                        if ((ev.fflags & NOTE_RENAME) == NOTE_RENAME)
+                            name = SKWatchedPathRenameNotification;
+                        if ((ev.fflags & NOTE_WRITE) == NOTE_WRITE)
+                            name = SKWatchedPathWriteNotification;
+                        if ((ev.fflags & NOTE_DELETE) == NOTE_DELETE)
+                            name = SKWatchedPathDeleteNotification;
+                        
+                        if (name) {
+                            NSDictionary *userInfo = [NSDictionary 
dictionaryWithObjectsAndKeys:[(SKWatchedPath *)ev.udata path], PATH_KEY, nil];
+                            // this is the notification we'll queue on the 
main thread
+                            NSNotification *note = [NSNotification 
notificationWithName:name object:nil userInfo:userInfo];
+                            
+                            dispatch_async(dispatch_get_main_queue(), ^{
+                                [[NSNotificationQueue defaultQueue] 
enqueueNotification:note postingStyle:NSPostWhenIdle];
+                            });
+                        }
+                    }
+                }
+            }
+        }
+        @catch (id e) {
+            NSLog(@"Error in SKWatchedPath watcherThread: %@", e);
+        }
+        
+        [pool release];
+    }
+    
+       if (close(theFD) == -1)
+               NSLog(@"release: Couldn't close main kqueue (%d)", errno);
+}      
+
+@end

Modified: trunk/Skim.xcodeproj/project.pbxproj
===================================================================
--- trunk/Skim.xcodeproj/project.pbxproj        2012-11-18 18:18:15 UTC (rev 
7803)
+++ trunk/Skim.xcodeproj/project.pbxproj        2012-11-18 18:24:47 UTC (rev 
7804)
@@ -92,6 +92,7 @@
                CE19446910627483007E8770 /* SnapshotWindow.xib in Resources */ 
= {isa = PBXBuildFile; fileRef = CE19446210627483007E8770 /* SnapshotWindow.xib 
*/; };
                CE199DFD0D957A16009B2055 /* SKAnnotationTypeImageCell.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CE199DFC0D957A16009B2055 /* 
SKAnnotationTypeImageCell.m */; };
                CE1ADEBF0C4C341100071840 /* SKTransitionController.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = CE1ADEBE0C4C341100071840 /* 
SKTransitionController.m */; };
+               CE1B651B16595C5200B74339 /* SKWatchedPath.m in Sources */ = 
{isa = PBXBuildFile; fileRef = CE1B651A16595C5200B74339 /* SKWatchedPath.m */; 
};
                CE1C77B6123FB41E00C73F1A /* SKNoteTextView.m in Sources */ = 
{isa = PBXBuildFile; fileRef = CE1C77B5123FB41E00C73F1A /* SKNoteTextView.m */; 
};
                CE1CC5BE1143C57300F6B208 /* NoteWindow.xib in Resources */ = 
{isa = PBXBuildFile; fileRef = CE1CC5BD1143C57300F6B208 /* NoteWindow.xib */; };
                CE1CC6121143DDFD00F6B208 /* LineInspector.xib in Resources */ = 
{isa = PBXBuildFile; fileRef = CE1CC6111143DDFD00F6B208 /* LineInspector.xib 
*/; };
@@ -303,8 +304,6 @@
                F97751630B37461000DF673B /* SKConversionProgressController.m in 
Sources */ = {isa = PBXBuildFile; fileRef = F97751620B37461000DF673B /* 
SKConversionProgressController.m */; };
                F98E24BF0B702D9400914AF0 /* Carbon.framework in Frameworks */ = 
{isa = PBXBuildFile; fileRef = F98E24BE0B702D9400914AF0 /* Carbon.framework */; 
};
                F9CDD67B0B837A7F006363C3 /* SKPreferenceController.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = CE4EC4F40B7E24490091F228 /* 
SKPreferenceController.m */; };
-               F9F220890C14BDFF00041284 /* UKFileWatcher.m in Sources */ = 
{isa = PBXBuildFile; fileRef = F9F220860C14BDFF00041284 /* UKFileWatcher.m */; 
};
-               F9F2208B0C14BDFF00041284 /* UKKQueue.m in Sources */ = {isa = 
PBXBuildFile; fileRef = F9F220880C14BDFF00041284 /* UKKQueue.m */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -685,6 +684,8 @@
                CE199DFC0D957A16009B2055 /* SKAnnotationTypeImageCell.m */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; path = SKAnnotationTypeImageCell.m; sourceTree = "<group>"; 
};
                CE1ADB170C4BC6DE00071840 /* OpenGL.framework */ = {isa = 
PBXFileReference; lastKnownFileType = wrapper.framework; name = 
OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; 
sourceTree = "<absolute>"; };
                CE1ADEBE0C4C341100071840 /* SKTransitionController.m */ = {isa 
= PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; 
path = SKTransitionController.m; sourceTree = "<group>"; };
+               CE1B651916595C5200B74339 /* SKWatchedPath.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
SKWatchedPath.h; sourceTree = "<group>"; };
+               CE1B651A16595C5200B74339 /* SKWatchedPath.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= SKWatchedPath.m; sourceTree = "<group>"; };
                CE1C77B4123FB41E00C73F1A /* SKNoteTextView.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
SKNoteTextView.h; sourceTree = "<group>"; };
                CE1C77B5123FB41E00C73F1A /* SKNoteTextView.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= SKNoteTextView.m; sourceTree = "<group>"; };
                CE1CC5BD1143C57300F6B208 /* NoteWindow.xib */ = {isa = 
PBXFileReference; lastKnownFileType = file.xib; path = NoteWindow.xib; 
sourceTree = "<group>"; };
@@ -1232,10 +1233,6 @@
                F97751610B37461000DF673B /* SKConversionProgressController.h */ 
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.h; path = SKConversionProgressController.h; sourceTree = 
"<group>"; };
                F97751620B37461000DF673B /* SKConversionProgressController.m */ 
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; path = SKConversionProgressController.m; sourceTree = 
"<group>"; };
                F98E24BE0B702D9400914AF0 /* Carbon.framework */ = {isa = 
PBXFileReference; lastKnownFileType = wrapper.framework; name = 
Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; 
sourceTree = "<absolute>"; };
-               F9F220840C14BD9C00041284 /* UKFileWatcher.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
UKFileWatcher.h; sourceTree = "<group>"; };
-               F9F220860C14BDFF00041284 /* UKFileWatcher.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= UKFileWatcher.m; sourceTree = "<group>"; };
-               F9F220870C14BDFF00041284 /* UKKQueue.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
UKKQueue.h; sourceTree = "<group>"; };
-               F9F220880C14BDFF00041284 /* UKKQueue.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= UKKQueue.m; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -1371,7 +1368,6 @@
                        children = (
                                CE9BD6FB0D096F0500EB1A6C /* BDAlias */,
                                CE9BD6FA0D096EE300EB1A6C /* HIDRemote */,
-                               CE9BD6FC0D096F1800EB1A6C /* UKKQueue */,
                                CE33639E0E26E086005F99E6 /* SyncTeX */,
                        );
                        name = "Third Party Sources";
@@ -1750,6 +1746,8 @@
                                CE9B80491030642400EA8774 /* SKTransitionInfo.m 
*/,
                                CEF7117C0B90B58E003A2771 /* SKVersionNumber.h 
*/,
                                CEF7117D0B90B58E003A2771 /* SKVersionNumber.m 
*/,
+                               CE1B651916595C5200B74339 /* SKWatchedPath.h */,
+                               CE1B651A16595C5200B74339 /* SKWatchedPath.m */,
                        );
                        name = Data;
                        sourceTree = "<group>";
@@ -1884,18 +1882,6 @@
                        path = BDistributed/BDAlias;
                        sourceTree = "<group>";
                };
-               CE9BD6FC0D096F1800EB1A6C /* UKKQueue */ = {
-                       isa = PBXGroup;
-                       children = (
-                               F9F220840C14BD9C00041284 /* UKFileWatcher.h */,
-                               F9F220860C14BDFF00041284 /* UKFileWatcher.m */,
-                               F9F220870C14BDFF00041284 /* UKKQueue.h */,
-                               F9F220880C14BDFF00041284 /* UKKQueue.m */,
-                       );
-                       name = UKKQueue;
-                       path = ulikusterer;
-                       sourceTree = "<group>";
-               };
                CEC0ABED118307F900384CFD /* View Helpers */ = {
                        isa = PBXGroup;
                        children = (
@@ -2472,8 +2458,6 @@
                                CE48BAD80C089EA300A166C6 /* SKTemplateParser.m 
in Sources */,
                                CE41B2A70C08CFA900E36EB7 /* 
NSArray_SKExtensions.m in Sources */,
                                CE41B2CC0C08D17100E36EB7 /* 
NSValue_SKExtensions.m in Sources */,
-                               F9F220890C14BDFF00041284 /* UKFileWatcher.m in 
Sources */,
-                               F9F2208B0C14BDFF00041284 /* UKKQueue.m in 
Sources */,
                                CE7C20500C259A5D0059E08C /* 
NSColor_SKExtensions.m in Sources */,
                                CE8B46E90C29CA00005CE7F1 /* SKLineInspector.m 
in Sources */,
                                CE4BC1300C357A0300C2AF03 /* SKLineWell.m in 
Sources */,
@@ -2596,6 +2580,7 @@
                                CEE9BC0814CDD98100262718 /* 
SKBookmarkSheetController.m in Sources */,
                                CE10979A161320CF00C4FA18 /* 
SKExportAccessoryController.m in Sources */,
                                CE5347141645DD3000737191 /* 
SKAttachmentEmailer.m in Sources */,
+                               CE1B651B16595C5200B74339 /* SKWatchedPath.m in 
Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };

Modified: trunk/Spanish.lproj/Credits.rtf
===================================================================
--- trunk/Spanish.lproj/Credits.rtf     2012-11-18 18:18:15 UTC (rev 7803)
+++ trunk/Spanish.lproj/Credits.rtf     2012-11-18 18:24:47 UTC (rev 7804)
@@ -40,7 +40,6 @@
 \b0 \
 Andy Matuschak por {\field{\*\fldinst{HYPERLINK 
"http://sparkle.andymatuschak.org"}}{\fldrslt Sparkle}}\
 IOSPIRIT por {\field{\*\fldinst{HYPERLINK 
"http://www.martinkahr.com/source-code"}}{\fldrslt HID Remote}}\
-M. Uli Kusterer por {\field{\*\fldinst{HYPERLINK 
"http://www.zathras.de"}}{\fldrslt UKKqueue}}\
 J\'e9r\'f4me Laurens por {\field{\*\fldinst{HYPERLINK 
"http://itexmac.sourceforge.net/SyncTeX.html"}}{\fldrslt SyncTeX}}\
 \
 

Modified: trunk/pl.lproj/Credits.rtf
===================================================================
--- trunk/pl.lproj/Credits.rtf  2012-11-18 18:18:15 UTC (rev 7803)
+++ trunk/pl.lproj/Credits.rtf  2012-11-18 18:24:47 UTC (rev 7804)
@@ -40,7 +40,6 @@
 \b0 \
 Andy Matuschak for {\field{\*\fldinst{HYPERLINK 
"http://sparkle.andymatuschak.org"}}{\fldrslt Sparkle}}\
 IOSPIRIT for {\field{\*\fldinst{HYPERLINK 
"http://www.martinkahr.com/source-code"}}{\fldrslt HID Remote}}\
-M. Uli Kusterer for {\field{\*\fldinst{HYPERLINK 
"http://www.zathras.de"}}{\fldrslt UKKqueue}}\
 J\'e9r\'f4me Laurens for {\field{\*\fldinst{HYPERLINK 
"http://itexmac.sourceforge.net/SyncTeX.html"}}{\fldrslt SyncTeX}}\
 \
 

Modified: trunk/ru.lproj/Credits.rtf
===================================================================
--- trunk/ru.lproj/Credits.rtf  2012-11-18 18:18:15 UTC (rev 7803)
+++ trunk/ru.lproj/Credits.rtf  2012-11-18 18:24:47 UTC (rev 7804)
@@ -40,7 +40,6 @@
 \b0 \
 Andy Matuschak \uc0\u1079 \u1072  {\field{\*\fldinst{HYPERLINK 
"http://sparkle.andymatuschak.org"}}{\fldrslt Sparkle}}\
 IOSPIRIT \uc0\u1079 \u1072  {\field{\*\fldinst{HYPERLINK 
"http://www.martinkahr.com/source-code"}}{\fldrslt HID Remote}}\
-M. Uli Kusterer \uc0\u1079 \u1072  {\field{\*\fldinst{HYPERLINK 
"http://www.zathras.de"}}{\fldrslt UKKqueue}}\
 J\'e9r\'f4me Laurens \uc0\u1079 \u1072  {\field{\*\fldinst{HYPERLINK 
"http://itexmac.sourceforge.net/SyncTeX.html"}}{\fldrslt SyncTeX}}\
 \
 

Modified: trunk/zh_CN.lproj/Credits.rtf
===================================================================
--- trunk/zh_CN.lproj/Credits.rtf       2012-11-18 18:18:15 UTC (rev 7803)
+++ trunk/zh_CN.lproj/Credits.rtf       2012-11-18 18:24:47 UTC (rev 7804)
@@ -74,9 +74,6 @@
 IOSPIRIT 
 \f0 \'aa\'ba
 \f1  {\field{\*\fldinst{HYPERLINK 
"http://www.martinkahr.com/source-code"}}{\fldrslt HID Remote}}\
-M. Uli Kusterer 
-\f0 \'aa\'ba
-\f1  {\field{\*\fldinst{HYPERLINK "http://www.zathras.de"}}{\fldrslt 
UKKqueue}}\
 J\'e9r\'f4me Laurens 
 \f0 \'aa\'ba
 \f1  {\field{\*\fldinst{HYPERLINK 
"http://itexmac.sourceforge.net/SyncTeX.html"}}{\fldrslt SyncTeX}}\

Modified: trunk/zh_TW.lproj/Credits.rtf
===================================================================
--- trunk/zh_TW.lproj/Credits.rtf       2012-11-18 18:18:15 UTC (rev 7803)
+++ trunk/zh_TW.lproj/Credits.rtf       2012-11-18 18:24:47 UTC (rev 7804)
@@ -74,9 +74,6 @@
 IOSPIRIT 
 \f0 \'aa\'ba
 \f1  {\field{\*\fldinst{HYPERLINK 
"http://www.martinkahr.com/source-code"}}{\fldrslt HID Remote}}\
-M. Uli Kusterer 
-\f0 \'aa\'ba
-\f1  {\field{\*\fldinst{HYPERLINK "http://www.zathras.de"}}{\fldrslt 
UKKqueue}}\
 J\'e9r\'f4me Laurens 
 \f0 \'aa\'ba
 \f1  {\field{\*\fldinst{HYPERLINK 
"http://itexmac.sourceforge.net/SyncTeX.html"}}{\fldrslt SyncTeX}}\

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to