Re: Sheets and hidden apps
Re: Sheets and hidden apps
- Subject: Re: Sheets and hidden apps
- From: Daniel Todd Currie <email@hidden>
- Date: Wed, 3 Nov 2004 16:26:28 -0800
Maybe so, but unhiding apps automatically is rather rude, if you ask me.
On 2004 Nov 03, at 15:39, John Stiles wrote:
That seems a little more elaborate than the workaround I already have
:) I still need to file that radar!
On Nov 3, 2004, at 3:37 PM, Daniel Todd Currie wrote:
My approach to this problem would be to listen to a few of NSWindow's
delegate methods, namely
– windowDidBecomeKey:
– windowDidBecomeMain:
– windowWillBeginSheet:
When a sheet is about to begin, you can decide what to do based on
the current window visibility. If the window is not visible, you
could set a BOOL instance variable,
sheetDidNotBeginBecauseWindowWasHidden. Then when the window becomes
key or main (not sure which one you'd want), you could check the BOOL
and show the sheet if necessary.
-- DTC
On 2004 Nov 03, at 14:50, John Stiles wrote:
I was able to come up with a workaround, but it'd be nice if someone
could confirm that this is an AppKit problem.
I'll make a test app and get this on Radar shortly. It'd be really
nice if it were fixed for Tiger.
void InstallerHideProgress()
{
[s_installer
performSelectorOnMainThread:@selector(progressSheetHide:)
withObject:NULL waitUntilDone:YES];
}
- (void) progressSheetHide:(id)object
{
// AppKit has a bug where if you try to roll up a sheet on a window
and the app is hidden, it will unhide the app
// but the sheet won't roll up. If you manually set the app to
frontmost (by key-and-order-fronting the parent window),
// that isn't quite good enough either. You have to set the app to
frontmost, give the event system time to actually
// bring the window frontmost--that actually happens a little
later, after you relinquish control to the event loop--
// and after that's done, THEN you can roll up the sheet and it
will actually work. Gah!
[_window makeKeyAndOrderFront:self];
// Actually roll up the sheet 1ms later.
[s_installer performSelector:@selector(progressSheetHidePhase2:)
withObject:NULL afterDelay:0.001];
}
- (void) progressSheetHidePhase2:(id)object
{
// See above ranting (err comments).
[NSApp endSheet:_progressSheet returnCode:0];
[_progressSheet orderOut:self];
}
On Nov 3, 2004, at 11:33 AM, John Stiles wrote:
My installer app has a sheet that shows progress. It drops down, my
app does its work while the progress bar fills up, and then when my
app is done it rolls up the sheet.
I've had some end users report that they'll start an installation,
hide my application (via cmd+H), come back to it later and the
install has completed 100%, but the sheet is still there. I know
that my app has asked to hide the sheet because the parent window
behind the sheet has been updated :) It works fine if you don't
hide the app.
Here's the code in question. Why is this happening? It's occurring
in 10.3.5.
PS yes, the variable naming conventions suck a bit; if I redid it
today they'd be named differently. Whatever. :)
void InstallerShowProgress()
{
[s_installer
performSelectorOnMainThread:@selector(progressSheetShow:)
withObject:NULL waitUntilDone:YES];
}
void InstallerHideProgress()
{
[s_installer
performSelectorOnMainThread:@selector(progressSheetHide:)
withObject:NULL waitUntilDone:YES];
}
- (void) progressSheetShow:(id)object
{
[_window makeKeyAndOrderFront:self]; // sheets
act goofy if the parent is minimized
[_progressSheetBar setDoubleValue:0.0];
[_progressSheetStopButton setEnabled:YES];
[NSApp beginSheet:_progressSheet
modalForWindow:_window
modalDelegate:self
didEndSelector:NULL
contextInfo:NULL];
}
- (void) progressSheetHide:(id)object
{
[NSApp endSheet:_progressSheet returnCode:0];
[_progressSheet orderOut:self];
}
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
email@hidden
This email sent to email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden