Revision: 3894
          http://skim-app.svn.sourceforge.net/skim-app/?rev=3894&view=rev
Author:   hofman
Date:     2008-05-18 10:35:31 -0700 (Sun, 18 May 2008)

Log Message:
-----------
Avoid a loop in updating shadowed ivars for KVO. 

Modified Paths:
--------------
    trunk/SKMainWindowController.m
    trunk/SKMainWindowController_UI.m

Modified: trunk/SKMainWindowController.m
===================================================================
--- trunk/SKMainWindowController.m      2008-05-18 16:29:55 UTC (rev 3893)
+++ trunk/SKMainWindowController.m      2008-05-18 17:35:31 UTC (rev 3894)
@@ -107,6 +107,9 @@
 static NSString *SKMainWindowRelevanceColumnIdentifer = @"relevance";
 static NSString *SKMainWindowResultsColumnIdentifer = @"results";
 
+static NSString *SKMainWindowPageNumberKey = @"pageNumber";
+static NSString *SKMainWindowPageLabelKey = @"pageLabel";
+
 static NSString *SKMainWindowFrameKey = @"windowFrame";
 static NSString *SKMainWindowLeftSidePaneWidthKey = @"leftSidePaneWidth";
 static NSString *SKMainWindowRightSidePaneWidthKey = @"rightSidePaneWidth";
@@ -205,6 +208,13 @@
     }
 }
 
++ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key {
+    if ([key isEqualToString:SKMainWindowPageNumberKey] || [key 
isEqualToString:SKMainWindowPageLabelKey])
+        return NO;
+    else
+        return [super automaticallyNotifiesObserversForKey:key];
+}
+
 - (id)initWithWindowNibName:(NSString *)windowNibName owner:(id)owner{
     self = [super initWithWindowNibName:windowNibName owner:owner];
     if(self){
@@ -880,6 +890,15 @@
     return pdfView;
 }
 
+- (void)updatePageNumber {
+    unsigned int number = [[pdfView currentPage] pageIndex] + 1;
+    if (pageNumber != number) {
+        [self willChangeValueForKey:SKMainWindowPageNumberKey];
+        pageNumber = number;
+        [self didChangeValueForKey:SKMainWindowPageNumberKey];
+    }
+}
+
 - (unsigned int)pageNumber {
     return pageNumber;
 }
@@ -889,10 +908,17 @@
     unsigned int pageCount = [[pdfView document] pageCount];
     if (number > pageCount)
         number = pageCount;
-    if (number > 0) {
-        pageNumber = number;
-        if ([[pdfView currentPage] pageIndex] != pageNumber - 1)
-            [self goToPage:[[pdfView document] pageAtIndex:pageNumber - 1]];
+    if (number > 0 && [[pdfView currentPage] pageIndex] != pageNumber - 1)
+        [self goToPage:[[pdfView document] pageAtIndex:pageNumber - 1]];
+}
+
+- (void)updatePageLabel {
+    NSString *label = [[pdfView currentPage] label];
+    if (label != pageLabel) {
+        [self willChangeValueForKey:SKMainWindowPageLabelKey];
+        [pageLabel release];
+        pageLabel = [label retain];
+        [self didChangeValueForKey:SKMainWindowPageLabelKey];
     }
 }
 
@@ -901,10 +927,6 @@
 }
 
 - (void)setPageLabel:(NSString *)label {
-    if (label != pageLabel) {
-        [pageLabel release];
-        pageLabel = [label retain];
-    }
     unsigned int idx = [pageLabels indexOfObject:label];
     if (idx != NSNotFound && [[[pdfView currentPage] label] isEqual:label] == 
NO)
         [self goToPage:[[pdfView document] pageAtIndex:idx]];

Modified: trunk/SKMainWindowController_UI.m
===================================================================
--- trunk/SKMainWindowController_UI.m   2008-05-18 16:29:55 UTC (rev 3893)
+++ trunk/SKMainWindowController_UI.m   2008-05-18 17:35:31 UTC (rev 3894)
@@ -75,6 +75,9 @@
 - (void)updateLeftStatus;
 - (void)updateRightStatus;
 
+- (void)updatePageNumber;
+- (void)updatePageLabel;
+
 - (void)updateNoteFilterPredicate;
 
 - (void)updateFindResultHighlights:(BOOL)scroll;
@@ -1247,8 +1250,8 @@
     [thumbnailTableView setNeedsDisplay:YES];
     [outlineView setNeedsDisplay:YES];
     
-    [self setPageLabel:[page label]];
-    [self setPageNumber:[page pageIndex] + 1];
+    [self updatePageNumber];
+    [self updatePageLabel];
     
     [previousNextPageButton setEnabled:[pdfView canGoToPreviousPage] 
forSegment:0];
     [previousNextPageButton setEnabled:[pdfView canGoToNextPage] forSegment:1];


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

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft 
Defy all challenges. Microsoft(R) Visual Studio 2008. 
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to