Revision: 4889 http://tigervnc.svn.sourceforge.net/tigervnc/?rev=4889&view=rev Author: bphinz Date: 2012-04-13 01:22:08 +0000 (Fri, 13 Apr 2012) Log Message: ----------- Fixes issue with java viewer exiting altogether when the New Connection ServerDialog is cancelled or a new connection window is closed.
Modified Paths: -------------- trunk/java/com/tigervnc/vncviewer/CConn.java trunk/java/com/tigervnc/vncviewer/ServerDialog.java trunk/java/com/tigervnc/vncviewer/VncViewer.java Modified: trunk/java/com/tigervnc/vncviewer/CConn.java =================================================================== --- trunk/java/com/tigervnc/vncviewer/CConn.java 2012-04-11 22:00:55 UTC (rev 4888) +++ trunk/java/com/tigervnc/vncviewer/CConn.java 2012-04-13 01:22:08 UTC (rev 4889) @@ -204,7 +204,12 @@ } else { ServerDialog dlg = new ServerDialog(options, vncServerName, this); if (!dlg.showDialog() || dlg.server.getSelectedItem().equals("")) { - System.exit(1); + if (viewer.firstApplet) { + System.exit(1); + } else { + viewer.stop(); + return; + } } vncServerName = (String)dlg.server.getSelectedItem(); serverHost = Hostname.getHost(vncServerName); @@ -248,7 +253,12 @@ if (viewport != null) viewport.dispose(); viewport = null; - System.exit(1); + if (viewer.firstApplet) { + System.exit(1); + } else { + close(); + viewer.stop(); + } } // blockCallback() is called when reading from the socket would block. @@ -769,6 +779,11 @@ public void close() { shuttingDown = true; sock.shutdown(); + try { + sock.close(); + } catch (java.lang.Exception e) { + throw new Exception(e.toString()); + } } // Menu callbacks. These are guaranteed only to be called after serverInit() Modified: trunk/java/com/tigervnc/vncviewer/ServerDialog.java =================================================================== --- trunk/java/com/tigervnc/vncviewer/ServerDialog.java 2012-04-11 22:00:55 UTC (rev 4888) +++ trunk/java/com/tigervnc/vncviewer/ServerDialog.java 2012-04-13 01:22:08 UTC (rev 4889) @@ -23,6 +23,7 @@ import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; +import javax.swing.WindowConstants.*; import java.util.*; import com.tigervnc.rfb.*; @@ -37,10 +38,20 @@ super(true); cc = cc_; - setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); + setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); setResizable(false); setSize(new Dimension(340, 135)); setTitle("VNC Viewer : Connection Details"); + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + if (cc.viewer.firstApplet && cc.viewport == null) { + System.exit(1); + } else { + ok = false; + endDialog(); + } + } + }); options = options_; getContentPane().setLayout(new GridBagLayout()); Modified: trunk/java/com/tigervnc/vncviewer/VncViewer.java =================================================================== --- trunk/java/com/tigervnc/vncviewer/VncViewer.java 2012-04-11 22:00:55 UTC (rev 4888) +++ trunk/java/com/tigervnc/vncviewer/VncViewer.java 2012-04-13 01:22:08 UTC (rev 4889) @@ -82,6 +82,8 @@ UIManager.put("TitledBorder.titleColor",Color.blue); } catch (java.lang.Exception exc) { } VncViewer viewer = new VncViewer(argv); + viewer.firstApplet = true; + viewer.stop = false; viewer.start(); } @@ -249,7 +251,7 @@ } catch (java.io.IOException e) { } } nViewers++; - if (firstApplet) { + if (applet && firstApplet) { alwaysShowServerDialog.setParam(true); Configuration.readAppletParams(this); String host = getCodeBase().getHost(); @@ -264,6 +266,10 @@ thread.start(); } + public void stop() { + stop = true; + } + public void paint(Graphics g) { g.drawImage(logo, 0, 0, this); int h = logo.getHeight(this)+20; @@ -320,8 +326,12 @@ try { cc = new CConn(this, sock, vncServerName.getValue()); - while (true) + while (!stop) cc.processMsg(); + if (nViewers > 1) { + cc = null; + return; + } } catch (EndOfStream e) { vlog.info(e.toString()); } catch (java.lang.Exception e) { @@ -439,7 +449,7 @@ 8); Thread thread; - boolean applet, firstApplet; + boolean applet, firstApplet, stop; Image logo; static int nViewers; static LogWriter vlog = new LogWriter("main"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ For Developers, A Lot Can Happen In A Second. Boundary is the first to Know...and Tell You. Monitor Your Applications in Ultra-Fine Resolution. Try it FREE! http://p.sf.net/sfu/Boundary-d2dvs2 _______________________________________________ Tigervnc-commits mailing list Tigervnc-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tigervnc-commits