From c2577509f9bd2634edf03a90be99c45fd2fea76c Mon Sep 17 00:00:00 2001 From: Siarzhuk Zharski Date: Sat, 16 Mar 2013 15:48:44 +0100 Subject: [PATCH] Optimize SIGWINCH Shell notification Fixes issue with missed SIGWINCH shell notification in case the Terminal frame was resized by using any of "Settings"->"Window size" menu items. Fixes #9293 - original problem was pointed out by Ziusudra. Thank you! --- src/apps/terminal/TermView.cpp | 11 ++++++----- src/apps/terminal/TermView.h | 3 ++- src/apps/terminal/TermWindow.cpp | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/apps/terminal/TermView.cpp b/src/apps/terminal/TermView.cpp index abbacebfeb..3488e41628 100644 --- a/src/apps/terminal/TermView.cpp +++ b/src/apps/terminal/TermView.cpp @@ -551,7 +551,7 @@ TermView::Columns() const //! Set number of rows and columns in terminal BRect -TermView::SetTermSize(int rows, int columns) +TermView::SetTermSize(int rows, int columns, bool notifyShell) { //debug_printf("TermView::SetTermSize(%d, %d)\n", rows, columns); if (rows > 0) @@ -591,6 +591,9 @@ TermView::SetTermSize(int rows, int columns) offset + rows + 2); } + if (notifyShell) + fFrameResized = true; + return rect; } @@ -602,7 +605,7 @@ TermView::SetTermSize(BRect rect) int columns; GetTermSizeFromRect(rect, &rows, &columns); - SetTermSize(rows, columns); + SetTermSize(rows, columns, false); } @@ -1575,9 +1578,7 @@ TermView::FrameResized(float width, float height) if (fResizeViewDisableCount > 0) fResizeViewDisableCount--; - SetTermSize(rows, columns); - - fFrameResized = true; + SetTermSize(rows, columns, true); } diff --git a/src/apps/terminal/TermView.h b/src/apps/terminal/TermView.h index b3cbaa8f8e..2766f25686 100644 --- a/src/apps/terminal/TermView.h +++ b/src/apps/terminal/TermView.h @@ -72,7 +72,8 @@ public: void GetFontSize(int* width, int* height); int Rows() const; int Columns() const; - BRect SetTermSize(int rows, int cols); + BRect SetTermSize(int rows, int cols, + bool notifyShell); void SetTermSize(BRect rect); void GetTermSizeFromRect(const BRect &rect, int *rows, int *columns); diff --git a/src/apps/terminal/TermWindow.cpp b/src/apps/terminal/TermWindow.cpp index 1e7987e888..5c734312c1 100644 --- a/src/apps/terminal/TermWindow.cpp +++ b/src/apps/terminal/TermWindow.cpp @@ -817,7 +817,7 @@ TermWindow::MessageReceived(BMessage *message) for (int32 i = 0; i < fTabView->CountTabs(); i++) { TermView* view = _TermViewAt(i); - view->SetTermSize(rows, columns); + view->SetTermSize(rows, columns, true); _ResizeView(view); } break;