plasma: ensure applets have preferred size in systemtray applet

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2023-10-22 07:42:49 +03:00
parent ac329a2b24
commit 40675886b2
2 changed files with 32 additions and 9 deletions

View file

@ -169,15 +169,6 @@ void KeyboardApplet::constraintsEvent(Plasma::Constraints constraints)
} }
setMinimumSize(iconsize, iconsize); setMinimumSize(iconsize, iconsize);
} }
// TODO: hint
if (constraints & Plasma::SizeConstraint) {
const QSizeF appletsize = size();
int iconsize = qMin(appletsize.width(), appletsize.height());
if (iconsize <= 0) {
iconsize = KIconLoader::global()->currentSize(KIconLoader::Panel);
}
setPreferredSize(iconsize, iconsize);
}
} }
void KeyboardApplet::slotLayoutChanged() void KeyboardApplet::slotLayoutChanged()

View file

@ -18,8 +18,10 @@
#include "systemtray.h" #include "systemtray.h"
#include <Plasma/PopupApplet>
#include <Plasma/ToolTipManager> #include <Plasma/ToolTipManager>
#include <KSycoca> #include <KSycoca>
#include <KIconLoader>
#include <KDebug> #include <KDebug>
// standard issue margin/spacing // standard issue margin/spacing
@ -52,6 +54,19 @@ static void kSaveApplet(Plasma::Applet *plasmaapplet)
plasmaapplet->save(dummy); plasmaapplet->save(dummy);
} }
// HACK: updateGeometry() is protected thus the hack
class PlasmaAppletHack: public Plasma::Applet
{
Q_OBJECT
public:
void updateGeometryHack();
};
void PlasmaAppletHack::updateGeometryHack()
{
updateGeometry();
}
SystemTrayApplet::SystemTrayApplet(QObject *parent, const QVariantList &args) SystemTrayApplet::SystemTrayApplet(QObject *parent, const QVariantList &args)
: Plasma::Applet(parent, args), : Plasma::Applet(parent, args),
m_layout(nullptr), m_layout(nullptr),
@ -97,8 +112,24 @@ void SystemTrayApplet::updateApplets(const Plasma::Constraints constraints)
break; break;
} }
} }
// ensure the applet has a preferred size, an icon-like one which is the case for popup applets
// (unless applets are not shown in icon mode, that is decided by the applets minimum size) but
// not for non-pupup applets
const QSizeF appletsize = size();
int iconsize = qMin(appletsize.width(), appletsize.height());
if (iconsize <= 0) {
iconsize = KIconLoader::global()->currentSize(KIconLoader::Panel);
}
iconsize = (iconsize - s_margin * 2);
QMutexLocker locker(&m_mutex); QMutexLocker locker(&m_mutex);
foreach (Plasma::Applet* plasmaapplet, m_applets) { foreach (Plasma::Applet* plasmaapplet, m_applets) {
Plasma::PopupApplet* plasmapopupapplet = qobject_cast<Plasma::PopupApplet*>(plasmaapplet);
const QSizeF plasmaappletsize = plasmaapplet->preferredSize();
if (!plasmapopupapplet || plasmaappletsize.isNull()) {
plasmaapplet->setPreferredSize(iconsize, iconsize);
PlasmaAppletHack* plasmaapplethack = reinterpret_cast<PlasmaAppletHack*>(plasmaapplet);
plasmaapplethack->updateGeometryHack();
}
plasmaapplet->updateConstraints(constraints); plasmaapplet->updateConstraints(constraints);
plasmaapplet->flushPendingConstraintsEvents(); plasmaapplet->flushPendingConstraintsEvents();
} }
@ -245,3 +276,4 @@ void SystemTrayApplet::slotShowHidden()
K_EXPORT_PLASMA_APPLET(systemtray, SystemTrayApplet) K_EXPORT_PLASMA_APPLET(systemtray, SystemTrayApplet)
#include "moc_systemtray.cpp" #include "moc_systemtray.cpp"
#include "systemtray.moc"