diff --git a/Source/Core/DolphinWX/Src/Debugger/DSPDebugWindow.h b/Source/Core/DolphinWX/Src/Debugger/DSPDebugWindow.h index 95bd3b4286..4aa685e916 100644 --- a/Source/Core/DolphinWX/Src/Debugger/DSPDebugWindow.h +++ b/Source/Core/DolphinWX/Src/Debugger/DSPDebugWindow.h @@ -50,7 +50,7 @@ public: DSPDebuggerLLE(wxWindow *parent, wxWindowID id = wxID_ANY); virtual ~DSPDebuggerLLE(); - void Refresh(); + virtual void Refresh(); private: DECLARE_EVENT_TABLE(); diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp index c9408203ea..ac5bf7e4af 100644 --- a/Source/Core/DolphinWX/Src/Frame.cpp +++ b/Source/Core/DolphinWX/Src/Frame.cpp @@ -450,11 +450,26 @@ CFrame::~CFrame() bool CFrame::RendererIsFullscreen() { + bool fullscreen = false; + if (Core::GetState() == Core::CORE_RUN || Core::GetState() == Core::CORE_PAUSE) { - return m_RenderFrame->IsFullScreen(); + fullscreen = m_RenderFrame->IsFullScreen(); } - return false; + +#if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + if (m_RenderFrame != NULL) + { + NSView *view = (NSView *) m_RenderFrame->GetHandle(); + NSWindow *window = [view window]; + + if ([window respondsToSelector:@selector(toggleFullScreen:)]) { + fullscreen = (([window styleMask] & NSFullScreenWindowMask) == NSFullScreenWindowMask); + } + } +#endif + + return fullscreen; } void CFrame::OnQuit(wxCommandEvent& WXUNUSED (event)) @@ -1002,7 +1017,23 @@ void CFrame::DoFullscreen(bool bF) { ToggleDisplayMode(bF); - m_RenderFrame->ShowFullScreen(bF, wxFULLSCREEN_ALL); +#if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + NSView *view = (NSView *) m_RenderFrame->GetHandle(); + NSWindow *window = [view window]; + + if ([window respondsToSelector:@selector(toggleFullScreen:)]) + { + if (bF != RendererIsFullscreen()) + { + [window toggleFullScreen:nil]; + } + } + else +#endif + { + m_RenderFrame->ShowFullScreen(bF, wxFULLSCREEN_ALL); + } + if (SConfig::GetInstance().m_LocalCoreStartupParameter.bRenderToMain) { if (bF) diff --git a/Source/Core/DolphinWX/Src/Frame.h b/Source/Core/DolphinWX/Src/Frame.h index 8c8285f842..e974d9939d 100644 --- a/Source/Core/DolphinWX/Src/Frame.h +++ b/Source/Core/DolphinWX/Src/Frame.h @@ -29,6 +29,10 @@ #include #include +#ifdef __APPLE__ +#include +#endif + #include "CDUtils.h" #include "Debugger/CodeWindow.h" #include "LogWindow.h" diff --git a/Source/Core/DolphinWX/Src/FrameTools.cpp b/Source/Core/DolphinWX/Src/FrameTools.cpp index fa326adecc..5434901032 100644 --- a/Source/Core/DolphinWX/Src/FrameTools.cpp +++ b/Source/Core/DolphinWX/Src/FrameTools.cpp @@ -876,39 +876,46 @@ void CFrame::ToggleDisplayMode(bool bFullscreen) #elif defined(HAVE_XRANDR) && HAVE_XRANDR m_XRRConfig->ToggleDisplayMode(bFullscreen); #elif defined __APPLE__ - if (!bFullscreen) { - CGRestorePermanentDisplayConfiguration(); - CGDisplayRelease(CGMainDisplayID()); - return; - } +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + NSView *view = (NSView *) m_RenderFrame->GetHandle(); + NSWindow *window = [view window]; - CFArrayRef modes = CGDisplayAvailableModes(CGMainDisplayID()); - for (CFIndex i = 0; i < CFArrayGetCount(modes); i++) + if (![window respondsToSelector:@selector(toggleFullScreen:)]) +#endif { - CFDictionaryRef mode; - CFNumberRef ref; - int x, y, w, h, d; + if (!bFullscreen) { + CGRestorePermanentDisplayConfiguration(); + CGDisplayRelease(CGMainDisplayID()); + return; + } - sscanf(SConfig::GetInstance().m_LocalCoreStartupParameter.\ - strFullscreenResolution.c_str(), "%dx%d", &x, &y); + CFArrayRef modes = CGDisplayAvailableModes(CGMainDisplayID()); + for (CFIndex i = 0; i < CFArrayGetCount(modes); i++) + { + CFDictionaryRef mode; + CFNumberRef ref; + int x, y, w, h, d; - mode = (CFDictionaryRef)CFArrayGetValueAtIndex(modes, i); - ref = (CFNumberRef)CFDictionaryGetValue(mode, kCGDisplayWidth); - CFNumberGetValue(ref, kCFNumberIntType, &w); - ref = (CFNumberRef)CFDictionaryGetValue(mode, kCGDisplayHeight); - CFNumberGetValue(ref, kCFNumberIntType, &h); - ref = (CFNumberRef)CFDictionaryGetValue(mode, - kCGDisplayBitsPerPixel); - CFNumberGetValue(ref, kCFNumberIntType, &d); + sscanf(SConfig::GetInstance().m_LocalCoreStartupParameter.\ + strFullscreenResolution.c_str(), "%dx%d", &x, &y); - if (CFDictionaryContainsKey(mode, kCGDisplayModeIsStretched)) - continue; - if (w != x || h != y || d != 32) - continue;; + mode = (CFDictionaryRef)CFArrayGetValueAtIndex(modes, i); + ref = (CFNumberRef)CFDictionaryGetValue(mode, kCGDisplayWidth); + CFNumberGetValue(ref, kCFNumberIntType, &w); + ref = (CFNumberRef)CFDictionaryGetValue(mode, kCGDisplayHeight); + CFNumberGetValue(ref, kCFNumberIntType, &h); + ref = (CFNumberRef)CFDictionaryGetValue(mode, + kCGDisplayBitsPerPixel); + CFNumberGetValue(ref, kCFNumberIntType, &d); - CGDisplaySwitchToMode(CGMainDisplayID(), mode); + if (CFDictionaryContainsKey(mode, kCGDisplayModeIsStretched)) + continue; + if (w != x || h != y || d != 32) + continue;; + + CGDisplaySwitchToMode(CGMainDisplayID(), mode); + } } - #endif } @@ -968,6 +975,14 @@ void CFrame::StartGame(const std::string& filename) m_RenderFrame->Show(); } +#if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + NSView *view = (NSView *) m_RenderFrame->GetHandle(); + NSWindow *window = [view window]; + + if ([window respondsToSelector:@selector(setCollectionBehavior:)]) + [window setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; +#endif + wxBeginBusyCursor(); DoFullscreen(SConfig::GetInstance().m_LocalCoreStartupParameter.bFullscreen); @@ -1140,8 +1155,23 @@ void CFrame::DoStop() if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor) m_RenderParent->SetCursor(wxNullCursor); DoFullscreen(false); + if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bRenderToMain) + { m_RenderFrame->Destroy(); + } +#if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + else + { + // Disable the full screen button when not in a game. + NSView *view = (NSView *) m_RenderFrame->GetHandle(); + NSWindow *window = [view window]; + + if ([window respondsToSelector:@selector(setCollectionBehavior:)]) + [window setCollectionBehavior:NSWindowCollectionBehaviorDefault]; + } +#endif + m_RenderParent = NULL; // Clean framerate indications from the status bar. diff --git a/Source/Core/DolphinWX/Src/TASInputDlg.cpp b/Source/Core/DolphinWX/Src/TASInputDlg.cpp index e566068ff1..03ef6fbdca 100644 --- a/Source/Core/DolphinWX/Src/TASInputDlg.cpp +++ b/Source/Core/DolphinWX/Src/TASInputDlg.cpp @@ -680,7 +680,7 @@ void TASInputDlg::OnCloseWindow(wxCloseEvent& event) } } -bool TASInputDlg::HasFocus() +bool TASInputDlg::HasFocus() const { //allows numbers to be used as hotkeys if(TextBoxHasFocus()) @@ -695,7 +695,7 @@ bool TASInputDlg::HasFocus() return false; } -bool TASInputDlg::TextBoxHasFocus() +bool TASInputDlg::TextBoxHasFocus() const { if(wxWindow::FindFocus() == wx_mainX_t) return true; diff --git a/Source/Core/DolphinWX/Src/TASInputDlg.h b/Source/Core/DolphinWX/Src/TASInputDlg.h index 6e901edee5..bdd1b5befc 100644 --- a/Source/Core/DolphinWX/Src/TASInputDlg.h +++ b/Source/Core/DolphinWX/Src/TASInputDlg.h @@ -45,8 +45,8 @@ class TASInputDlg : public wxDialog void SetTurboFalse(wxMouseEvent& event); void ButtonTurbo(); void GetKeyBoardInput(SPADStatus *PadStatus); - bool TextBoxHasFocus(); - bool HasFocus(); + virtual bool TextBoxHasFocus() const; + virtual bool HasFocus() const; wxBitmap CreateStickBitmap(int x, int y); diff --git a/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp b/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp index 20bd4dfb38..0750dbef78 100644 --- a/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp +++ b/Source/Core/DolphinWX/Src/VideoConfigDiag.cpp @@ -252,6 +252,14 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con wxFlexGridSizer* const szr_display = new wxFlexGridSizer(2, 5, 5); { + +#if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + NSView *view = (NSView *) parent->GetHandle(); + NSWindow *window = [view window]; + + if (![window respondsToSelector:@selector(toggleFullScreen:)]) +#endif + // display resolution { wxArrayString res_list = GetListOfResolutions();