Autodetection of window resize at end of input command line.
This commit is contained in:
svn%xmlterm.org 2000-04-05 01:51:34 +00:00
Родитель 4f3ad54414
Коммит 393312a517
6 изменённых файлов: 58 добавлений и 82 удалений

Просмотреть файл

@ -155,7 +155,6 @@ mozXMLTermSession::mozXMLTermSession() :
mBotScrollRow(0),
mRestoreInputEcho(false),
mNeedsResizing(false),
mShellPrompt(""),
mPromptHTML(""),
@ -285,17 +284,6 @@ NS_IMETHODIMP mozXMLTermSession::Finalize(void)
}
/** Sets XMLTerm flag to indicate XMLTerm needs to be resized
*/
NS_IMETHODIMP mozXMLTermSession::NeedsResizing(void)
{
XMLT_LOG(mozXMLTermSession::NeedsResizing,0,("\n"));
mNeedsResizing = true;
return NS_OK;
}
/** Resizes XMLterm to match a resized window.
* @param lineTermAux LineTermAux object to be resized (may be null)
*/
@ -338,14 +326,17 @@ NS_IMETHODIMP mozXMLTermSession::Resize(mozILineTermAux* lineTermAux)
/** Preprocesses user input before it is transmitted to LineTerm
* @param aString (inout) input data to be preprocessed
* @param consumed (output) true if input data has been consumed
* @param checkSize (output) true if terminal size needs to be checked
*/
NS_IMETHODIMP mozXMLTermSession::Preprocess(const nsString& aString,
PRBool& consumed)
PRBool& consumed,
PRBool& checkSize)
{
XMLT_LOG(mozXMLTermSession::Preprocess,70,("\n"));
consumed = false;
checkSize = false;
if (mMetaCommandType == TREE_META_COMMAND) {
if (aString.Length() == 1) {
@ -400,6 +391,15 @@ NS_IMETHODIMP mozXMLTermSession::Preprocess(const nsString& aString,
break;
}
}
} else {
if ((mScreenNode == nsnull) &&
(aString.FindCharInSet("\r\n\017") >= 0)) {
// C-Return or Newline or Control-O found in string; not screen mode;
// resize terminal, if need be
checkSize = true;
XMLT_LOG(mozXMLTermSession::Preprocess,72,("checkSize\n"));
}
}
return NS_OK;
@ -719,6 +719,8 @@ NS_IMETHODIMP mozXMLTermSession::ReadAll(mozILineTermAux* lineTermAux,
result = PositionScreenCursor(cursorRow, cursorCol);
flushOutput = false;
} else {
// Process line data
PRBool promptLine, inputLine, metaCommand, completionRequested;
@ -990,15 +992,14 @@ NS_IMETHODIMP mozXMLTermSession::ReadAll(mozILineTermAux* lineTermAux,
result = NewEntry(promptStr);
if (NS_FAILED(result))
break;
}
// Resize XMLTerm before command output, if request has been made
if (mNeedsResizing) {
mNeedsResizing = false;
if (mCurrentEntryNumber == mStartEntryNumber) {
// First entry; resize terminal
result = Resize(lineTermAux);
if (NS_FAILED(result))
break;
}
}
// Display input and position cursor
PRInt32 cursorCol = 0;

Просмотреть файл

@ -64,10 +64,6 @@ class mozXMLTermSession
*/
NS_IMETHOD Finalize(void);
/** Sets XMLTerm flag to indicate XMLTerm needs to be resized
*/
NS_IMETHOD NeedsResizing(void);
/** Resizes XMLterm to match a resized window.
* @param lineTermAux LineTermAux object to be resized (may be null)
*/
@ -76,8 +72,11 @@ class mozXMLTermSession
/** Preprocesses user input before it is transmitted to LineTerm
* @param aString (inout) input data to be preprocessed
* @param consumed (output) true if input data has been consumed
* @param checkSize (output) true if terminal size needs to be checked
*/
NS_IMETHOD Preprocess(const nsString& aString, PRBool& consumed);
NS_IMETHOD Preprocess(const nsString& aString,
PRBool& consumed,
PRBool& checkSize);
/** Reads all available data from LineTerm and displays it;
* returns when no more data is available.
@ -700,9 +699,6 @@ protected:
/** restore input echo flag */
PRBool mRestoreInputEcho;
/** needs resizing flag */
PRBool mNeedsResizing;
/** shell prompt string */
nsString mShellPrompt;

Просмотреть файл

@ -109,6 +109,7 @@ mozXMLTerminal::mozXMLTerminal() :
mXMLTermSession(nsnull),
mLineTermAux(nsnull),
mNeedsResizing(false),
mKeyListener(nsnull),
mTextListener(nsnull),
@ -507,11 +508,6 @@ NS_IMETHODIMP mozXMLTerminal::Activate(void)
// Save cookie
mCookie = cookie;
// Resize XMLterm (before displaying any output)
result = Resize();
if (NS_FAILED(result))
return result;
// Get the DOM event receiver for document
nsCOMPtr<nsIDOMEventReceiver> eventReceiver;
result = mDOMDocument->QueryInterface(NS_GET_IID(nsIDOMEventReceiver),
@ -642,12 +638,12 @@ NS_IMETHODIMP mozXMLTerminal::ScreenSize(PRInt32& rows, PRInt32& cols,
xdel = pixelScale * fontWidth;
ydel = pixelScale * fontHeight + 2;
xPixels = (int) (pixelScale * shellArea.height);
yPixels = (int) (pixelScale * shellArea.width);
xPixels = (int) (pixelScale * shellArea.width);
yPixels = (int) (pixelScale * shellArea.height);
// Determine number of rows/columns
rows = (int) ((xPixels-44) / ydel);
cols = (int) ((yPixels-20) / xdel);
rows = (int) ((yPixels-16) / ydel);
cols = (int) ((xPixels-20) / xdel);
if (rows < 1) rows = 1;
if (cols < 1) cols = 1;
@ -679,8 +675,17 @@ NS_IMETHODIMP mozXMLTerminal::SendText(const nsString& aString,
nsAutoString sendStr = aString;
// Preprocess string and check if it is to be consumed
PRBool consumed = false;
result = mXMLTermSession->Preprocess(sendStr, consumed);
PRBool consumed, checkSize;
result = mXMLTermSession->Preprocess(sendStr, consumed, checkSize);
PRBool screenMode;
GetScreenMode(&screenMode);
if (!screenMode && (checkSize || mNeedsResizing)) {
// Resize terminal, if need be
mXMLTermSession->Resize(mLineTermAux);
mNeedsResizing = false;
}
if (!consumed) {
result = mLineTermAux->Write(sendStr.GetUnicode(), aCookie);
@ -907,10 +912,18 @@ NS_IMETHODIMP mozXMLTerminal::Resize(void)
if (!mXMLTermSession)
return NS_ERROR_FAILURE;
// Delay resizing until next command output display
result = mXMLTermSession->NeedsResizing();
PRBool screenMode;
GetScreenMode(&screenMode);
if (screenMode) {
// Delay resizing until next input processing
mNeedsResizing = true;
} else {
// Resize session
result = mXMLTermSession->Resize(mLineTermAux);
if (NS_FAILED(result))
return result;
}
return NS_OK;
}

Просмотреть файл

@ -136,6 +136,9 @@ class mozXMLTerminal : public mozIXMLTerminal,
/** owning reference to LineTermAux object created by us */
nsCOMPtr<mozILineTermAux> mLineTermAux;
/** terminal needs resizing flag */
PRBool mNeedsResizing;
/** owning referencing to key listener object created by us */
nsCOMPtr<nsIDOMEventListener> mKeyListener;

Просмотреть файл

@ -418,6 +418,7 @@ function HandleEvent(eventObj, eventType, targetType, entryNumber,
dump("clickCount="+eventObj.clickCount+"\n");
var shiftClick = eventObj.shiftKey;
var dblClick = (eventObj.clickCount == 2);
// Execute shell commands only on double-click for safety
@ -497,7 +498,7 @@ function HandleEvent(eventObj, eventType, targetType, entryNumber,
suffix = "";
}
if (window.windowsMode === "on") {
if (shiftClick || (window.windowsMode === "on")) {
action = "createln";
sendStr = prefix + filename + suffix;

Просмотреть файл

@ -1,38 +0,0 @@
<?xml version="1.0"?>
<!--
The contents of this file are subject to the Mozilla Public
License Version 1.1 (the "MPL"); you may not use this file
except in compliance with the MPL. You may obtain a copy of
the MPL at http://www.mozilla.org/MPL/
Software distributed under the MPL is distributed on an "AS
IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
implied. See the MPL for the specific language governing
rights and limitations under the MPL.
The Original Code is lineterm.
The Initial Developer of the Original Code is Ramalingam Saravanan.
Portions created by Ramalingam Saravanan <svn@xmlterm.org> are
Copyright (C) 1999 Ramalingam Saravanan. All Rights Reserved.
Contributor(s):
-->
<?xml-stylesheet href="chrome://xmlterm/skin/xmlterm.css" type="text/css"?>
<?xul-overlay href="chrome://global/content/globalOverlay.xul"?>
<!DOCTYPE window>
<window id="xmlterm-window" xmlns:html="http://www.w3.org/TR/REC-html40"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload="StartupXMLTerm();"
title="xmlterm" align="vertical" width="586" height="444">
<html:script src="chrome://xmlterm/content/XMLTermChrome.js"></html:script>
<html:iframe id="content-frame" type="content" html:name="content"
html:src="chrome://xmlterm/content/xmlterm.html" flex="100%"/>
</window>