Send an event directly to the window on focus in, instead of handling

this here ourselves.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@29240 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Fred Kiefer 2010-01-08 20:46:35 +00:00
parent 1c46dd6417
commit 938a6dd65a
2 changed files with 39 additions and 36 deletions

View file

@ -1,3 +1,7 @@
2010-01-08 Fred Kiefer <FredKiefer@gmx.de>
* Source/win32/w32_text_focus.m: Small clean up in focus handling.
2009-12-19 Eric Wasylishen <ewasylishen@gmail.com>
* Source/cairo/CairoGState.m:

View file

@ -34,34 +34,13 @@
@implementation WIN32Server (w32_text_focus)
//- (LRESULT) decodeWM_SETTEXTParams: (WPARAM)wParam : (LPARAM)lParam : (HWND)hwnd
//{
//printf("WM_SETTEXT\n");
//printf("Window text is: %s\n", (LPSTR)lParam);
//BOOL result=SetWindowText(hwnd, (LPSTR)lParam);
// if (result==0)
//printf("error on setWindow text %ld\n", GetLastError());
//return 0;
//}
- (LRESULT) decodeWM_SETFOCUSParams: (WPARAM)wParam : (LPARAM)lParam : (HWND)hwnd
{
/* This message comes when the window already got focus, so we send a focus
in event to the front end, but also mark the window as having current focus
so that the front end doesn't try to focus the window again. */
int key_num, win_num;
NSPoint eventLocation;
key_num = [[NSApp keyWindow] windowNumber];
win_num = (int)hwnd;
currentFocus = hwnd;
eventLocation = NSMakePoint(0, 0);
if (currentFocus == desiredFocus)
{
/* This was from a request from the front end. Mark as done. */
@ -72,14 +51,20 @@
/* We need to do this directly and not send an event to the frontend -
that's too slow and allows the window state to get out of sync,
causing bad recursion problems */
NSWindow *window = GSWindowWithNumber((int)hwnd);
if ([window canBecomeKeyWindow] == YES)
{
NSDebugLLog(@"Focus", @"Making %d key", win_num);
[window makeKeyWindow];
[window makeMainWindow];
[NSApp activateIgnoringOtherApps: YES];
}
NSEvent *ev;
ev = [NSEvent otherEventWithType: NSAppKitDefined
location: NSMakePoint(0, 0)
modifierFlags: 0
timestamp: 0
windowNumber: (int)hwnd
context: GSCurrentContext()
subtype: GSAppKitWindowFocusIn
data1: 0
data2: 0];
NSDebugLLog(@"Focus", @"Making %d key", (int)hwnd);
[EVENT_WINDOW(hwnd) sendEvent: ev];
}
return 0;
@ -87,12 +72,13 @@
- (void) decodeWM_KILLFOCUSParams: (WPARAM)wParam : (LPARAM)lParam : (HWND)hwnd
{
// reused from original author (added debug output)
NSPoint eventLocation = NSMakePoint(0, 0);
NSEvent * ev=nil;
NSEvent *ev;
ev = [NSEvent otherEventWithType:NSAppKitDefined
location: eventLocation
// Remember the now focused window
currentFocus = wParam;
ev = [NSEvent otherEventWithType: NSAppKitDefined
location: NSMakePoint(0, 0)
modifierFlags: 0
timestamp: 0
windowNumber: (int)hwnd
@ -101,8 +87,8 @@
data1: 0
data2: 0];
[EVENT_WINDOW(hwnd) sendEvent:ev];
flags._eventHandled=YES;
[EVENT_WINDOW(hwnd) sendEvent: ev];
flags._eventHandled = YES;
}
- (void) decodeWM_GETTEXTParams: (WPARAM)wParam : (LPARAM)lParam : (HWND)hwnd
@ -110,4 +96,17 @@
// stub for future dev
}
/*
- (LRESULT) decodeWM_SETTEXTParams: (WPARAM)wParam : (LPARAM)lParam : (HWND)hwnd
{
printf("WM_SETTEXT\n");
printf("Window text is: %s\n", (LPSTR)lParam);
if (SetWindowText(hwnd, (LPSTR)lParam) == 0)
printf("error on setWindow text %ld\n", GetLastError());
return 0;
}
*/
@end