diff --git a/gui/ProcessingDialog.ui b/gui/ProcessingDialog.ui
index 5a4d57df..d09ffd1d 100644
--- a/gui/ProcessingDialog.ui
+++ b/gui/ProcessingDialog.ui
@@ -205,6 +205,22 @@
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 6
+ 20
+
+
+
+
diff --git a/gui/UpdateDialog.ui b/gui/UpdateDialog.ui
index 75f1bc53..2dbd4762 100644
--- a/gui/UpdateDialog.ui
+++ b/gui/UpdateDialog.ui
@@ -261,7 +261,7 @@
- 6
+ 9
20
diff --git a/res/MainIcon1.png b/res/MainIcon1.png
index 2ac0805d..bbf98b82 100644
Binary files a/res/MainIcon1.png and b/res/MainIcon1.png differ
diff --git a/res/images/Working.gif b/res/images/Working.gif
index 3288d103..e19236d9 100644
Binary files a/res/images/Working.gif and b/res/images/Working.gif differ
diff --git a/src/Config.h b/src/Config.h
index c4753763..7fadb0c1 100644
--- a/src/Config.h
+++ b/src/Config.h
@@ -35,7 +35,7 @@
#define VER_LAMEXP_MINOR_LO 9
#define VER_LAMEXP_TYPE Alpha
#define VER_LAMEXP_PATCH 8
-#define VER_LAMEXP_BUILD 1475
+#define VER_LAMEXP_BUILD 1476
#define VER_LAMEXP_CONFG 1348
///////////////////////////////////////////////////////////////////////////////
diff --git a/src/Dialog_MainWindow.cpp b/src/Dialog_MainWindow.cpp
index ee34902a..3f92df84 100644
--- a/src/Dialog_MainWindow.cpp
+++ b/src/Dialog_MainWindow.cpp
@@ -919,7 +919,7 @@ void MainWindow::showEvent(QShowEvent *event)
m_accepted = false;
resizeEvent(NULL);
sourceModelChanged();
-
+
if(!event->spontaneous())
{
ui->tabWidget->setCurrentIndex(0);
@@ -928,6 +928,7 @@ void MainWindow::showEvent(QShowEvent *event)
if(m_firstTimeShown)
{
m_firstTimeShown = false;
+ lamexp_set_window_icon(this, lamexp_app_icon(), true);
QTimer::singleShot(0, this, SLOT(windowShown()));
}
else
diff --git a/src/Dialog_Processing.cpp b/src/Dialog_Processing.cpp
index 816f1d67..b9298120 100644
--- a/src/Dialog_Processing.cpp
+++ b/src/Dialog_Processing.cpp
@@ -145,6 +145,7 @@ ProcessingDialog::ProcessingDialog(FileListModel *fileListModel, const AudioFile
m_cpuObserver(NULL),
m_ramObserver(NULL),
m_progressViewFilter(-1),
+ m_initThreads(0),
m_firstShow(true)
{
//Init the dialog, from the .ui file
@@ -173,7 +174,6 @@ ProcessingDialog::ProcessingDialog(FileListModel *fileListModel, const AudioFile
//Init progress indicator
m_progressIndicator = new QMovie(":/images/Working.gif");
m_progressIndicator->setCacheMode(QMovie::CacheAll);
- m_progressIndicator->setSpeed(50);
ui->label_headerWorking->setMovie(m_progressIndicator);
ui->progressBar->setValue(0);
@@ -356,18 +356,22 @@ void ProcessingDialog::showEvent(QShowEvent *event)
{
static const char *NA = " N/A";
+ //Update the window icon
+ lamexp_set_window_icon(this, lamexp_app_icon(), true);
+
lamexp_enable_close_button(this, false);
ui->button_closeDialog->setEnabled(false);
ui->button_AbortProcess->setEnabled(false);
+ m_progressIndicator->start();
m_systemTray->setVisible(true);
lamexp_change_process_priority(1);
-
+
ui->label_cpu->setText(NA);
ui->label_disk->setText(NA);
ui->label_ram->setText(NA);
- QTimer::singleShot(1000, this, SLOT(initEncoding()));
+ QTimer::singleShot(500, this, SLOT(initEncoding()));
m_firstShow = false;
}
@@ -483,7 +487,6 @@ void ProcessingDialog::initEncoding(void)
CHANGE_BACKGROUND_COLOR(ui->frame_header, QColor(Qt::white));
SET_PROGRESS_TEXT(tr("Encoding files, please wait..."));
- m_progressIndicator->start();
ui->button_closeDialog->setEnabled(false);
ui->button_AbortProcess->setEnabled(true);
@@ -534,14 +537,28 @@ void ProcessingDialog::initEncoding(void)
m_threadPool->setMaxThreadCount(maximumInstances);
}
- for(int i = 0; i < m_threadPool->maxThreadCount(); i++)
+ //for(int i = 0; i < m_threadPool->maxThreadCount(); i++)
+ //{
+ // startNextJob();
+ // qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
+ // QThread::yieldCurrentThread();
+ //}
+
+ m_initThreads = m_threadPool->maxThreadCount();
+ QTimer::singleShot(100, this, SLOT(initNextJob()));
+ m_timerStart = lamexp_perfcounter_value();
+}
+
+void ProcessingDialog::initNextJob(void)
+{
+ if((m_initThreads > 0) && (!m_userAborted))
{
startNextJob();
- qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
- QThread::yieldCurrentThread();
+ if(--m_initThreads > 0)
+ {
+ QTimer::singleShot(100, this, SLOT(initNextJob()));
+ }
}
-
- m_timerStart = lamexp_perfcounter_value();
}
void ProcessingDialog::startNextJob(void)
@@ -616,9 +633,6 @@ void ProcessingDialog::startNextJob(void)
qFatal("Fatal Error: Thread initialization has failed!");
}
- //Update GUI
- qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
-
//Give it a go!
if(!thread->start(m_threadPool))
{
diff --git a/src/Dialog_Processing.h b/src/Dialog_Processing.h
index c3a3d80c..b92ec455 100644
--- a/src/Dialog_Processing.h
+++ b/src/Dialog_Processing.h
@@ -69,6 +69,7 @@ public:
private slots:
void initEncoding(void);
+ void initNextJob(void);
void startNextJob(void);
void doneEncoding(void);
void abortEncoding(bool force = false);
@@ -116,6 +117,7 @@ private:
QActionGroup *m_progressViewFilterGroup;
QLabel *m_filterInfoLabel;
QLabel *m_filterInfoLabelIcon;
+ unsigned int m_initThreads;
unsigned int m_runningThreads;
unsigned int m_currentFile;
QList m_allJobs;
diff --git a/src/Global.h b/src/Global.h
index b1e4bd4c..8aa8dbfc 100644
--- a/src/Global.h
+++ b/src/Global.h
@@ -139,7 +139,7 @@ lamexp_syscolor_t;
// GLOBAL FUNCTIONS
///////////////////////////////////////////////////////////////////////////////
-QIcon lamexp_app_icon(const QDate *date = NULL, const QTime *time = NULL);
+const QIcon &lamexp_app_icon(void);
bool lamexp_append_sysmenu(const QWidget *win, const unsigned int identifier, const QString &text);
const QStringList &lamexp_arguments(void);
QStringList lamexp_available_codepages(bool noAliases = true);
@@ -204,6 +204,7 @@ QString lamexp_rand_str(const bool bLong = false);
void lamexp_register_tool(const QString &toolName, LockedFile *file, unsigned int version = 0, const QString *tag = NULL);
bool lamexp_remove_file(const QString &filename);
void lamexp_seed_rand(void);
+bool lamexp_set_window_icon(QWidget *window, const QIcon &icon, const bool bIsBigIcon);
bool lamexp_sheet_of_glass(QWidget *window);
bool lamexp_sheet_of_glass_update(QWidget *window);
bool lamexp_shutdown_computer(const QString &message, const unsigned long timeout = 30, const bool forceShutdown = true, const bool hibernate = false);
diff --git a/src/Global_Utils.cpp b/src/Global_Utils.cpp
index b38b0b12..06f1cdd0 100644
--- a/src/Global_Utils.cpp
+++ b/src/Global_Utils.cpp
@@ -54,6 +54,13 @@ static struct
}
g_lamexp_temp_folder;
+static struct
+{
+ QIcon *appIcon;
+ QReadWriteLock lock;
+}
+g_lamexp_app_icon;
+
///////////////////////////////////////////////////////////////////////////////
// GLOBAL FUNCTIONS
///////////////////////////////////////////////////////////////////////////////
@@ -516,35 +523,51 @@ static bool lamexp_thanksgiving(const QDate &date)
/*
* Initialize app icon
*/
-QIcon lamexp_app_icon(const QDate *date, const QTime *time)
+const QIcon &lamexp_app_icon(void)
{
- QDate currentDate = (date) ? QDate(*date) : QDate::currentDate();
- QTime currentTime = (time) ? QTime(*time) : QTime::currentTime();
+ QReadLocker readLock(&g_lamexp_app_icon.lock);
+
+ //Already initialized?
+ if(g_lamexp_app_icon.appIcon)
+ {
+ return *g_lamexp_app_icon.appIcon;
+ }
+
+ readLock.unlock();
+ QWriteLocker writeLock(&g_lamexp_app_icon.lock);
+
+ while(!g_lamexp_app_icon.appIcon)
+ {
+ QDate currentDate = QDate::currentDate();
+ QTime currentTime = QTime::currentTime();
- if(lamexp_thanksgiving(currentDate))
- {
- return QIcon(":/MainIcon6.png");
- }
- else if(((currentDate.month() == 12) && (currentDate.day() == 31) && (currentTime.hour() >= 20)) || ((currentDate.month() == 1) && (currentDate.day() == 1) && (currentTime.hour() <= 19)))
- {
- return QIcon(":/MainIcon5.png");
- }
- else if(((currentDate.month() == 10) && (currentDate.day() == 31) && (currentTime.hour() >= 12)) || ((currentDate.month() == 11) && (currentDate.day() == 1) && (currentTime.hour() <= 11)))
- {
- return QIcon(":/MainIcon4.png");
- }
- else if((currentDate.month() == 12) && (currentDate.day() >= 24) && (currentDate.day() <= 26))
- {
- return QIcon(":/MainIcon3.png");
- }
- else if(lamexp_computus(currentDate))
- {
- return QIcon(":/MainIcon2.png");
- }
- else
- {
- return QIcon(":/MainIcon1.png");
+ if(lamexp_thanksgiving(currentDate))
+ {
+ g_lamexp_app_icon.appIcon = new QIcon(":/MainIcon6.png");
+ }
+ else if(((currentDate.month() == 12) && (currentDate.day() == 31) && (currentTime.hour() >= 20)) || ((currentDate.month() == 1) && (currentDate.day() == 1) && (currentTime.hour() <= 19)))
+ {
+ g_lamexp_app_icon.appIcon = new QIcon(":/MainIcon5.png");
+ }
+ else if(((currentDate.month() == 10) && (currentDate.day() == 31) && (currentTime.hour() >= 12)) || ((currentDate.month() == 11) && (currentDate.day() == 1) && (currentTime.hour() <= 11)))
+ {
+ g_lamexp_app_icon.appIcon = new QIcon(":/MainIcon4.png");
+ }
+ else if((currentDate.month() == 12) && (currentDate.day() >= 24) && (currentDate.day() <= 26))
+ {
+ g_lamexp_app_icon.appIcon = new QIcon(":/MainIcon3.png");
+ }
+ else if(lamexp_computus(currentDate))
+ {
+ g_lamexp_app_icon.appIcon = new QIcon(":/MainIcon2.png");
+ }
+ else
+ {
+ g_lamexp_app_icon.appIcon = new QIcon(":/MainIcon1.png");
+ }
}
+
+ return *g_lamexp_app_icon.appIcon;
}
/*
@@ -589,4 +612,5 @@ bool lamexp_broadcast(int eventType, bool onlyToVisible)
extern "C" void _lamexp_global_init_utils(void)
{
LAMEXP_ZERO_MEMORY(g_lamexp_temp_folder);
+ LAMEXP_ZERO_MEMORY(g_lamexp_app_icon);
}
diff --git a/src/Global_Win32.cpp b/src/Global_Win32.cpp
index e344be8b..c5654754 100644
--- a/src/Global_Win32.cpp
+++ b/src/Global_Win32.cpp
@@ -915,6 +915,22 @@ static bool lamexp_check_elevation(void)
return !bIsProcessElevated;
}
+/*
+ * Convert QIcon to HICON -> caller is responsible for destroying the HICON!
+ */
+static HICON lamexp_qicon2hicon(const QIcon &icon, const int w, const int h)
+{
+ if(!icon.isNull())
+ {
+ QPixmap pixmap = icon.pixmap(w, h);
+ if(!pixmap.isNull())
+ {
+ return pixmap.toWinHICON();
+ }
+ }
+ return NULL;
+}
+
/*
* Initialize Qt framework
*/
@@ -1079,14 +1095,18 @@ bool lamexp_init_qt(int argc, char* argv[])
#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
if(g_lamexp_console_attached && (!lamexp_detect_wine()))
{
- typedef DWORD (__stdcall *SetConsoleIconFun)(HICON);
QLibrary kernel32("kernel32.dll");
if(kernel32.load())
{
- SetConsoleIconFun SetConsoleIconPtr = (SetConsoleIconFun) kernel32.resolve("SetConsoleIcon");
- QPixmap pixmap = QIcon(":/icons/sound.png").pixmap(16, 16);
- if((SetConsoleIconPtr != NULL) && (!pixmap.isNull())) SetConsoleIconPtr(pixmap.toWinHICON());
- kernel32.unload();
+ typedef DWORD (__stdcall *SetConsoleIconFun)(HICON);
+ if(SetConsoleIconFun SetConsoleIconPtr = (SetConsoleIconFun) kernel32.resolve("SetConsoleIcon"))
+ {
+ if(HICON hIcon = lamexp_qicon2hicon(QIcon(":/icons/sound.png"), 16, 16))
+ {
+ SetConsoleIconPtr(hIcon);
+ DestroyIcon(hIcon);
+ }
+ }
}
}
#endif
@@ -2004,6 +2024,24 @@ bool lamexp_sheet_of_glass_update(QWidget *window)
return true;
}
+/*
+ * Update the window icon
+ */
+bool lamexp_set_window_icon(QWidget *window, const QIcon &icon, const bool bIsBigIcon)
+{
+ if(!icon.isNull())
+ {
+ const int extend = (bIsBigIcon ? 32 : 16);
+ if(HICON hIcon = lamexp_qicon2hicon(icon, extend, extend))
+ {
+ SendMessage(window->winId(), WM_SETICON, (bIsBigIcon ? ICON_BIG : ICON_SMALL), LPARAM(hIcon));
+ //DestroyIcon(hIcon); /*FIXME: Destroying the icon here will remove it from the window*/
+ }
+ return true;
+ }
+ return false;
+}
+
/*
* Get system color info
*/