X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Ftext-controls%2Ftext-field-impl.cpp;h=6e08da13dcf83117cfd976ad1d79c4a49649bb80;hp=c6fd205cecc7032beee401bb006ed345f1b1bbf4;hb=5196315c0dcb4ffe51650ebd5415d680be611f7e;hpb=dc4d1f47f5d03c8fd45dbe0ae3da1a42b87b855d diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp index c6fd205..6e08da1 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp @@ -147,6 +147,7 @@ DALI_SIGNAL_REGISTRATION(Toolkit, TextField, "anchorClicked", SIGNAL_ANC DALI_SIGNAL_REGISTRATION(Toolkit, TextField, "inputFiltered", SIGNAL_INPUT_FILTERED ) DALI_SIGNAL_REGISTRATION(Toolkit, TextField, "cursorPositionChanged", SIGNAL_CURSOR_POSITION_CHANGED) DALI_SIGNAL_REGISTRATION(Toolkit, TextField, "selectionChanged", SIGNAL_SELECTION_CHANGED ) +DALI_SIGNAL_REGISTRATION(Toolkit, TextField, "selectionCleared", SIGNAL_SELECTION_CLEARED ) DALI_TYPE_REGISTRATION_END() // clang-format on @@ -1301,6 +1302,14 @@ bool TextField::DoConnectSignal(BaseObject* object, ConnectionTrackerInterface* fieldImpl.SelectionChangedSignal().Connect(tracker, functor); } } + else if(0 == strcmp(signalName.c_str(), SIGNAL_SELECTION_CLEARED)) + { + if(field) + { + Internal::TextField& fieldImpl(GetImpl(field)); + fieldImpl.SelectionClearedSignal().Connect(tracker, functor); + } + } else { // signalName does not match any signal @@ -1345,6 +1354,11 @@ DevelTextField::SelectionChangedSignalType& TextField::SelectionChangedSignal() return mSelectionChangedSignal; } +DevelTextField::SelectionClearedSignalType& TextField::SelectionClearedSignal() +{ + return mSelectionClearedSignal; +} + void TextField::OnInitialize() { Actor self = Self(); @@ -1551,6 +1565,11 @@ void TextField::OnRelayout(const Vector2& size, RelayoutContainer& container) EmitSelectionChangedSignal(); } + if(mSelectionCleared) + { + EmitSelectionClearedSignal(); + } + // The text-field emits signals when the input style changes. These changes of style are // detected during the relayout process (size negotiation), i.e after the cursor has been moved. Signals // can't be emitted during the size negotiation as the callbacks may update the UI. @@ -1947,10 +1966,22 @@ void TextField::EmitSelectionChangedSignal() mSelectionChanged = false; } +void TextField::EmitSelectionClearedSignal() +{ + Dali::Toolkit::TextField handle(GetOwner()); + mSelectionClearedSignal.Emit(handle); + mSelectionCleared = false; +} + void TextField::SelectionChanged(uint32_t oldStart, uint32_t oldEnd, uint32_t newStart, uint32_t newEnd) { if(((oldStart != newStart) || (oldEnd != newEnd)) && !mSelectionChanged) { + if(newStart == newEnd) + { + mSelectionCleared = true; + } + mSelectionChanged = true; mOldSelectionStart = oldStart; mOldSelectionEnd = oldEnd; @@ -2103,7 +2134,8 @@ TextField::TextField() mHasBeenStaged(false), mTextChanged(false), mCursorPositionChanged(false), - mSelectionChanged(false) + mSelectionChanged(false), + mSelectionCleared(false) { }