Fixed a bug where Terminal couldn't set itself to fullscreen the first

time. Some minor cleanups.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21681 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stefano Ceccherini
2007-07-22 13:26:17 +00:00
parent ac3a8f5446
commit 6fbf283fb5
5 changed files with 59 additions and 64 deletions
+7 -7
View File
@@ -38,14 +38,11 @@ extern char gUTF8WidthTable[]; // defined in UTF8WidthTbl.c
int32
CodeConv::UTF8GetFontWidth(const char *string)
{
uchar width, point;
ushort unicode, offset;
ushort unicode = UTF8toUnicode(string);
uchar width = gUTF8WidthTable[unicode >> 3];
ushort offset = unicode & 0x07;
offset = unicode = UTF8toUnicode(string);
width = gUTF8WidthTable[unicode >> 3];
offset = offset & 0x07;
point = 0x80 >> offset;
uchar point = 0x80 >> offset;
return (width & point) > 0 ? 2 : 1;
}
@@ -72,6 +69,9 @@ CodeConv::ConvertFromInternal(const char *src, int32 srclen, char *dst, int codi
convert_from_utf8(theCoding, (char *)src, &srclen,
(char *)dst, &dstlen, &state, '?');
// TODO: Apart from this particular case, looks like we could use the
// system api for code conversion... check if this (which looks a lot like a workaround)
// applies to haiku, and if not, get rid of this class and just use the system api directly.
if (coding == M_ISO_2022_JP && state != 0) {
const char *end_of_jis = "(B";
strncpy((char *)dst + dstlen, end_of_jis, 3);
+28 -3
View File
@@ -61,7 +61,7 @@ const static rgb_color kTermColorTable[16] = {
};
TermView::TermView(BRect frame)
TermView::TermView(BRect frame, const char *command)
: BView(frame, "termview", B_FOLLOW_ALL, B_WILL_DRAW | B_FRAME_EVENTS),
fShell(NULL),
fFontWidth(0),
@@ -107,13 +107,28 @@ TermView::TermView(BRect frame)
SetTermFont(be_plain_font, be_plain_font);
//SetIMAware(PrefHandler::Default()->getInt32(PREF_IM_AWARE));
// Get encoding name (setenv TTYPE in spawn_shell functions)
const char *encoding = longname2shortname(PrefHandler::Default()->getString(PREF_TEXT_ENCODING));
fShell = new Shell();
status_t status = fShell->Open(fTermRows, fTermColumns, command, encoding);
if (status < B_OK)
throw status;
status = AttachShell(fShell);
if (status < B_OK)
throw status;
_InitMouseThread();
}
TermView::~TermView()
{
DetachShell();
delete fTextBuffer;
delete fShell;
fQuitting = true;
kill_thread(fMouseThread);
}
@@ -140,6 +155,16 @@ TermView::DetachShell()
}
const char *
TermView::TerminalName() const
{
if (fShell == NULL)
return NULL;
return fShell->TTYName();
}
//! Get width and height for terminal font
void
TermView::GetFontSize(int* _width, int* _height)
@@ -1030,7 +1055,7 @@ TermView::UpdateSIGWINCH()
fShell->UpdateWindowSize(fTermRows, fTermColumns);
fFrameResized = 0;
fFrameResized = false;
if (fScrRegionSet == 0)
fScrBot = fTermRows - 1;
}
@@ -1381,7 +1406,7 @@ TermView::FrameResized(float width, float height)
fTermRows = rows;
fTermColumns = cols;
fFrameResized = 1;
fFrameResized = true;
}
+5 -3
View File
@@ -89,20 +89,22 @@ const unsigned char M_ADD_CURSOR [] = {
0x00, 0x10,
};
class TermBuffer;
class BPopUpMenu;
class BScrollBar;
class BString;
class Shell;
class TermBuffer;
class TermView : public BView {
public:
TermView(BRect frame);
TermView(BRect frame, const char *command);
~TermView();
status_t AttachShell(Shell *shell);
void DetachShell();
const char *TerminalName() const;
void SetTermFont(const BFont *halfFont, const BFont *fullFont);
void GetFontSize(int *width, int *height);
BRect SetTermSize(int rows, int cols, bool flag);
+15 -43
View File
@@ -39,7 +39,6 @@
#include "TermView.h"
#include "TermWindow.h"
#include "TermConst.h"
#include "Shell.h"
//
@@ -53,7 +52,6 @@
TermWindow::TermWindow(BRect frame, const char* title, const char *command)
: BWindow(frame, title, B_DOCUMENT_WINDOW, B_CURRENT_WORKSPACE|B_QUIT_ON_WINDOW_CLOSE),
fShell(NULL),
fMenubar(NULL),
fFilemenu(NULL),
fEditmenu(NULL),
@@ -67,7 +65,7 @@ TermWindow::TermWindow(BRect frame, const char* title, const char *command)
fPrefWindow(NULL),
fFindPanel(NULL),
fWindowUpdate(NULL),
fSavedFrame(0, 0, 0, 0),
fSavedFrame(0, 0, -1, -1),
fFindString(""),
fFindForwardMenuItem(NULL),
fFindBackwardMenuItem(NULL),
@@ -76,34 +74,12 @@ TermWindow::TermWindow(BRect frame, const char* title, const char *command)
fMatchCase(false),
fMatchWord(false)
{
int rows = PrefHandler::Default()->getInt32(PREF_ROWS);
if (rows < 1) {
rows = 1;
PrefHandler::Default()->setInt32(PREF_ROWS, rows);
}
int cols = PrefHandler::Default()->getInt32(PREF_COLS);
if (cols < MIN_COLS) {
cols = MIN_COLS;
PrefHandler::Default()->setInt32(PREF_COLS, cols);
}
// Get encoding name (setenv TTYPE in spawn_shell functions)
const char *encoding = longname2shortname(PrefHandler::Default()->getString(PREF_TEXT_ENCODING));
fShell = new Shell();
status_t status = fShell->Open(rows, cols, command, encoding);
if (status < 0)
throw status;
InitWindow();
_InitWindow(command);
}
TermWindow::~TermWindow()
{
fTermView->DetachShell();
delete fShell;
if (fPrefWindow)
fPrefWindow->PostMessage(B_QUIT_REQUESTED);
@@ -123,10 +99,10 @@ TermWindow::~TermWindow()
/** Initialize Window object. */
void
TermWindow::InitWindow()
TermWindow::_InitWindow(const char *command)
{
// make menu bar
SetupMenu();
_SetupMenu();
// Setup font.
@@ -155,9 +131,7 @@ TermWindow::InitWindow()
BRect textframe = Bounds();
textframe.top = fMenubar->Bounds().bottom + 1.0;
fTermView = new TermView(textframe);
fTermView->AttachShell(fShell);
fTermView = new TermView(textframe, command);
// Initialize TermView. (font, size and color)
fTermView->SetTermFont(&halfFont, &fullFont);
@@ -216,7 +190,7 @@ TermWindow::MenusBeginning()
void
TermWindow::SetupMenu()
TermWindow::_SetupMenu()
{
PrefHandler menuText;
@@ -437,7 +411,7 @@ TermWindow::MessageReceived(BMessage *message)
}
else if (!strcmp("tty", spe.FindString("property", i))) {
BMessage reply(B_REPLY);
reply.AddString("result", fShell->TTYName());
reply.AddString("result", fTermView->TerminalName());
message->SendReply(&reply);
} else {
BWindow::MessageReceived(message);
@@ -486,7 +460,7 @@ TermWindow::MessageReceived(BMessage *message)
r.Height()+fMenubar->Bounds().Height() + VIEW_OFFSET * 2);
fTermView->Invalidate();
break;
break;
}
case EIGHTYTWENTYFOUR: {
PrefHandler::Default()->setString(PREF_COLS, "80");
@@ -530,7 +504,6 @@ TermWindow::MessageReceived(BMessage *message)
BScreen screen(this);
fTermView->ScrollBar()->Hide();
fMenubar->Hide();
//fTermView->MoveTo(0,0);
fTermView->ResizeBy(B_V_SCROLL_BAR_WIDTH, mbHeight);
fSavedLook = Look();
// done before ResizeTo to work around a Dano bug (not erasing the decor)
@@ -544,7 +517,6 @@ TermWindow::MessageReceived(BMessage *message)
ResizeTo(fSavedFrame.Width(), fSavedFrame.Height());
MoveTo(fSavedFrame.left, fSavedFrame.top);
fTermView->ResizeBy(-B_V_SCROLL_BAR_WIDTH, -mbHeight);
//fTermView->MoveTo(0,mbHeight);
SetLook(fSavedLook);
fSavedFrame = BRect(0,0,-1,-1);
}
@@ -552,7 +524,7 @@ TermWindow::MessageReceived(BMessage *message)
}
case MSG_FONT_CHANGED: {
PrefHandler::Default()->setString (PREF_HALF_FONT_FAMILY, fNewFontMenu->FindMarked()->Label());
PostMessage (MSG_HALF_FONT_CHANGED);
PostMessage(MSG_HALF_FONT_CHANGED);
break;
}
case MSG_COLOR_CHANGED: {
@@ -567,15 +539,15 @@ TermWindow::MessageReceived(BMessage *message)
break;
}
case MENU_PAGE_SETUP: {
DoPageSetup ();
_DoPageSetup();
break;
}
case MENU_PRINT: {
DoPrint ();
_DoPrint();
break;
}
case MSGRUN_WINDOW: {
fTermView->UpdateSIGWINCH ();
fTermView->UpdateSIGWINCH();
break;
}
case B_ABOUT_REQUESTED: {
@@ -668,7 +640,7 @@ TermWindow::ResolveSpecifier(BMessage *msg, int32 index,
status_t
TermWindow::DoPageSetup()
TermWindow::_DoPageSetup()
{
BPrintJob job("PageSetup");
@@ -683,9 +655,9 @@ TermWindow::DoPageSetup()
void
TermWindow::DoPrint()
TermWindow::_DoPrint()
{
if (!fPrintSettings || (DoPageSetup() != B_NO_ERROR)) {
if (!fPrintSettings || (_DoPageSetup() != B_OK)) {
(new BAlert("Cancel", "Print cancelled.", "OK"))->Go();
return;
}
+4 -8
View File
@@ -39,8 +39,6 @@ class BMenuBar;
class BMessageRunner;
class FindWindow;
class PrefWindow;
class Shell;
class TermParse;
class TermView;
class TermWindow : public BWindow {
@@ -62,13 +60,11 @@ protected:
const char *property);
private:
void InitWindow();
void SetupMenu();
status_t DoPageSetup();
void DoPrint();
void _InitWindow(const char *command);
void _SetupMenu();
status_t _DoPageSetup();
void _DoPrint();
Shell *fShell;
TermParse *fTermParse;
BMenuBar *fMenubar;
BMenu *fFilemenu,
*fEditmenu,