[education/rkward] rkward/windows: Fix display bugs after custom previews were added
Thomas Friedrichsmeier
null at kde.org
Mon Jan 12 19:55:45 GMT 2026
Git commit 62942593328755b1c3b44223f99674edd2616577 by Thomas Friedrichsmeier.
Committed on 12/01/2026 at 19:55.
Pushed by tfry into branch 'master'.
Fix display bugs after custom previews were added
M +17 -17 rkward/windows/rkcommandeditorwindow.cpp
https://invent.kde.org/education/rkward/-/commit/62942593328755b1c3b44223f99674edd2616577
diff --git a/rkward/windows/rkcommandeditorwindow.cpp b/rkward/windows/rkcommandeditorwindow.cpp
index cd6759213..f8c77f4f5 100644
--- a/rkward/windows/rkcommandeditorwindow.cpp
+++ b/rkward/windows/rkcommandeditorwindow.cpp
@@ -148,14 +148,23 @@ class RKPreviewModeSelector : public QWidgetAction {
container = new QWidget(parent);
auto l = new QHBoxLayout(container);
l->setContentsMargins(0, 0, 0, 0);
- container->installEventFilter(this);
+ parent->installEventFilter(this);
createMainWin(container);
return container;
}
- bool eventFilter(QObject *, QEvent *event) override {
+ bool eventFilter(QObject *watched, QEvent *event) override {
if (event->type() != QEvent::Show) return false;
- if (!form) createMainWin(container);
+ if (!form) {
+ // show event is actually too late to change our widget, some hacking is needed to make that
+ // work, reliably
+ watched->removeEventFilter(this);
+ setVisible(false);
+ createMainWin(container);
+ qApp->processEvents();
+ setVisible(true);
+ watched->installEventFilter(this);
+ }
return false;
}
@@ -168,7 +177,6 @@ class RKPreviewModeSelector : public QWidgetAction {
form = new QWidget(parent);
allforms.add(form);
- parent->layout()->addWidget(form);
auto h = new QHBoxLayout(form);
auto l = new QVBoxLayout();
h->addLayout(l);
@@ -223,26 +231,18 @@ class RKPreviewModeSelector : public QWidgetAction {
l->addStretch();
r->addStretch();
- auto updateSize = [this]() {
+ parent->layout()->addWidget(form);
+ auto update = [this]() {
// Menu needs some help resizing depending on available options.
// see also https://stackoverflow.com/questions/42122985/how-to-resize-a-qlabel-displayed-by-a-qwidgetaction-after-changing-its-text
- auto p = container->parentWidget();
- ;
- auto olds = container->size();
+ auto p = container->topLevelWidget();
QActionEvent e(QEvent::ActionChanged, this);
- qApp->sendEvent(win, &e);
qApp->sendEvent(p, &e);
- if (olds.expandedTo(p->size()) != olds && p->isVisible()) {
- p->blockSignals(true);
- p->hide();
- p->show();
- p->blockSignals(false);
- }
win->triggerPreview(0);
};
- connect(preview_mode_button_group, &QButtonGroup::buttonToggled, this, updateSize);
- updateSize();
+ connect(preview_mode_button_group, &QButtonGroup::buttonToggled, this, update);
+ update();
}
};
QObjectCleanupHandler RKPreviewModeSelector::allforms;
More information about the rkward-tracker
mailing list