Hello community, here is the log from the commit of package konsole for openSUSE:12.1:Update:Test checked in at 2011-12-09 18:07:03 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:12.1:Update:Test/konsole (Old) and /work/SRC/openSUSE:12.1:Update:Test/.konsole.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "konsole", Maintainer is "[email protected]" Changes: -------- --- /work/SRC/openSUSE:12.1:Update:Test/konsole/konsole.changes 2011-12-09 18:07:08.000000000 +0100 +++ /work/SRC/openSUSE:12.1:Update:Test/.konsole.new/konsole.changes 2011-12-09 18:07:08.000000000 +0100 @@ -1,0 +2,5 @@ +Fri Nov 4 18:54:42 UTC 2011 - [email protected] + +- Fix resize of the konsole window (bnc#692446) + +------------------------------------------------------------------- New: ---- bnc692446_fix_resize.diff ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ konsole.spec ++++++ --- /var/tmp/diff_new_pack.rZvSj2/_old 2011-12-09 18:07:09.000000000 +0100 +++ /var/tmp/diff_new_pack.rZvSj2/_new 2011-12-09 18:07:09.000000000 +0100 @@ -32,6 +32,7 @@ Source24: utilities-terminal-su-48.png Source25: utilities-terminal-su-64.png Source26: utilities-terminal-su-128.png +Patch: bnc692446_fix_resize.diff BuildRequires: fdupes BuildRequires: libkde4-devel BuildRequires: pkgconfig(libxklavier) @@ -43,6 +44,7 @@ %prep %setup -q -n konsole-%{version} +%patch -p 1 %build %cmake_kde4 -d build ++++++ bnc692446_fix_resize.diff ++++++ Subject: Fix the size reported by konsole From: Jekyll Wu <[email protected]> Signed-Off-By: Christian Trippe <[email protected]> Bug: bnc#692446 Patch-upstream: kde >= 4.8 I changed the line connect( _shellProcess,SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(done(int,QProcess::ExitStatus)) ); into connect( _shellProcess,SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(done(int)) ); in the diff for session.cpp to fit with 4.7 commit 7e00edd5166096feb59ffa694b6a6ff858fe1924 Author: Kurt Hindenburg <[email protected]> Date: Fri Aug 5 10:40:14 2011 -0400 Make sure pty device has right size before terminal process queries it. Whenever TeminalDisplay is resized, konsole tells the underlying pty device its new size by calling Pty::setWindowSize(). However, current code can't guarantee when the terminal process starts and queries the pty device about its size, the pty device already has the right info. This has caused some long known bugs, such as #176902. This patch tries to guarantee that important assumption. It currently uses a hard-coded small delay, which works pretty well in practice although not that elegant. Patch by Jekyll Wu <[email protected]> I think this is better than leaving the situation as it is. This may be backported if no issues are found. BUG: 173999 BUG: 176902 BUG: 203185 BUG: 229058 REVIEW: 102061 FIXED-IN: 4.8 diff --git a/src/Application.cpp b/src/Application.cpp index 9351772..244ec5e 100644 --- a/src/Application.cpp +++ b/src/Application.cpp @@ -442,7 +442,6 @@ Session* Application::createSession(Profile::Ptr profile, const QString& directo // a change in terminal size right after the session starts. some applications such as GNU Screen // and Midnight Commander don't like this happening view->createView(session); - session->run(); return session; } diff --git a/src/Emulation.cpp b/src/Emulation.cpp index e769833..f86b53d 100644 --- a/src/Emulation.cpp +++ b/src/Emulation.cpp @@ -58,7 +58,8 @@ Emulation::Emulation() : _codec(0), _decoder(0), _keyTranslator(0), - _usesMouse(false) + _usesMouse(false), + _imageSizeInitialized(false) { // create screens with a default size _screen[0] = new Screen(40,80); @@ -347,14 +348,37 @@ void Emulation::setImageSize(int lines, int columns) QSize newSize(columns,lines); if (newSize == screenSize[0] && newSize == screenSize[1]) - return; + { + // If this method is called for the first time, always emit + // SIGNAL(imageSizeChange()), even if the new size is the same as the + // current size. See #176902 + if (!_imageSizeInitialized) + { + emit imageSizeChanged(lines,columns); + } + } + else + { + _screen[0]->resizeImage(lines,columns); + _screen[1]->resizeImage(lines,columns); - _screen[0]->resizeImage(lines,columns); - _screen[1]->resizeImage(lines,columns); + emit imageSizeChanged(lines,columns); - emit imageSizeChanged(lines,columns); + bufferedUpdate(); + } + + if (!_imageSizeInitialized) + { + _imageSizeInitialized = true; + + // FIXME + // a hard-coded, small delay is introduced to gurarantee Session::run() + // does not get triggered by SIGNAL(imageSizeInitialized()) before + // Pty::setWindowSize() is triggered by previously emitted + // SIGNAL(imageSizeChanged()); See #203185 + QTimer::singleShot(200, this, SIGNAL(imageSizeInitialized()) ); + } - bufferedUpdate(); } QSize Emulation::imageSize() const diff --git a/src/Emulation.h b/src/Emulation.h index 2a6c371..cb5fbcf 100644 --- a/src/Emulation.h +++ b/src/Emulation.h @@ -378,6 +378,12 @@ signals: */ void imageSizeChanged(int lineCount , int columnCount); + /** + * Emitted when the setImageSize() is called on this emulation for + * the first time. + */ + void imageSizeInitialized(); + /** * Emitted when the terminal program requests to change various properties * of the terminal display. @@ -462,6 +468,7 @@ private: bool _usesMouse; QTimer _bulkTimer1; QTimer _bulkTimer2; + bool _imageSizeInitialized; }; diff --git a/src/Session.cpp b/src/Session.cpp index 5890d5c..8b735e7 100644 --- a/src/Session.cpp +++ b/src/Session.cpp @@ -177,6 +177,7 @@ void Session::openTeletype(int fd) connect( _emulation,SIGNAL(useUtf8Request(bool)),_shellProcess,SLOT(setUtf8Mode(bool)) ); connect( _shellProcess,SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(done(int)) ); connect( _emulation,SIGNAL(imageSizeChanged(int,int)),this,SLOT(updateWindowSize(int,int)) ); + connect( _emulation,SIGNAL(imageSizeInitialized()),this,SLOT(run()) ); } WId Session::windowId() const -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
