Skip to content

Commit

Permalink
Merge pull request #4227 from ligfx/clean_objc
Browse files Browse the repository at this point in the history
Don't force compile everything as Objective-C++ on macOS
  • Loading branch information
shuffle2 committed Oct 3, 2016
2 parents ccfc081 + cd19c9f commit 8fcc3b0
Show file tree
Hide file tree
Showing 13 changed files with 89 additions and 133 deletions.
9 changes: 0 additions & 9 deletions CMakeLists.txt
Expand Up @@ -984,15 +984,6 @@ add_definitions(-std=c++1y)
# but some dependencies require them (LLVM, libav).
add_definitions(-D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS)

# Do this at the last minute because try_compile ignores linker flags. Yay...
if(APPLE)
# Some of our code contains Objective C constructs.
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -x objective-c -stdlib=libc++")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -x objective-c++ -stdlib=libc++")
# Avoid mistaking an object file for a source file on the link command line.
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -x none")
endif()

add_subdirectory(Source)


Expand Down
2 changes: 1 addition & 1 deletion Source/Core/Common/CMakeLists.txt
Expand Up @@ -82,7 +82,7 @@ endif()
if(WIN32)
set(SRCS ${SRCS} GL/GLInterface/WGL.cpp)
elseif(APPLE)
set(SRCS ${SRCS} GL/GLInterface/AGL.cpp)
set(SRCS ${SRCS} GL/GLInterface/AGL.mm)
elseif(USE_X11)
if (NOT USE_EGL)
set(SRCS ${SRCS} GL/GLInterface/GLX.cpp)
Expand Down
5 changes: 4 additions & 1 deletion Source/Core/Common/GL/GLInterface/AGL.h
Expand Up @@ -4,8 +4,11 @@

#pragma once

#ifdef __APPLE__
#if defined(__APPLE__) && defined(__OBJC__)
#import <AppKit/AppKit.h>
#else
struct NSOpenGLContext;
struct NSView;
#endif

#include "Common/GL/GLInterfaceBase.h"
Expand Down
File renamed without changes.
66 changes: 0 additions & 66 deletions Source/Core/Core/HW/WiimoteReal/IOdarwin.h
Expand Up @@ -5,76 +5,10 @@
#pragma once

#ifdef __APPLE__
// Work around an Apple bug: for some reason, IOBluetooth.h errors on
// inclusion in Mavericks, but only in Objective-C++ C++11 mode. I filed
// this as <rdar://15312520>; in the meantime...
#import <Foundation/Foundation.h>
#undef NS_ENUM_AVAILABLE
#define NS_ENUM_AVAILABLE(...)
// end hack
#import <IOBluetooth/IOBluetooth.h>
#include <IOKit/hid/IOHIDManager.h>
#include <IOKit/pwr_mgt/IOPMLib.h>

#include "Core/HW/WiimoteReal/WiimoteReal.h"

namespace WiimoteReal
{
class WiimoteDarwin final : public Wiimote
{
public:
WiimoteDarwin(IOBluetoothDevice* device);
~WiimoteDarwin() override;

// These are not protected/private because ConnectBT needs them.
void DisconnectInternal() override;
IOBluetoothDevice* m_btd;
unsigned char* m_input;
int m_inputlen;

protected:
bool ConnectInternal() override;
bool IsConnected() const override;
void IOWakeup() override;
int IORead(u8* buf) override;
int IOWrite(u8 const* buf, size_t len) override;
void EnablePowerAssertionInternal() override;
void DisablePowerAssertionInternal() override;

private:
IOBluetoothL2CAPChannel* m_ichan;
IOBluetoothL2CAPChannel* m_cchan;
bool m_connected;
CFRunLoopRef m_wiimote_thread_run_loop;
IOPMAssertionID m_pm_assertion;
};

class WiimoteDarwinHid final : public Wiimote
{
public:
WiimoteDarwinHid(IOHIDDeviceRef device);
~WiimoteDarwinHid() override;

protected:
bool ConnectInternal() override;
void DisconnectInternal() override;
bool IsConnected() const override;
void IOWakeup() override;
int IORead(u8* buf) override;
int IOWrite(u8 const* buf, size_t len) override;

private:
static void ReportCallback(void* context, IOReturn result, void* sender, IOHIDReportType type,
u32 reportID, u8* report, CFIndex reportLength);
static void RemoveCallback(void* context, IOReturn result, void* sender);
void QueueBufferReport(int length);
IOHIDDeviceRef m_device;
bool m_connected;
std::atomic<bool> m_interrupted;
Report m_report_buffer;
Common::FifoQueue<Report> m_buffered_reports;
};

class WiimoteScannerDarwin final : public WiimoteScannerBackend
{
public:
Expand Down
1 change: 1 addition & 0 deletions Source/Core/Core/HW/WiimoteReal/IOdarwin.mm
Expand Up @@ -4,6 +4,7 @@
#include "Common/Common.h"
#include "Common/Logging/Log.h"
#include "Core/HW/WiimoteEmu/WiimoteHid.h"
#include "Core/HW/WiimoteReal/IOdarwin_private.h"

@interface SearchBT : NSObject
{
Expand Down
77 changes: 77 additions & 0 deletions Source/Core/Core/HW/WiimoteReal/IOdarwin_private.h
@@ -0,0 +1,77 @@
// Copyright 2016 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.

#pragma once

#include "Core/HW/WiimoteReal/WiimoteReal.h"

// Work around an Apple bug: for some reason, IOBluetooth.h errors on
// inclusion in Mavericks, but only in Objective-C++ C++11 mode. I filed
// this as <rdar://15312520>; in the meantime...
#import <Foundation/Foundation.h>
#undef NS_ENUM_AVAILABLE
#define NS_ENUM_AVAILABLE(...)
// end hack
#include <IOBluetooth/IOBluetooth.h>
#include <IOKit/hid/IOHIDManager.h>
#include <IOKit/pwr_mgt/IOPMLib.h>

namespace WiimoteReal
{
class WiimoteDarwin final : public Wiimote
{
public:
WiimoteDarwin(IOBluetoothDevice* device);
~WiimoteDarwin() override;

// These are not protected/private because ConnectBT needs them.
void DisconnectInternal() override;
IOBluetoothDevice* m_btd;
unsigned char* m_input;
int m_inputlen;

protected:
bool ConnectInternal() override;
bool IsConnected() const override;
void IOWakeup() override;
int IORead(u8* buf) override;
int IOWrite(u8 const* buf, size_t len) override;
void EnablePowerAssertionInternal() override;
void DisablePowerAssertionInternal() override;

private:
IOBluetoothL2CAPChannel* m_ichan;
IOBluetoothL2CAPChannel* m_cchan;
bool m_connected;
CFRunLoopRef m_wiimote_thread_run_loop;
IOPMAssertionID m_pm_assertion;
};

class WiimoteDarwinHid final : public Wiimote
{
public:
WiimoteDarwinHid(IOHIDDeviceRef device);
~WiimoteDarwinHid() override;

protected:
bool ConnectInternal() override;
void DisconnectInternal() override;
bool IsConnected() const override;
void IOWakeup() override;
int IORead(u8* buf) override;
int IOWrite(u8 const* buf, size_t len) override;

private:
static void ReportCallback(void* context, IOReturn result, void* sender, IOHIDReportType type,
u32 reportID, u8* report, CFIndex reportLength);
static void RemoveCallback(void* context, IOReturn result, void* sender);
void QueueBufferReport(int length);
IOHIDDeviceRef m_device;
bool m_connected;
std::atomic<bool> m_interrupted;
Report m_report_buffer;
Common::FifoQueue<Report> m_buffered_reports;
};

} // namespace WiimoteReal
4 changes: 0 additions & 4 deletions Source/Core/DolphinWX/AboutDolphin.cpp
Expand Up @@ -12,10 +12,6 @@
#include <wx/stattext.h>
#include <wx/textctrl.h>

#ifdef __APPLE__
#import <AppKit/AppKit.h>
#endif

#include "Common/Common.h"
#include "DolphinWX/AboutDolphin.h"
#include "DolphinWX/WxUtils.h"
Expand Down
24 changes: 0 additions & 24 deletions Source/Core/DolphinWX/Frame.cpp
Expand Up @@ -2,10 +2,6 @@
// Licensed under GPLv2+
// Refer to the license.txt file included.

#ifdef __APPLE__
#include <Cocoa/Cocoa.h>
#endif

#include <atomic>
#include <cstddef>
#include <fstream>
Expand Down Expand Up @@ -579,16 +575,6 @@ bool CFrame::RendererIsFullscreen()
fullscreen = m_RenderFrame->IsFullScreen();
}

#if defined(__APPLE__)
if (m_RenderFrame != nullptr)
{
NSView* view = (NSView*)m_RenderFrame->GetHandle();
NSWindow* window = [view window];

fullscreen = (([window styleMask] & NSFullScreenWindowMask) == NSFullScreenWindowMask);
}
#endif

return fullscreen;
}

Expand Down Expand Up @@ -1279,15 +1265,6 @@ void CFrame::DoFullscreen(bool enable_fullscreen)

ToggleDisplayMode(enable_fullscreen);

#if defined(__APPLE__)
NSView* view = (NSView*)m_RenderFrame->GetHandle();
NSWindow* window = [view window];

if (enable_fullscreen != RendererIsFullscreen())
{
[window toggleFullScreen:nil];
}
#else
if (enable_fullscreen)
{
m_RenderFrame->ShowFullScreen(true, wxFULLSCREEN_ALL);
Expand All @@ -1298,7 +1275,6 @@ void CFrame::DoFullscreen(bool enable_fullscreen)
// Therefore we don't exit fullscreen from here if we are in exclusive mode.
m_RenderFrame->ShowFullScreen(false, wxFULLSCREEN_ALL);
}
#endif

if (SConfig::GetInstance().bRenderToMain)
{
Expand Down
14 changes: 2 additions & 12 deletions Source/Core/DolphinWX/FrameTools.cpp
Expand Up @@ -21,10 +21,6 @@
#include <wx/toolbar.h>
#include <wx/toplevel.h>

#ifdef __APPLE__
#include <AppKit/AppKit.h>
#endif

#include "Common/CDUtils.h"
#include "Common/CommonTypes.h"
#include "Common/FileSearch.h"
Expand Down Expand Up @@ -1022,10 +1018,7 @@ void CFrame::StartGame(const std::string& filename)
}

#if defined(__APPLE__)
NSView* view = (NSView*)m_RenderFrame->GetHandle();
NSWindow* window = [view window];

[window setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary];
m_RenderFrame->EnableFullScreenView(true);
#endif

wxBeginBusyCursor();
Expand Down Expand Up @@ -1241,10 +1234,7 @@ void CFrame::OnStopped()
{
#if defined(__APPLE__)
// Disable the full screen button when not in a game.
NSView* view = (NSView*)m_RenderFrame->GetHandle();
NSWindow* window = [view window];

[window setCollectionBehavior:NSWindowCollectionBehaviorDefault];
m_RenderFrame->EnableFullScreenView(false);
#endif

// Make sure the window is not longer set to stay on top
Expand Down
12 changes: 4 additions & 8 deletions Source/Core/DolphinWX/ISOProperties.cpp
Expand Up @@ -2,10 +2,6 @@
// Licensed under GPLv2+
// Refer to the license.txt file included.

#ifdef __APPLE__
#import <Cocoa/Cocoa.h>
#endif

#include <cinttypes>
#include <cstddef>
#include <cstdio>
Expand Down Expand Up @@ -1235,9 +1231,9 @@ bool CISOProperties::SaveGameConfig()
void CISOProperties::LaunchExternalEditor(const std::string& filename, bool wait_until_closed)
{
#ifdef __APPLE__
// wxTheMimeTypesManager is not yet implemented for wxCocoa
[[NSWorkspace sharedWorkspace] openFile:[NSString stringWithUTF8String:filename.c_str()]
withApplication:@"TextEdit"];
// GetOpenCommand does not work for wxCocoa
const char* OpenCommandConst[] = {"open", "-a", "TextEdit", filename.c_str(), NULL};
char** OpenCommand = const_cast<char**>(OpenCommandConst);
#else
wxFileType* filetype = wxTheMimeTypesManager->GetFileTypeFromExtension("ini");
if (filetype == nullptr) // From extension failed, trying with MIME type now
Expand All @@ -1256,6 +1252,7 @@ void CISOProperties::LaunchExternalEditor(const std::string& filename, bool wait
WxUtils::ShowErrorDialog(_("Couldn't find open command for extension 'ini'!"));
return;
}
#endif

long result;

Expand All @@ -1269,7 +1266,6 @@ void CISOProperties::LaunchExternalEditor(const std::string& filename, bool wait
WxUtils::ShowErrorDialog(_("wxExecute returned -1 on application run!"));
return;
}
#endif
}

void CISOProperties::GenerateLocalIniModified()
Expand Down
4 changes: 0 additions & 4 deletions Source/Core/DolphinWX/Main.cpp
Expand Up @@ -70,10 +70,6 @@

#endif

#ifdef __APPLE__
#import <AppKit/AppKit.h>
#endif

class wxFrame;

// ------------
Expand Down
4 changes: 0 additions & 4 deletions Source/Core/DolphinWX/WxUtils.cpp
Expand Up @@ -17,10 +17,6 @@

#include "DolphinWX/WxUtils.h"

#ifdef __APPLE__
#import <AppKit/AppKit.h>
#endif

namespace WxUtils
{
// Launch a file according to its mime type
Expand Down

0 comments on commit 8fcc3b0

Please sign in to comment.