mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-29 22:20:48 +00:00
Qt: set up taskbar progress for the gs_frame
This commit is contained in:
parent
b9b6bd85a6
commit
17250bc2d4
@ -62,6 +62,32 @@ gs_frame::gs_frame(const QString& title, const QRect& geometry, QIcon appIcon, b
|
|||||||
|
|
||||||
// Change cursor when in fullscreen.
|
// Change cursor when in fullscreen.
|
||||||
connect(this, &QWindow::visibilityChanged, this, &gs_frame::HandleCursor);
|
connect(this, &QWindow::visibilityChanged, this, &gs_frame::HandleCursor);
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
m_tb_button = new QWinTaskbarButton();
|
||||||
|
m_tb_progress = m_tb_button->progress();
|
||||||
|
m_tb_progress->setRange(0, m_gauge_max);
|
||||||
|
m_tb_progress->setVisible(false);
|
||||||
|
#elif HAVE_QTDBUS
|
||||||
|
UpdateProgress(0);
|
||||||
|
m_progress_value = 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
gs_frame::~gs_frame()
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
if (m_tb_progress)
|
||||||
|
{
|
||||||
|
m_tb_progress->hide();
|
||||||
|
}
|
||||||
|
if (m_tb_button)
|
||||||
|
{
|
||||||
|
m_tb_button->deleteLater();
|
||||||
|
}
|
||||||
|
#elif HAVE_QTDBUS
|
||||||
|
UpdateProgress(0, false);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void gs_frame::paintEvent(QPaintEvent *event)
|
void gs_frame::paintEvent(QPaintEvent *event)
|
||||||
@ -159,6 +185,15 @@ void gs_frame::show()
|
|||||||
setVisibility(FullScreen);
|
setVisibility(FullScreen);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
// if we do this before show, the QWinTaskbarProgress won't show
|
||||||
|
if (m_tb_button)
|
||||||
|
{
|
||||||
|
m_tb_button->setWindow(this);
|
||||||
|
m_tb_progress->show();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
display_handle_t gs_frame::handle() const
|
display_handle_t gs_frame::handle() const
|
||||||
@ -381,3 +416,66 @@ wm_event gs_frame::get_default_wm_event() const
|
|||||||
{
|
{
|
||||||
return (m_user_interaction_active) ? wm_event::geometry_change_in_progress : wm_event::none;
|
return (m_user_interaction_active) ? wm_event::geometry_change_in_progress : wm_event::none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gs_frame::progress_reset()
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
if (m_tb_progress)
|
||||||
|
{
|
||||||
|
m_tb_progress->reset();
|
||||||
|
}
|
||||||
|
#elif HAVE_QTDBUS
|
||||||
|
UpdateProgress(0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void gs_frame::progress_increment(int delta)
|
||||||
|
{
|
||||||
|
if (delta == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
if (m_tb_progress)
|
||||||
|
{
|
||||||
|
m_tb_progress->setValue(m_tb_progress->value() + delta);
|
||||||
|
}
|
||||||
|
#elif HAVE_QTDBUS
|
||||||
|
m_progress_value += delta;
|
||||||
|
UpdateProgress(m_progress_value);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void gs_frame::progress_set_limit(int limit)
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
if (m_tb_progress)
|
||||||
|
{
|
||||||
|
m_tb_progress->setMaximum(limit);
|
||||||
|
}
|
||||||
|
#elif HAVE_QTDBUS
|
||||||
|
m_gauge_max = limit;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_QTDBUS
|
||||||
|
void gs_frame::UpdateProgress(int progress, bool disable)
|
||||||
|
{
|
||||||
|
QDBusMessage message = QDBusMessage::createSignal
|
||||||
|
(
|
||||||
|
QStringLiteral("/"),
|
||||||
|
QStringLiteral("com.canonical.Unity.LauncherEntry"),
|
||||||
|
QStringLiteral("Update")
|
||||||
|
);
|
||||||
|
QVariantMap properties;
|
||||||
|
if (disable)
|
||||||
|
properties.insert(QStringLiteral("progress-visible"), false);
|
||||||
|
else
|
||||||
|
properties.insert(QStringLiteral("progress-visible"), true);
|
||||||
|
//Progress takes a value from 0.0 to 0.1
|
||||||
|
properties.insert(QStringLiteral("progress"), (double)progress / (double)m_gauge_max);
|
||||||
|
message << QStringLiteral("application://rpcs3.desktop") << properties;
|
||||||
|
QDBusConnection::sessionBus().send(message);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@ -6,10 +6,31 @@
|
|||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QWindow>
|
#include <QWindow>
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <QWinTaskbarProgress>
|
||||||
|
#include <QWinTaskbarButton>
|
||||||
|
#include <QWinTHumbnailToolbar>
|
||||||
|
#include <QWinTHumbnailToolbutton>
|
||||||
|
#elif HAVE_QTDBUS
|
||||||
|
#include <QtDBus/QDBusMessage>
|
||||||
|
#include <QtDBus/QDBusConnection>
|
||||||
|
#endif
|
||||||
|
|
||||||
class gs_frame : public QWindow, public GSFrameBase
|
class gs_frame : public QWindow, public GSFrameBase
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
private:
|
||||||
|
// taskbar progress
|
||||||
|
int m_gauge_max = 100;
|
||||||
|
#ifdef _WIN32
|
||||||
|
QWinTaskbarButton* m_tb_button = nullptr;
|
||||||
|
QWinTaskbarProgress* m_tb_progress = nullptr;
|
||||||
|
#elif HAVE_QTDBUS
|
||||||
|
int m_progress_value = 0;
|
||||||
|
void UpdateProgress(int progress, bool disable = false);
|
||||||
|
#endif
|
||||||
|
|
||||||
u64 m_frames = 0;
|
u64 m_frames = 0;
|
||||||
QString m_windowTitle;
|
QString m_windowTitle;
|
||||||
bool m_show_fps;
|
bool m_show_fps;
|
||||||
@ -22,12 +43,19 @@ class gs_frame : public QWindow, public GSFrameBase
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
gs_frame(const QString& title, const QRect& geometry, QIcon appIcon, bool disableMouse);
|
gs_frame(const QString& title, const QRect& geometry, QIcon appIcon, bool disableMouse);
|
||||||
|
~gs_frame();
|
||||||
|
|
||||||
draw_context_t make_context() override;
|
draw_context_t make_context() override;
|
||||||
void set_current(draw_context_t context) override;
|
void set_current(draw_context_t context) override;
|
||||||
void delete_context(draw_context_t context) override;
|
void delete_context(draw_context_t context) override;
|
||||||
|
|
||||||
wm_event get_default_wm_event() const override;
|
wm_event get_default_wm_event() const override;
|
||||||
|
|
||||||
|
// taskbar progress
|
||||||
|
void progress_reset();
|
||||||
|
void progress_increment(int delta);
|
||||||
|
void progress_set_limit(int limit);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void paintEvent(QPaintEvent *event);
|
virtual void paintEvent(QPaintEvent *event);
|
||||||
virtual void showEvent(QShowEvent *event) override;
|
virtual void showEvent(QShowEvent *event) override;
|
||||||
@ -51,6 +79,7 @@ protected:
|
|||||||
bool nativeEvent(const QByteArray &eventType, void *message, long *result) override;
|
bool nativeEvent(const QByteArray &eventType, void *message, long *result) override;
|
||||||
|
|
||||||
bool event(QEvent* ev) override;
|
bool event(QEvent* ev) override;
|
||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void HandleCursor(QWindow::Visibility visibility);
|
void HandleCursor(QWindow::Visibility visibility);
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user