[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-panel-devel
Subject:    Re: Panel icon sizing bug in 4.4
From:       Mike Kasick <mkasick-pd () club ! cc ! cmu ! edu>
Date:       2010-06-03 23:50:24
Message-ID: 20100603235024.GA18807 () club ! cc ! cmu ! edu
[Download RAW message or body]

On Tue, May 25, 2010 at 12:38:44PM -0700, Aaron J. Seigo wrote:

> > Is there a chance this will make it into 4.4.4?  If not, I might want to
> 
> i highly doubt it, sorry :(

Thanks for your effors in getting this into trunk.  The latest revisions
(with MenuLauncherApplet::sizeHint defined const) work great!

I've gone through SVN and cherry-picked the patches for each applet and
backported them to the KDE 4.4 SVN branch--keeping just the changes
relevant to iconSizeChanged/sizeHint as well as setting of the Panel icon
size in kcm_icons.  Attached is a single, backported, tested patch against
4.4/KDE.

Would it be possible to commit this to the 4.4 branch?  I'd love to see
this in Debian, and KDE 4.4.5 is the path of least resistance on that.

Thanks!

["kde_enable_panel_iconsize_and_applets_sizeHint.diff" (text/x-diff)]

Index: kdebase/runtime/kcontrol/icons/icons.cpp
===================================================================
--- kdebase/runtime/kcontrol/icons/icons.cpp	(revision 1134187)
+++ kdebase/runtime/kcontrol/icons/icons.cpp	(working copy)
@@ -409,10 +409,10 @@
         return;
 
     mUsage = index;
-    if ( mUsage == KIconLoader::Panel || mUsage == KIconLoader::LastGroup )
+    if ( mUsage == KIconLoader::LastGroup )
     {
         mpSizeBox->setEnabled(false);
-	mpAnimatedCheck->setEnabled( mUsage == KIconLoader::Panel );
+        mpAnimatedCheck->setEnabled(false);
     }
     else
     {
Index: kdebase/workspace/plasma/desktop/applets/kickoff/simpleapplet/simpleapplet.cpp
===================================================================
--- kdebase/workspace/plasma/desktop/applets/kickoff/simpleapplet/simpleapplet.cpp	(revision 1134187)
+++ kdebase/workspace/plasma/desktop/applets/kickoff/simpleapplet/simpleapplet.cpp	(working copy)
@@ -371,6 +371,9 @@
     }
 
     constraintsEvent(Plasma::ImmutableConstraint);
+
+    connect(KGlobalSettings::self(), SIGNAL(iconChanged(int)),
+        this, SLOT(iconSizeChanged(int)));
 }
 
 void MenuLauncherApplet::constraintsEvent(Plasma::Constraints constraints)
@@ -787,4 +790,35 @@
     return d->actions;
 }
 
+void MenuLauncherApplet::iconSizeChanged(int group)
+{
+    if (group == KIconLoader::Desktop || group == KIconLoader::Panel) {
+        updateGeometry();
+    }
+}
+
+QSizeF MenuLauncherApplet::sizeHint(Qt::SizeHint which, const QSizeF & constraint) const
+{
+    if (which == Qt::PreferredSize) {
+        int iconSize;
+
+        switch (formFactor()) {
+            case Plasma::Planar:
+            case Plasma::MediaCenter:
+                iconSize = IconSize(KIconLoader::Desktop);
+                break;
+
+            case Plasma::Horizontal:
+            case Plasma::Vertical:
+                iconSize = IconSize(KIconLoader::Panel);
+                break;
+        }
+
+        return QSizeF(iconSize, iconSize);
+    }
+
+    return Plasma::Applet::sizeHint(which, constraint);
+}
+
+
 #include "simpleapplet.moc"
Index: kdebase/workspace/plasma/desktop/applets/kickoff/simpleapplet/simpleapplet.h
===================================================================
--- kdebase/workspace/plasma/desktop/applets/kickoff/simpleapplet/simpleapplet.h	(revision 1134187)
+++ kdebase/workspace/plasma/desktop/applets/kickoff/simpleapplet/simpleapplet.h	(working copy)
@@ -126,6 +126,8 @@
      */
     void createConfigurationInterface(KConfigDialog *parent);
 
+    QSizeF sizeHint(Qt::SizeHint which, const QSizeF & constraint = QSizeF()) const;
+
 private Q_SLOTS:
 	/// Configuration-dialog accepted.
     void configAccepted();
@@ -133,6 +135,8 @@
     void toggleMenu(bool pressed = true);
     /// An action within the menu got triggered.
     void actionTriggered(QAction *action);
+    /// Icon size setting changed
+    void iconSizeChanged(int group);
 
 private:
     class Private;
Index: kdebase/workspace/plasma/generic/applets/icon/icon.cpp
===================================================================
--- kdebase/workspace/plasma/generic/applets/icon/icon.cpp	(revision 1134187)
+++ kdebase/workspace/plasma/generic/applets/icon/icon.cpp	(working copy)
@@ -27,6 +27,7 @@
 
 #include <KDebug>
 #include <KDesktopFile>
+#include <KGlobalSettings>
 #include <KIconLoader>
 #include <KLocale>
 #include <KMenu>
@@ -84,6 +85,9 @@
     setDisplayLines(2);
     registerAsDragHandle(m_icon);
     setAspectRatioMode(Plasma::ConstrainedSquare);
+
+    connect(KGlobalSettings::self(), SIGNAL(iconChanged(int)),
+        this, SLOT(iconSizeChanged(int)));
 }
 
 IconApplet::~IconApplet()
@@ -110,6 +114,13 @@
     }
 }
 
+void IconApplet::iconSizeChanged(int group)
+{
+    if (group == KIconLoader::Desktop || group == KIconLoader::Panel) {
+        updateGeometry();
+    }
+}
+
 void IconApplet::setUrl(const KUrl& url)
 {
     m_url = KIO::NetAccess::mostLocalUrl(url, 0);
@@ -252,6 +263,29 @@
     }
 }
 
+QSizeF IconApplet::sizeHint(Qt::SizeHint which, const QSizeF & constraint) const
+{
+    if (which == Qt::PreferredSize) {
+        int iconSize;
+
+        switch (formFactor()) {
+            case Plasma::Planar:
+            case Plasma::MediaCenter:
+                iconSize = IconSize(KIconLoader::Desktop);
+                break;
+
+            case Plasma::Horizontal:
+            case Plasma::Vertical:
+                iconSize = IconSize(KIconLoader::Panel);
+                break;
+        }
+
+        return QSizeF(iconSize, iconSize);
+    }
+
+    return Plasma::Applet::sizeHint(which, constraint);
+}
+
 void IconApplet::setDisplayLines(int displayLines)
 {
     if (m_icon) {
Index: kdebase/workspace/plasma/generic/applets/icon/icon.h
===================================================================
--- kdebase/workspace/plasma/generic/applets/icon/icon.h	(revision 1134187)
+++ kdebase/workspace/plasma/generic/applets/icon/icon.h	(working copy)
@@ -56,12 +56,14 @@
         void dropEvent(QGraphicsSceneDragDropEvent *event);
         void saveState(KConfigGroup &cg) const;
         void showConfigurationInterface();
+        QSizeF sizeHint(Qt::SizeHint which, const QSizeF & constraint = QSizeF()) const;
 
     private slots:
         void acceptedPropertiesDialog();
         void propertiesDialogClosed();
         void delayedDestroy();
         void checkExistenceOfUrl();
+        void iconSizeChanged(int group);
 
     private:
         //dropUrls from DolphinDropController
Index: kdelibs/plasma/popupapplet.cpp
===================================================================
--- kdelibs/plasma/popupapplet.cpp	(revision 1134184)
+++ kdelibs/plasma/popupapplet.cpp	(working copy)
@@ -408,6 +408,27 @@
     emit q->sizeHintChanged(Qt::PreferredSize);
 }
 
+QSizeF PopupApplet::sizeHint(Qt::SizeHint which, const QSizeF & constraint) const
+{
+    if (!d->dialogPtr || which != Qt::PreferredSize) {
+        return Applet::sizeHint(which, constraint);
+    }
+
+    switch (formFactor()) {
+        case Vertical:
+        case Horizontal: {
+            const int size = IconSize(KIconLoader::Panel);
+            return QSizeF(size, size);
+            break;
+        }
+        default:
+            break;
+    }
+
+    const int size = IconSize(KIconLoader::Desktop);
+    return QSizeF(size, size);
+}
+
 void PopupApplet::mousePressEvent(QGraphicsSceneMouseEvent *event)
 {
     if (!d->icon && !d->popupLostFocus && event->buttons() == Qt::LeftButton) {
@@ -580,6 +601,7 @@
           popupLostFocus(false),
           passive(false)
 {
+    QObject::connect(KGlobalSettings::self(), SIGNAL(iconChanged(int)), q, SLOT(iconSizeChanged(int)));
 }
 
 PopupAppletPrivate::~PopupAppletPrivate()
@@ -592,6 +614,13 @@
     delete icon;
 }
 
+void PopupAppletPrivate::iconSizeChanged(int group)
+{
+    if (icon && (group == KIconLoader::Desktop || group == KIconLoader::Panel)) {
+        q->updateGeometry();
+    }
+}
+
 void PopupAppletPrivate::internalTogglePopup()
 {
     if (timer) {
Index: kdelibs/plasma/popupapplet.h
===================================================================
--- kdelibs/plasma/popupapplet.h	(revision 1134184)
+++ kdelibs/plasma/popupapplet.h	(working copy)
@@ -144,6 +144,7 @@
      */
     virtual void popupEvent(bool show);
 
+    QSizeF sizeHint(Qt::SizeHint which, const QSizeF & constraint = QSizeF()) const;
     void mousePressEvent(QGraphicsSceneMouseEvent *event);
     void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
     bool eventFilter(QObject *watched, QEvent *event);
@@ -168,6 +169,7 @@
     Q_PRIVATE_SLOT(d, void dialogSizeChanged())
     Q_PRIVATE_SLOT(d, void dialogStatusChanged(bool))
     Q_PRIVATE_SLOT(d, void updateDialogPosition())
+    Q_PRIVATE_SLOT(d, void iconSizeChanged(int))
 
     friend class Applet;
     friend class AppletPrivate;
Index: kdelibs/plasma/private/popupapplet_p.h
===================================================================
--- kdelibs/plasma/private/popupapplet_p.h	(revision 1134184)
+++ kdelibs/plasma/private/popupapplet_p.h	(working copy)
@@ -33,6 +33,7 @@
     PopupAppletPrivate(PopupApplet *applet);
     ~PopupAppletPrivate();
 
+    void iconSizeChanged(int group);
     void internalTogglePopup();
     void hideTimedPopup();
     void clearPopupLostFocus();
Index: kdeplasma-addons/applets/lancelot/app/src/launcher/LancelotApplet.cpp
===================================================================
--- kdeplasma-addons/applets/lancelot/app/src/launcher/LancelotApplet.cpp	(revision 1134190)
+++ kdeplasma-addons/applets/lancelot/app/src/launcher/LancelotApplet.cpp	(working copy)
@@ -19,6 +19,7 @@
 
 #include "LancelotApplet.h"
 #include <KIcon>
+#include <KGlobalSettings>
 #include <climits>
 
 #include <QDBusInterface>
@@ -179,6 +180,9 @@
 
     d->waitClick.setInterval(500); // 1/2 sec
     d->waitClick.setSingleShot(true);
+
+    connect(KGlobalSettings::self(), SIGNAL(iconChanged(int)),
+        this, SLOT(iconSizeChanged(int)));
 }
 
 // void LancelotApplet::paint(QPainter * p,
@@ -217,16 +221,46 @@
 {
     d->layout->setContentsMargins(0, 0, 0, 0);
     d->layout->setSpacing(SPACING);
+
     if (d->showCategories) {
         d->createCategoriesButtons();
     } else {
         d->createMainButton();
     }
+
+    // We want to update the size hints
+    iconSizeChanged(KIconLoader::Desktop);
+
     emit configNeedsSaving();
     update();
     setAspectRatioMode(Plasma::KeepAspectRatio);
 }
 
+void LancelotApplet::iconSizeChanged(int group)
+{
+    if (group == KIconLoader::Desktop || group == KIconLoader::Panel) {
+        int iconSize;
+
+        switch (formFactor()) {
+            case Plasma::Planar:
+            case Plasma::MediaCenter:
+                iconSize = IconSize(KIconLoader::Desktop);
+                break;
+
+            case Plasma::Horizontal:
+            case Plasma::Vertical:
+                iconSize = IconSize(KIconLoader::Panel);
+                break;
+        }
+
+        foreach (Lancelot::HoverIcon * icon, d->buttons) {
+            icon->setPreferredSize(QSizeF(iconSize, iconSize));
+        }
+
+        updateGeometry();
+    }
+}
+
 void LancelotApplet::init()
 {
     d->lancelot->addClient();
Index: kdeplasma-addons/applets/lancelot/app/src/launcher/LancelotApplet.h
===================================================================
--- kdeplasma-addons/applets/lancelot/app/src/launcher/LancelotApplet.h	(revision 1134190)
+++ kdeplasma-addons/applets/lancelot/app/src/launcher/LancelotApplet.h	(working copy)
@@ -58,6 +58,7 @@
     void applyConfig();
     void loadConfig();
     void saveConfig();
+    void iconSizeChanged(int group);
 
 private:
     class Private;


_______________________________________________
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic