diff --git a/plugins/keyboard-layout/dbusadaptors.cpp b/plugins/keyboard-layout/dbusadaptors.cpp index 29b4c4c21..ef2f6e68e 100644 --- a/plugins/keyboard-layout/dbusadaptors.cpp +++ b/plugins/keyboard-layout/dbusadaptors.cpp @@ -35,7 +35,14 @@ DBusAdaptors::~DBusAdaptors() QString DBusAdaptors::layout() const { - const auto layouts = m_keyboard->currentLayout().split(';'); + QStringList layouts = m_keyboard->currentLayout().split(';'); + layouts.removeAll(QString("")); + + // Hide layout if user is chinese + QLocale locale; + if (locale.language() == QLocale::Chinese) { + return QString(); + } if (!layouts.isEmpty()) return layouts.first(); diff --git a/plugins/system-tray/indicatortraywidget.cpp b/plugins/system-tray/indicatortraywidget.cpp index 73ac18a9a..ab7d5b2ee 100644 --- a/plugins/system-tray/indicatortraywidget.cpp +++ b/plugins/system-tray/indicatortraywidget.cpp @@ -203,6 +203,14 @@ void IndicatorTrayWidget::setPixmapData(const QByteArray &data) rawPixmap.setDevicePixelRatio(devicePixelRatioF()); d->label->setPixmap(rawPixmap); d->updateContent(); + + if (data.isEmpty()) { + Q_EMIT removed(); + return; + } + else { + Q_EMIT delayLoaded(); + } } void IndicatorTrayWidget::setPixmapPath(const QString &text) @@ -210,6 +218,14 @@ void IndicatorTrayWidget::setPixmapPath(const QString &text) Q_D(IndicatorTrayWidget); d->label->setPixmap(QPixmap(text)); d->updateContent(); + + if (text.isEmpty()) { + Q_EMIT removed(); + return; + } + else { + Q_EMIT delayLoaded(); + } } void IndicatorTrayWidget::setText(const QString &text) @@ -217,6 +233,14 @@ void IndicatorTrayWidget::setText(const QString &text) Q_D(IndicatorTrayWidget); d->label->setText(text); d->updateContent(); + + if (text.isEmpty()) { + Q_EMIT removed(); + return; + } + else { + Q_EMIT delayLoaded(); + } } void IndicatorTrayWidget::iconPropertyChanged(const QDBusMessage &msg) @@ -289,7 +313,5 @@ void IndicatorTrayWidgetPrivate::initDBus(const QString &indicatorKey) QDBusInterface interface(dbusService, dbusPath, dbusInterface, bus, q); interface.asyncCall(methodName); }); - - Q_EMIT q->delayLoaded(); }); } diff --git a/plugins/system-tray/indicatortraywidget.h b/plugins/system-tray/indicatortraywidget.h index aedaf715a..a4f9aee9d 100644 --- a/plugins/system-tray/indicatortraywidget.h +++ b/plugins/system-tray/indicatortraywidget.h @@ -54,6 +54,7 @@ public Q_SLOTS: Q_SIGNALS: void delayLoaded(); + void removed(); void clicked(uint8_t, int, int); private: diff --git a/plugins/system-tray/systemtrayplugin.cpp b/plugins/system-tray/systemtrayplugin.cpp index 4e8794220..19b44bd9b 100644 --- a/plugins/system-tray/systemtrayplugin.cpp +++ b/plugins/system-tray/systemtrayplugin.cpp @@ -211,6 +211,8 @@ void SystemTrayPlugin::trayAdded(const QString itemKey) auto addTrayWidget = [ = ](AbstractTrayWidget * trayWidget) { if (trayWidget) { + if (m_trayList.values().contains(trayWidget)) return; + m_trayList.insert(itemKey, trayWidget); m_fashionItem->setMouseEnable(m_trayList.size() == 1); if (!m_fashionItem->activeTray()) { @@ -239,6 +241,9 @@ void SystemTrayPlugin::trayAdded(const QString itemKey) trayWidget, [ = ]() { addTrayWidget(trayWidget); }); + connect(trayWidget, &IndicatorTrayWidget::removed, this, [=] { + trayRemoved(m_trayList.key(trayWidget)); + }); } }