TWindowBackend
[nikiroo-utils.git] / src / jexer / backend / ECMA48Terminal.java
index 13704151df3037585b4d4d0f442593444a880834..78aae45c63b315d2c40a340f60071dbdd527f0be 100644 (file)
@@ -195,6 +195,16 @@ public final class ECMA48Terminal extends LogicalScreen
      */
     private Object listener;
 
+    /**
+     * Set listener to a different Object.
+     *
+     * @param listener the new listening object that run() wakes up on new
+     * input
+     */
+    public void setListener(final Object listener) {
+        this.listener = listener;
+    }
+
     /**
      * Get the output writer.
      *
@@ -342,6 +352,11 @@ public final class ECMA48Terminal extends LogicalScreen
         this.output.printf("%s%s", mouse(true), xtermMetaSendsEscape(true));
         this.output.flush();
 
+        // Query the screen size
+        sessionInfo.queryWindowSize();
+        setDimensions(sessionInfo.getWindowWidth(),
+            sessionInfo.getWindowHeight());
+
         // Hang onto the window size
         windowResize = new TResizeEvent(TResizeEvent.Type.SCREEN,
             sessionInfo.getWindowWidth(), sessionInfo.getWindowHeight());
@@ -350,6 +365,8 @@ public final class ECMA48Terminal extends LogicalScreen
         if (System.getProperty("jexer.ECMA48.rgbColor") != null) {
             if (System.getProperty("jexer.ECMA48.rgbColor").equals("true")) {
                 doRgbColor = true;
+            } else {
+                doRgbColor = false;
             }
         }
 
@@ -358,10 +375,6 @@ public final class ECMA48Terminal extends LogicalScreen
         readerThread = new Thread(this);
         readerThread.start();
 
-        // Query the screen size
-        setDimensions(sessionInfo.getWindowWidth(),
-            sessionInfo.getWindowHeight());
-
         // Clear the screen
         this.output.write(clearAll());
         this.output.flush();
@@ -429,6 +442,11 @@ public final class ECMA48Terminal extends LogicalScreen
         this.output.printf("%s%s", mouse(true), xtermMetaSendsEscape(true));
         this.output.flush();
 
+        // Query the screen size
+        sessionInfo.queryWindowSize();
+        setDimensions(sessionInfo.getWindowWidth(),
+            sessionInfo.getWindowHeight());
+
         // Hang onto the window size
         windowResize = new TResizeEvent(TResizeEvent.Type.SCREEN,
             sessionInfo.getWindowWidth(), sessionInfo.getWindowHeight());
@@ -437,6 +455,8 @@ public final class ECMA48Terminal extends LogicalScreen
         if (System.getProperty("jexer.ECMA48.rgbColor") != null) {
             if (System.getProperty("jexer.ECMA48.rgbColor").equals("true")) {
                 doRgbColor = true;
+            } else {
+                doRgbColor = false;
             }
         }
 
@@ -445,10 +465,6 @@ public final class ECMA48Terminal extends LogicalScreen
         readerThread = new Thread(this);
         readerThread.start();
 
-        // Query the screen size
-        setDimensions(sessionInfo.getWindowWidth(),
-            sessionInfo.getWindowHeight());
-
         // Clear the screen
         this.output.write(clearAll());
         this.output.flush();
@@ -1882,8 +1898,10 @@ public final class ECMA48Terminal extends LogicalScreen
                             synchronized (eventQueue) {
                                 eventQueue.addAll(events);
                             }
-                            synchronized (listener) {
-                                listener.notifyAll();
+                            if (listener != null) {
+                                synchronized (listener) {
+                                    listener.notifyAll();
+                                }
                             }
                             events.clear();
                         }
@@ -1895,8 +1913,10 @@ public final class ECMA48Terminal extends LogicalScreen
                             eventQueue.addAll(events);
                         }
                         events.clear();
-                        synchronized (listener) {
-                            listener.notifyAll();
+                        if (listener != null) {
+                            synchronized (listener) {
+                                listener.notifyAll();
+                            }
                         }
                     }