diff -r c3690ec91ef8 -r 923ff622b8b9 src/hbwidgets/editors/hbabstractedit_p.cpp --- a/src/hbwidgets/editors/hbabstractedit_p.cpp Wed Jun 23 18:33:25 2010 +0300 +++ b/src/hbwidgets/editors/hbabstractedit_p.cpp Tue Jul 06 14:36:53 2010 +0300 @@ -39,7 +39,6 @@ #include "hbstyleoption_p.h" #include "hbscrollarea.h" #include "hbvalidator.h" -#include "hbmeshlayout_p.h" #include "hbmenu.h" #include "hbselectioncontrol_p.h" #include "hbcolorscheme.h" @@ -48,6 +47,9 @@ #include "hbfeaturemanager_r.h" #include "hbinputeditorinterface.h" #include "hbinputvkbhost.h" +#include "hbinputmethod.h" +#include "hbinputfocusobject.h" + #include #include @@ -95,6 +97,7 @@ HbEditItem(HbAbstractEdit *parent) : HbWidget(parent), edit(parent) { + setFlag(QGraphicsItem::ItemUsesExtendedStyleOption, true); }; virtual ~HbEditItem() {}; @@ -377,7 +380,7 @@ } cursor.setPosition(pos, mode); - + ensureCursorVisible(); cursorChanged(HbValidator::CursorChangeFromMouse); } @@ -581,13 +584,11 @@ void HbAbstractEditPrivate::setTextInteractionFlags(Qt::TextInteractionFlags flags) { - Q_Q(HbAbstractEdit); - if (flags == interactionFlags) return; interactionFlags = flags; - if (q->hasFocus()) { + if (hasInputFocus()) { setBlinkingCursorEnabled(flags & Qt::TextEditable); } } @@ -777,7 +778,7 @@ if (cursor.hasSelection()) { QAbstractTextDocumentLayout::Selection selection; selection.cursor = cursor; - QPalette::ColorGroup cg = q->hasFocus() ? QPalette::Active : QPalette::Inactive; + QPalette::ColorGroup cg = hasInputFocus() ? QPalette::Active : QPalette::Inactive; selection.format.setBackground(ctx.palette.brush(cg, QPalette::Highlight)); selection.format.setForeground(ctx.palette.brush(cg, QPalette::HighlightedText)); @@ -1078,16 +1079,24 @@ } else { // Currently focused widget to listen to InputContext before updating the cursor position sendMouseEventToInputContext(point); + + // translate the point to have the Y ccordinate inside the viewport + QPointF translatedPoint(point); + if(translatedPoint.y() < viewPortRect().top()) { + translatedPoint.setY(viewPortRect().top() + 1); + } else if(translatedPoint.y() > viewPortRect().bottom()){ + translatedPoint.setY(viewPortRect().bottom() - 1); + } + // need to get the cursor position again since input context can change the document - newCursorPos = hitTest(point, Qt::FuzzyHit); + newCursorPos = hitTest(translatedPoint, Qt::FuzzyHit); setCursorPosition(newCursorPos); if (interactionFlags & Qt::TextEditable) { updateCurrentCharFormat(); } - cursorChanged(HbValidator::CursorChangeFromMouse); - QString anchor(q->anchorAt(point)); + QString anchor(q->anchorAt(translatedPoint)); if(!anchor.isEmpty()) { emit q->anchorTapped(anchor); } @@ -1234,16 +1243,27 @@ sendInputPanelEvent(QEvent::CloseSoftwareInputPanel); } -#include "hbinputeditorinterface.h" -#include "hbinputvkbhost.h" - -void HbAbstractEditPrivate::minimizeInputPanel() +bool HbAbstractEditPrivate::hasInputFocus() const { - Q_Q(HbAbstractEdit); + Q_Q(const HbAbstractEdit); + + HbInputMethod* inputMethod = HbInputMethod::activeInputMethod(); + if (inputMethod && inputMethod->focusObject() && + qobject_cast(inputMethod->focusObject()->object()) == q) { + return true; + } + return false; +} - HbEditorInterface ei(q); - HbVkbHost* vkbHost = ei.vkbHost(); - vkbHost->minimizeKeypad(); +void HbAbstractEditPrivate::setInputFocusEnabled(bool enable) +{ + QGraphicsItem *focusItem = focusPrimitive(HbWidget::FocusHighlightActive); + if (focusItem) { + focusItem->setVisible(enable); + } + + setBlinkingCursorEnabled(enable); + repaintOldAndNewSelection(selectionCursor); } #include "moc_hbabstractedit.cpp"