summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforminputcontexts/ibus/qibustypes.cpp
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@digia.com>2014-11-10 11:42:02 +0100
committerOswald Buddenhagen <oswald.buddenhagen@digia.com>2014-11-10 11:45:49 +0100
commit0d02a06517f29c5b51fb2d3ac64a5e6d9daed5a9 (patch)
tree3426504f004cbd2fffaceec24678bb16e9abfe37 /src/plugins/platforminputcontexts/ibus/qibustypes.cpp
parentd7a5dc0cfdae2fb22b7061301575f04f2bcc3f1c (diff)
parentba73bde66efa588a74eaaa946e80e9de2b9e2d59 (diff)
Merge remote-tracking branch 'origin/5.4' into 5.4.0
Diffstat (limited to 'src/plugins/platforminputcontexts/ibus/qibustypes.cpp')
-rw-r--r--src/plugins/platforminputcontexts/ibus/qibustypes.cpp26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/plugins/platforminputcontexts/ibus/qibustypes.cpp b/src/plugins/platforminputcontexts/ibus/qibustypes.cpp
index 9bc53ed5c0..ec8c746b2d 100644
--- a/src/plugins/platforminputcontexts/ibus/qibustypes.cpp
+++ b/src/plugins/platforminputcontexts/ibus/qibustypes.cpp
@@ -32,7 +32,6 @@
****************************************************************************/
#include "qibustypes.h"
-#include <qtextformat.h>
#include <QtDBus>
#include <QHash>
@@ -134,7 +133,7 @@ const QDBusArgument &operator>>(const QDBusArgument &argument, QIBusAttribute &a
return argument;
}
-QTextFormat QIBusAttribute::format() const
+QTextCharFormat QIBusAttribute::format() const
{
QTextCharFormat fmt;
switch (type) {
@@ -225,11 +224,32 @@ const QDBusArgument &operator>>(const QDBusArgument &arg, QIBusAttributeList &at
QList<QInputMethodEvent::Attribute> QIBusAttributeList::imAttributes() const
{
+ QHash<QPair<int, int>, QTextCharFormat> rangeAttrs;
+
+ // Merge text fomats for identical ranges into a single QTextFormat.
+ for (int i = 0; i < attributes.size(); ++i) {
+ const QIBusAttribute &attr = attributes.at(i);
+ const QTextCharFormat &format = attr.format();
+
+ if (format.isValid()) {
+ const QPair<int, int> range(attr.start, attr.end);
+ rangeAttrs[range].merge(format);
+ }
+ }
+
+ // Assemble list in original attribute order.
QList<QInputMethodEvent::Attribute> imAttrs;
+
for (int i = 0; i < attributes.size(); ++i) {
const QIBusAttribute &attr = attributes.at(i);
- imAttrs += QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, attr.start, attr.end - attr.start, attr.format());
+ const QTextFormat &format = attr.format();
+
+ imAttrs += QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat,
+ attr.start,
+ attr.end - attr.start,
+ format.isValid() ? rangeAttrs[QPair<int, int>(attr.start, attr.end)] : format);
}
+
return imAttrs;
}