Hi,

I want to propose changes to gui-trunk (patch attached). In general
changes are touches NSMattrix and NSCell and is about drawing first
reponder indicator (dotted frame). What is done:

- NSCell is responsible for showing first responder state;
- Removed code from NSMatrix which sets attibute of cell to display
first responder state then draws cell and then set attibute to off;
- Removed code from NSBrowserCell which draws first responder indicator.

Before this patch (current SVN) NSCell draws first responder indicator
when it's selected (highlighted) and when it's not slected. That's why
NSMatrix and the like should switch on and off NSCell's attribute.

Please test the attached code. If there's no objections I'll commit
this code to the trunk.

--
Sergii Stoian, ProjectCenter maintainer
Index: Source/NSBrowser.m
===================================================================
--- Source/NSBrowser.m	(revision 24896)
+++ Source/NSBrowser.m	(working copy)
@@ -1842,6 +1842,7 @@
 	  
 	  cs = [sc contentSize];
 	  ms = [matrix cellSize];
+	  if (ms.height < 15) ms.height = 15;
 	  ms.width = cs.width;
 	  [matrix setCellSize: ms];
 	  [sc setDocumentView: matrix];
Index: Source/NSMatrix.m
===================================================================
--- Source/NSMatrix.m	(revision 24896)
+++ Source/NSMatrix.m	(working copy)
@@ -2086,21 +2086,7 @@
 	  NSRectFill(cellFrame);
 	}
       
-      if (_dottedRow == row
-          && _dottedColumn == column
-	  && [aCell acceptsFirstResponder]
-          && [_window isKeyWindow]
-	  && [_window firstResponder] == self)
-	{
-	  [aCell setShowsFirstResponder: YES];
-          [aCell drawWithFrame: cellFrame inView: self];
-          [aCell setShowsFirstResponder: NO];
-	}
-      else
-	{
-	  [aCell setShowsFirstResponder: NO];
-          [aCell drawWithFrame: cellFrame inView: self];
-	}
+      [aCell drawWithFrame: cellFrame inView: self];
     }
 }
 
@@ -4112,20 +4098,7 @@
 	  NSRectFill(cellFrame);
 	}
 
-      if (_dottedRow == row && _dottedColumn == column
-	  && [aCell acceptsFirstResponder])
-	{
-	  [aCell
-	    setShowsFirstResponder: ([_window isKeyWindow]
-				     && [_window firstResponder] == self)];
-	}
-      else
-        {
-	  [aCell setShowsFirstResponder: NO];
-	}
-      
       [aCell drawWithFrame: cellFrame inView: self];
-      [aCell setShowsFirstResponder: NO];
     }
 }
 
Index: Source/NSCell.m
===================================================================
--- Source/NSCell.m	(revision 24896)
+++ Source/NSCell.m	(working copy)
@@ -2017,7 +2017,8 @@
 
   // Draw first responder
   if (_cell.shows_first_responder
-    && [[controlView window] firstResponder] == controlView)
+    && [[controlView window] firstResponder] == controlView
+    && (_cell.is_highlighted || _cell.state))
     {
       // FIXME: Should depend on _cell.focus_ring_type
       [[GSTheme theme] drawFocusFrame: [self drawingRectForBounds: cellFrame] 
Index: Source/NSBrowserCell.m
===================================================================
--- Source/NSBrowserCell.m	(revision 24896)
+++ Source/NSBrowserCell.m	(working copy)
@@ -323,9 +323,6 @@
   // Draw the body of the cell
   [self _drawAttributedText: [self attributedStringValue]
 	inFrame: title_rect];
-
-  if (_cell.shows_first_responder == YES)
-    NSDottedFrameRect(cellFrame);
 }
 
 - (BOOL) isOpaque
_______________________________________________
Gnustep-dev mailing list
Gnustep-dev@gnu.org
http://lists.gnu.org/mailman/listinfo/gnustep-dev

Reply via email to