add magic user_op signal hack

Original commit message from CVS:
add magic user_op signal hack
This commit is contained in:
David I. Lehn 2003-01-09 08:56:58 +00:00
parent 59a7287480
commit d87c018584

View file

@ -71,6 +71,7 @@ struct _DVDNavSrcClass {
void (*button_pressed) (DVDNavSrc *src, int button); void (*button_pressed) (DVDNavSrc *src, int button);
void (*pointer_select) (DVDNavSrc *src, int x, int y); void (*pointer_select) (DVDNavSrc *src, int x, int y);
void (*pointer_activate) (DVDNavSrc *src, int x, int y); void (*pointer_activate) (DVDNavSrc *src, int x, int y);
void (*user_op) (DVDNavSrc *src, int op);
}; };
/* elementfactory information */ /* elementfactory information */
@ -90,6 +91,7 @@ enum {
BUTTON_PRESSED_SIGNAL, BUTTON_PRESSED_SIGNAL,
POINTER_SELECT_SIGNAL, POINTER_SELECT_SIGNAL,
POINTER_ACTIVATE_SIGNAL, POINTER_ACTIVATE_SIGNAL,
USER_OP_SIGNAL,
LAST_SIGNAL LAST_SIGNAL
}; };
@ -144,6 +146,7 @@ static void dvdnavsrc_update_buttoninfo (DVDNavSrc *src);
static void dvdnavsrc_button_pressed (DVDNavSrc *src, int button); static void dvdnavsrc_button_pressed (DVDNavSrc *src, int button);
static void dvdnavsrc_pointer_select (DVDNavSrc *src, int x, int y); static void dvdnavsrc_pointer_select (DVDNavSrc *src, int x, int y);
static void dvdnavsrc_pointer_activate (DVDNavSrc *src, int x, int y); static void dvdnavsrc_pointer_activate (DVDNavSrc *src, int x, int y);
static void dvdnavsrc_user_op (DVDNavSrc *src, int op);
static GstElementStateReturn dvdnavsrc_change_state (GstElement *element); static GstElementStateReturn dvdnavsrc_change_state (GstElement *element);
@ -223,9 +226,20 @@ dvdnavsrc_class_init (DVDNavSrcClass *klass)
G_TYPE_NONE, 2, G_TYPE_NONE, 2,
G_TYPE_INT, G_TYPE_INT); G_TYPE_INT, G_TYPE_INT);
dvdnavsrc_signals[USER_OP_SIGNAL] =
g_signal_new ("user_op",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
G_STRUCT_OFFSET (DVDNavSrcClass, user_op),
NULL, NULL,
gst_marshal_VOID__INT,
G_TYPE_NONE, 1,
G_TYPE_INT);
klass->button_pressed = dvdnavsrc_button_pressed; klass->button_pressed = dvdnavsrc_button_pressed;
klass->pointer_select = dvdnavsrc_pointer_select; klass->pointer_select = dvdnavsrc_pointer_select;
klass->pointer_activate = dvdnavsrc_pointer_activate; klass->pointer_activate = dvdnavsrc_pointer_activate;
klass->user_op = dvdnavsrc_user_op;
g_object_class_install_property(gobject_class, ARG_LOCATION, g_object_class_install_property(gobject_class, ARG_LOCATION,
g_param_spec_string("location", "location", "location", g_param_spec_string("location", "location", "location",
@ -238,7 +252,7 @@ dvdnavsrc_class_init (DVDNavSrcClass *klass)
0,99,1,G_PARAM_READWRITE)); 0,99,1,G_PARAM_READWRITE));
g_object_class_install_property(gobject_class, ARG_CHAPTER, g_object_class_install_property(gobject_class, ARG_CHAPTER,
g_param_spec_int("chapter", "chapter", "chapter", g_param_spec_int("chapter", "chapter", "chapter",
1,999,1,G_PARAM_READWRITE)); 1,99,1,G_PARAM_READWRITE));
g_object_class_install_property(gobject_class, ARG_ANGLE, g_object_class_install_property(gobject_class, ARG_ANGLE,
g_param_spec_int("angle", "angle", "angle", g_param_spec_int("angle", "angle", "angle",
1,9,1,G_PARAM_READWRITE)); 1,9,1,G_PARAM_READWRITE));
@ -586,6 +600,97 @@ dvdnavsrc_pointer_activate (DVDNavSrc *src, int x, int y)
dvdnav_mouse_activate(src->dvdnav, x, y); dvdnav_mouse_activate(src->dvdnav, x, y);
} }
static void
dvdnavsrc_user_op (DVDNavSrc *src, int op)
{
fprintf (stderr, "user_op %d\n", op);
/* Magic user_op ids */
switch (op) {
case 0: /* None */
break;
case 1: /* Upper */
if (dvdnav_upper_button_select(src->dvdnav) != DVDNAV_STATUS_OK) {
goto naverr;
}
break;
case 2: /* Lower */
if (dvdnav_lower_button_select(src->dvdnav) != DVDNAV_STATUS_OK) {
goto naverr;
}
break;
case 3: /* Left */
if (dvdnav_left_button_select(src->dvdnav) != DVDNAV_STATUS_OK) {
goto naverr;
}
break;
case 4: /* Right */
if (dvdnav_right_button_select(src->dvdnav) != DVDNAV_STATUS_OK) {
goto naverr;
}
break;
case 5: /* Activate */
if (dvdnav_button_activate(src->dvdnav) != DVDNAV_STATUS_OK) {
goto naverr;
}
break;
case 6: /* GoUp */
if (dvdnav_go_up(src->dvdnav) != DVDNAV_STATUS_OK) {
goto naverr;
}
break;
case 7: /* TopPG */
if (dvdnav_top_pg_search(src->dvdnav) != DVDNAV_STATUS_OK) {
goto naverr;
}
break;
case 8: /* PrevPG */
if (dvdnav_prev_pg_search(src->dvdnav) != DVDNAV_STATUS_OK) {
goto naverr;
}
break;
case 9: /* NextPG */
if (dvdnav_next_pg_search(src->dvdnav) != DVDNAV_STATUS_OK) {
goto naverr;
}
break;
case 10: /* Menu - Title */
if (dvdnav_menu_call(src->dvdnav, DVD_MENU_Title) != DVDNAV_STATUS_OK) {
goto naverr;
}
break;
case 11: /* Menu - Root */
if (dvdnav_menu_call(src->dvdnav, DVD_MENU_Root) != DVDNAV_STATUS_OK) {
goto naverr;
}
break;
case 12: /* Menu - Subpicture */
if (dvdnav_menu_call(src->dvdnav, DVD_MENU_Subpicture) != DVDNAV_STATUS_OK) {
goto naverr;
}
break;
case 13: /* Menu - Audio */
if (dvdnav_menu_call(src->dvdnav, DVD_MENU_Audio) != DVDNAV_STATUS_OK) {
goto naverr;
}
break;
case 14: /* Menu - Angle */
if (dvdnav_menu_call(src->dvdnav, DVD_MENU_Angle) != DVDNAV_STATUS_OK) {
goto naverr;
}
break;
case 15: /* Menu - Part */
if (dvdnav_menu_call(src->dvdnav, DVD_MENU_Part) != DVDNAV_STATUS_OK) {
goto naverr;
}
break;
}
return;
naverr:
gst_element_error(GST_ELEMENT(src), "user op %d failure: %d",
op, dvdnav_err_to_string(src->dvdnav));
}
static gchar * static gchar *
dvdnav_get_event_name(int event) dvdnav_get_event_name(int event)
{ {