Ejemplo n.º 1
0
int barrier::notify_and_wait(const int barrier_id)
{
  if (barrier_id < 1 || barrier_id > barrier_ids.size())
    {
      return -1;
    }
  int index = barrier::id_to_index(barrier_id);
#ifdef __GXX_EXPERIMENTAL_CXX0X__
  std::unique_lock<std::mutex> lck(barrier_lock);
#else
  pthread_mutex_lock(&barrier_lock);
#endif
  if (barrier_ids[index] == nclient)
    {
      barrier_ids[index] = 0;
    }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
  lck.unlock();
#else
  pthread_mutex_unlock(&barrier_lock);
#endif
  // remote_notify needs to be after the above boundary check.
  // otherwise the check may include the effect of this notify.
  remote_notify(barrier_id);
#ifdef __GXX_EXPERIMENTAL_CXX0X__
  lck.lock();
#else
  pthread_mutex_lock(&barrier_lock);
#endif
  while (barrier_ids[index] < nclient)
    {
#ifdef __GXX_EXPERIMENTAL_CXX0X__
      barrier_cond.wait(lck);
#else
      pthread_cond_wait(&barrier_cond, &barrier_lock);
#endif
    }
#ifndef __GXX_EXPERIMENTAL_CXX0X__
  pthread_mutex_unlock(&barrier_lock);
#endif
  return 0;
}
Ejemplo n.º 2
0
void handle_X_events_sdl (void) {
	SDL_Event ev;
	unsigned int key;
	while (SDL_PollEvent(&ev)) {
		switch(ev.type){
			case SDL_VIDEOEXPOSE: // SDL render event
				render_sdl(buffer);
				break;
			case SDL_QUIT:
				if ((interaction_override&OVR_QUIT_KEY) == 0) loop_flag=0;
				break;
			case SDL_KEYDOWN:
				key = ev.key.keysym.sym;
				if(ev.key.keysym.sym==SDLK_ESCAPE) {
					if ((interaction_override&OVR_QUIT_KEY) == 0) {
						loop_flag=0;
					} else {
						remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key);
					}
				} else if(ev.key.keysym.sym==SDLK_s) {
					ui_osd_tc();
				} else if(ev.key.keysym.sym==SDLK_a) {
					sdl_set_ontop(sdl_ontop^=1);
				} else if(ev.key.keysym.sym==SDLK_f) {
					sdl_toggle_fullscreen(2);
				} else if(ev.key.keysym.sym==SDLK_l) {
						want_letterbox=!want_letterbox; 
						sdl_letterbox_change();
				} else if(ev.key.keysym.sym==SDLK_m) { 
					mousecursor_sdl(2);
				} else if(ev.key.keysym.sym==SDLK_v) {
					ui_osd_fn();
				} else if(ev.key.keysym.sym==SDLK_b) {
					ui_osd_box();
				} else if(ev.key.keysym.sym==SDLK_i) {
					ui_osd_fileinfo();
				} else if(ev.key.keysym.sym==SDLK_g) {
					ui_osd_geo();
				} else if(ev.key.keysym.sym== SDLK_c && ev.key.keysym.mod&KMOD_SHIFT) {
					ui_osd_clear();
				} else if(ev.key.keysym.sym== SDLK_LESS || (ev.key.keysym.sym== SDLK_COMMA && ev.key.keysym.mod&KMOD_SHIFT) ) { // '<'
					XCresize_scale(-1);
				} else if(ev.key.keysym.sym== SDLK_GREATER || (ev.key.keysym.sym== SDLK_PERIOD && ev.key.keysym.mod&KMOD_SHIFT) ) { // '>'
					XCresize_scale(1);
				} else if(ev.key.keysym.sym==SDLK_PERIOD) {
					XCresize_percent(100);
					resize_sdl(ffctv_width, ffctv_height);
				} else if(ev.key.keysym.sym== SDLK_COMMA) { // ','
					XCresize_aspect(0);
				} else if(ev.key.keysym.sym==SDLK_o) {
					ui_osd_offset_cycle();
				} else if(ev.key.keysym.sym==SDLK_p) {
					ui_osd_permute();
				} else if(ev.key.keysym.sym== SDLK_BACKSLASH) {
					XCtimeoffset(0, (unsigned int) key);
				} else if(ev.key.keysym.sym== SDLK_EQUALS && ev.key.keysym.mod&KMOD_SHIFT) { // '+' SDLK_PLUS does not work :/
					XCtimeoffset(1, (unsigned int) key);
				} else if(ev.key.keysym.sym==SDLK_MINUS) {
					XCtimeoffset(-1, (unsigned int) key);
				} else if(ev.key.keysym.sym== SDLK_LEFTBRACKET && ev.key.keysym.mod&KMOD_SHIFT) { // '{'
					XCtimeoffset(-2, (unsigned int) key);
				} else if(ev.key.keysym.sym== SDLK_RIGHTBRACKET&& ev.key.keysym.mod&KMOD_SHIFT) { // '}'
					XCtimeoffset(2, (unsigned int) key);
#ifdef CROPIMG
				} else if(ev.key.keysym.sym== SDLK_LEFTBRACKET) { // '['
				} else if(ev.key.keysym.sym== SDLK_RIGHTBRACKET) { // ']'
#endif
				} else if(ev.key.keysym.sym== SDLK_BACKSPACE) {
					if ((interaction_override&OVR_JCONTROL) == 0) jackt_rewind();
					remote_notify(NTY_KEYBOARD, 310, "keypress=%d # backspace", 0xff08);
				} else if(ev.key.keysym.sym== SDLK_SPACE) {
					if ((interaction_override&OVR_JCONTROL) == 0) jackt_toggle();
					remote_notify(NTY_KEYBOARD, 310, "keypress=%d # space", 0x0020);
				} else {
					remote_notify(NTY_KEYBOARD, 310, "keypress=%d", (unsigned int) key);
					//printf("SDL key event: %x\n", ev.key.keysym.sym);
				}
				break;
			case SDL_VIDEORESIZE:
				sdl_screen = SDL_SetVideoMode(ev.resize.w, ev.resize.h, 0, MYSDLFLAGS);
				sdl_rect.w=ev.resize.w;
				sdl_rect.h=ev.resize.h;
				resized_sdl();
				force_redraw=1;
				break;
			case SDL_MOUSEBUTTONUP:
				switch(ev.button.button) {
					case SDL_BUTTON_WHEELUP:
						XCresize_aspect(-1);
						break;
					case SDL_BUTTON_WHEELDOWN:
						XCresize_aspect(1);
						break;
					case SDL_BUTTON_MIDDLE:
						XCresize_aspect(0);
						break;
					default:
						break;
				}
				break;
      case SDL_ACTIVEEVENT:			/** Application loses/gains visibility */
				/* TODO disable rendering when inactive */
				break;
			case SDL_MOUSEMOTION:
				break;
			default: /* unhandled event */
				//printf("SDL EVENT: %x\n", ev.type );
				break;
		}
	}
}