From d06c6d8a51c9bd79396471f4131ac67f1d11e2c2 Mon Sep 17 00:00:00 2001 From: Gatis Paeglis Date: Wed, 11 Jun 2014 11:37:58 +0200 Subject: [PATCH] Compose key plugin: expand "%L" to full path. According to [1] "%L" should expand to a full path for the default (based on system's locale) Compose file. [1] http://www.x.org/archive/current/doc/man/man5/Compose.5.xhtml Task-number: QTBUG-35943 Change-Id: Ie803a89742d9c0aa3b2d759bea28ed403dc68c9c Reviewed-by: Lars Knoll --- .../compose/generator/qtablegenerator.cpp | 21 ++++++++++++------- .../compose/generator/qtablegenerator.h | 3 ++- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp b/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp index ea0b5261c4..395bb5b090 100644 --- a/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp +++ b/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp @@ -111,21 +111,17 @@ void TableGenerator::findComposeFile() } // check for the system provided compose files if (!found && cleanState()) { - QByteArray loc = locale().toUpper().toUtf8(); - QString table = readLocaleMappings(loc); - if (table.isEmpty()) - table = readLocaleMappings(readLocaleAliases(loc)); - + QString table = composeTableForLocale(); if (cleanState()) { if (table.isEmpty()) // no table mappings for the system's locale in the compose.dir m_state = UnsupportedLocale; else - found = processFile(systemComposeDir() + QLatin1String("/") + table); + found = processFile(systemComposeDir() + QLatin1Char('/') + table); #ifdef DEBUG_GENERATOR if (found) qDebug() << "Using Compose file from: " << - systemComposeDir() + QLatin1String("/") + table; + systemComposeDir() + QLatin1Char('/') + table; #endif } } @@ -137,6 +133,15 @@ void TableGenerator::findComposeFile() m_state = MissingComposeFile; } +QString TableGenerator::composeTableForLocale() +{ + QByteArray loc = locale().toUpper().toUtf8(); + QString table = readLocaleMappings(loc); + if (table.isEmpty()) + table = readLocaleMappings(readLocaleAliases(loc)); + return table; +} + bool TableGenerator::findSystemComposeDir() { bool found = false; @@ -311,7 +316,7 @@ void TableGenerator::parseIncludeInstruction(QString line) // expand substitutions if present line.replace(QLatin1String("%H"), QString(qgetenv("HOME"))); - line.replace(QLatin1String("%L"), locale()); + line.replace(QLatin1String("%L"), systemComposeDir() + QLatin1Char('/') + composeTableForLocale()); line.replace(QLatin1String("%S"), systemComposeDir()); processFile(line); diff --git a/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.h b/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.h index 248c09f3ea..6ce89cfe77 100644 --- a/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.h +++ b/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.h @@ -118,13 +118,14 @@ protected: void findComposeFile(); bool findSystemComposeDir(); QString systemComposeDir(); + QString composeTableForLocale(); ushort keysymToUtf8(quint32 sym); QString readLocaleMappings(const QByteArray &locale); QByteArray readLocaleAliases(const QByteArray &locale); void initPossibleLocations(); - bool cleanState() const { return ((m_state & NoErrors) == NoErrors); } + bool cleanState() const { return m_state == NoErrors; } QString locale() const; private: