Skip to content

VLC 4.0 handles mouse double-click events differently than VLC 3.0 does (regression?)

VLC 4.0 has changed how it registers mouse double-clicking.

Some of these changes are kind of buggy, e.g. you don't expect to be able to double-click with a mouse wheel or a right mouse button to full-screen.

These changes have also broke my video filter plugin, and while I can fix it by modifying it to account for the new behavior, I'm not sure if you meant to break it in the first place.

  1. VLC 4.0 has also changed the way it registers double-clicking with the left mouse button, which breaks my plugin.

    VLC 4.0 calls the video filter mouse callback function 3 times on a double-click:

    1. To notify of the first click
    2. To notify of the second click
    3. To notify of the double-click
    *first left mouse button click*
    mouse callback! p_mouse_old: i_pressed=0, b_double_click=0; p_mouse_new: i_pressed=1, b_double_click=0
    *second left mouse button click*
    mouse callback! p_mouse_old: i_pressed=0, b_double_click=0; p_mouse_new: i_pressed=1, b_double_click=0
    mouse callback! p_mouse_old: i_pressed=1, b_double_click=0; p_mouse_new: i_pressed=1, b_double_click=1

    VLC 3.0 calls the video filter mouse callback function 2 times on a double-click:

    1. To notify of the first click
    2. To notify of the second click, which is double-click
    *first left mouse button click*
    mouse callback! p_mouse_old: i_pressed=0, b_double_click=0; p_mouse_new: i_pressed=1, b_double_click=0
    *second left mouse button click*
    mouse callback! p_mouse_old: i_pressed=0, b_double_click=0; p_mouse_new: i_pressed=0, b_double_click=1

    I'm arguing that VLC 4.0 shouldn't call video filter's mouse callback function 3 times when a user makes only 2 mouse clicks (speaking of the double-click), it should call it only 2 times, similar to what VLC 3.0 does.

  2. VLC 4.0 registers double-clicking with a mouse wheel, when VLC 3.0 didn't. This results in VLC 4.0 going full-screen when you double-click the mouse wheel.

    VLC 4.0:

    *first mouse wheel click*
    mouse callback! p_mouse_old: i_pressed=0, b_double_click=0; p_mouse_new: i_pressed=2, b_double_click=0
    *second mouse wheel click*
    mouse callback! p_mouse_old: i_pressed=0, b_double_click=0; p_mouse_new: i_pressed=2, b_double_click=0
    mouse callback! p_mouse_old: i_pressed=2, b_double_click=0; p_mouse_new: i_pressed=2, b_double_click=1

    VLC 3.0:

    *first mouse wheel click*
    mouse callback! p_mouse_old: i_pressed=0, b_double_click=0; p_mouse_new: i_pressed=2, b_double_click=0
    *second mouse wheel click -- doesn't register*

    VLC shouldn't full-screen on double mouse wheel click, so VLC 3.0 behavior is preferred.

  3. VLC 4.0 registers double-clicking with the right mouse button (under certain circumstances), when VLC 3.0 didn't.

    To reproduce:

    • Start playing a video
    • Right-click on it to summon the context menu
    • Move the mouse over the "Pause" button of the context menu
    • The previous steps don't have to be done fast, you can do them at your own pace, e.g. you can go make tea at this point of you want to
    • Now, however, quickly double-click with the right mouse button (this will result in the first click hitting the Pause button of the context menu and the next one hitting the video output)
    • Observe VLC going full-screen, registering this as a double-click

    (While the steps to reproduce might seem a bit obscure, if you keep right-clicking while moving the mouse, for no purpose, just messing around in VLC, you might accidentally double-click on Pause/Play context menu and cause VLC to full-screen, which it shouldn't do.)

    VLC 4.0:

    *right click to summon the context menu*
    mouse callback! p_mouse_old: i_pressed=0, b_double_click=0; p_mouse_new: i_pressed=4, b_double_click=0
    *double-right click on the Pause button of the context menu*
    mouse callback! p_mouse_old: i_pressed=0, b_double_click=0; p_mouse_new: i_pressed=4, b_double_click=0
    mouse callback! p_mouse_old: i_pressed=4, b_double_click=0; p_mouse_new: i_pressed=4, b_double_click=1

    VLC 3.0 (Windows):

    *right click to summon the context menu*
    mouse callback! p_mouse_old: i_pressed=0, b_double_click=0; p_mouse_new: i_pressed=4, b_double_click=0
    *double-right click on the Pause button of the context menu*
    mouse callback! p_mouse_old: i_pressed=0, b_double_click=0; p_mouse_new: i_pressed=4, b_double_click=0

    VLC 3.0 (Debian Linux):

    *right click to summon the context menu*
    mouse callback! p_mouse_old: i_pressed=0, b_double_click=0; p_mouse_new: i_pressed=4, b_double_click=0
    *double-right click on the Pause button of the context menu -- doesn't register*

    VLC shouldn't full-screen on double-right click, so VLC 3.0 behavior is preferred.

VLC 4.0 (702b258d) was tested on Windows 10.

VLC 3.0 (3.0.17.4) was tested on Windows 10 and Debian 11 (Bullseye).

Edited by nurupo
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information