/* Function: al_signal_cond */ void al_signal_cond(ALLEGRO_COND *cond) { ASSERT(cond); _al_cond_signal(&cond->cond); }
static void process_x11_event(ALLEGRO_SYSTEM_XGLX *s, XEvent event) { unsigned int i; ALLEGRO_DISPLAY_XGLX *d = NULL; /* With many windows, it's bad to loop through them all, but typically * we have one or at most two or so. */ for (i = 0; i < _al_vector_size(&s->system.displays); i++) { ALLEGRO_DISPLAY_XGLX **dptr = _al_vector_ref(&s->system.displays, i); d = *dptr; if (d->window == event.xany.window) { break; } } if (!d) { /* The display was probably destroyed already. */ return; } switch (event.type) { case KeyPress: _al_xwin_keyboard_handler(&event.xkey, &d->display); break; case KeyRelease: _al_xwin_keyboard_handler(&event.xkey, &d->display); break; case LeaveNotify: _al_xwin_mouse_switch_handler(&d->display, &event.xcrossing); case EnterNotify: _al_xwin_mouse_switch_handler(&d->display, &event.xcrossing); case FocusIn: _al_xwin_display_switch_handler(&d->display, &event.xfocus); _al_xwin_keyboard_switch_handler(&d->display, &event.xfocus); break; case FocusOut: _al_xwin_display_switch_handler(&d->display, &event.xfocus); _al_xwin_keyboard_switch_handler(&d->display, &event.xfocus); break; case ButtonPress: _al_xwin_mouse_button_press_handler(event.xbutton.button, &d->display); break; case ButtonRelease: _al_xwin_mouse_button_release_handler(event.xbutton.button, &d->display); break; case MotionNotify: _al_xwin_mouse_motion_notify_handler( event.xmotion.x, event.xmotion.y, &d->display); break; case ConfigureNotify: _al_display_xglx_configure(&d->display, &event); _al_cond_signal(&s->resized); break; case MapNotify: d->is_mapped = true; _al_cond_signal(&d->mapped); break; case Expose: if (d->display.flags & ALLEGRO_GENERATE_EXPOSE_EVENTS) { _al_xwin_display_expose(&d->display, &event.xexpose); } break; case ClientMessage: if ((Atom)event.xclient.data.l[0] == d->wm_delete_window_atom) { _al_display_xglx_closebutton(&d->display, &event); break; } if (event.xclient.message_type == s->AllegroAtom) { d->mouse_warp = true; break; } } }