cocoa - Why NSWindow without styleMask:NSTitledWindowMask can not be keyWindow? -
problem: have 1 window mainwindow , childwindow added mainwindow. childwindow kind of windowext class. class define catch method call [nswindow becomekeywindow] must called after [childwindow makekeywindow]. if create childwindow , try make keywindow on next way:
windowext *childwindow = [[windowext alloc] initwithcontentrect:addedwindowrect                            stylemask:nsborderlesswindowmask | nstitledwindowmask                              backing:nsbackingstorebuffered                                 defer:no]; [mainwindow addchildwindow:childwindow ordered:nswindowabove]; [childwindow makekeywindow];   method [windowext becomekeywindow] childwindow called - fine, childwindowbecome keywindow.
but if create childwindow as
windowext *childwindow = [[windowext alloc] initwithcontentrect:addedwindowrect stylemask:nsborderlesswindowmask  backing:nsbackingstorebuffered defer:no]; [mainwindow addchildwindow:childwindow ordered:nswindowabove]; [childwindow makekeywindow];   without nstitledwindowmask, [windowext becomekeywindow] childwindow never called - childwindow doesn't become keywindow. 
that’s cocoa design decision: windows without title or resize bar cannot become key window default.
if want titleless window able become key window, need create subclass of nswindow , override -canbecomekeywindow follows:
- (bool)canbecomekeywindow {     return yes; }      
Comments
Post a Comment