From 66b7ce851c82e95702dce45babdf21a21eb29106 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Sun, 11 May 2008 18:23:12 +0000 Subject: [PATCH] We shoulnd't mess with the pulse rate of the window, since if we are a replicant, the window is not ours. Blinking the cursor is now done with a BMessageRunner. Removed the dragger for the time being, since Terminal as a replicant has some issues. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25456 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/terminal/TermView.cpp | 42 +++++++++++++++++++--------------- src/apps/terminal/TermView.h | 2 +- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/apps/terminal/TermView.cpp b/src/apps/terminal/TermView.cpp index c4cc918b67..ab59195bb3 100644 --- a/src/apps/terminal/TermView.cpp +++ b/src/apps/terminal/TermView.cpp @@ -84,17 +84,18 @@ static property_info sPropList[] = { const static uint32 kUpdateSigWinch = 'Rwin'; +const static uint32 kBlinkCursor = 'BlCr'; const static rgb_color kBlackColor = { 0, 0, 0, 255 }; const static rgb_color kWhiteColor = { 255, 255, 255, 255 }; - TermView::TermView(BRect frame, int32 argc, const char **argv, int32 historySize) : BView(frame, "termview", B_FOLLOW_ALL, - B_WILL_DRAW | B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE| B_PULSE_NEEDED), + B_WILL_DRAW | B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE | B_PULSE_NEEDED), fShell(NULL), fWinchRunner(NULL), + fCursorBlinkRunner(NULL), fFontWidth(0), fFontHeight(0), fFontAscent(0), @@ -140,9 +141,10 @@ TermView::TermView(BRect frame, int32 argc, const char **argv, int32 historySize TermView::TermView(int rows, int columns, int32 argc, const char **argv, int32 historySize) : BView(BRect(0, 0, 0, 0), "termview", B_FOLLOW_ALL, - B_WILL_DRAW | B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE| B_PULSE_NEEDED), + B_WILL_DRAW | B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE | B_PULSE_NEEDED), fShell(NULL), fWinchRunner(NULL), + fCursorBlinkRunner(NULL), fFontWidth(0), fFontHeight(0), fFontAscent(0), @@ -185,13 +187,16 @@ TermView::TermView(int rows, int columns, int32 argc, const char **argv, int32 h _InitObject(argc, argv); SetTermSize(fTermRows, fTermColumns, true); + // TODO: Don't show the dragger, since replicant capabilities + // don't work very well ATM. + /* BRect rect(0, 0, 16, 16); rect.OffsetTo(Bounds().right - rect.Width(), Bounds().bottom - rect.Height()); SetFlags(Flags() | B_DRAW_ON_CHILDREN | B_FOLLOW_ALL); AddChild(new BDragger(rect, this, - B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM, B_WILL_DRAW)); + B_FOLLOW_RIGHT|B_FOLLOW_BOTTOM, B_WILL_DRAW));*/ } @@ -200,6 +205,7 @@ TermView::TermView(BMessage *archive) BView(archive), fShell(NULL), fWinchRunner(NULL), + fCursorBlinkRunner(NULL), fFontWidth(0), fFontHeight(0), fFontAscent(0), @@ -1311,14 +1317,16 @@ TermView::AttachedToWindow() if (fScrollBar) fScrollBar->SetSteps(fFontHeight, fFontHeight * fTermRows); + BMessenger thisMessenger(this); BMessage message(kUpdateSigWinch); - fWinchRunner = new (std::nothrow) BMessageRunner(BMessenger(this), &message, 500000); + fWinchRunner = + new (std::nothrow) BMessageRunner(thisMessenger, + &message, 500000); - // TODO: Since we can also be a replicant, messing - // with the window, which is not ours, is not nice: - // Switch to using a BMessageRunner for the - // blinking caret too. - Window()->SetPulseRate(1000000); + BMessage blinkMessage(kBlinkCursor); + fCursorBlinkRunner = + new (std::nothrow) BMessageRunner(thisMessenger, + &blinkMessage, 1000000); } @@ -1327,14 +1335,9 @@ TermView::DetachedFromWindow() { delete fWinchRunner; fWinchRunner = NULL; -} - - -void -TermView::Pulse() -{ - //if (system_time() > fLastCursorTime + 1000000) - BlinkCursor(); + + delete fCursorBlinkRunner; + fCursorBlinkRunner = NULL; } @@ -1762,6 +1765,9 @@ TermView::MessageReceived(BMessage *msg) // break; // } // } + case kBlinkCursor: + _BlinkCursor(); + break; case kUpdateSigWinch: _UpdateSIGWINCH(); break; diff --git a/src/apps/terminal/TermView.h b/src/apps/terminal/TermView.h index 706c4bbd30..fc99267542 100644 --- a/src/apps/terminal/TermView.h +++ b/src/apps/terminal/TermView.h @@ -123,7 +123,6 @@ public: protected: virtual void AttachedToWindow(); virtual void DetachedFromWindow(); - virtual void Pulse(); virtual void Draw(BRect updateRect); virtual void WindowActivated(bool active); virtual void KeyDown(const char*, int32); @@ -194,6 +193,7 @@ private: Shell *fShell; BMessageRunner *fWinchRunner; + BMessageRunner *fCursorBlinkRunner; // Font and Width BFont fHalfFont;