Improved process setup code design
This commit is contained in:
parent
ad79328a70
commit
690d4a3eff
@ -229,6 +229,13 @@ public:
|
|||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
void ApplyContext(NSOpenGLContextRef context) const;
|
void ApplyContext(NSOpenGLContextRef context) const;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
/// \brief Change the type of the current process to become a full GUI app.
|
||||||
|
/// Also ensure NSApp is constructed.
|
||||||
|
///
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
static void SetUpProcess(void);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
/// \brief Process incoming events from the operating system
|
/// \brief Process incoming events from the operating system
|
||||||
@ -315,18 +322,6 @@ private:
|
|||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
virtual void SetIcon(unsigned int width, unsigned int height, const Uint8* pixels);
|
virtual void SetIcon(unsigned int width, unsigned int height, const Uint8* pixels);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
/// \brief Construct the pool after ensuring NSApp is valid.
|
|
||||||
///
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
void SetUpPoolAndApplication(void);
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
/// \brief Change the type of the current process to become a full GUI app.
|
|
||||||
///
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
static void SetUpProcessAsApplication(void);
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
// Member data
|
// Member data
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
|
@ -43,8 +43,9 @@ namespace priv
|
|||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
WindowImplCocoa::WindowImplCocoa(WindowHandle handle)
|
WindowImplCocoa::WindowImplCocoa(WindowHandle handle)
|
||||||
{
|
{
|
||||||
SetUpPoolAndApplication();
|
// Create the pool.
|
||||||
|
myPool = [[NSAutoreleasePool alloc] init];
|
||||||
|
|
||||||
// Treat the handle as it real type
|
// Treat the handle as it real type
|
||||||
id nsHandle = (id)handle;
|
id nsHandle = (id)handle;
|
||||||
@ -90,10 +91,11 @@ WindowImplCocoa::WindowImplCocoa(VideoMode mode,
|
|||||||
const std::string& title,
|
const std::string& title,
|
||||||
unsigned long style)
|
unsigned long style)
|
||||||
{
|
{
|
||||||
SetUpPoolAndApplication();
|
|
||||||
|
|
||||||
// Transform the app process.
|
// Transform the app process.
|
||||||
SetUpProcessAsApplication();
|
SetUpProcess();
|
||||||
|
|
||||||
|
// Create the pool.
|
||||||
|
myPool = [[NSAutoreleasePool alloc] init];
|
||||||
|
|
||||||
// Don't forget to update our parent (that is, WindowImpl) size :
|
// Don't forget to update our parent (that is, WindowImpl) size :
|
||||||
myWidth = mode.Width;
|
myWidth = mode.Width;
|
||||||
@ -122,6 +124,30 @@ void WindowImplCocoa::ApplyContext(NSOpenGLContextRef context) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
void WindowImplCocoa::SetUpProcess(void)
|
||||||
|
{
|
||||||
|
static bool isTheProcessSetAsApplication = false;
|
||||||
|
|
||||||
|
if (!isTheProcessSetAsApplication) {
|
||||||
|
// Do it only once !
|
||||||
|
isTheProcessSetAsApplication = true;
|
||||||
|
|
||||||
|
// Set the process as a normal application so it can get focus.
|
||||||
|
ProcessSerialNumber psn;
|
||||||
|
if (!GetCurrentProcess(&psn)) {
|
||||||
|
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
|
||||||
|
SetFrontProcess(&psn);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tell the application to stop bouncing in the Dock.
|
||||||
|
[[NSApplication sharedApplication] finishLaunching];
|
||||||
|
// NOTE : This last call won't harm anything even if SFML window was
|
||||||
|
// created with an external handle.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#pragma mark
|
#pragma mark
|
||||||
#pragma mark WindowImplCocoa's window-event methods
|
#pragma mark WindowImplCocoa's window-event methods
|
||||||
|
|
||||||
@ -369,43 +395,6 @@ void WindowImplCocoa::SetIcon(unsigned int width, unsigned int height, const Uin
|
|||||||
{
|
{
|
||||||
[myDelegate setIconTo:width by:height with:pixels];
|
[myDelegate setIconTo:width by:height with:pixels];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark
|
|
||||||
#pragma mark WindowImplCocoa's init methods
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
void WindowImplCocoa::SetUpPoolAndApplication(void)
|
|
||||||
{
|
|
||||||
// Ensure NSApp exists.
|
|
||||||
[NSApplication sharedApplication];
|
|
||||||
|
|
||||||
// Create the pool.
|
|
||||||
myPool = [[NSAutoreleasePool alloc] init];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
void WindowImplCocoa::SetUpProcessAsApplication(void)
|
|
||||||
{
|
|
||||||
static bool isTheProcessSetAsApplication = false;
|
|
||||||
|
|
||||||
if (!isTheProcessSetAsApplication) {
|
|
||||||
// Do it only once !
|
|
||||||
isTheProcessSetAsApplication = true;
|
|
||||||
|
|
||||||
// Set the process as a normal application so it can get focus.
|
|
||||||
ProcessSerialNumber psn;
|
|
||||||
if (!GetCurrentProcess(&psn)) {
|
|
||||||
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
|
|
||||||
SetFrontProcess(&psn);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tell the application to stop bouncing in the Dock.
|
|
||||||
[[NSApplication sharedApplication] finishLaunching];
|
|
||||||
// NOTE : This last call won't harm anything even if SFML window was
|
|
||||||
// created with an external handle.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace priv
|
} // namespace priv
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user