[vlc-devel] [PATCH] qt: Use native events to notify of a video widget resize
Rémi Denis-Courmont
remi at remlab.net
Thu Apr 27 18:00:43 CEST 2017
Le torstaina 27. huhtikuuta 2017, 15.59.28 EEST Hugo Beauzée-Luyssen a écrit :
> This method can't be used for Wayland as Qt won't invoke
> QWidget::nativeEvent when Wayland is used.
> Fix #18211
> ---
> modules/gui/qt/Makefile.am | 3 +++
> modules/gui/qt/components/interface_widgets.cpp | 28
> +++++++++++++++++++++++++ modules/gui/qt/components/interface_widgets.hpp |
> 10 +++++++++
> 3 files changed, 41 insertions(+)
>
> diff --git a/modules/gui/qt/Makefile.am b/modules/gui/qt/Makefile.am
> index a5a428d36c..22e2b54697 100644
> --- a/modules/gui/qt/Makefile.am
> +++ b/modules/gui/qt/Makefile.am
> @@ -25,6 +25,9 @@ if HAVE_QT5_X11
> libqt_plugin_la_CXXFLAGS += $(QT5_X11_CFLAGS) -DQT5_HAS_X11
> libqt_plugin_la_LIBADD += $(QT5_X11_LIBS) $(X_LIBS) $(X_PRE_LIB) -lX11
> endif
> +if HAVE_XCB
> +libqt_plugin_la_CXXFLAGS += -DQT5_HAS_XCB
> +endif
> if HAVE_WAYLAND
> libqt_plugin_la_CPPFLAGS += -DQT5_HAS_WAYLAND \
> -DQPNI_HEADER=\<$(QT_VERSION)/QtGui/qpa/qplatformnativeinterface.h\>
> diff --git a/modules/gui/qt/components/interface_widgets.cpp
> b/modules/gui/qt/components/interface_widgets.cpp index
> 081985dc2c..a8f996eb94 100644
> --- a/modules/gui/qt/components/interface_widgets.cpp
> +++ b/modules/gui/qt/components/interface_widgets.cpp
> @@ -53,6 +53,9 @@
> #if defined (QT5_HAS_X11)
> # include <X11/Xlib.h>
> # include <QX11Info>
> +# if defined(QT5_HAS_XCB)
> +# include <xcb/xproto.h>
> +# endif
> #endif
> #ifdef QT5_HAS_WAYLAND
> # include QPNI_HEADER
> @@ -257,12 +260,37 @@ void VideoWidget::setSize( unsigned int w, unsigned
> int h ) sync();
> }
>
> +#if RESIZE_FROM_NATIVE_EVENTS
> +bool VideoWidget::nativeEvent( const QByteArray& eventType, void* message,
> long* ) +{
> +#if defined(QT5_HAS_XCB)
> + if ( eventType == "xcb_generic_event_t" )
> + {
> + const xcb_generic_event_t* xev = reinterpret_cast<const
> xcb_generic_event_t*>( message ); +
> + if ( xev->response_type == XCB_CONFIGURE_NOTIFY )
> + reportSize();
> + }
> +#endif
> +#ifdef _WIN32
> + if ( eventType == "windows_generic_MSG" )
> + {
> + MSG* msg = static_cast<MSG*>( message );
> + if ( msg->message == WM_SIZE )
> + reportSize();
> + }
> +#endif
> + // Let Qt handle that event in any case
> + return false;
> +}
> +#else
> void VideoWidget::resizeEvent( QResizeEvent *event )
> {
> QWidget::resizeEvent( event );
>
> reportSize();
> }
> +#endif
Doesn´t that mean that we never report a size if XCB is present at compile-
time but not used at run-time?
--
雷米‧德尼-库尔蒙
https://www.remlab.net/
More information about the vlc-devel
mailing list