forked from dolphin-emu/dolphin
		
	
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Copyright 2016 Dolphin Emulator Project
 | 
						|
// Licensed under GPLv2+
 | 
						|
// Refer to the license.txt file included.
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include <Foundation/Foundation.h>
 | 
						|
 | 
						|
namespace ciface
 | 
						|
{
 | 
						|
namespace OSX
 | 
						|
{
 | 
						|
class RunLoopStopper
 | 
						|
{
 | 
						|
  CFRunLoopSourceRef m_source;
 | 
						|
  CFRunLoopRef m_runloop = nullptr;
 | 
						|
 | 
						|
public:
 | 
						|
  RunLoopStopper()
 | 
						|
  {
 | 
						|
    CFRunLoopSourceContext ctx = {.version = 0,
 | 
						|
                                  .perform = [](void*) { CFRunLoopStop(CFRunLoopGetCurrent()); }};
 | 
						|
    m_source = CFRunLoopSourceCreate(kCFAllocatorDefault, 0, &ctx);
 | 
						|
  }
 | 
						|
  ~RunLoopStopper() { CFRelease(m_source); }
 | 
						|
  void Signal()
 | 
						|
  {
 | 
						|
    CFRunLoopSourceSignal(m_source);
 | 
						|
    if (m_runloop != nullptr)
 | 
						|
      CFRunLoopWakeUp(m_runloop);
 | 
						|
  }
 | 
						|
  void AddToRunLoop(CFRunLoopRef runloop, CFStringRef mode)
 | 
						|
  {
 | 
						|
    m_runloop = runloop;
 | 
						|
    CFRunLoopAddSource(runloop, m_source, mode);
 | 
						|
  }
 | 
						|
  void RemoveFromRunLoop(CFRunLoopRef runloop, CFStringRef mode)
 | 
						|
  {
 | 
						|
    m_runloop = nullptr;
 | 
						|
    CFRunLoopRemoveSource(runloop, m_source, mode);
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
}  // namespace ciface
 | 
						|
}  // namespace OSX
 |