diff options
Diffstat (limited to 'stream')
-rw-r--r-- | stream/stream_dvdnav.c | 12 | ||||
-rw-r--r-- | stream/stream_dvdnav.h | 1 |
2 files changed, 13 insertions, 0 deletions
diff --git a/stream/stream_dvdnav.c b/stream/stream_dvdnav.c index 07b0c3775a..ef0f06257b 100644 --- a/stream/stream_dvdnav.c +++ b/stream/stream_dvdnav.c @@ -362,6 +362,16 @@ int mp_dvdnav_handle_input(stream_t *stream, int cmd, int *button) { status = dvdnav_button_activate(nav, pci); if(status == DVDNAV_STATUS_OK) reset = 1; break; + case MP_CMD_DVDNAV_MOUSECLICK: + /* + this is a workaround: in theory the simple dvdnav_lower_button_select()+dvdnav_button_activate() + should be enough (and generally it is), but there are cases when the calls to dvdnav_lower_button_select() + and friends fail! Hence we have to call dvdnav_mouse_activate(priv->mousex, priv->mousey) with + the coodinates saved by mp_dvdnav_update_mouse_pos(). + This last call always works well + */ + status = dvdnav_mouse_activate(nav, pci, dvdnav_priv->mousex, dvdnav_priv->mousey); + break; default: mp_msg(MSGT_CPLAYER, MSGL_V, "Unknown DVDNAV cmd %d\n", cmd); break; @@ -384,6 +394,8 @@ void mp_dvdnav_update_mouse_pos(stream_t *stream, int32_t x, int32_t y, int* but status = dvdnav_mouse_select(nav, pci, x, y); if(status == DVDNAV_STATUS_OK) dvdnav_get_current_highlight(nav, button); else *button = -1; + dvdnav_priv->mousex = x; + dvdnav_priv->mousey = y; } diff --git a/stream/stream_dvdnav.h b/stream/stream_dvdnav.h index f3ff8a11da..7a3f317c42 100644 --- a/stream/stream_dvdnav.h +++ b/stream/stream_dvdnav.h @@ -19,6 +19,7 @@ typedef struct { unsigned char prebuf[STREAM_BUFFER_SIZE]; /* prefill buffer */ int prelen; /* length of prefill buffer */ unsigned int duration; /* in milliseconds */ + int mousex, mousey; } dvdnav_priv_t; extern int dvd_nav_still; |