diff --git a/plugins/keyboard-layout/dbusadaptors.cpp b/plugins/keyboard-layout/dbusadaptors.cpp index 3c9ab9269..29b4c4c21 100644 --- a/plugins/keyboard-layout/dbusadaptors.cpp +++ b/plugins/keyboard-layout/dbusadaptors.cpp @@ -26,10 +26,7 @@ DBusAdaptors::DBusAdaptors(QObject *parent) "/com/deepin/daemon/InputDevice/Keyboard", QDBusConnection::sessionBus(), this)) { - connect(m_keyboard, &Keyboard::CurrentLayoutChanged, this, - [=] { - emit layoutChanged(layout()); - }); + connect(m_keyboard, &Keyboard::CurrentLayoutChanged, this, &DBusAdaptors::onLayoutChanged); } DBusAdaptors::~DBusAdaptors() @@ -38,5 +35,20 @@ DBusAdaptors::~DBusAdaptors() QString DBusAdaptors::layout() const { - return QString(m_keyboard->currentLayout()).split(';').first(); + const auto layouts = m_keyboard->currentLayout().split(';'); + + if (!layouts.isEmpty()) + return layouts.first(); + + qWarning() << Q_FUNC_INFO << "layouts is Empty!!"; + + // re-fetch data. + QTimer::singleShot(1000, this, &DBusAdaptors::onLayoutChanged); + + return QString(); +} + +void DBusAdaptors::onLayoutChanged() +{ + emit layoutChanged(layout()); } diff --git a/plugins/keyboard-layout/dbusadaptors.h b/plugins/keyboard-layout/dbusadaptors.h index 6f139b6ec..78dd076e3 100644 --- a/plugins/keyboard-layout/dbusadaptors.h +++ b/plugins/keyboard-layout/dbusadaptors.h @@ -46,6 +46,9 @@ public: Q_PROPERTY(QString layout READ layout NOTIFY layoutChanged) QString layout() const; +public slots: + void onLayoutChanged(); + signals: void layoutChanged(QString text); diff --git a/plugins/system-tray/indicatortraywidget.cpp b/plugins/system-tray/indicatortraywidget.cpp index 88965ae24..9a7abecbd 100644 --- a/plugins/system-tray/indicatortraywidget.cpp +++ b/plugins/system-tray/indicatortraywidget.cpp @@ -75,7 +75,6 @@ public: auto propertyNameCStr = propertyName.toStdString(); propertyInterfaceNames.insert(key, dbusInterface); propertyNames.insert(key, QString::fromStdString(propertyNameCStr)); - callback(interface.property(propertyNameCStr.c_str())); QDBusConnection::sessionBus().connect(dbusService, dbusPath, "org.freedesktop.DBus.Properties", @@ -93,6 +92,8 @@ public: "s", q, propertyChangedSlot); + + callback(interface.property(propertyNameCStr.c_str())); } } @@ -177,7 +178,7 @@ void IndicatorTrayWidget::updateIcon() const QImage IndicatorTrayWidget::trayImage() { - return grab().toImage(); + return d_ptr->label->grab().toImage(); } void IndicatorTrayWidget::sendClick(uint8_t buttonIndex, int x, int y)