]> granicus.if.org Git - transmission/commitdiff
#6078: Show main window and scroll to torrent on notification click
authorMike Gelfand <mikedld@mikedld.com>
Thu, 3 Mar 2016 17:57:08 +0000 (17:57 +0000)
committerMike Gelfand <mikedld@mikedld.com>
Thu, 3 Mar 2016 17:57:08 +0000 (17:57 +0000)
macosx/Controller.m
macosx/TorrentTableView.h
macosx/TorrentTableView.m

index a7d53286e69b63282a5a2c654799e3305d88658d..597185396c966ba7d72fdf951ba7149ff0edc0bf 100644 (file)
@@ -1991,8 +1991,9 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
             }
             
             NSAssert1(row != -1, @"expected a row to be found for torrent %@", torrent);
-            [fTableView selectRowIndexes: [NSIndexSet indexSetWithIndex: row] byExtendingSelection:NO];
-            #warning focus the window
+
+            [self showMainWindow: nil];
+            [fTableView selectAndScrollToRow: row];
         }
     }
 }
index 7f4728d300b32ede49d17eb5dc57bae9fe32d6f6..112f1480d3a84d32eb1eeecaff71e2a33d343d69 100644 (file)
@@ -91,4 +91,6 @@
 - (void) togglePiecesBar;
 - (CGFloat) piecesBarPercent;
 
+- (void) selectAndScrollToRow: (NSInteger) row;
+
 @end
index e47b342836a90d0c0c9c2b18f15d68a57308f6f1..8ee36d44d6dc22aa1f762185303ef54aba5adf49 100644 (file)
     return fPiecesBarPercent;
 }
 
+- (void) selectAndScrollToRow: (NSInteger) row
+{
+    NSParameterAssert(row >= 0);
+    NSParameterAssert(row < [self numberOfRows]);
+    
+    [self selectRowIndexes: [NSIndexSet indexSetWithIndex: row] byExtendingSelection: NO];
+    
+    const NSRect rowRect = [self rectOfRow: row];
+    const NSRect viewRect = [[self superview] frame];
+
+    NSPoint scrollOrigin = rowRect.origin;
+    scrollOrigin.y += (rowRect.size.height - viewRect.size.height) / 2;
+    if (scrollOrigin.y < 0)
+        scrollOrigin.y = 0;
+
+    [[[self superview] animator] setBoundsOrigin: scrollOrigin];
+}
+
 @end
 
 @implementation TorrentTableView (Private)