diff --git a/modules/gui/src/python_shell/python_shell_widget.cc b/modules/gui/src/python_shell/python_shell_widget.cc index a1ee30cb5e33eeaafe6b89d94beccdf75925d490..534afecdab0c6cb0078f9be26bef2d83afda8496 100644 --- a/modules/gui/src/python_shell/python_shell_widget.cc +++ b/modules/gui/src/python_shell/python_shell_widget.cc @@ -135,7 +135,7 @@ void PythonShellWidget::setup_readonly_state_machine_() Qt::NoModifier, readwrite_state_, true, - new EditPositionGuard(this,EditPositionGuard::EQUAL)))); + new EditPositionGuard(this,EditPositionGuard::EQUAL|EditPositionGuard::SELECTION)))); connect(readonly,SIGNAL(entered()),this,SLOT(OnReadonlyEntered())); connect(readwrite_state_,SIGNAL(entered()),this,SLOT(OnReadwriteEntered())); readonly_machine_->setInitialState(readwrite_state_); diff --git a/modules/gui/src/python_shell/transition.cc b/modules/gui/src/python_shell/transition.cc index 57559da980c3805805f23ec851bb7a6993e65d35..e39ac8099c16fbf52185197063a9f0d58302f117 100644 --- a/modules/gui/src/python_shell/transition.cc +++ b/modules/gui/src/python_shell/transition.cc @@ -61,7 +61,8 @@ KeyEventTransition::KeyEventTransition(QEvent::Type type,int key,Qt::KeyboardMod std::pair<bool,bool> KeyEventTransition::checkEvent(QKeyEvent* event) { assert(is_active_()); - if(event->type()==type_ && (event->key()==key_ || key_==Qt::Key_Any) && event->modifiers() == modifiers_ && guard_->check()){ + if(event->type()==type_ && (event->key()==key_ || + key_==Qt::Key_Any) && event->modifiers() == modifiers_ && guard_->check()){ trigger_(); return std::pair<bool,bool>(true,swallow_); } diff --git a/modules/gui/src/python_shell/transition_guard.cc b/modules/gui/src/python_shell/transition_guard.cc index 4409dfe3b6ec6c089e6677ba103fbf05daded002..765cb5f67d359ab718f08f343a8601016e6655fe 100644 --- a/modules/gui/src/python_shell/transition_guard.cc +++ b/modules/gui/src/python_shell/transition_guard.cc @@ -37,14 +37,17 @@ EditPositionGuard::EditPositionGuard(PythonShellWidget* shell, int flags): bool EditPositionGuard::check() { bool returnflag=false; + QTextCursor tc=shell_->textCursor(); if(flags_ & SMALLER){ - returnflag |= shell_->textCursor().position()< shell_->GetEditStartBlock().position(); + returnflag|=tc.selectionStart()<shell_->GetEditStartBlock().position(); } if(flags_ & EQUAL){ - returnflag |= shell_->textCursor().position()== shell_->GetEditStartBlock().position(); + if (!(flags_ & SELECTION && tc.hasSelection())) { + returnflag|=tc.selectionStart()==shell_->GetEditStartBlock().position(); + } } if(flags_ & BIGGER){ - returnflag |= shell_->textCursor().position()> shell_->GetEditStartBlock().position(); + returnflag |= tc.selectionStart()> shell_->GetEditStartBlock().position(); } return returnflag; } diff --git a/modules/gui/src/python_shell/transition_guard.hh b/modules/gui/src/python_shell/transition_guard.hh index d3e90b9a37b3d6c7d50b5c8ab245ed68420c1ea6..5ae202ca56a8131fc1e3589ffd8c63d330602c4e 100644 --- a/modules/gui/src/python_shell/transition_guard.hh +++ b/modules/gui/src/python_shell/transition_guard.hh @@ -40,7 +40,8 @@ public: enum FLAGS{ SMALLER=1, EQUAL=2, - BIGGER=4 + BIGGER=4, + SELECTION=8 }; EditPositionGuard(PythonShellWidget* shell,int flags); virtual bool check();