mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-04-23 03:11:18 +00:00
Modal session and cursor fixes
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@12112 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
3d711a11a4
commit
9f924be488
4 changed files with 70 additions and 3 deletions
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
|||
2002-01-15 Adam Fedor <fedor@gnu.org>
|
||||
|
||||
* Source/NSApplication.m (-finishLaunching): Make main menu key
|
||||
when there is no other key or main window.
|
||||
(-runModalSession:): Update main menu.
|
||||
(-targetForAction:): Search fixes. Return nil if in modal session
|
||||
and key window does not respond to action.
|
||||
|
||||
* Source/NSWindow.m (-sendEvent:): Only check cursor rects
|
||||
if isCursorRectsEnabled.
|
||||
|
||||
2002-01-10 Adam Fedor <fedor@gnu.org>
|
||||
|
||||
* Source/NSPopUpButton.m (-keyDown:): Handle obscure case of user
|
||||
|
|
|
@ -633,6 +633,17 @@ static NSCell* tileCell = nil;
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If there is no main or key window, we need to make the main menu key
|
||||
* so it can respond to menu shortcuts and deactivate the app properly
|
||||
* when it looses focus.
|
||||
*/
|
||||
if (_key_window == nil && _main_window == nil)
|
||||
{
|
||||
_key_window = [[self mainMenu] window];
|
||||
[_key_window becomeKeyWindow];
|
||||
}
|
||||
|
||||
/*
|
||||
* If there was more than one window set as key or main, we must make sure
|
||||
* that the one we have recorded is the real one by making it become key/main
|
||||
|
@ -1039,6 +1050,18 @@ static NSCell* tileCell = nil;
|
|||
return code;
|
||||
}
|
||||
|
||||
/**
|
||||
<p>
|
||||
Processes one event for a modal session described by the theSession
|
||||
variable. Before processing the event, it makes the session window key
|
||||
and orders the window front, so there is no need to do this
|
||||
separately. When finished, it returns the state of the session (i.e.
|
||||
whether it is still running or has been stopped, etc)
|
||||
<p>
|
||||
</p>
|
||||
See Also: -runModalForWindow:
|
||||
</p>
|
||||
*/
|
||||
- (int) runModalSession: (NSModalSession)theSession
|
||||
{
|
||||
NSAutoreleasePool *pool;
|
||||
|
@ -1120,8 +1143,17 @@ static NSCell* tileCell = nil;
|
|||
|
||||
if (found == YES)
|
||||
{
|
||||
NSEventType type = [_current_event type];
|
||||
|
||||
[self sendEvent: _current_event];
|
||||
|
||||
// update (en/disable) the services menu's items
|
||||
if (type != NSPeriodic && type != NSMouseMoved)
|
||||
{
|
||||
[_listener updateServicesMenu];
|
||||
[_main_menu update];
|
||||
}
|
||||
|
||||
/*
|
||||
* Check to see if the window has gone away - if so, end session.
|
||||
*/
|
||||
|
@ -1143,6 +1175,14 @@ static NSCell* tileCell = nil;
|
|||
return theSession->runState;
|
||||
}
|
||||
|
||||
/**
|
||||
<p>
|
||||
Returns the window that is part of the current modal session, if any.
|
||||
<p>
|
||||
</p>
|
||||
See -runModalForWindow:
|
||||
</p>
|
||||
*/
|
||||
- (NSWindow *) modalWindow
|
||||
{
|
||||
if (_session != 0)
|
||||
|
@ -1384,6 +1424,15 @@ IF_NO_GC(NSAssert([event retainCount] > 0, NSInternalInconsistencyException));
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
<p>
|
||||
Returns the target object that will respond to aSelector, if any. The
|
||||
method first checks if any of the key window's first responders, the
|
||||
key window or its delegate responds. Next it checks the main window in
|
||||
the same way. Finally it checks the receiver (NSApplication) and it's
|
||||
delegate.
|
||||
</p>
|
||||
*/
|
||||
- (id) targetForAction: (SEL)aSelector
|
||||
{
|
||||
NSWindow *keyWindow;
|
||||
|
@ -1394,7 +1443,7 @@ IF_NO_GC(NSAssert([event retainCount] > 0, NSInternalInconsistencyException));
|
|||
if (keyWindow != nil)
|
||||
{
|
||||
resp = [keyWindow firstResponder];
|
||||
while (resp != nil)
|
||||
while (resp != nil && resp != keyWindow)
|
||||
{
|
||||
if ([resp respondsToSelector: aSelector])
|
||||
{
|
||||
|
@ -1413,11 +1462,14 @@ IF_NO_GC(NSAssert([event retainCount] > 0, NSInternalInconsistencyException));
|
|||
}
|
||||
}
|
||||
|
||||
if (_session != 0)
|
||||
return nil;
|
||||
|
||||
mainWindow = [self mainWindow];
|
||||
if (keyWindow != mainWindow && mainWindow != nil)
|
||||
{
|
||||
resp = [mainWindow firstResponder];
|
||||
while (resp != nil)
|
||||
while (resp != nil && resp != mainWindow)
|
||||
{
|
||||
if ([resp respondsToSelector: aSelector])
|
||||
{
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
*/
|
||||
|
||||
#include <Foundation/NSArray.h>
|
||||
#include <Foundation/NSDebug.h>
|
||||
#include <AppKit/NSColor.h>
|
||||
#include <AppKit/NSCursor.h>
|
||||
#include <AppKit/NSGraphics.h>
|
||||
|
@ -123,6 +124,7 @@ static NSMutableDictionary *cursorDict = nil;
|
|||
[gnustep_gui_cursor_stack removeLastObject];
|
||||
gnustep_gui_current_cursor = [gnustep_gui_cursor_stack lastObject];
|
||||
|
||||
NSDebugLLog(@"NSCursor", @"Cursor pop");
|
||||
[gnustep_gui_current_cursor set];
|
||||
}
|
||||
}
|
||||
|
@ -334,6 +336,7 @@ backgroundColorHint:(NSColor *)bg
|
|||
{
|
||||
[gnustep_gui_cursor_stack addObject: self];
|
||||
[self set];
|
||||
NSDebugLLog(@"NSCursor", @"Cursor push %p", _cid);
|
||||
}
|
||||
|
||||
- (void) set
|
||||
|
|
|
@ -2735,7 +2735,8 @@ resetCursorRectsForView(NSView *theView)
|
|||
* a cursor rectangle then we need to determine if we should send a
|
||||
* cursor update event.
|
||||
*/
|
||||
(*ccImp)(self, ccSel, _contentView, theEvent);
|
||||
if (_f.cursor_rects_enabled)
|
||||
(*ccImp)(self, ccSel, _contentView, theEvent);
|
||||
}
|
||||
|
||||
_lastPoint = [theEvent locationInWindow];
|
||||
|
|
Loading…
Reference in a new issue