From 72dac6148b19ce22aa1220c60ad56fb0bfa3be90 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 4 Jan 2026 17:14:10 +0600 Subject: [PATCH] Fix high CPU usage on keyboard status icon updates --- src/qt/qt_main.cpp | 1 + src/qt/qt_mainwindow.cpp | 16 +++++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 5526eee37..1d362dd62 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -889,6 +889,7 @@ main(int argc, char *argv[]) QObject::connect(&discordupdate, &QTimer::timeout, &app, [] { discord_run_callbacks(); }); + discordupdate.setInterval(1000); if (enable_discord) discordupdate.start(1000); } diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index cce6d9c95..35fd05491 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -238,20 +238,26 @@ MainWindow::MainWindow(QWidget *parent) QTimer *ledKeyboardTimer = new QTimer(this); ledKeyboardTimer->setTimerType(Qt::CoarseTimer); - ledKeyboardTimer->setInterval(1); + ledKeyboardTimer->setInterval(20); connect(ledKeyboardTimer, &QTimer::timeout, this, [this]() { + uint8_t prev_caps = 255, prev_num = 255, prev_scroll = 255, prev_kana = 255; uint8_t caps, num, scroll, kana; keyboard_get_states(&caps, &num, &scroll, &kana); - if (num_label->isVisible()) + if (num_label->isVisible() && prev_num != num) num_label->setPixmap(num ? this->num_icon.pixmap(QSize(16, 16)) : this->num_icon_off.pixmap(QSize(16, 16))); - if (caps_label->isVisible()) + if (caps_label->isVisible() && prev_caps != caps) caps_label->setPixmap(caps ? this->caps_icon.pixmap(QSize(16, 16)) : this->caps_icon_off.pixmap(QSize(16, 16))); - if (scroll_label->isVisible()) + if (scroll_label->isVisible() && prev_scroll != scroll) scroll_label->setPixmap(scroll ? this->scroll_icon.pixmap(QSize(16, 16)) : this->scroll_icon_off.pixmap(QSize(16, 16))); - if (kana_label->isVisible()) + if (kana_label->isVisible() && prev_kana != kana) kana_label->setPixmap(kana ? this->kana_icon.pixmap(QSize(16, 16)) : this->kana_icon_off.pixmap(QSize(16, 16))); + + prev_caps = caps; + prev_num = num; + prev_scroll = scroll; + prev_kana = kana; }); ledKeyboardTimer->start();