Prevent duplicate the cursor with -push.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@36848 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Germán Arias 2013-07-07 18:33:01 +00:00
parent a5412c1f42
commit 5cfee62130
3 changed files with 32 additions and 1 deletions

View file

@ -35,11 +35,13 @@
#import "AppKit/NSColor.h"
#import "AppKit/NSCursor.h"
#import "AppKit/NSEvent.h"
#import "AppKit/NSGraphics.h"
#import "AppKit/NSImage.h"
#import "AppKit/NSBitmapImageRep.h"
#import "GNUstepGUI/GSDisplayServer.h"
#import "GNUstepGUI/GSTrackingRect.h"
// Class variables
static NSMutableArray *gnustep_gui_cursor_stack;
@ -315,6 +317,8 @@ NSCursor *getStandardCursor(NSString *name, int style)
*/
- (id) init
{
_windowNum = -1;
_cursorRect = NSZeroRect;
return [self initWithImage: nil hotSpot: NSZeroPoint];
}
@ -440,11 +444,26 @@ backgroundColorHint:(NSColor *)bg
}
else if (_cursor_flags.is_set_on_mouse_exited == NO)
{
NSInteger num = [theEvent windowNumber];
GSTrackingRect *r =(GSTrackingRect*)[theEvent userData];
/*
* Undocumented behavior - if a cursor is not set on exit or entry,
* we assume a push-pop situation instead.
*/
[self push];
/* First check if the cursor rect is currently updated. This prevent
* add the same cursor for the same cursor rect. This happen sometimes
* when the window become the main/key window, and the cursor is over
* a cursor rect.
*/
if ( !(NSEqualRects(_cursorRect, r->rectangle) &&
(_windowNum == num) &&
[gnustep_gui_current_cursor isEqual: self]) )
{
[self push];
_windowNum = num;
_cursorRect = r->rectangle;
}
}
}
@ -466,6 +485,8 @@ backgroundColorHint:(NSColor *)bg
* we assume a push-pop situation instead.
*/
[self pop];
_windowNum = -1;
_cursorRect = NSZeroRect;
}
else
{