From ddafbdafee942e7e92f2b84decb1dbd4c64c007b Mon Sep 17 00:00:00 2001 From: Patrick von Reth <vonreth@kde.org> Date: Wed, 12 Dec 2012 12:10:32 +0100 Subject: [PATCH] fixed invalid icons for windows thumbbottons crashing explorer.exe --- src/TomahawkWindow.cpp | 87 ++++++++++++++++++++---------------------- src/TomahawkWindow.h | 1 + 2 files changed, 43 insertions(+), 45 deletions(-) diff --git a/src/TomahawkWindow.cpp b/src/TomahawkWindow.cpp index b4e143523..d74bceed6 100644 --- a/src/TomahawkWindow.cpp +++ b/src/TomahawkWindow.cpp @@ -116,6 +116,18 @@ TomahawkWindow::TomahawkWindow( QWidget* parent ) connect( APP, SIGNAL( tomahawkLoaded() ), vm, SLOT( setTomahawkLoaded() ) ); // Pass loaded signal into libtomahawk so components in there can connect to ViewManager #ifdef Q_OS_WIN + QList<TomahawkUtils::ImageType> list; + list<<TomahawkUtils::PauseButton<<TomahawkUtils::PlayButton<<TomahawkUtils::PrevButton<<TomahawkUtils::NextButton<<TomahawkUtils::NotLoved<<TomahawkUtils::Loved; + foreach(TomahawkUtils::ImageType type,list) + { + QPixmap pix ( TomahawkUtils::defaultPixmap(type , TomahawkUtils::Original, QSize( 20, 20 ) ) ); + if( pix.isNull() ) + { + qFatal("One of thumbbar icons is null, this would lead to explorer.exe crashes, aborting tomahawk"); + } + m_thumbIcons[type] = pix.toWinHICON(); + } + connect( AudioEngine::instance(), SIGNAL( stateChanged( AudioState, AudioState) ), SLOT( audioStateChanged( AudioState, AudioState) ) ); #endif ui->setupUi( this ); @@ -446,30 +458,22 @@ TomahawkWindow::setupWindowsButtons() const GUID IID_ITaskbarList3 = { 0xea1afb91,0x9e28,0x4b86, { 0x90,0xe9,0x9e,0x9f,0x8a,0x5e,0xef,0xaf } }; HRESULT hr = S_OK; - QPixmap play( RESPATH "images/play-rest.png" ); - QPixmap back( RESPATH "images/back-rest.png" ); - QPixmap love( RESPATH "images/not-loved.png" ); - - QTransform transform; - transform.rotate( 180 ); - QPixmap next( back.transformed( transform ) ); - THUMBBUTTONMASK dwMask = THUMBBUTTONMASK( THB_ICON | THB_TOOLTIP | THB_FLAGS ); m_thumbButtons[TP_PREVIOUS].dwMask = dwMask; m_thumbButtons[TP_PREVIOUS].iId = TP_PREVIOUS; - m_thumbButtons[TP_PREVIOUS].hIcon = back.toWinHICON(); + m_thumbButtons[TP_PREVIOUS].hIcon = m_thumbIcons[TomahawkUtils::PrevButton]; m_thumbButtons[TP_PREVIOUS].dwFlags = THBF_ENABLED; m_thumbButtons[TP_PREVIOUS].szTip[ tr( "Back" ).toWCharArray( m_thumbButtons[TP_PREVIOUS].szTip ) ] = 0; m_thumbButtons[TP_PLAY_PAUSE].dwMask = dwMask; m_thumbButtons[TP_PLAY_PAUSE].iId = TP_PLAY_PAUSE; - m_thumbButtons[TP_PLAY_PAUSE].hIcon = play.toWinHICON(); + m_thumbButtons[TP_PLAY_PAUSE].hIcon = m_thumbIcons[TomahawkUtils::PlayButton]; m_thumbButtons[TP_PLAY_PAUSE].dwFlags = THBF_ENABLED; m_thumbButtons[TP_PLAY_PAUSE].szTip[ tr( "Play" ).toWCharArray( m_thumbButtons[TP_PLAY_PAUSE].szTip ) ] = 0; m_thumbButtons[TP_NEXT].dwMask = dwMask; m_thumbButtons[TP_NEXT].iId = TP_NEXT; - m_thumbButtons[TP_NEXT].hIcon = next.toWinHICON(); + m_thumbButtons[TP_NEXT].hIcon = m_thumbIcons[TomahawkUtils::NextButton]; m_thumbButtons[TP_NEXT].dwFlags = THBF_ENABLED; m_thumbButtons[TP_NEXT].szTip[ tr( "Next" ).toWCharArray( m_thumbButtons[TP_NEXT].szTip ) ] = 0; @@ -481,7 +485,7 @@ TomahawkWindow::setupWindowsButtons() m_thumbButtons[TP_LOVE].dwMask = dwMask; m_thumbButtons[TP_LOVE].iId = TP_LOVE; - m_thumbButtons[TP_LOVE].hIcon = love.toWinHICON(); + m_thumbButtons[TP_LOVE].hIcon = m_thumbIcons[TomahawkUtils::NotLoved]; m_thumbButtons[TP_LOVE].dwFlags = THBF_DISABLED; m_thumbButtons[TP_LOVE].szTip[ tr( "Love" ).toWCharArray( m_thumbButtons[TP_LOVE].szTip ) ] = 0; @@ -723,46 +727,41 @@ TomahawkWindow::audioStateChanged( AudioState newState, AudioState oldState ) #ifdef HAVE_THUMBBUTTON if ( m_taskbarList == 0 ) return; - switch ( newState ) { - case AudioEngine::Playing: - { - QPixmap pause( RESPATH "images/pause-rest.png" ); - m_thumbButtons[TP_PLAY_PAUSE].hIcon = pause.toWinHICON(); - m_thumbButtons[TP_PLAY_PAUSE].szTip[ tr( "Pause" ).toWCharArray( m_thumbButtons[TP_PLAY_PAUSE].szTip ) ] = 0; - updateWindowsLoveButton(); + case AudioEngine::Playing: + { + m_thumbButtons[TP_PLAY_PAUSE].hIcon = m_thumbIcons[TomahawkUtils::PauseButton]; + m_thumbButtons[TP_PLAY_PAUSE].szTip[ tr( "Pause" ).toWCharArray( m_thumbButtons[TP_PLAY_PAUSE].szTip ) ] = 0; + updateWindowsLoveButton(); - } + } break; - case AudioEngine::Paused: - { - QPixmap play( RESPATH "images/play-rest.png" ); - m_thumbButtons[TP_PLAY_PAUSE].hIcon = play.toWinHICON(); - m_thumbButtons[TP_PLAY_PAUSE].szTip[ tr( "Play" ).toWCharArray( m_thumbButtons[TP_PLAY_PAUSE].szTip ) ] = 0; - } + case AudioEngine::Paused: + { + m_thumbButtons[TP_PLAY_PAUSE].hIcon = m_thumbIcons[TomahawkUtils::PlayButton]; + m_thumbButtons[TP_PLAY_PAUSE].szTip[ tr( "Play" ).toWCharArray( m_thumbButtons[TP_PLAY_PAUSE].szTip ) ] = 0; + } break; - case AudioEngine::Stopped: + case AudioEngine::Stopped: + { + if ( !AudioEngine::instance()->currentTrack().isNull() ) { - if ( !AudioEngine::instance()->currentTrack().isNull() ) - { - disconnect( AudioEngine::instance()->currentTrack()->toQuery().data(), SIGNAL( socialActionsLoaded() ), this, SLOT( updateWindowsLoveButton() ) ); - } - - QPixmap play( RESPATH "images/play-rest.png" ); - m_thumbButtons[TP_PLAY_PAUSE].hIcon = play.toWinHICON(); - m_thumbButtons[TP_PLAY_PAUSE].szTip[ tr( "Play" ).toWCharArray( m_thumbButtons[TP_PLAY_PAUSE].szTip ) ] = 0; - - QPixmap not_loved( RESPATH "images/not-loved.png" ); - m_thumbButtons[TP_LOVE].hIcon = not_loved.toWinHICON(); - m_thumbButtons[TP_LOVE].dwFlags = THBF_DISABLED; + disconnect( AudioEngine::instance()->currentTrack()->toQuery().data(), SIGNAL( socialActionsLoaded() ), this, SLOT( updateWindowsLoveButton() ) ); } + + m_thumbButtons[TP_PLAY_PAUSE].hIcon = m_thumbIcons[TomahawkUtils::PlayButton]; + m_thumbButtons[TP_PLAY_PAUSE].szTip[ tr( "Play" ).toWCharArray( m_thumbButtons[TP_PLAY_PAUSE].szTip ) ] = 0; + + m_thumbButtons[TP_LOVE].hIcon = m_thumbIcons[TomahawkUtils::NotLoved]; + m_thumbButtons[TP_LOVE].dwFlags = THBF_DISABLED; + } break; - default: - return; + default: + return; } m_taskbarList->ThumbBarUpdateButtons( winId(), ARRAYSIZE( m_thumbButtons ), m_thumbButtons ); @@ -776,14 +775,12 @@ TomahawkWindow::updateWindowsLoveButton() #ifdef HAVE_THUMBBUTTON if ( !AudioEngine::instance()->currentTrack().isNull() && AudioEngine::instance()->currentTrack()->toQuery()->loved() ) { - QPixmap loved( RESPATH "images/loved.png" ); - m_thumbButtons[TP_LOVE].hIcon = loved.toWinHICON(); + m_thumbButtons[TP_LOVE].hIcon = m_thumbIcons[TomahawkUtils::Loved]; m_thumbButtons[TP_LOVE].szTip[ tr( "Unlove" ).toWCharArray( m_thumbButtons[TP_LOVE].szTip ) ] = 0; } else { - QPixmap not_loved( RESPATH "images/not-loved.png" ); - m_thumbButtons[TP_LOVE].hIcon = not_loved.toWinHICON(); + m_thumbButtons[TP_LOVE].hIcon = m_thumbIcons[TomahawkUtils::NotLoved]; m_thumbButtons[TP_LOVE].szTip[ tr( "Love" ).toWCharArray( m_thumbButtons[TP_LOVE].szTip ) ] = 0; } diff --git a/src/TomahawkWindow.h b/src/TomahawkWindow.h index 9a836a5a0..1b9f722cf 100644 --- a/src/TomahawkWindow.h +++ b/src/TomahawkWindow.h @@ -167,6 +167,7 @@ private: #ifdef Q_OS_WIN bool setupWindowsButtons(); const unsigned int m_buttonCreatedID; + QMap<TomahawkUtils::ImageType,HICON> m_thumbIcons; #ifdef HAVE_THUMBBUTTON ITaskbarList3* m_taskbarList; THUMBBUTTON m_thumbButtons[5];