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

Reply via email to