|  | @@ -22,10 +22,32 @@
 | 
	
		
			
			| 22 | 22 |  #include <cstdio>
 | 
	
		
			
			| 23 | 23 |  #include <sstream>
 | 
	
		
			
			| 24 | 24 |  
 | 
	
		
			
			|  | 25 | +#ifdef __MACH__
 | 
	
		
			
			|  | 26 | +#include <mach/clock.h>
 | 
	
		
			
			|  | 27 | +#include <mach/mach.h>
 | 
	
		
			
			|  | 28 | +#endif
 | 
	
		
			
			|  | 29 | +
 | 
	
		
			
			| 25 | 30 |  #include "x.hpp"
 | 
	
		
			
			| 26 | 31 |  #include "rectangle.hpp"
 | 
	
		
			
			| 27 | 32 |  #include "cmdline.h"
 | 
	
		
			
			| 28 | 33 |  
 | 
	
		
			
			|  | 34 | +// Work around lack of clock_gettime in OSX
 | 
	
		
			
			|  | 35 | +// https://gist.github.com/jbenet/1087739
 | 
	
		
			
			|  | 36 | +void current_utc_time(struct timespec *ts) {
 | 
	
		
			
			|  | 37 | +    #ifdef __MACH__
 | 
	
		
			
			|  | 38 | +        // OS X does not have clock_gettime, use clock_get_time
 | 
	
		
			
			|  | 39 | +        clock_serv_t cclock;
 | 
	
		
			
			|  | 40 | +        mach_timespec_t mts;
 | 
	
		
			
			|  | 41 | +        host_get_clock_service( mach_host_self(), CALENDAR_CLOCK, &cclock );
 | 
	
		
			
			|  | 42 | +        clock_get_time( cclock, &mts );
 | 
	
		
			
			|  | 43 | +        mach_port_deallocate( mach_task_self(), cclock );
 | 
	
		
			
			|  | 44 | +        ts->tv_sec = mts.tv_sec;
 | 
	
		
			
			|  | 45 | +        ts->tv_nsec = mts.tv_nsec;
 | 
	
		
			
			|  | 46 | +    #else
 | 
	
		
			
			|  | 47 | +        clock_gettime( CLOCK_REALTIME, ts );
 | 
	
		
			
			|  | 48 | +    #endif
 | 
	
		
			
			|  | 49 | +}
 | 
	
		
			
			|  | 50 | +
 | 
	
		
			
			| 29 | 51 |  int printSelection( std::string format, bool cancelled, int x, int y, int w, int h, int window ) {
 | 
	
		
			
			| 30 | 52 |      size_t pos = 0;
 | 
	
		
			
			| 31 | 53 |      while ( ( pos = format.find( "%", pos ) ) != std::string::npos ) {
 | 
	
	
		
			
			|  | @@ -223,7 +245,7 @@ int app( int argc, char** argv ) {
 | 
	
		
			
			| 223 | 245 |      bool highlight = options.highlight_flag;
 | 
	
		
			
			| 224 | 246 |      bool keyboard = !options.nokeyboard_flag;
 | 
	
		
			
			| 225 | 247 |      bool decorations = !options.nodecorations_flag;
 | 
	
		
			
			| 226 |  | -    timespec start, time;
 | 
	
		
			
			|  | 248 | +    struct timespec start, time;
 | 
	
		
			
			| 227 | 249 |      int xoffset = 0;
 | 
	
		
			
			| 228 | 250 |      int yoffset = 0;
 | 
	
		
			
			| 229 | 251 |      int cx = 0;
 | 
	
	
		
			
			|  | @@ -266,9 +288,9 @@ int app( int argc, char** argv ) {
 | 
	
		
			
			| 266 | 288 |              fprintf( stderr, "Warning: Failed to grab the keyboard. This is non-fatal, keyboard presses might fall through to other applications.\n" );
 | 
	
		
			
			| 267 | 289 |          }
 | 
	
		
			
			| 268 | 290 |      }
 | 
	
		
			
			| 269 |  | -    clock_gettime( CLOCK_REALTIME, &start );
 | 
	
		
			
			|  | 291 | +    current_utc_time( &start );
 | 
	
		
			
			| 270 | 292 |      while ( running ) {
 | 
	
		
			
			| 271 |  | -        clock_gettime( CLOCK_REALTIME, &time );
 | 
	
		
			
			|  | 293 | +        current_utc_time( &time );
 | 
	
		
			
			| 272 | 294 |          // "ticking" the xengine makes it process all queued events.
 | 
	
		
			
			| 273 | 295 |          xengine->tick();
 | 
	
		
			
			| 274 | 296 |          // If the user presses any key on the keyboard, exit the application.
 |