summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/platforminputcontexts/ibus/qibustypes.cpp26
-rw-r--r--src/plugins/platforminputcontexts/ibus/qibustypes.h3
2 files changed, 25 insertions, 4 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;
}
diff --git a/src/plugins/platforminputcontexts/ibus/qibustypes.h b/src/plugins/platforminputcontexts/ibus/qibustypes.h
index 2ec3b019ff..96791b17a1 100644
--- a/src/plugins/platforminputcontexts/ibus/qibustypes.h
+++ b/src/plugins/platforminputcontexts/ibus/qibustypes.h
@@ -36,6 +36,7 @@
#include <qvector.h>
#include <qevent.h>
#include <QDBusArgument>
+#include <QTextCharFormat>
QT_BEGIN_NAMESPACE
@@ -70,7 +71,7 @@ public:
QIBusAttribute();
~QIBusAttribute();
- QTextFormat format() const;
+ QTextCharFormat format() const;
Type type;
quint32 value;