From 9d6e3ba7db4e952cfef5256a233051e52ba9d95e Mon Sep 17 00:00:00 2001
From: andreas <andreas@5a81b35b-ba03-0410-adc8-b2c5c5119f08>
Date: Sat, 15 May 2010 19:00:37 +0000
Subject: [PATCH] changed Keyboard modfifiers for arrow keys to take care of
 difference in OSX ans Linuzx/Windows Changed positioning of completer window
 to increas change to get it working in Windows

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/branches/new_shell@2262 5a81b35b-ba03-0410-adc8-b2c5c5119f08
---
 .../gui/src/python_shell/completer_base.cc    |  2 +-
 .../src/python_shell/python_shell_widget.cc   | 26 +++++++++----------
 .../src/python_shell/python_shell_widget.hh   |  1 -
 3 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/modules/gui/src/python_shell/completer_base.cc b/modules/gui/src/python_shell/completer_base.cc
index d9d46b3a3..03c574c6d 100644
--- a/modules/gui/src/python_shell/completer_base.cc
+++ b/modules/gui/src/python_shell/completer_base.cc
@@ -61,7 +61,7 @@ void OstCompleterBase::complete(const QRect & rect,bool inline_completion)
                            (popup()->verticalScrollBar()->isVisible() ? 
                             popup()->verticalScrollBar()->width():0);
   popup()->setFixedWidth(popup_width);
-  popup()->move(popup()->pos()+QPoint(0,-popup()->height()-rect.height()));
+  popup()->move(widget()->mapToGlobal(rect.topLeft()+QPoint(0,-popup()->height())));
 }
 
 QString OstCompleterBase::GetCommonMatch()
diff --git a/modules/gui/src/python_shell/python_shell_widget.cc b/modules/gui/src/python_shell/python_shell_widget.cc
index 404633e58..5a86eb418 100644
--- a/modules/gui/src/python_shell/python_shell_widget.cc
+++ b/modules/gui/src/python_shell/python_shell_widget.cc
@@ -144,6 +144,11 @@ void PythonShellWidget::setup_readonly_state_machine_()
 
 void PythonShellWidget::setup_state_machine_()
 {
+  #ifdef __APPLE__
+    QFlags<Qt::KeyboardModifier> DNG_ARROW_MODIFIERS = Qt::KeypadModifier;
+  #else
+    QFlags<Qt::KeyboardModifier> DNG_ARROW_MODIFIERS = Qt::NoModifier;
+  #endif
   State* single_line=new State;
   State* multi_line_inactive=new State;
   State* completing=new State;
@@ -180,8 +185,8 @@ void PythonShellWidget::setup_state_machine_()
                                                  new BlockStatusGuard(this,CODE_BLOCK_INCOMPLETE));
   single_line->addTransition(tr3);
   connect(tr3,SIGNAL(triggered()),this,SLOT(OnEnterTransition()));
-  single_line->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Up,Qt::KeypadModifier,history_up));
-  single_line->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Down,Qt::KeypadModifier,history_down));
+  single_line->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Up,DNG_ARROW_MODIFIERS,history_up));
+  single_line->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Down,DNG_ARROW_MODIFIERS,history_down));
 
   KeyEventTransition* tr4=new KeyEventTransition(QEvent::KeyPress,
                                                  Qt::Key_Return,
@@ -198,11 +203,11 @@ void PythonShellWidget::setup_state_machine_()
                                                  new BlockStatusGuard(this,CODE_BLOCK_INCOMPLETE));
   multi_line_inactive->addTransition(tr6);
   connect(tr6,SIGNAL(triggered()),this,SLOT(OnEnterTransition()));
-  multi_line_inactive->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Left,Qt::KeypadModifier,multiline_active_state_));
-  multi_line_inactive->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Right,Qt::KeypadModifier,multiline_active_state_));
+  multi_line_inactive->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Left,DNG_ARROW_MODIFIERS,multiline_active_state_));
+  multi_line_inactive->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Right,DNG_ARROW_MODIFIERS,multiline_active_state_));
   multi_line_inactive->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Return,Qt::ControlModifier,multiline_active_state_));
-  multi_line_inactive->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Up,Qt::KeypadModifier,history_up));
-  multi_line_inactive->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Down,Qt::KeypadModifier,history_down));
+  multi_line_inactive->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Up,DNG_ARROW_MODIFIERS,history_up));
+  multi_line_inactive->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Down,DNG_ARROW_MODIFIERS,history_down));
 
   KeyEventTransition* tr7=new KeyEventTransition(QEvent::KeyPress,
                                                  Qt::Key_Return,
@@ -221,8 +226,8 @@ void PythonShellWidget::setup_state_machine_()
   connect(tr8,SIGNAL(triggered()),this,SLOT(OnEnterTransition()));
 
   multiline_active_state_->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Escape,Qt::NoModifier,multi_line_inactive));
-  multiline_active_state_->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Up,Qt::ControlModifier | Qt::KeypadModifier,history_up));
-  multiline_active_state_->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Down,Qt::ControlModifier | Qt::KeypadModifier,history_down));
+  multiline_active_state_->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Up,Qt::ControlModifier | DNG_ARROW_MODIFIERS,history_up));
+  multiline_active_state_->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Down,Qt::ControlModifier | DNG_ARROW_MODIFIERS,history_down));
 
   history_up->addTransition(new AutomaticTransition(multi_line_inactive,new HistoryGuard(&history_,EDITMODE_MULTILINE_INACTIVE)));
   history_up->addTransition(new AutomaticTransition(single_line,new HistoryGuard(&history_,EDITMODE_SINGLELINE)));
@@ -695,10 +700,5 @@ void PythonShellWidget::showEvent(QShowEvent* event)
   }
 }
 
-void PythonShellWidget::AquireFocus()
-{
-  setFocus(Qt::OtherFocusReason);
-}
-
 
 }}
diff --git a/modules/gui/src/python_shell/python_shell_widget.hh b/modules/gui/src/python_shell/python_shell_widget.hh
index 2cc7e7e9f..233279982 100644
--- a/modules/gui/src/python_shell/python_shell_widget.hh
+++ b/modules/gui/src/python_shell/python_shell_widget.hh
@@ -70,7 +70,6 @@ public slots:
   void AppendOutput(unsigned int id,const QString& output);
   void AppendError(unsigned int id,const QString& output);
   void OutputFinished(unsigned int id, bool error);
-  void AquireFocus();
   void Complete(bool inline_completion=true);
   void Recomplete(const QString& completion);
   // slots for state machine
-- 
GitLab