hide mouse for desktop
authorKevin Lamonte <kevin.lamonte@gmail.com>
Thu, 22 Aug 2019 13:05:16 +0000 (08:05 -0500)
committerKevin Lamonte <kevin.lamonte@gmail.com>
Thu, 22 Aug 2019 13:05:16 +0000 (08:05 -0500)
README.md
examples/JexerTilingWindowManager2.java
src/jexer/TApplication.java

index 68b1ab7ef3fc4f950a6d32b0812a4a99e78a3538..231325237270ec9f83384737ab89eac45ba3b125 100644 (file)
--- a/README.md
+++ b/README.md
@@ -65,6 +65,10 @@ The examples/ folder currently contains:
     manager](/examples/JexerTilingWindowManager.java) in less than 250
     lines of code.
 
+  * A much slicker [prototype tiling window
+    manager](/examples/JexerTilingWindowManager2.java) in less than 200
+    lines of code.
+
   * A [prototype image thumbnail
     viewer](/examples/JexerImageViewer.java) in less than 350 lines of
     code.
index e06119b2ba14ef5ae0b5183498b5752c84431b47..db75c835b4875569c0b6fb19b9f582bc297072d1 100644 (file)
@@ -59,7 +59,7 @@ public class JexerTilingWindowManager2 extends TApplication {
      * Public constructor chooses the ECMA-48 / Xterm backend.
      */
     public JexerTilingWindowManager2() throws Exception {
-        super(BackendType.SWING);
+        super(BackendType.XTERM);
 
         // The stock tool menu has items for redrawing the screen, opening
         // images, and (when using the Swing backend) setting the font.
@@ -73,16 +73,28 @@ public class JexerTilingWindowManager2 extends TApplication {
         tileMenu.addItem(MENU_SPLIT_HORIZONTAL, "&Horizontal Split");
         tileMenu.addItem(MENU_RESPAWN_ROOT, "&Respawn Root Terminal");
 
-        // Stock commands: a new shell with resizable window, previous, next,
-        // close, and exit program.
-        tileMenu.addItem(TMenu.MID_SHELL, "&Floating");
+        // Stock commands: a new shell with resizable window, and exit
+        // program.
         tileMenu.addSeparator();
-        tileMenu.addDefaultItem(TMenu.MID_WINDOW_PREVIOUS);
-        tileMenu.addDefaultItem(TMenu.MID_WINDOW_NEXT);
-        tileMenu.addDefaultItem(TMenu.MID_WINDOW_CLOSE);
+        tileMenu.addItem(TMenu.MID_SHELL, "&New Windowed Terminal");
         tileMenu.addSeparator();
         tileMenu.addDefaultItem(TMenu.MID_EXIT);
 
+        // TTerminalWidget can request the text-block mouse pointer be
+        // suppressed, but the default TDesktop will ignore it.  Let's set a
+        // new TDesktop to pass that mouse pointer visibility option to
+        // TApplication.
+        setDesktop(new TDesktop(this) {
+            @Override
+            public boolean hasHiddenMouse() {
+                TWidget active = getActiveChild();
+                if (active instanceof TTerminalWidget) {
+                    return ((TTerminalWidget) active).hasHiddenMouse();
+                }
+                return false;
+            }
+        });
+
         // Spin up the root terminal
         createRootTerminal();
     }
index affc6ce4d1487118a23aa30d5673ad23c648f409..fe90e5d1ef758e05063373c0279add1639d5dc38 100644 (file)
@@ -1766,6 +1766,19 @@ public class TApplication implements Runnable {
             }
         }
 
+        // If this cell is on top of the desktop, and the desktop has
+        // requested a hidden mouse, bail out.
+        if ((desktop != null) && (activeWindow == null) && (activeMenu == null)) {
+            if ((desktop.hasHiddenMouse() == true)
+                && (x > desktop.getX())
+                && (x < desktop.getX() + desktop.getWidth() - 1)
+                && (y > desktop.getY())
+                && (y < desktop.getY() + desktop.getHeight() - 1)
+            ) {
+                return;
+            }
+        }
+
         Cell cell = getScreen().getCharXY(x, y);
         if (cell.isImage()) {
             cell.invertImage();