[vlc-commits] qt: Make main_interface_win32 a subclass of main_interface
Hugo Beauzée-Luyssen
git at videolan.org
Thu Dec 29 16:04:32 CET 2016
vlc | branch: master | Hugo Beauzée-Luyssen <hugo at beauzee.fr> | Thu Dec 29 14:30:29 2016 +0100| [2c8fd86a3d146dde54ef9769aa405cd24ac07e9e] | committer: Hugo Beauzée-Luyssen
qt: Make main_interface_win32 a subclass of main_interface
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2c8fd86a3d146dde54ef9769aa405cd24ac07e9e
---
modules/gui/qt/Makefile.am | 6 ++-
modules/gui/qt/main_interface.cpp | 71 +++-------------------------
modules/gui/qt/main_interface.hpp | 29 ++----------
modules/gui/qt/main_interface_win32.cpp | 83 +++++++++++++++++++++++++++++----
modules/gui/qt/main_interface_win32.hpp | 62 ++++++++++++++++++++++++
modules/gui/qt/qt.cpp | 10 +++-
6 files changed, 161 insertions(+), 100 deletions(-)
diff --git a/modules/gui/qt/Makefile.am b/modules/gui/qt/Makefile.am
index bf3d98b..7e5f5ae 100644
--- a/modules/gui/qt/Makefile.am
+++ b/modules/gui/qt/Makefile.am
@@ -120,7 +120,7 @@ libqt_plugin_la_SOURCES = \
util/singleton.hpp \
styles/seekstyle.cpp styles/seekstyle.hpp
if HAVE_WIN32
-libqt_plugin_la_SOURCES += main_interface_win32.cpp
+libqt_plugin_la_SOURCES += main_interface_win32.cpp main_interface_win32.hpp
endif
# Meta-object compilation
@@ -207,6 +207,10 @@ nodist_libqt_plugin_la_SOURCES = \
util/buttons/BrowseButton.moc.cpp \
styles/seekstyle.moc.cpp
+if HAVE_WIN32
+nodist_libqt_plugin_la_SOURCES += main_interface_win32.moc.cpp
+endif
+
nodist_libqt_plugin_la_SOURCES += \
ui/equalizer.h \
ui/video_effects.h \
diff --git a/modules/gui/qt/main_interface.cpp b/modules/gui/qt/main_interface.cpp
index 2c91e7a..894da7a 100644
--- a/modules/gui/qt/main_interface.cpp
+++ b/modules/gui/qt/main_interface.cpp
@@ -65,12 +65,6 @@
#include <vlc_keys.h> /* Wheel event */
#include <vlc_vout_display.h> /* vout_thread_t and VOUT_ events */
-
-#if defined(_WIN32) && HAS_QT5
-#include <QWindow>
-#include <qpa/qplatformnativeinterface.h>
-#endif
-
// #define DEBUG_INTF
/* Callback prototypes */
@@ -143,11 +137,6 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
/* Set the other interface settings */
settings = getSettings();
-#ifdef _WIN32
- /* Volume keys */
- p_intf->p_sys->disable_volume_keys = var_InheritBool( p_intf, "qt-disable-volume-keys" );
-#endif
-
/* */
b_plDocked = getSettings()->value( "MainWindow/pl-dock-status", true ).toBool();
@@ -172,14 +161,6 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
createStatusBar();
setStatusBarVisibility( getSettings()->value( "MainWindow/status-bar-visible", false ).toBool() );
-#ifdef _WIN32
- himl = NULL;
- p_taskbl = NULL;
- taskbar_wmsg = RegisterWindowMessage(TEXT("TaskbarButtonCreated"));
- if (taskbar_wmsg == 0)
- msg_Warn( p_intf, "Failed to register TaskbarButtonCreated message" );
-#endif
-
/*********************************
* Create the Systray Management *
*********************************/
@@ -278,14 +259,6 @@ MainInterface::~MainInterface()
if( videoWidget )
releaseVideoSlot();
-#ifdef _WIN32
- if( himl )
- ImageList_Destroy( himl );
- if(p_taskbl)
- p_taskbl->Release();
- CoUninitialize();
-#endif
-
/* Be sure to kill the actionsManager... Only used in the MI and control */
ActionsManager::killInstance();
@@ -362,9 +335,6 @@ void MainInterface::reloadPrefs()
{
i_notificationSetting = var_InheritInteger( p_intf, "qt-notification" );
b_pauseOnMinimize = var_InheritBool( p_intf, "qt-pause-minimized" );
-#ifdef _WIN32
- p_intf->p_sys->disable_volume_keys = var_InheritBool( p_intf, "qt-disable-volume-keys" );
-#endif
if( !var_InheritBool( p_intf, "qt-fs-controller" ) && fullscreenControls )
{
delete fullscreenControls;
@@ -864,9 +834,6 @@ void MainInterface::setVideoFullScreen( bool fs )
* qt-fullscreen-screennumber is forced) */
setMinimalView( b_minimalView );
setInterfaceFullScreen( b_interfaceFullScreen );
-#ifdef _WIN32
- changeThumbbarButtons( THEMIM->getIM()->playingStatus() );
-#endif
}
videoWidget->sync();
}
@@ -1257,6 +1224,11 @@ void MainInterface::createSystray()
this, updateSystrayTooltipStatus( int ) );
}
+void MainInterface::toggleUpdateSystrayMenuWhenVisible()
+{
+ hide();
+}
+
/**
* Updates the Systray Icon's menu and toggle the main interface
*/
@@ -1277,38 +1249,7 @@ void MainInterface::toggleUpdateSystrayMenu()
else
{
/* Visible (possibly under other windows) */
-#ifdef _WIN32
- /* check if any visible window is above vlc in the z-order,
- * but ignore the ones always on top
- * and the ones which can't be activated */
- HWND winId;
-#if HAS_QT5
- QWindow *window = windowHandle();
- winId = static_cast<HWND>(QGuiApplication::platformNativeInterface()->nativeResourceForWindow("handle", window));
-#else
- winId = internalWinId();
-#endif
-
- WINDOWINFO wi;
- HWND hwnd;
- wi.cbSize = sizeof( WINDOWINFO );
- for( hwnd = GetNextWindow( winId, GW_HWNDPREV );
- hwnd && ( !IsWindowVisible( hwnd ) ||
- ( GetWindowInfo( hwnd, &wi ) &&
- (wi.dwExStyle&WS_EX_NOACTIVATE) ) );
- hwnd = GetNextWindow( hwnd, GW_HWNDPREV ) );
- if( !hwnd || !GetWindowInfo( hwnd, &wi ) ||
- (wi.dwExStyle&WS_EX_TOPMOST) )
- {
- hide();
- }
- else
- {
- activateWindow();
- }
-#else
- hide();
-#endif // _WIN32
+ toggleUpdateSystrayMenuWhenVisible();
}
if( sysTray )
VLCMenuBar::updateSystrayMenu( this, p_intf );
diff --git a/modules/gui/qt/main_interface.hpp b/modules/gui/qt/main_interface.hpp
index a69eac7..02c0fd9 100644
--- a/modules/gui/qt/main_interface.hpp
+++ b/modules/gui/qt/main_interface.hpp
@@ -92,12 +92,6 @@ public:
protected:
void dropEventPlay( QDropEvent* event, bool b_play ) { dropEventPlay(event, b_play, true); }
void dropEventPlay( QDropEvent *, bool, bool );
-#ifdef _WIN32
-#if HAS_QT5
- virtual bool nativeEvent(const QByteArray &eventType, void *message, long *result);
-#endif
- virtual bool winEvent( MSG *, long * );
-#endif
void changeEvent( QEvent * ) Q_DECL_OVERRIDE;
void dropEvent( QDropEvent *) Q_DECL_OVERRIDE;
void dragEnterEvent( QDragEnterEvent * ) Q_DECL_OVERRIDE;
@@ -107,8 +101,9 @@ protected:
void keyPressEvent( QKeyEvent *) Q_DECL_OVERRIDE;
void wheelEvent( QWheelEvent * ) Q_DECL_OVERRIDE;
bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
+ virtual void toggleUpdateSystrayMenuWhenVisible();
-private:
+protected:
/* Main Widgets Creation */
void createMainWidget( QSettings* );
void createStatusBar();
@@ -184,14 +179,6 @@ private:
bool b_hasPausedWhenMinimized;
bool b_statusbarVisible;
-#ifdef _WIN32
- HWND WinId( QWidget *);
- HIMAGELIST himl;
- ITaskbarList3 *p_taskbl;
- UINT taskbar_wmsg;
- void createTaskBarButtons();
-#endif
-
static const Qt::Key kc[10]; /* easter eggs */
int i_kc_offset;
@@ -209,12 +196,6 @@ public slots:
void setStatusBarVisibility(bool b_visible);
void setPlaylistVisibility(bool b_visible);
-#ifdef _WIN32
- void changeThumbbarButtons( int );
- void playlistItemAppended( int itemId, int parentId );
- void playlistItemRemoved( int itemId );
-#endif
-
/* Manage the Video Functions from the vout threads */
void getVideoSlot( WId *p_id, struct vout_window_t *,
unsigned *pi_width, unsigned *pi_height, bool );
@@ -223,10 +204,10 @@ public slots:
void emitBoss();
void emitRaise();
- void reloadPrefs();
+ virtual void reloadPrefs();
void toolBarConfUpdated();
-private slots:
+protected slots:
void debug();
void recreateToolbars();
void setName( const QString& );
@@ -259,7 +240,7 @@ private slots:
void setVideoSize( unsigned int, unsigned int );
void videoSizeChanged( int, int );
- void setVideoFullScreen( bool );
+ virtual void setVideoFullScreen( bool );
void setHideMouse( bool );
void setVideoOnTop( bool );
void setBoss();
diff --git a/modules/gui/qt/main_interface_win32.cpp b/modules/gui/qt/main_interface_win32.cpp
index 7eef3cc..8aacbc5 100644
--- a/modules/gui/qt/main_interface_win32.cpp
+++ b/modules/gui/qt/main_interface_win32.cpp
@@ -5,6 +5,7 @@
* $Id$
*
* Authors: Jean-Baptiste Kempf <jb at videolan.org>
+ * Hugo Beauzée-Luyssen <hugo at beauzee.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,8 +22,11 @@
* 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
-#include "main_interface.hpp"
+#include "main_interface_win32.hpp"
#include "input_manager.hpp"
#include "actions_manager.hpp"
@@ -38,7 +42,6 @@
# include <qpa/qplatformnativeinterface.h>
#endif
-
#define WM_APPCOMMAND 0x0319
#define APPCOMMAND_VOLUME_MUTE 8
@@ -80,7 +83,28 @@
#define GET_FLAGS_LPARAM(lParam) (LOWORD(lParam))
#define GET_KEYSTATE_LPARAM(lParam) GET_FLAGS_LPARAM(lParam)
-HWND MainInterface::WinId( QWidget *w )
+MainInterfaceWin32::MainInterfaceWin32( intf_thread_t *_p_intf )
+ : MainInterface( _p_intf )
+ , himl( NULL )
+ , p_taskbl( NULL )
+{
+ /* Volume keys */
+ _p_intf->p_sys->disable_volume_keys = var_InheritBool( _p_intf, "qt-disable-volume-keys" );
+ taskbar_wmsg = RegisterWindowMessage(TEXT("TaskbarButtonCreated"));
+ if (taskbar_wmsg == 0)
+ msg_Warn( p_intf, "Failed to register TaskbarButtonCreated message" );
+}
+
+MainInterfaceWin32::~MainInterfaceWin32()
+{
+ if( himl )
+ ImageList_Destroy( himl );
+ if(p_taskbl)
+ p_taskbl->Release();
+ CoUninitialize();
+}
+
+HWND MainInterfaceWin32::WinId( QWidget *w )
{
#if HAS_QT5
if( w && w->windowHandle() )
@@ -109,7 +133,7 @@ enum HBitmapFormat
};
#endif
-void MainInterface::createTaskBarButtons()
+void MainInterfaceWin32::createTaskBarButtons()
{
/*Here is the code for the taskbar thumb buttons
FIXME:We need pretty buttons in 16x16 px that are handled correctly by masks in Qt
@@ -203,13 +227,13 @@ void MainInterface::createTaskBarButtons()
}
#if HAS_QT5
-bool MainInterface::nativeEvent(const QByteArray &, void *message, long *result)
+bool MainInterfaceWin32::nativeEvent(const QByteArray &, void *message, long *result)
{
return winEvent( static_cast<MSG*>( message ), result );
}
#endif
-bool MainInterface::winEvent ( MSG * msg, long * result )
+bool MainInterfaceWin32::winEvent ( MSG * msg, long * result )
{
if (msg->message == taskbar_wmsg)
{
@@ -307,17 +331,58 @@ bool MainInterface::winEvent ( MSG * msg, long * result )
return false;
}
-void MainInterface::playlistItemAppended( int, int )
+void MainInterfaceWin32::setVideoFullScreen( bool fs )
+{
+ MainInterface::setVideoFullScreen( fs );
+ if( !fs )
+ changeThumbbarButtons( THEMIM->getIM()->playingStatus() );
+}
+
+void MainInterfaceWin32::toggleUpdateSystrayMenuWhenVisible()
+{
+ /* check if any visible window is above vlc in the z-order,
+ * but ignore the ones always on top
+ * and the ones which can't be activated */
+ HWND winId;
+#if HAS_QT5
+ QWindow *window = windowHandle();
+ winId = static_cast<HWND>(QGuiApplication::platformNativeInterface()->nativeResourceForWindow("handle", window));
+#else
+ winId = internalWinId();
+#endif
+
+ WINDOWINFO wi;
+ HWND hwnd;
+ wi.cbSize = sizeof( WINDOWINFO );
+ for( hwnd = GetNextWindow( winId, GW_HWNDPREV );
+ hwnd && ( !IsWindowVisible( hwnd ) || ( GetWindowInfo( hwnd, &wi ) &&
+ ( wi.dwExStyle&WS_EX_NOACTIVATE ) ) );
+ hwnd = GetNextWindow( hwnd, GW_HWNDPREV ) )
+ {
+ }
+ if( !hwnd || !GetWindowInfo( hwnd, &wi ) || (wi.dwExStyle&WS_EX_TOPMOST) )
+ hide();
+ else
+ activateWindow();
+}
+
+void MainInterfaceWin32::reloadPrefs()
+{
+ p_intf->p_sys->disable_volume_keys = var_InheritBool( p_intf, "qt-disable-volume-keys" );
+ MainInterface::reloadPrefs();
+}
+
+void MainInterfaceWin32::playlistItemAppended( int, int )
{
changeThumbbarButtons( THEMIM->getIM()->playingStatus() );
}
-void MainInterface::playlistItemRemoved( int )
+void MainInterfaceWin32::playlistItemRemoved( int )
{
changeThumbbarButtons( THEMIM->getIM()->playingStatus() );
}
-void MainInterface::changeThumbbarButtons( int i_status )
+void MainInterfaceWin32::changeThumbbarButtons( int i_status )
{
if( p_taskbl == NULL )
return;
diff --git a/modules/gui/qt/main_interface_win32.hpp b/modules/gui/qt/main_interface_win32.hpp
new file mode 100644
index 0000000..676ddd9
--- /dev/null
+++ b/modules/gui/qt/main_interface_win32.hpp
@@ -0,0 +1,62 @@
+/*****************************************************************************
+ * main_interface_win32.cpp : Main interface
+ ****************************************************************************
+ * Copyright (C) 2006-2010 VideoLAN and AUTHORS
+ * $Id$
+ *
+ * Authors: Jean-Baptiste Kempf <jb at videolan.org>
+ * Hugo Beauzée-Luyssen <hugo at beauzee.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifndef MAIN_INTERFACE_WIN32_HPP
+#define MAIN_INTERFACE_WIN32_HPP
+
+#include "main_interface.hpp"
+
+class MainInterfaceWin32 : public MainInterface
+{
+ Q_OBJECT
+
+public:
+ MainInterfaceWin32( intf_thread_t *p_intf );
+ virtual ~MainInterfaceWin32();
+
+private:
+#if HAS_QT5
+ virtual bool nativeEvent(const QByteArray &eventType, void *message, long *result) Q_DECL_OVERRIDE;
+#endif
+ virtual bool winEvent( MSG *, long * );
+ virtual void toggleUpdateSystrayMenuWhenVisible() Q_DECL_OVERRIDE;
+
+private:
+ HWND WinId( QWidget *);
+ void createTaskBarButtons();
+
+private:
+ HIMAGELIST himl;
+ ITaskbarList3 *p_taskbl;
+ UINT taskbar_wmsg;
+
+private slots:
+ void changeThumbbarButtons( int );
+ void playlistItemAppended( int itemId, int parentId );
+ void playlistItemRemoved( int itemId );
+ virtual void reloadPrefs() Q_DECL_OVERRIDE;
+ virtual void setVideoFullScreen( bool fs ) Q_DECL_OVERRIDE;
+};
+
+#endif // MAIN_INTERFACE_WIN32_HPP
diff --git a/modules/gui/qt/qt.cpp b/modules/gui/qt/qt.cpp
index 17c90e7..6015b2a 100644
--- a/modules/gui/qt/qt.cpp
+++ b/modules/gui/qt/qt.cpp
@@ -36,7 +36,11 @@
#include "input_manager.hpp" /* THEMIM destruction */
#include "dialogs_provider.hpp" /* THEDP creation */
-#include "main_interface.hpp" /* MainInterface creation */
+#ifdef _WIN32
+# include "main_interface_win32.hpp"
+#else
+# include "main_interface.hpp" /* MainInterface creation */
+#endif
#include "extensions_manager.hpp" /* Extensions manager */
#include "managers/addons_manager.hpp" /* Addons manager */
#include "dialogs/help.hpp" /* Launch Update */
@@ -574,7 +578,11 @@ static void *ThreadPlatform( void *obj, char *platform_name )
if( !p_sys->b_isDialogProvider )
{
+#ifdef _WIN32
+ p_mi = new MainInterfaceWin32( p_intf );
+#else
p_mi = new MainInterface( p_intf );
+#endif
p_sys->p_mi = p_mi;
/* Check window type from the Qt platform back-end */
More information about the vlc-commits
mailing list