Plasma/libplasma2/API Review/Applet: Difference between revisions

From KDE Community Wiki
(Created page with "= QProperties = All Q_PROPERTY and Q_INVOKABLE will be removed from Applet, that is no more directly exposed in QML. = Bookkeeping = {| cellspacing="0" cellpadding="5" borde...")
 
 
(33 intermediate revisions by 2 users not shown)
Line 6: Line 6:
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"
 
as
! Status  
! Status  
! Action  
! Action  
Line 15: Line 15:
{{FeatureDone|Keep| ImmutabilityType immutability() const;}}
{{FeatureDone|Keep| ImmutabilityType immutability() const;}}
{{FeatureDone|Keep| SIGNAL void immutabilityChanged(Plasma::ImmutabilityType immutable);}}
{{FeatureDone|Keep| SIGNAL void immutabilityChanged(Plasma::ImmutabilityType immutable);}}
{{FeatureDone|Keep| bool hasFailedToLaunch() const;}}
{{FeatureInProgress|Keep| bool hasFailedToLaunch() const;}}
{{FeatureTodo|Keep| void setFailedToLaunch(bool failed, const QString &reason); '''TODO''':  show why the thing failed in the UI }}
{{FeatureInProgress|Keep| void setFailedToLaunch(bool failed, const QString &reason); '''TODO''':  show why the thing failed in the UI: '''PROPOSAL''': the applet keeps only the message: setLaunchErrorMessage() }}
{{FeatureDone|Keep| bool destroyed() const;}}
{{FeatureDone|Keep| bool destroyed() const;}}
{{FeatureDone|Keep| virtual void destroy();}}
{{FeatureDone|Keep| virtual void destroy();}}
{{FeatureTodo|Keep| Containment *containment() const; '''NOTE''': Containment is NOT an applet anymore}}
{{FeatureDone|Not Slot| ItemStatus status() const; → unslotify}}
{{FeatureTodo|Not Slot| ItemStatus status() const; → unslotify}}
{{FeatureDone|Keep| void setStatus(const ItemStatus stat);}}
{{FeatureDone|Keep| void setStatus(const ItemStatus stat);}}
{{FeatureTodo|Change name| SIGNAL void newStatus(Plasma::ItemStatus status);  '''TODO''': change name to statusChanged}}
{{FeatureDone|Change name| SIGNAL void newStatus(Plasma::ItemStatus status);  '''TODO''': change name to statusChanged}}
{{FeatureTodo|Not virtual| virtual FormFactor formFactor() const;   -> not virtual}}
{{FeatureDone|Not virtual| virtual FormFactor formFactor() const;   -> not virtual}}
{{FeatureTodo|Not virtual| virtual Location location() const;    -> not virtual}}
{{FeatureDone|Not virtual| virtual Location location() const;    -> not virtual}}


{{FeatureTodo|Remove| Plasma::AspectRatioMode aspectRatioMode() const;}}
{{FeatureDone|Remove| Plasma::AspectRatioMode aspectRatioMode() const;}}
{{FeatureTodo|Remove|  void setAspectRatioMode(Plasma::AspectRatioMode);}}
{{FeatureDone|Remove|  void setAspectRatioMode(Plasma::AspectRatioMode);}}
{{FeatureTodo|Remove| bool isContainment() const;}}
{{FeatureDone|Remove| virtual bool isPopupShowing() const;}}
{{FeatureTodo|Remove| virtual bool isPopupShowing() const;}}
{{FeatureDone|Remove| QVariantList startupArguments() const; '''TODO''': templated config for startup. NOTE: probably QVariantList startupArguments cannot be removed from any plugin based class}}
{{FeatureTodo|Remove| QVariantList startupArguments() const; '''TODO''': templated config for startup}}


|}
|}
Line 55: Line 53:
         virtual void showConfigurationInterface();
         virtual void showConfigurationInterface();


== Completely UI-specific, remove or move to scriptengine ==
= Utils =
 
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"
Line 63: Line 62:
! Method  
! Method  


{{FeatureTodo|Remove| void showConfigurationInterface(QWidget *widget);}}
{{FeatureDone|Keep| Package package() const;}}
{{FeatureTodo|Remove| virtual void createConfigurationInterface(KConfigDialog *parent);}}
{{FeatureDone|Keep| void updateConstraints(Plasma::Constraints constraints);}}
{{FeatureTodo|Remove| bool isUserConfiguring() const}}
{{FeatureDone|Keep| void flushPendingConstraintsEvents();}}
{{FeatureTodo|Remove| Private class AppletConfigDialog is part of this}}
{{FeatureTodo|Keep|virtual void constraintsEvent(Plasma::Constraints constraints); '''TODO''' Should this become a signal?}}
{{FeatureTodo|Remove| bool hasFocus() const;}}
{{FeatureDone|Remove| DataEngine *dataEngine(const QString &name) const;}}
{{FeatureTodo|Remove| void setFocus(Qt::FocusReason);}}


|}
|}
= Utils =
== Keep ==
        Package package() const;
        void updateConstraints(Plasma::Constraints constraints = Plasma::AllConstraints);
        void flushPendingConstraintsEvents();
        virtual void constraintsEvent(Plasma::Constraints constraints);
== Remove ==
        DataEngine *dataEngine(const QString &name) const;
        QPoint popupPosition(const QSize &s) const; -> Dialog in bindings
        QPoint popupPosition(const QSize &s, Qt::AlignmentFlag alignment) const;


= Metadata =
= Metadata =
== Add ==
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"
      KPluginInfo pluginInfo() const;
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"


== Keep ==
! Status
        QString name() const;  -> becomes title()
! Action
        void setName(const QString &name) const; ->setTitle
! Method


== To PluginLoader ==
{{FeatureDone|Add| KPluginInfo pluginInfo() const;}}
Most metadata related functions will go into PluginLoader
{{FeatureDone|Rename| QString name() const;  -> becomes title()}}
{{FeatureDone|Rename| void setName(const QString &name) const; ->setTitle()}}
{{FeatureDone|Move to PluginLoader| static KPluginInfo::List listAppletInfo(const QString category, const QString parentApp);  -> PluginLoader}}
{{FeatureDone|Move to PluginLoader| static KPluginInfo::List listAppletInfoForMimeType(const QString &mimetype);}}
{{FeatureDone|Move to PluginLoader| static KPluginInfo::List listAppletInfoForUrl(const QUrl &url);}}
{{FeatureDone|Move to PluginLoader| static QStringList listCategories(const QString &parentApp, bool visibleOnly);}}
{{FeatureDone|Move to PluginLoader| void setCustomCategories(const QStringList &categories); just categories in PluginLoader? : currently stored in AppletPrivate::s_customCategories perhaps every shell should set what its categories are}}
{{FeatureDone|Move to PluginLoader| QStringList customCategories() const;}}
{{FeatureTodo|Move to PluginLoader| static Applet *loadPlasmoid(const QString &path, uint appletId,  const QVariantList &args); -> Merged in PluginLoader::loadApplet: right now pluginloader instantiates only the right Applet*, it should try to load the package as well.}}
{{FeatureDone|Move to PluginLoader| static QString category(const QString &appletName); -> PluginLoader}}
{{FeatureTodo|Remove| QString icon() const; '''Maybe''' there is an use case?}}
{{FeatureDone|Remove| QString category() const;}}
{{FeatureDone|Remove| QString pluginName() const;}}
{{FeatureDone|Remove| static QString category(const KPluginInfo &applet); }}
{{FeatureDone|Remove| bool shouldConserveResources() const;}}
|}


        static KPluginInfo::List listAppletInfo(const QString &category = QString(),
= Actions =
                                                const QString &parentApp = QString());  -> PluginLoader
        static KPluginInfo::List listAppletInfoForMimeType(const QString &mimetype);
        static KPluginInfo::List listAppletInfoForUrl(const QUrl &url);
        static QStringList listCategories(const QString &parentApp = QString(),
                                          bool visibleOnly = true);


just categories in PluginLoader? : currently stored in AppletPrivate::s_customCategories perhaps every shell should set what its categories are
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"


        void setCustomCategories(const QStringList &categories);
! Status
        QStringList customCategories() const;
! Action
! Method


Merged in PluginLoader::loadApplet: right now pluginloader instantiates only the right Applet*, it should try to load the package as well.
{{FeatureDone|Keep|virtual QList<QAction*> contextualActions();}}
        static Applet *loadPlasmoid(const QString &path, uint appletId = 0,
{{FeatureDone|Keep| QAction *action(QString name) const}}
                                    const QVariantList &args = QVariantList());
{{FeatureDone|Keep| void addAction(QString name, QAction *action);}}
 
{{FeatureTodo|Remove| void setGlobalShortcut(const KShortcut &shortcut);}}
        static QString category(const QString &appletName); -> PluginLoader
{{FeatureTodo|Remove| KShortcut globalShortcut() const;}}
 
{{FeatureTodo|Remove| void activate();}}
    QString icon() const; use case?
{{FeatureDone|Remove|  bool hasAuthorization(const QString &constraint) const;}}
      QString category() const;
      QString pluginName() const;
 
== Remove ==
        static QString category(const KPluginInfo &applet);
        QFont font() const;
        bool shouldConserveResources() const;
 
= Actions =
== Keep ==
        virtual QList<QAction*> contextualActions();
        QAction *action(QString name) const
        void addAction(QString name, QAction *action);
 
== Remove ==
        void setGlobalShortcut(const KShortcut &shortcut);
        KShortcut globalShortcut() const;
        void activate();
        bool hasAuthorization(const QString &constraint) const;


|}


= Constructors =
= Constructors =
Line 145: Line 126:


= Associated Application =
= Associated Application =
        void setAssociatedApplication(const QString &string);
 
        void setAssociatedApplicationUrls(const QList<QUrl> &urls);
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"
        QString associatedApplication() const;
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"
        QList<QUrl> associatedApplicationUrls() const;
 
        bool hasValidAssociatedApplication() const;
! Status
        void runAssociatedApplication(); '''TODO''': ensure that setAssociatedApplication handles .desktop files
! Action
! Method
 
{{FeatureDone|Keep|void setAssociatedApplication(const QString &string);}}
{{FeatureDone|Keep|void setAssociatedApplicationUrls(const QList<QUrl> &urls);}}
{{FeatureDone|Keep|QString associatedApplication() const;}}
{{FeatureDone|Keep|QList<QUrl> associatedApplicationUrls() const;}}
{{FeatureDone|Keep|bool hasValidAssociatedApplication() const;}}
{{FeatureTodo|Keep|void runAssociatedApplication(); '''TODO''': ensure that setAssociatedApplication handles .desktop files}}
 
|}


= Other SIGNALS =
= Other SIGNALS =
== Remove ==
        void releaseVisualFocus();


        void appletTransformedByUser();
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"
        void appletTransformedItself();
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"
 
! Status
! Action
! Method
 
{{FeatureTodo|Remove|void releaseVisualFocus();}}
{{FeatureDone|Remove|void appletTransformedByUser();}}
{{FeatureDone|Remove|void appletTransformedItself();}}
{{FeatureTodo|Remove|void appletDeleted(Plasma::Applet *applet); '''TODO''': fix usage in Containment}}


        void appletDeleted(Plasma::Applet *applet); '''TODO''': fix usage in Containment
|}


= Sharing Widgets =
= Sharing Widgets =
Line 165: Line 163:
'''TODO''': a new and improved revisioned remove widgets (or probably just dataengines and services) system
'''TODO''': a new and improved revisioned remove widgets (or probably just dataengines and services) system


== Remove ==
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"
        void publish(Plasma::AnnouncementMethods methods, const QString &resourceName);
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"
        void unpublish();
 
        bool isPublished() const;
! Status
! Action
! Method
 
{{FeatureDone|Remove|void publish(Plasma::AnnouncementMethods methods, const QString &resourceName);}}
{{FeatureDone|Remove|void unpublish();}}
{{FeatureDone|Remove|bool isPublished() const;}}
 
|}


= To script engine =
= To script engine =
Move the following to the declarative scriptengine:
 
        void setBackgroundHints(const Plasma::BackgroundHints hint);
== Completely UI-specific, remove or move to scriptengine ==
        Plasma::BackgroundHints backgroundHints() const;
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"
        bool isBusy() const;
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"
        void setBusy(bool busy);
 
        virtual void addAssociatedWidget(QWidget *widget);
! Status
        virtual void removeAssociatedWidget(QWidget *widget);
! Action
        void messageButtonPressed(const Plasma::MessageButton button);
! Method
        void showMessage(const QIcon &icon, const QString &message, const Plasma::MessageButtons buttons);
 
        SIGNAL void backgroundHintsChanged(Plasma::BackgroundHints backgroundHints);
{{FeatureTodo|Remove| void showConfigurationInterface(QWidget *widget);}}
{{FeatureTodo|Remove| virtual void createConfigurationInterface(KConfigDialog *parent);}}
{{FeatureTodo|Remove| bool isUserConfiguring() const}}
{{FeatureTodo|Remove| Private class AppletConfigDialog is part of this}}
{{FeatureDone|Remove| bool hasFocus() const;}}
{{FeatureDone|Remove| void setFocus(Qt::FocusReason);}}
{{FeatureDone|Remove| QFont font() const;}}
{{FeatureDone|Move| void setBackgroundHints(const Plasma::BackgroundHints hint);}}
{{FeatureDone|Move| Plasma::BackgroundHints backgroundHints() const;}}
{{FeatureDone|Move|  bool isBusy() const;}}
{{FeatureDone|Move| void setBusy(bool busy);}}
{{FeatureTodo|Remove| virtual void addAssociatedWidget(QWidget *widget);}}
{{FeatureTodo|Remove| virtual void removeAssociatedWidget(QWidget *widget);}}
{{FeatureDone|Remove| void messageButtonPressed(const Plasma::MessageButton button);}}
{{FeatureDone|Remove| void showMessage(const QIcon &icon, const QString &message, const Plasma::MessageButtons buttons);}}
{{FeatureDone|Remove| SIGNAL void backgroundHintsChanged(Plasma::BackgroundHints backgroundHints);}}
{{FeatureDone|Move| QPoint popupPosition(const QSize &s) const; -> Dialog in bindings}}
{{FeatureDone|Move| QPoint popupPosition(const QSize &s, Qt::AlignmentFlag alignment) const;}}
 
|}

Latest revision as of 14:38, 22 January 2014

QProperties

All Q_PROPERTY and Q_INVOKABLE will be removed from Applet, that is no more directly exposed in QML.

Bookkeeping

as
Status Action Method
DONE Keep uint id() const;
DONE Keep  void setImmutability(const ImmutabilityType immutable);
DONE Keep  ImmutabilityType immutability() const;
DONE Keep  SIGNAL void immutabilityChanged(Plasma::ImmutabilityType immutable);
IN PROGRESS Keep  bool hasFailedToLaunch() const;
IN PROGRESS Keep  void setFailedToLaunch(bool failed, const QString &reason); TODO: show why the thing failed in the UI: PROPOSAL: the applet keeps only the message: setLaunchErrorMessage()
DONE Keep  bool destroyed() const;
DONE Keep  virtual void destroy();
DONE Not Slot  ItemStatus status() const; → unslotify
DONE Keep  void setStatus(const ItemStatus stat);
DONE Change name  SIGNAL void newStatus(Plasma::ItemStatus status); TODO: change name to statusChanged
DONE Not virtual  virtual FormFactor formFactor() const;   -> not virtual
DONE Not virtual  virtual Location location() const;    -> not virtual


DONE Remove  Plasma::AspectRatioMode aspectRatioMode() const;
DONE Remove   void setAspectRatioMode(Plasma::AspectRatioMode);
DONE Remove  virtual bool isPopupShowing() const;
DONE Remove  QVariantList startupArguments() const; TODO: templated config for startup. NOTE: probably QVariantList startupArguments cannot be removed from any plugin based class


       

Configuration

We should have a single configuration object binded to qml (either created by autogenerated qml, a model or a property hash)

       KConfigGroup config() const;
       KConfigGroup globalConfig() const;
       ConfigLoader *configScheme() const;

Topic: can this be made flexible enough to replace config read/write? Topic: will need a global version (for globalConfig()) Topic: should we use QML for config, if so: how?

       virtual void save(KConfigGroup &group) const;
       virtual void restore(KConfigGroup &group);
       virtual void configChanged(); -> to signal
       virtual void saveState(KConfigGroup &config) const;
       SIGNAL void configNeedsSaving();
       bool hasConfigurationInterface() const;
       void setHasConfigurationInterface(bool hasInterface);
       void setConfigurationRequired(bool needsConfiguring, const QString &reason = QString());
       bool configurationRequired() const;
       virtual void showConfigurationInterface();

Utils

Status Action Method
DONE Keep  Package package() const;
DONE Keep  void updateConstraints(Plasma::Constraints constraints);
DONE Keep  void flushPendingConstraintsEvents();
TO DO Keep virtual void constraintsEvent(Plasma::Constraints constraints); TODO Should this become a signal? <{{{3}}}>
DONE Remove  DataEngine *dataEngine(const QString &name) const;


Metadata

Status Action Method
DONE Add  KPluginInfo pluginInfo() const;
DONE Rename  QString name() const; -> becomes title()
DONE Rename  void setName(const QString &name) const; ->setTitle()
DONE Move to PluginLoader  static KPluginInfo::List listAppletInfo(const QString category, const QString parentApp); -> PluginLoader
DONE Move to PluginLoader  static KPluginInfo::List listAppletInfoForMimeType(const QString &mimetype);
DONE Move to PluginLoader static KPluginInfo::List listAppletInfoForUrl(const QUrl &url);
DONE Move to PluginLoader  static QStringList listCategories(const QString &parentApp, bool visibleOnly);
DONE Move to PluginLoader  void setCustomCategories(const QStringList &categories); just categories in PluginLoader? : currently stored in AppletPrivate::s_customCategories perhaps every shell should set what its categories are
DONE Move to PluginLoader  QStringList customCategories() const;
TO DO Move to PluginLoader  static Applet *loadPlasmoid(const QString &path, uint appletId, const QVariantList &args); -> Merged in PluginLoader::loadApplet: right now pluginloader instantiates only the right Applet*, it should try to load the package as well. <{{{3}}}>
DONE Move to PluginLoader  static QString category(const QString &appletName); -> PluginLoader
TO DO Remove  QString icon() const; Maybe there is an use case? <{{{3}}}>
DONE Remove  QString category() const;
DONE Remove  QString pluginName() const;
DONE Remove  static QString category(const KPluginInfo &applet);
DONE Remove  bool shouldConserveResources() const;

Actions

Status Action Method
DONE Keep virtual QList<QAction*> contextualActions();
DONE Keep  QAction *action(QString name) const
DONE Keep  void addAction(QString name, QAction *action);
TO DO Remove  void setGlobalShortcut(const KShortcut &shortcut); <{{{3}}}>
TO DO Remove  KShortcut globalShortcut() const; <{{{3}}}>
TO DO Remove  void activate(); <{{{3}}}>
DONE Remove   bool hasAuthorization(const QString &constraint) const;


Constructors

       explicit Applet(QObject *parent = 0, const QString &serviceId = QString(), uint appletId = 0);

Merge the following one into above explicit Applet(QObject *parent, const QString &serviceId, uint appletId, const QVariantList &args);

       explicit Applet(const KPluginInfo &info, QObject *parent = 0, uint appletId = 0);
       Applet(QObject *parent, const QVariantList &args);
       virtual void init();

Associated Application

Status Action Method
DONE Keep void setAssociatedApplication(const QString &string);
DONE Keep void setAssociatedApplicationUrls(const QList<QUrl> &urls);
DONE Keep QString associatedApplication() const;
DONE Keep QList<QUrl> associatedApplicationUrls() const;
DONE Keep bool hasValidAssociatedApplication() const;
TO DO Keep void runAssociatedApplication(); TODO: ensure that setAssociatedApplication handles .desktop files <{{{3}}}>


Other SIGNALS

Status Action Method
TO DO Remove void releaseVisualFocus(); <{{{3}}}>
DONE Remove void appletTransformedByUser();
DONE Remove void appletTransformedItself();
TO DO Remove void appletDeleted(Plasma::Applet *applet); TODO: fix usage in Containment <{{{3}}}>


Sharing Widgets

Remote widgets will be completetely removed and eventually reimplemented again later from scratch. TODO: a new and improved revisioned remove widgets (or probably just dataengines and services) system

Status Action Method
DONE Remove void publish(Plasma::AnnouncementMethods methods, const QString &resourceName);
DONE Remove void unpublish();
DONE Remove bool isPublished() const;


To script engine

Completely UI-specific, remove or move to scriptengine

Status Action Method
TO DO Remove  void showConfigurationInterface(QWidget *widget); <{{{3}}}>
TO DO Remove  virtual void createConfigurationInterface(KConfigDialog *parent); <{{{3}}}>
TO DO Remove  bool isUserConfiguring() const <{{{3}}}>
TO DO Remove  Private class AppletConfigDialog is part of this <{{{3}}}>
DONE Remove  bool hasFocus() const;
DONE Remove  void setFocus(Qt::FocusReason);
DONE Remove  QFont font() const;
DONE Move  void setBackgroundHints(const Plasma::BackgroundHints hint);
DONE Move  Plasma::BackgroundHints backgroundHints() const;
DONE Move   bool isBusy() const;
DONE Move  void setBusy(bool busy);
TO DO Remove  virtual void addAssociatedWidget(QWidget *widget); <{{{3}}}>
TO DO Remove  virtual void removeAssociatedWidget(QWidget *widget); <{{{3}}}>
DONE Remove  void messageButtonPressed(const Plasma::MessageButton button);
DONE Remove  void showMessage(const QIcon &icon, const QString &message, const Plasma::MessageButtons buttons);
DONE Remove  SIGNAL void backgroundHintsChanged(Plasma::BackgroundHints backgroundHints);
DONE Move  QPoint popupPosition(const QSize &s) const; -> Dialog in bindings
DONE Move  QPoint popupPosition(const QSize &s, Qt::AlignmentFlag alignment) const;