Implemented a custom function to blink a window. On Windows XP the native FlashWindowEx() function doesn't work with caption-less windows.
This commit is contained in:
parent
5ce0c7b82e
commit
6a6ac5396d
@ -30,7 +30,7 @@
|
||||
#define VER_LAMEXP_MINOR_LO 2
|
||||
#define VER_LAMEXP_TYPE Alpha
|
||||
#define VER_LAMEXP_PATCH 10
|
||||
#define VER_LAMEXP_BUILD 476
|
||||
#define VER_LAMEXP_BUILD 480
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Tools versions
|
||||
|
@ -103,7 +103,6 @@ void DropBox::changeEvent(QEvent *e)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void DropBox::showEvent(QShowEvent *event)
|
||||
{
|
||||
QRect screenGeometry = QApplication::desktop()->availableGeometry();
|
||||
@ -122,7 +121,11 @@ void DropBox::showEvent(QShowEvent *event)
|
||||
QTimer::singleShot(333, this, SLOT(showToolTip()));
|
||||
}
|
||||
|
||||
m_moving = false;
|
||||
if(m_moving)
|
||||
{
|
||||
QApplication::restoreOverrideCursor();
|
||||
m_moving = false;
|
||||
}
|
||||
}
|
||||
|
||||
void DropBox::keyPressEvent(QKeyEvent *event)
|
||||
@ -213,3 +216,20 @@ void DropBox::showToolTip(void)
|
||||
{
|
||||
QToolTip::showText(dropBoxLabel->mapToGlobal(dropBoxLabel->pos()), dropBoxLabel->toolTip());
|
||||
}
|
||||
|
||||
bool DropBox::event(QEvent *event)
|
||||
{
|
||||
switch(event->type())
|
||||
{
|
||||
case QEvent::Leave:
|
||||
case QEvent::WindowDeactivate:
|
||||
if(m_moving)
|
||||
{
|
||||
QApplication::restoreOverrideCursor();
|
||||
m_moving = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return QDialog::event(event);
|
||||
}
|
||||
|
@ -61,6 +61,7 @@ protected:
|
||||
void mouseMoveEvent(QMouseEvent *event);
|
||||
void mouseReleaseEvent(QMouseEvent *event);
|
||||
void changeEvent(QEvent *e);
|
||||
bool event(QEvent *event);
|
||||
|
||||
public slots:
|
||||
void modelChanged(void);
|
||||
|
@ -71,7 +71,6 @@
|
||||
#define ABORT_IF_BUSY if(m_banner->isVisible() || m_delayedFileTimer->isActive()) { MessageBeep(MB_ICONEXCLAMATION); return; }
|
||||
#define SET_TEXT_COLOR(WIDGET,COLOR) { QPalette _palette = WIDGET->palette(); _palette.setColor(QPalette::WindowText, COLOR); WIDGET->setPalette(_palette); }
|
||||
#define SET_FONT_BOLD(WIDGET,BOLD) { QFont _font = WIDGET->font(); _font.setBold(BOLD); WIDGET->setFont(_font); }
|
||||
#define FLASH_WINDOW(WND) { FLASHWINFO flashInfo; memset(&flashInfo, 0, sizeof(FLASHWINFO)); flashInfo.cbSize = sizeof(FLASHWINFO); flashInfo.dwFlags = FLASHW_ALL; flashInfo.uCount = 12; flashInfo.dwTimeout = 125; flashInfo.hwnd = WND->winId(); FlashWindowEx(&flashInfo); }
|
||||
#define LINK(URL) QString("<a href=\"%1\">%2</a>").arg(URL).arg(URL)
|
||||
#define TEMP_HIDE_DROPBOX(CMD) { bool __dropBoxVisible = m_dropBox->isVisible(); if(__dropBoxVisible) m_dropBox->hide(); CMD; if(__dropBoxVisible) m_dropBox->show(); }
|
||||
|
||||
@ -2474,7 +2473,7 @@ void MainWindow::showDropBoxWidgetActionTriggered(bool checked)
|
||||
m_dropBox->show();
|
||||
}
|
||||
|
||||
FLASH_WINDOW(m_dropBox);
|
||||
lamexp_blink_window(m_dropBox);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -41,6 +41,8 @@
|
||||
#include <QRegExp>
|
||||
#include <QResource>
|
||||
#include <QTranslator>
|
||||
#include <QEventLoop>
|
||||
#include <QTimer>
|
||||
|
||||
//LameXP includes
|
||||
#include "Resource.h"
|
||||
@ -1380,6 +1382,9 @@ __int64 lamexp_free_diskspace(const QString &path)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Shutdown the computer
|
||||
*/
|
||||
bool lamexp_shutdown_computer(const QString &message, const unsigned long timeout, const bool forceShutdown)
|
||||
{
|
||||
HANDLE hToken = NULL;
|
||||
@ -1404,6 +1409,57 @@ bool lamexp_shutdown_computer(const QString &message, const unsigned long timeou
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Make a window blink (to draw user's attention)
|
||||
*/
|
||||
void lamexp_blink_window(QWidget *poWindow, unsigned int count, unsigned int delay)
|
||||
{
|
||||
static QMutex blinkMutex;
|
||||
|
||||
const double maxOpac = 1.0;
|
||||
const double minOpac = 0.3;
|
||||
const double delOpac = 0.1;
|
||||
|
||||
if(!blinkMutex.tryLock())
|
||||
{
|
||||
qWarning("Blinking is already in progress, skipping!");
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
const int steps = static_cast<int>(ceil(maxOpac - minOpac) / delOpac);
|
||||
const int sleep = static_cast<int>(floor(static_cast<double>(delay) / static_cast<double>(steps)));
|
||||
const double opacity = poWindow->windowOpacity();
|
||||
|
||||
for(unsigned int i = 0; i < count; i++)
|
||||
{
|
||||
for(double x = maxOpac; x >= minOpac; x -= delOpac)
|
||||
{
|
||||
poWindow->setWindowOpacity(x);
|
||||
QApplication::processEvents();
|
||||
Sleep(sleep);
|
||||
}
|
||||
|
||||
for(double x = minOpac; x <= maxOpac; x += delOpac)
|
||||
{
|
||||
poWindow->setWindowOpacity(x);
|
||||
QApplication::processEvents();
|
||||
Sleep(sleep);
|
||||
}
|
||||
}
|
||||
|
||||
poWindow->setWindowOpacity(opacity);
|
||||
QApplication::processEvents();
|
||||
blinkMutex.unlock();
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
blinkMutex.unlock();
|
||||
qWarning("Exception error while blinking!");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Finalization function (final clean-up)
|
||||
*/
|
||||
|
@ -36,6 +36,7 @@
|
||||
class QString;
|
||||
class QStringList;
|
||||
class QDate;
|
||||
class QWidget;
|
||||
class LockedFile;
|
||||
enum QtMsgType;
|
||||
|
||||
@ -115,6 +116,7 @@ QString lamexp_known_folder(lamexp_known_folder_t folder_id);
|
||||
__int64 lamexp_free_diskspace(const QString &path);
|
||||
bool lamexp_remove_file(const QString &filename);
|
||||
bool lamexp_themes_enabled(void);
|
||||
void lamexp_blink_window(QWidget *poWindow, unsigned int count = 10, unsigned int delay = 150);
|
||||
|
||||
//Debug-only functions
|
||||
SIZE_T lamexp_dbg_private_bytes(void);
|
||||
|
Loading…
Reference in New Issue
Block a user