~mitya57/appmenu-qt5/fix-pixmap-types

« back to all changes in this revision

Viewing changes to src/appmenuplatformmenubar.cpp

  • Committer: CI bot
  • Author(s): Łukasz 'sil2100' Zemczak
  • Date: 2014-11-26 10:36:31 UTC
  • mfrom: (24.1.2 appmenu-qt5)
  • Revision ID: ps-jenkins@lists.canonical.com-20141126103631-484y11pcas63g2pu
Change the way QKdeTheme is constructed to fit the way presented by the new Qt 5.4.0 version. Make this change conditional so that it's still buildable with earlier releases. Fixes: #1394887
Approved by: Timo Jyrinki, PS Jenkins bot

Show diffs side-by-side

added added

removed removed

Lines of Context:
293
293
class KdeAppMenuPlatformTheme : public QKdeTheme
294
294
{
295
295
public:
296
 
    KdeAppMenuPlatformTheme(const QString &kdeHome, int kdeVersion);
 
296
#if (QT_VERSION >= QT_VERSION_CHECK(5, 4, 0))
 
297
    KdeAppMenuPlatformTheme(const QStringList &kdeDirs, int kdeVersion)
 
298
        : QKdeTheme(kdeDirs, kdeVersion)
 
299
    {
 
300
    }
 
301
#else
 
302
    KdeAppMenuPlatformTheme(const QString &kdeHome, int kdeVersion)
 
303
        : QKdeTheme(kdeHome, kdeVersion)
 
304
    {
 
305
    }
 
306
#endif
297
307
    virtual QPlatformMenuItem* createPlatformMenuItem() const { return 0; }
298
308
    virtual QPlatformMenu* createPlatformMenu() const { return 0; }
299
309
    virtual QPlatformMenuBar* createPlatformMenuBar() const;
300
310
};
301
311
 
302
312
 
303
 
KdeAppMenuPlatformTheme::KdeAppMenuPlatformTheme(const QString &kdeHome, int kdeVersion)
304
 
    : QKdeTheme(kdeHome, kdeVersion)
305
 
{
306
 
}
307
 
 
308
313
QPlatformMenuBar *
309
314
KdeAppMenuPlatformTheme::createPlatformMenuBar() const
310
315
{
338
343
        const QByteArray kdeVersionBA = qgetenv("KDE_SESSION_VERSION");
339
344
        const int kdeVersion = kdeVersionBA.toInt();
340
345
        if (kdeVersion >= 4) {
 
346
#if (QT_VERSION >= QT_VERSION_CHECK(5, 4, 0))
 
347
            // Determine KDE prefixes in the following priority order:
 
348
            // - KDEHOME and KDEDIRS environment variables
 
349
            // - ~/.kde(<version>)
 
350
            // - read prefixes from /etc/kde<version>rc
 
351
            // - fallback to /etc/kde<version>
 
352
 
 
353
            QStringList kdeDirs;
 
354
            const QString kdeHomePathVar = QFile::decodeName(qgetenv("KDEHOME"));
 
355
            if (!kdeHomePathVar.isEmpty())
 
356
                kdeDirs += kdeHomePathVar;
 
357
 
 
358
            const QString kdeDirsVar = QFile::decodeName(qgetenv("KDEDIRS"));
 
359
            if (!kdeDirsVar.isEmpty())
 
360
                kdeDirs += kdeDirsVar.split(QLatin1Char(':'), QString::SkipEmptyParts);
 
361
 
 
362
            const QString kdeVersionHomePath = QDir::homePath() + QStringLiteral("/.kde") + QLatin1String(kdeVersionBA);
 
363
            if (QFileInfo(kdeVersionHomePath).isDir())
 
364
                kdeDirs += kdeVersionHomePath;
 
365
 
 
366
            const QString kdeHomePath = QDir::homePath() + QStringLiteral("/.kde");
 
367
            if (QFileInfo(kdeHomePath).isDir())
 
368
                kdeDirs += kdeHomePath;
 
369
 
 
370
            const QString kdeRcPath = QStringLiteral("/etc/kde") + QLatin1String(kdeVersionBA) + QStringLiteral("rc");
 
371
            if (QFileInfo(kdeRcPath).isReadable()) {
 
372
                QSettings kdeSettings(kdeRcPath, QSettings::IniFormat);
 
373
                kdeSettings.beginGroup(QStringLiteral("Directories-default"));
 
374
                kdeDirs += kdeSettings.value(QStringLiteral("prefixes")).toStringList();
 
375
            }
 
376
 
 
377
            const QString kdeVersionPrefix = QStringLiteral("/etc/kde") + QLatin1String(kdeVersionBA);
 
378
            if (QFileInfo(kdeVersionPrefix).isDir())
 
379
                kdeDirs += kdeVersionPrefix;
 
380
 
 
381
            kdeDirs.removeDuplicates();
 
382
            if (!kdeDirs.isEmpty()) {
 
383
                return new KdeAppMenuPlatformTheme(kdeDirs, kdeVersion);
 
384
            }
 
385
            else {
 
386
                qWarning("%s: Unable to determine KDE dirs", Q_FUNC_INFO);
 
387
                WARN << "Unable to determine KDE dirs, falling back to the gnome theme";
 
388
            }
 
389
#else
341
390
            const QString kdeHomePathVar = QString::fromLocal8Bit(qgetenv("KDEHOME"));
342
391
            if (!kdeHomePathVar.isEmpty())
343
392
                return new KdeAppMenuPlatformTheme(kdeHomePathVar, kdeVersion);
349
398
            const QString kdeHomePath = QDir::homePath() + QStringLiteral("/.kde");
350
399
            if (QFileInfo(kdeHomePath).isDir())
351
400
                return new KdeAppMenuPlatformTheme(kdeHomePath, kdeVersion);
352
 
 
353
 
            WARN << "Unable to determine KDEHOME, falling back to the gnome theme";
 
401
#endif // QT_VERSION_CHECK
354
402
        }
355
403
        else {
356
404
            WARN << "KDE version too old or cannot be properly identified, "
357
405
                "falling back to the gnome theme";
358
 
        }
 
406
        }       
359
407
    }
360
 
#endif
 
408
#endif // QKDETHEME_STILL_PRIVATE
 
409
 
 
410
    // Fallback path - use the Gnome theme in this case
361
411
    return new GnomeAppMenuPlatformTheme();
362
412
}
363
413