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