Search code examples
apache-flextextboxcopy-pastetextinputflex-spark

How to ignore Ctrl-C events in flex that do not change a textbox contents?


Currently, it seems that every time Ctrl-C is pressed within a textbox to copy its content, the textbox receives an Event.CHANGE, and thus our application decides that a change was made in the text box and enables the "apply changes" button, although no changes were made, and all the user wanted was to copy the textbox contents. The textbox component we're using is spark.components.TextInput

On view initialization I register:

_view.hostNameTextBox.addEventListener(
    Event.CHANGE, onConnectionDat‌aChanged, false, 0, true
);

And the event listener function is:

private function onConnectionDataChanged(e:Event):void {
    _view.applyButton.enabled = true;
}

Any ideas ?

Thanks !


Solution

  • Here's a slight variation of @Sunil D.'s answer: use the operation property of the event to determine whether the current operation was a copy operation or another one:

    private function inputChangeHandler(event:TextOperationEvent):void {
        var operation:IOperation = event.operation;
        if (operation is CopyOperation) trace("Ctrl+C was pressed");
        if (operation is InsertTextOperation) trace("New text was inserted");
        if (operation is DeleteTextOperation) trace("Some text was deleted");
    }
    

    This approach will also fix your issue with multiple TextInputs: only one event handler required instead of many.