static void nav_send_event (GstNavigation * navigation, GstStructure * structure) { GstEvent *event = gst_event_new_navigation (structure); GstNavigationEventType etype = gst_navigation_event_get_type (event); TestElement *self = (TestElement *) (navigation); fail_if (etype == GST_NAVIGATION_EVENT_INVALID, "Received navigation event could not be parsed"); fail_unless (etype == self->sent_type, "Received navigation event did not match sent"); switch (etype) { case GST_NAVIGATION_EVENT_KEY_PRESS: case GST_NAVIGATION_EVENT_KEY_RELEASE:{ const gchar *key; fail_unless (gst_navigation_event_parse_key_event (event, &key)); fail_unless (strcmp (key, self->sent_key) == 0); break; } case GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS: case GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE:{ gint button; gdouble x, y; fail_unless (gst_navigation_event_parse_mouse_button_event (event, &button, &x, &y)); fail_unless (button == self->sent_button); fail_unless (x == self->sent_x); fail_unless (y == self->sent_y); break; } case GST_NAVIGATION_EVENT_MOUSE_MOVE:{ gdouble x, y; fail_unless (gst_navigation_event_parse_mouse_move_event (event, &x, &y)); fail_unless (x == self->sent_x); fail_unless (y == self->sent_y); break; } case GST_NAVIGATION_EVENT_COMMAND:{ GstNavigationCommand cmd; fail_unless (gst_navigation_event_parse_command (event, &cmd)); fail_unless (cmd == self->sent_command); } default: break; } gst_event_unref (event); }
MbEvent * handle_navigation_message (GstMessage *message) { MbEvent *mb_event = NULL; GstNavigationMessageType nav_msg_type; nav_msg_type = gst_navigation_message_get_type (message); switch (nav_msg_type) { case GST_NAVIGATION_MESSAGE_EVENT: { GstEvent *event; GstNavigationEventType nav_evt_type; gst_navigation_message_parse_event (message, &event); nav_evt_type = gst_navigation_event_get_type (event); switch (nav_evt_type) { case GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS: case GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE: { int button; double x, y; gst_navigation_event_parse_mouse_button_event (event, &button, &x, &y); mb_event = create_mouse_button_event ( nav_evt_type == GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS ? MB_MOUSE_BUTTON_PRESS : MB_MOUSE_BUTTON_RELEASE, button, (int)x, (int) y); if (button == MB_MOUSE_LEFT_BUTTON && mb_event->type == MB_MOUSE_BUTTON_PRESS) { MbMedia *selected_media = compute_media_selection(x, y); if (selected_media != NULL) { MbEvent *selection_event = create_media_selection_event (MB_MEDIA_SELECTION, selected_media->name); notify_handler (selection_event); free (selection_event); } } break; } case GST_NAVIGATION_EVENT_MOUSE_MOVE: { double x, y; if (gst_navigation_event_parse_mouse_move_event (event, &x, &y)) mb_event = create_mouse_move_event (MB_MOUSE_MOVE, (int)x, (int) y); break; } case GST_NAVIGATION_EVENT_KEY_PRESS: case GST_NAVIGATION_EVENT_KEY_RELEASE: { const char *key; if (gst_navigation_event_parse_key_event (event, &key)) mb_event = create_keyboard_event ( nav_evt_type == GST_NAVIGATION_EVENT_KEY_PRESS ? MB_KEY_PRESS : MB_KEY_RELEASE, key); } default: break; } gst_event_unref (event); break; } default: break; } return mb_event; }