// Let TWidget set my size.
super.onResize(resize);
+ if (emulator == null) {
+ return;
+ }
+
// Synchronize against the emulator so we don't stomp on its reader
// thread.
synchronized (emulator) {
return;
}
- if (emulator.isReading()) {
+ if ((emulator != null) && (emulator.isReading())) {
// Get out of scrollback
setVerticalValue(0);
emulator.addUserEvent(keypress);
typingHidMouse = false;
}
- // If the emulator is tracking mouse buttons, it needs to see wheel
- // events.
- if (emulator.getMouseProtocol() == ECMA48.MouseProtocol.OFF) {
- if (mouse.isMouseWheelUp()) {
- verticalDecrement();
- dirty = true;
- return;
+ if (emulator != null) {
+ // If the emulator is tracking mouse buttons, it needs to see
+ // wheel events.
+ if (emulator.getMouseProtocol() == ECMA48.MouseProtocol.OFF) {
+ if (mouse.isMouseWheelUp()) {
+ verticalDecrement();
+ dirty = true;
+ return;
+ }
+ if (mouse.isMouseWheelDown()) {
+ verticalIncrement();
+ dirty = true;
+ return;
+ }
}
- if (mouse.isMouseWheelDown()) {
- verticalIncrement();
- dirty = true;
+ if (mouseOnEmulator(mouse)) {
+ emulator.addUserEvent(mouse);
+ readEmulatorState();
return;
}
}
- if (mouseOnEmulator(mouse)) {
- emulator.addUserEvent(mouse);
- readEmulatorState();
- return;
- }
// Emulator didn't consume it, pass it on
super.onMouseDown(mouse);
typingHidMouse = false;
}
- if (mouseOnEmulator(mouse)) {
+ if ((emulator != null) && (mouseOnEmulator(mouse))) {
emulator.addUserEvent(mouse);
readEmulatorState();
return;
typingHidMouse = false;
}
- if (mouseOnEmulator(mouse)) {
+ if ((emulator != null) && (mouseOnEmulator(mouse))) {
emulator.addUserEvent(mouse);
readEmulatorState();
return;
*/
@Override
public void draw() {
+ if (emulator == null) {
+ return;
+ }
+
int width = getDisplayWidth();
boolean syncEmulator = false;
- if ((System.currentTimeMillis() - lastUpdateTime >= 20)
- && (dirty == true)
- ) {
+ if (System.currentTimeMillis() - lastUpdateTime >= 50) {
// Too much time has passed, draw it all.
syncEmulator = true;
} else if (emulator.isReading() && (dirty == false)) {
*/
@Override
public void close() {
- emulator.close();
+ if (emulator != null) {
+ emulator.close();
+ }
if (shell != null) {
terminateShellChildProcess();
shell.destroy();
*/
@Override
public void reflowData() {
+ if (emulator == null) {
+ return;
+ }
// Synchronize against the emulator so we don't stomp on its reader
// thread.
* cursor drawn over it
*/
public boolean hasHiddenMouse() {
+ if (emulator == null) {
+ return false;
+ }
return (emulator.hasHiddenMousePointer() || typingHidMouse);
}
* side
*/
public boolean isReading() {
+ if (emulator == null) {
+ return false;
+ }
return emulator.isReading();
}
* screen.
*/
private void readEmulatorState() {
+ if (emulator == null) {
+ return;
+ }
+
// Synchronize against the emulator so we don't stomp on its reader
// thread.
synchronized (emulator) {
* @return whether or not the mouse is on the emulator
*/
private boolean mouseOnEmulator(final TMouseEvent mouse) {
+ if (emulator == null) {
+ return false;
+ }
if (!emulator.isReading()) {
return false;
* Called by emulator when fresh data has come in.
*/
public void displayChanged() {
- dirty = true;
+ if (emulator != null) {
+ // Force sync here: EMCA48.run() thread might be setting
+ // dirty=true while TTerminalWdiget.draw() is setting
+ // dirty=false. If these writes start interleaving, the display
+ // stops getting updated.
+ synchronized (emulator) {
+ dirty = true;
+ }
+ } else {
+ dirty = true;
+ }
getApplication().postEvent(new TMenuEvent(TMenu.MID_REPAINT));
}