diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2016-03-14 17:47:44 +0100 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2016-03-14 17:47:44 +0100 |
commit | 1c64345fe4da851982f69ebf6e92bc88cebbad46 (patch) | |
tree | d46116eaa873e5eb06cf97f665973cca07ec6905 | |
parent | ab959b43ca0d41104fc828e0a0b57cc8a6c5108c (diff) | |
download | tdebase-1c64345fe4da851982f69ebf6e92bc88cebbad46.tar.gz tdebase-1c64345fe4da851982f69ebf6e92bc88cebbad46.zip |
Konsole : added support for mouse wheel events in the alternate screen. This allows scrolling within vim, less and similar applications.
This resolves bug 2597.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
-rw-r--r-- | konsole/konsole/TEWidget.cpp | 19 | ||||
-rw-r--r-- | konsole/konsole/TEWidget.h | 7 | ||||
-rw-r--r-- | konsole/konsole/TEmulation.cpp | 1 |
3 files changed, 26 insertions, 1 deletions
diff --git a/konsole/konsole/TEWidget.cpp b/konsole/konsole/TEWidget.cpp index f151044fc..52cd1236b 100644 --- a/konsole/konsole/TEWidget.cpp +++ b/konsole/konsole/TEWidget.cpp @@ -340,6 +340,8 @@ TEWidget::TEWidget(TQWidget *parent, const char *name) ,font_h(1) ,font_w(1) ,font_a(1) +,screen_num(0) +,screen(NULL) ,lines(1) ,columns(1) ,contentHeight(1) @@ -1694,7 +1696,22 @@ void TEWidget::wheelEvent( TQWheelEvent* ev ) return; if ( mouse_marks ) - TQApplication::sendEvent(scrollbar, ev); + { + if (!screen || screen->hasScroll() || (scrollbar->maxValue() == 0 && screen_num == 0)) + { + // Send event to scroll bar + TQApplication::sendEvent(scrollbar, ev); + } + else + { + // Terminal window can not be scrolled, so emulate key up/key down when mouse wheel is used + TQKeyEvent ke(TQEvent::KeyPress, ev->delta() > 0 ? TQt::Key_Up : TQt::Key_Down, 0, TQt::NoButton); + for (int i = 0; i < TQApplication::wheelScrollLines(); ++i) + { + emit keyPressedSignal(&ke); + } + } + } else { TQPoint tL = contentsRect().topLeft(); diff --git a/konsole/konsole/TEWidget.h b/konsole/konsole/TEWidget.h index 2baa2531c..967896082 100644 --- a/konsole/konsole/TEWidget.h +++ b/konsole/konsole/TEWidget.h @@ -32,6 +32,7 @@ #include <tdepopupmenu.h> #include "TECommon.h" +#include "TEScreen.h" extern unsigned short vt100_graphics[32]; @@ -142,6 +143,8 @@ public: void setRim(int rim) { rimX=rim; rimY=rim; } + void setScreen(int num, TEScreen *scr) { screen_num = num & 0x01; screen = scr; } + public slots: void setSelectionEnd(); @@ -241,6 +244,10 @@ private: int bX; // offset int bY; // offset + // Required to handle mouse wheel events correctly in all cases + int screen_num; // Screen number (0 or 1) + TEScreen *screen; // Pointer to current screen. No ownership!! + int lines; int columns; int contentHeight; diff --git a/konsole/konsole/TEmulation.cpp b/konsole/konsole/TEmulation.cpp index 7576e9688..943d2f205 100644 --- a/konsole/konsole/TEmulation.cpp +++ b/konsole/konsole/TEmulation.cpp @@ -197,6 +197,7 @@ void TEmulation::setScreen(int n) { TEScreen *old = scr; scr = screen[n&1]; + gui->setScreen(n&1, scr); if (scr != old) old->setBusySelecting(false); } |