* Run this application until it exits.
*/
public void run() {
+ // System.err.println("*** TApplication.run() begins ***");
+
// Start the main consumer thread
primaryEventHandler = new WidgetEventHandler(this, true);
(new Thread(primaryEventHandler)).start();
// resources.
closeAllWindows();
+ // Give the overarching application an opportunity to release
+ // resources.
+ onExit();
+
+ // System.err.println("*** TApplication.run() exits ***");
}
// ------------------------------------------------------------------------
// Abort everything
if (event instanceof TCommandEvent) {
TCommandEvent command = (TCommandEvent) event;
- if (command.getCmd().equals(cmAbort)) {
+ if (command.equals(cmAbort)) {
exit();
return;
}
if (desktop != null) {
desktop.setDimensions(0, 0, resize.getWidth(),
resize.getHeight() - 1);
+ desktop.onResize(resize);
}
// Change menu edges if needed.
String version = getClass().getPackage().getImplementationVersion();
if (version == null) {
// This is Java 9+, use a hardcoded string here.
- version = "0.3.0";
+ version = "0.3.1";
}
messageBox(i18n.getString("aboutDialogTitle"),
MessageFormat.format(i18n.getString("aboutDialogText"), version),
}
}
+ /**
+ * Check if application is still running.
+ *
+ * @return true if the application is running
+ */
+ public final boolean isRunning() {
+ if (quit == true) {
+ return false;
+ }
+ return true;
+ }
+
// ------------------------------------------------------------------------
// Screen refresh loop ----------------------------------------------------
// ------------------------------------------------------------------------
// Flush the screen contents
if ((images.size() > 0) || getScreen().isDirty()) {
+ if (debugThreads) {
+ System.err.printf("%d %s backend.flushScreen()\n",
+ System.currentTimeMillis(), Thread.currentThread());
+ }
backend.flushScreen();
}
}
}
+ /**
+ * Subclasses can use this hook to cleanup resources. Called as the last
+ * step of TApplication.run().
+ */
+ public void onExit() {
+ // Default does nothing.
+ }
+
// ------------------------------------------------------------------------
// TWindow management -----------------------------------------------------
// ------------------------------------------------------------------------
assert (!window.isActive());
if (activeWindow != null) {
- assert (activeWindow.getZ() == 0);
+ // TODO: see if this assertion is really necessary.
+ // assert (activeWindow.getZ() == 0);
activeWindow.setActive(false);
return false;
}
+ /**
+ * Check if there is a window with overridden menu flag on top.
+ *
+ * @return true if the active window is overriding the menu
+ */
+ private boolean overrideMenuWindowActive() {
+ if (activeWindow != null) {
+ if (activeWindow.hasOverriddenMenu()) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
/**
* Close all open windows.
*/
if ((mouse.getType() == TMouseEvent.Type.MOUSE_DOWN)
&& (mouse.isMouse1())
&& (!modalWindowActive())
+ && (!overrideMenuWindowActive())
&& (mouse.getAbsoluteY() == 0)
) {
public final TTerminalWindow openTerminal(final int x, final int y,
final int flags, final String commandLine) {
- return new TTerminalWindow(this, x, y, flags, commandLine.split("\\s"));
+ return new TTerminalWindow(this, x, y, flags, commandLine.split("\\s+"));
}
/**
public final TTerminalWindow openTerminal(final int x, final int y,
final int flags, final String commandLine, final boolean closeOnExit) {
- return new TTerminalWindow(this, x, y, flags, commandLine.split("\\s"),
+ return new TTerminalWindow(this, x, y, flags, commandLine.split("\\s+"),
closeOnExit);
}