summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-09-19 23:50:21 +0000
committernicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-09-19 23:50:21 +0000
commitb578d8ccbf2400df189987093955b29051fd7802 (patch)
tree60135fed90318130245243b27f7e8490371c7ae6
parentd7f2d69dd0cfa8aea0f5aa3c41923acda0eabdbe (diff)
downloadmpv-b578d8ccbf2400df189987093955b29051fd7802.tar.bz2
mpv-b578d8ccbf2400df189987093955b29051fd7802.tar.xz
introduced new MP_CMD_DVDNAV_MOUSECLICK command (bound to mouse0);
it's used to activate the button corresponding to the last mouse position. This is a workaround against possibly buggy implementation of upper_lower/upper_button_select() and friends; will be removed when possible git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@19918 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r--input/input.c2
-rw-r--r--input/input.h1
-rw-r--r--stream/stream_dvdnav.c12
-rw-r--r--stream/stream_dvdnav.h1
4 files changed, 15 insertions, 1 deletions
diff --git a/input/input.c b/input/input.c
index 6d05e8f44e..f2b5a8399b 100644
--- a/input/input.c
+++ b/input/input.c
@@ -317,7 +317,7 @@ static mp_cmd_bind_t def_cmd_binds[] = {
{ { KEY_KP6, 0 }, "dvdnav 4" }, // right
{ { KEY_KP5, 0 }, "dvdnav 5" }, // menu
{ { KEY_KPENTER, 0 }, "dvdnav 6" }, // select
- { { MOUSE_BTN0, 0 }, "dvdnav 6" }, //select
+ { { MOUSE_BTN0, 0 }, "dvdnav 8" }, //select
{ { KEY_KP7, 0 }, "dvdnav 7" }, // previous menu
#endif
diff --git a/input/input.h b/input/input.h
index f44d5de7c1..f220a0889b 100644
--- a/input/input.h
+++ b/input/input.h
@@ -113,6 +113,7 @@
#define MP_CMD_DVDNAV_MENU 5
#define MP_CMD_DVDNAV_SELECT 6
#define MP_CMD_DVDNAV_PREVMENU 7
+#define MP_CMD_DVDNAV_MOUSECLICK 8
/// Console commands
#define MP_CMD_CHELP 7000
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;