Exemplo n.º 1
0
void
update_key_ring (XPointer priv, XRecordInterceptData *data)
{
  static int meta = 0;
  static int ctrl = 0;
  static int shift = 0;
  xEvent *event;
  KeySym ks;
  char *display_string;
  char *ksname;
  if (data->category==XRecordFromServer) {
    event=(xEvent *)data->data;
    /* display_keystack(keystack); */
    switch (event->u.u.type) {
      case KeyPress:
	ks = XKeycodeToKeysym(d0, event->u.u.detail, 0);
	ksname = XKeysymToString (ks); /* TBD: Might have to handle no symbol keys */
	if (! process_modifiers(ks, &meta, &ctrl, &shift, 1)) {
	  display_string = create_emacs_keyname(ksname, meta, ctrl, shift);
	  push(keystack, display_string);
	  display_keystrokes(osd, keystack);
	}
	break;
      case KeyRelease:
	ks = XKeycodeToKeysym(d0, event->u.u.detail, 0);
	process_modifiers(ks, &meta, &ctrl, &shift, 0);
	break;
    }
  }
}
Exemplo n.º 2
0
int process_key_event (event *ev)
{

   int
      loop;

	ASSERT (ev->sdl_event.key.state != KEY_STATE_EITHER);

	process_modifiers (ev);

	for (loop = MODIFIER_NONE; loop < NUM_MODIFIER_TYPES; loop ++)
	{

		if ((current_modifier_states & (1 << loop)) || ((current_modifier_states | loop) == 0) || (ev->sdl_event.key.state == SDL_RELEASED))
		{

			if (registered_events [ev->sdl_event.key.keysym.sym][loop].current_state == ev->sdl_event.key.state)
			{

				continue;
			}

			if (registered_events [ev->sdl_event.key.keysym.sym/*ökey*/][loop].in_use)
			{

				#if EVENT_DEBUG

				debug_log ("KEY_EVENT: key %d, modifier %d, current_state = %d, notify_state = %d, event state = %d", ev->key, loop, registered_events [ev->key][loop].current_state, registered_events [ev->key][loop].notify_state, ev->state);

				#endif

				registered_events [ev->sdl_event.key.keysym.sym][loop].current_state = ev->sdl_event.key.state;

				if ((registered_events [ev->sdl_event.key.keysym.sym][loop].notify_state == ev->sdl_event.key.state) ||
					(registered_events [ev->sdl_event.key.keysym.sym][loop].notify_state == KEY_STATE_EITHER))
				{

					if (registered_events [ev->sdl_event.key.keysym.sym][loop].function)
					{

						#if EVENT_DEBUG

						debug_log ("KEY_EVENT: key event called");

						#endif

						ev->modifier = loop;

						registered_events [ev->sdl_event.key.keysym.sym][loop].function ((void *) ev);
					}
				}
			}
		}
	}

   return FALSE;
}
Exemplo n.º 3
0
void App::process_mouse_motion(const SDL_Event &sdle)
{
	// turn SDL mouse move event into a VT mouse event
	vtMouseEvent event;
	event.type = VT_MOVE;
	event.button = VT_NONE;
	event.flags = process_modifiers();
	event.pos.Set(sdle.motion.x, sdle.motion.y);

	vtGetScene()->OnMouse(event);
}
Exemplo n.º 4
0
void App::process_mouse_button(const SDL_Event &sdle)
{
	// turn SDL mouse button event into a VT mouse event
	vtMouseEvent event;
	event.type = (sdle.button.type == SDL_MOUSEBUTTONDOWN) ? VT_DOWN : VT_UP;

	if (sdle.button.button == 1)
		event.button = VT_LEFT;
	else if (sdle.button.button == 2)
		event.button = VT_MIDDLE;
	else if (sdle.button.button == 3)
		event.button = VT_RIGHT;

	event.flags = process_modifiers();
	event.pos.Set(sdle.button.x, sdle.button.y);

	vtGetScene()->OnMouse(event);
}