mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
Merge "Update icon with gtk theme change"
This commit is contained in:
commit
4bb9a8d0bd
@ -6,6 +6,29 @@ extern "C" {
|
||||
#include <gtk/gtk.h>
|
||||
}
|
||||
#define signals public
|
||||
|
||||
|
||||
static void requrestUpdateIcons()
|
||||
{
|
||||
//can not passing QObject to the callback function,so use signal
|
||||
emit SignalManager::instance()->requestAppIconUpdate();
|
||||
}
|
||||
|
||||
void initGtkThemeWatcher()
|
||||
{
|
||||
GtkSettings* gs = gtk_settings_get_default();
|
||||
g_signal_connect(gs, "notify::gtk-icon-theme-name",
|
||||
G_CALLBACK(requrestUpdateIcons), NULL);
|
||||
}
|
||||
|
||||
SignalManager *SignalManager::m_signalManager = NULL;
|
||||
SignalManager *SignalManager::instance()
|
||||
{
|
||||
if (!m_signalManager)
|
||||
m_signalManager = new SignalManager;
|
||||
return m_signalManager;
|
||||
}
|
||||
|
||||
MainItem::MainItem(QWidget *parent) : QLabel(parent)
|
||||
{
|
||||
setAcceptDrops(true);
|
||||
@ -16,6 +39,10 @@ MainItem::MainItem(QWidget *parent) : QLabel(parent)
|
||||
updateIcon(false);
|
||||
});
|
||||
updateIcon(false);
|
||||
|
||||
initGtkThemeWatcher();
|
||||
//can't use lambda here
|
||||
connect(SignalManager::instance(), SIGNAL(requestAppIconUpdate()), this, SLOT(onRequestUpdateIcon()));
|
||||
}
|
||||
|
||||
MainItem::~MainItem()
|
||||
@ -126,6 +153,11 @@ void MainItem::dropEvent(QDropEvent *event)
|
||||
}
|
||||
}
|
||||
|
||||
void MainItem::onRequestUpdateIcon()
|
||||
{
|
||||
updateIcon(false);
|
||||
}
|
||||
|
||||
void MainItem::updateIcon(bool isOpen)
|
||||
{
|
||||
QString iconName = "";
|
||||
@ -144,8 +176,8 @@ void MainItem::updateIcon(bool isOpen)
|
||||
iconName = "user-trash-empty";
|
||||
}
|
||||
|
||||
QPixmap pixmap = QIcon::fromTheme(iconName).pixmap(Dock::APPLET_FASHION_ICON_SIZE,Dock::APPLET_FASHION_ICON_SIZE);
|
||||
setPixmap(pixmap);
|
||||
QPixmap pixmap(getThemeIconPath(iconName));
|
||||
setPixmap(pixmap.scaled(Dock::APPLET_FASHION_ICON_SIZE,Dock::APPLET_FASHION_ICON_SIZE));
|
||||
}
|
||||
|
||||
// iconName should be a icon name constraints to the freeedesktop standard.
|
||||
|
@ -17,6 +17,19 @@
|
||||
#include "dbus/dbustrashjob.h"
|
||||
#include "dbus/dbuslauncher.h"
|
||||
|
||||
class SignalManager : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
static SignalManager * instance();
|
||||
|
||||
signals:
|
||||
void requestAppIconUpdate();
|
||||
|
||||
private:
|
||||
static SignalManager *m_signalManager;
|
||||
explicit SignalManager(QObject *parent = 0) : QObject(parent) {}
|
||||
};
|
||||
|
||||
class MainItem : public QLabel
|
||||
{
|
||||
@ -33,6 +46,9 @@ protected:
|
||||
void dragLeaveEvent(QDragLeaveEvent *);
|
||||
void dropEvent(QDropEvent * event);
|
||||
|
||||
private slots:
|
||||
void onRequestUpdateIcon();
|
||||
|
||||
private:
|
||||
QString getThemeIconPath(QString iconName);
|
||||
void updateIcon(bool isOpen);
|
||||
|
@ -67,7 +67,8 @@ HEADERS += \
|
||||
src/widgets/screenmask.h \
|
||||
src/widgets/windowpreview.h \
|
||||
src/mainwidget.h \
|
||||
src/widgets/previewframe.h
|
||||
src/widgets/previewframe.h \
|
||||
src/controller/signalmanager.h
|
||||
|
||||
SOURCES += \
|
||||
libs/xcb_misc.cpp \
|
||||
@ -103,4 +104,5 @@ SOURCES += \
|
||||
src/widgets/windowpreview.cpp \
|
||||
src/main.cpp \
|
||||
src/mainwidget.cpp \
|
||||
src/widgets/previewframe.cpp
|
||||
src/widgets/previewframe.cpp \
|
||||
src/controller/signalmanager.cpp
|
||||
|
15
dde-dock/src/controller/signalmanager.cpp
Normal file
15
dde-dock/src/controller/signalmanager.cpp
Normal file
@ -0,0 +1,15 @@
|
||||
#include "signalmanager.h"
|
||||
|
||||
SignalManager *SignalManager::m_signalManager = NULL;
|
||||
SignalManager *SignalManager::instance()
|
||||
{
|
||||
if (!m_signalManager)
|
||||
m_signalManager = new SignalManager;
|
||||
return m_signalManager;
|
||||
}
|
||||
|
||||
SignalManager::SignalManager(QObject *parent) : QObject(parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
20
dde-dock/src/controller/signalmanager.h
Normal file
20
dde-dock/src/controller/signalmanager.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef SIGNALMANAGER_H
|
||||
#define SIGNALMANAGER_H
|
||||
|
||||
#include <QObject>
|
||||
|
||||
class SignalManager : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
static SignalManager *instance();
|
||||
|
||||
signals:
|
||||
void requestAppIconUpdate();
|
||||
|
||||
private:
|
||||
explicit SignalManager(QObject *parent = 0);
|
||||
static SignalManager *m_signalManager;
|
||||
};
|
||||
|
||||
#endif // SIGNALMANAGER_H
|
@ -7,6 +7,26 @@
|
||||
#include "mainwidget.h"
|
||||
#include "logmanager.h"
|
||||
#include "Logger.h"
|
||||
#include "controller/signalmanager.h"
|
||||
|
||||
#undef signals
|
||||
extern "C" {
|
||||
#include <gtk/gtk.h>
|
||||
}
|
||||
#define signals public
|
||||
|
||||
static void requrestUpdateIcons()
|
||||
{
|
||||
//can not passing QObject to the callback function,so use signal
|
||||
emit SignalManager::instance()->requestAppIconUpdate();
|
||||
}
|
||||
|
||||
void initGtkThemeWatcher()
|
||||
{
|
||||
GtkSettings* gs = gtk_settings_get_default();
|
||||
g_signal_connect(gs, "notify::gtk-icon-theme-name",
|
||||
G_CALLBACK(requrestUpdateIcons), NULL);
|
||||
}
|
||||
|
||||
// let startdde know that we've already started.
|
||||
void RegisterDdeSession()
|
||||
@ -56,7 +76,6 @@ int main(int argc, char *argv[])
|
||||
qWarning() << "[Error:] Open style file errr!";
|
||||
}
|
||||
|
||||
|
||||
MainWidget w;
|
||||
w.show();
|
||||
qWarning() << "The main window has been shown!";
|
||||
@ -64,6 +83,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
RegisterDdeSession();
|
||||
|
||||
initGtkThemeWatcher();
|
||||
return a.exec();
|
||||
} else {
|
||||
qWarning() << "dde dock is running...";
|
||||
|
@ -2,14 +2,15 @@
|
||||
#include <QPainter>
|
||||
#include <QSvgRenderer>
|
||||
|
||||
#include "appicon.h"
|
||||
#include "controller/signalmanager.h"
|
||||
|
||||
#undef signals
|
||||
extern "C" {
|
||||
#include <gtk/gtk.h>
|
||||
}
|
||||
#define signals public
|
||||
|
||||
#include "appicon.h"
|
||||
|
||||
AppIcon::AppIcon(QWidget *parent, Qt::WindowFlags f) :
|
||||
QLabel(parent, f)
|
||||
{
|
||||
@ -20,10 +21,14 @@ AppIcon::AppIcon(QWidget *parent, Qt::WindowFlags f) :
|
||||
|
||||
this->setAttribute(Qt::WA_TranslucentBackground);
|
||||
this->setAlignment(Qt::AlignCenter);
|
||||
|
||||
connect(SignalManager::instance(), &SignalManager::requestAppIconUpdate, this, &AppIcon::updateIcon);
|
||||
}
|
||||
|
||||
void AppIcon::setIcon(const QString &iconPath)
|
||||
{
|
||||
m_iconPath = iconPath;
|
||||
|
||||
QPixmap pixmap(48, 48);
|
||||
|
||||
// iconPath is an absolute path of the system.
|
||||
@ -114,3 +119,9 @@ QString AppIcon::getThemeIconPath(QString iconName)
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
void AppIcon::updateIcon()
|
||||
{
|
||||
if (!m_iconPath.isEmpty())
|
||||
setIcon(m_iconPath);
|
||||
}
|
||||
|
@ -32,9 +32,10 @@ protected:
|
||||
|
||||
private:
|
||||
DockModeData *m_modeData = DockModeData::instance();
|
||||
QString m_iconPath;
|
||||
QString m_iconPath = "";
|
||||
|
||||
QString getThemeIconPath(QString iconName);
|
||||
void updateIcon();
|
||||
};
|
||||
|
||||
#endif // APPICON_H
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "launcheritem.h"
|
||||
#include "controller/signalmanager.h"
|
||||
|
||||
LauncherItem::LauncherItem(QWidget *parent) : AbstractDockItem(parent)
|
||||
{
|
||||
@ -14,6 +15,7 @@ LauncherItem::LauncherItem(QWidget *parent) : AbstractDockItem(parent)
|
||||
|
||||
//TODO icon not show on init
|
||||
QTimer::singleShot(20, this, SLOT(updateIcon()));
|
||||
connect(SignalManager::instance(), &SignalManager::requestAppIconUpdate, this, &LauncherItem::updateIcon);
|
||||
}
|
||||
|
||||
void LauncherItem::enterEvent(QEvent *)
|
||||
|
Loading…
x
Reference in New Issue
Block a user