[Differential] [Commented On] D3598: rework kscreen's OSD logic

broulik (Kai Uwe Broulik) noreply at phabricator.kde.org
Mon Dec 5 18:12:00 UTC 2016


broulik added a comment.


  A bunch of nitpicks below. Haven't tried it yet, though :)
  
  Is there a chance we could serve the novice user usecase of Meta+P and then *click* / choose the desired setup? As far as I can tell we only show "You now use $setup" but not "You can choose: [Clone, Left of, Internal only, External only, Right of]" (doesn't neccessarily have to be part of this patchset, obviously, just food for thought, and you know how obsessed I am with the Meta+P menu ;)

INLINE COMMENTS

> daemon.cpp:242-243
>      QDBusConnection::sessionBus().asyncCall(msg);
> +
> +
> +}

Superfluous lines

> daemon.cpp:283
>  
> +    QHash<Generator::DisplaySwitchAction, QString> actionMessages({
> +        {Generator::DisplaySwitchAction::None, i18nc("osd when displaybutton is pressed", "No Action")},

static?

> daemon.cpp:287
> +        {Generator::DisplaySwitchAction::ExtendToLeft, i18nc("osd when displaybutton is pressed", "Extend Left")},
> +        {Generator::DisplaySwitchAction::TurnOffEmbedded, i18nc("osd when displaybutton is pressed", "Embedded Off")},
> +        {Generator::DisplaySwitchAction::TurnOffExternal, i18nc("osd when displaybutton is pressed", "External Off")},

Not sure about "Embedded", perhaps "Internal"? Dunno.

Also I'd rather turn the wording around, rather than "internal off" and "external off", say "external only" and "internal only"?

> daemon.cpp:291
> +    });
> +    QString message = actionMessages.value(m_iteration);
> +

const &

> osd.cpp:32
> +
> +namespace KScreen {
> +

using namespace

> osd.cpp:37
> +    , m_output(output)
> +    , m_osdPath(QStandardPaths::locate(QStandardPaths::QStandardPaths::GenericDataLocation, QStringLiteral("kded_kscreen/qml/Osd.qml")))
> +    , m_osdObject(new KDeclarative::QmlObject(this))

You're only using it in the constructor, no need for it to be a member variable that stays around

> osd.cpp:38
> +    , m_osdPath(QStandardPaths::locate(QStandardPaths::QStandardPaths::GenericDataLocation, QStringLiteral("kded_kscreen/qml/Osd.qml")))
> +    , m_osdObject(new KDeclarative::QmlObject(this))
> +{

Can we lazy-load this first time it is used? It's not like you often change screen setup

Edit: nvm, saw later that you actually create the entire thing on demand

> osd.cpp:53
> +
> +    if (!m_osdTimer) {
> +        m_osdTimer = new QTimer(this);

Is always null here

> osd.cpp:85
> +    } else {
> +        realSize = QSize(mode->size().height(), mode->size().width());
> +    }

QSize has a transpose() method "Swaps the width and height values."

> osd.cpp:120
> +    // pukes loads of warnings into our logs
> +    if (qGuiApp->platformName() == QStringLiteral("xcb")) {
> +        rootObject->setProperty("animateOpacity", false);

Compare with QL1S - in case you have KWindowSystem you can ask it

> osd.h:47
> +    void showOutputIdentifier(const KScreen::OutputPtr output);
> +
> +

Superfluous line

> osd.h:49
> +
> +private Q_SLOTS:
> +    void hideOsd();

Doesn't have to be a slot with new connect syntax

> osdmanager.cpp:21
> +#include "osd.h"
> +#include "debug.h"
> +

Unused?

> osdmanager.cpp:31
> +
> +OsdManager* OsdManager::m_instance = 0;
> +

nullptr, also s_ prefix since it's static

> osdmanager.cpp:41
> +    connect(m_cleanupTimer, &QTimer::timeout, this, [this]() {
> +        qDeleteAll(m_osds.begin(), m_osds.end());
> +        m_osds.clear();

There's a a qDeleteAll(m_osds) that does begin() and end() for you

> osdmanager.cpp:44
> +    });
> +    QDBusConnection::sessionBus().registerObject(QStringLiteral("/org/kde/kscreen/osdService"), this, QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals);
> +}

There are no signals in this class

> osdmanager.cpp:78
> +        KScreen::Osd* osd = nullptr;
> +        if (m_osds.keys().contains(output->name())) {
> +            osd = m_osds.value(output->name());

QMap::contains(key), no need for keys()

Also, better use (const)Find to avoid double loop-up (once for contains and once for value)

> osdmanager.cpp:99
> +
> +            const KScreen::ConfigPtr config = qobject_cast<KScreen::GetConfigOperation*>(op)->config();
> +

Can you perhaps put that stuff into a separate function to avoid code duplication - the loops are almost identical

> Osd.qml:57
> +            if (item != undefined) {
> +                item.rootItem = root;
> +            }

Not really happy with this "rootItem" property but then David told us that randomly accessing properties outside a file is bad, too ;)

Perhaps try

  Loader setSource(source, {rootItem: root})

so the item is already created with that property set, avoids warnings and/or `foo ? foo.bar : null` dance and re-evaluations

> OsdItem.qml:55
> +    }
> +    Component.onCompleted: print("osditem loaded..." + root.infoText);
> +}

;)

REPOSITORY
  R104 KScreen

REVISION DETAIL
  https://phabricator.kde.org/D3598

EMAIL PREFERENCES
  https://phabricator.kde.org/settings/panel/emailpreferences/

To: sebas, #plasma
Cc: broulik, plasma-devel, davidedmundson, lesliezhai, ali-mohamed, jensreuterberg, abetts, sebas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/plasma-devel/attachments/20161205/d5eb96d8/attachment-0001.html>


More information about the Plasma-devel mailing list