Revision: 4426
          http://tigervnc.svn.sourceforge.net/tigervnc/?rev=4426&view=rev
Author:   bphinz
Date:     2011-05-17 20:59:45 +0000 (Tue, 17 May 2011)

Log Message:
-----------
add support for SetDesktopSize

Modified Paths:
--------------
    trunk/java/src/com/tigervnc/vncviewer/CConn.java
    trunk/java/src/com/tigervnc/vncviewer/DesktopWindow.java
    trunk/java/src/com/tigervnc/vncviewer/VncViewer.java

Modified: trunk/java/src/com/tigervnc/vncviewer/CConn.java
===================================================================
--- trunk/java/src/com/tigervnc/vncviewer/CConn.java    2011-05-17 16:57:23 UTC 
(rev 4425)
+++ trunk/java/src/com/tigervnc/vncviewer/CConn.java    2011-05-17 20:59:45 UTC 
(rev 4426)
@@ -31,7 +31,8 @@
 
 package com.tigervnc.vncviewer;
 
-import java.awt.*;
+import java.awt.Color;
+import java.awt.Graphics;
 import java.awt.event.*;
 import java.awt.Component;
 import java.awt.Dimension;
@@ -88,6 +89,11 @@
     getContentPane().add(sp);
   }
 
+  public void setChild(DesktopWindow child) {
+    getContentPane().removeAll();
+    addChild(child);
+  }
+
   public void setGeometry(int x, int y, int w, int h) {
     pack();
     if (cc.fullScreen) setSize(w, h);
@@ -266,14 +272,14 @@
   public void setExtendedDesktopSize(int reason, int result, int w, int h,
                                      ScreenSet layout) {
     super.setExtendedDesktopSize(reason, result, w, h, layout);
-
+
     if ((reason == screenTypes.reasonClient) &&
         (result != screenTypes.resultSuccess)) {
       vlog.error("SetDesktopSize failed: "+result);
       return;
     }
-    
-    resizeFramebuffer();
+
+    resizeFramebuffer();
   }
 
   // setName() is called when the desktop name changes
@@ -306,12 +312,13 @@
     desktop.framebufferUpdateEnd();
 
     if (firstUpdate) {
-      //int width = (int)viewer.desktopSize.getValue().split("x")[0];
-      //int height = (int)viewer.desktopSize.getValue().split("x")[1];
+      int width, height;
       
-/*
       if (cp.supportsSetDesktopSize &&
-          ((width != 0) && (height != 0))) {
+          viewer.desktopSize.getValue() != null &&
+          viewer.desktopSize.getValue().split("x").length == 2) {
+        width = Integer.parseInt(viewer.desktopSize.getValue().split("x")[0]);
+        height = Integer.parseInt(viewer.desktopSize.getValue().split("x")[1]);
         ScreenSet layout;
 
         layout = cp.screenLayout;
@@ -322,23 +329,23 @@
 
           while (true) {
             Iterator iter = layout.screens.iterator(); 
-            iter.next();
+            Screen screen = (Screen)iter.next();
         
             if (!iter.hasNext())
               break;
 
-            layout.remove_screen(iter.id);
+            layout.remove_screen(screen.id);
           }
         }
 
-        layout.screens.iterator().dimensions.tl.x = 0;
-        layout.screens.iterator().dimensions.tl.y = 0;
-        layout.screens.iterator().dimensions.by.x = width;
-        layout.screens.iterator().dimensions.by.y = height;
+        Screen screen0 = (Screen)layout.screens.iterator().next();
+        screen0.dimensions.tl.x = 0;
+        screen0.dimensions.tl.y = 0;
+        screen0.dimensions.br.x = width;
+        screen0.dimensions.br.y = height;
 
         writer().writeSetDesktopSize(width, height, layout);
       }
-*/
 
       firstUpdate = false;
     }
@@ -415,6 +422,7 @@
     if (viewport != null) viewport.dispose();
     viewport = new ViewportFrame(cp.name(), this);
     viewport.setUndecorated(fullScreen);
+    desktop.setViewport(viewport);
     ClassLoader loader = this.getClass().getClassLoader();
     URL url = loader.getResource("com/tigervnc/vncviewer/tigervnc.ico");
     ImageIcon icon = null;
@@ -432,23 +440,24 @@
   private void reconfigureViewport()
   {
     //viewport->setMaxSize(cp.width, cp.height);
-    int w = cp.width;
-    int h = cp.height;
-    Dimension dpySize = viewport.getToolkit().getScreenSize();
-    int wmDecorationWidth = 0;
-    int wmDecorationHeight = 24;
-    if (w + wmDecorationWidth >= dpySize.width)
-      w = dpySize.width - wmDecorationWidth;
-    if (h + wmDecorationHeight >= dpySize.height)
-      h = dpySize.height - wmDecorationHeight;
-
-    int x = (dpySize.width - w - wmDecorationWidth) / 2;
-    int y = (dpySize.height - h - wmDecorationHeight)/2;
-
     if (fullScreen) {
+      Dimension dpySize = viewport.getToolkit().getScreenSize();
       viewport.setExtendedState(JFrame.MAXIMIZED_BOTH);
       viewport.setGeometry(0, 0, dpySize.width, dpySize.height);
     } else {
+      int w = cp.width;
+      int h = cp.height;
+      Dimension dpySize = viewport.getToolkit().getScreenSize();
+      int wmDecorationWidth = 0;
+      int wmDecorationHeight = 24;
+      if (w + wmDecorationWidth >= dpySize.width)
+        w = dpySize.width - wmDecorationWidth;
+      if (h + wmDecorationHeight >= dpySize.height)
+        h = dpySize.height - wmDecorationHeight;
+
+      int x = (dpySize.width - w - wmDecorationWidth) / 2;
+      int y = (dpySize.height - h - wmDecorationHeight)/2;
+
       viewport.setExtendedState(JFrame.NORMAL);
       viewport.setGeometry(x, y, w, h);
     }
@@ -528,6 +537,10 @@
   private void requestNewUpdate()
   {
     if (formatChange) {
+
+      /* Catch incorrect requestNewUpdate calls */
+      assert(pendingUpdate == false);
+
       if (fullColour) {
         desktop.setPF(fullColourPF);
       } else {
@@ -621,6 +634,7 @@
 
   synchronized public void refresh() {
     writer().writeFramebufferUpdateRequest(new Rect(0,0,cp.width,cp.height), 
false);
+    pendingUpdate = true;
   }
 
 

Modified: trunk/java/src/com/tigervnc/vncviewer/DesktopWindow.java
===================================================================
--- trunk/java/src/com/tigervnc/vncviewer/DesktopWindow.java    2011-05-17 
16:57:23 UTC (rev 4425)
+++ trunk/java/src/com/tigervnc/vncviewer/DesktopWindow.java    2011-05-17 
20:59:45 UTC (rev 4426)
@@ -95,6 +95,11 @@
     im.setPF(pf); 
   }
 
+  public void setViewport(ViewportFrame viewport)
+  {
+    viewport.setChild(this);
+  }
+
   // Methods called from the RFB thread - these need to be synchronized
   // wherever they access data shared with the GUI thread.
 
@@ -193,7 +198,6 @@
 
   // resize() is called when the desktop has changed size
   synchronized public void resize() {
-    vlog.debug("DesktopWindow.resize() called");
     int w = cc.cp.width;
     int h = cc.cp.height;
     hideLocalCursor();

Modified: trunk/java/src/com/tigervnc/vncviewer/VncViewer.java
===================================================================
--- trunk/java/src/com/tigervnc/vncviewer/VncViewer.java        2011-05-17 
16:57:23 UTC (rev 4425)
+++ trunk/java/src/com/tigervnc/vncviewer/VncViewer.java        2011-05-17 
20:59:45 UTC (rev 4426)
@@ -229,6 +229,10 @@
   BoolParameter sendClipboard
   = new BoolParameter("SendClipboard",
                           "Send clipboard changes to the server", true);
+  StringParameter desktopSize
+  = new StringParameter("DesktopSize",
+                        "Reconfigure desktop size on the server on "+
+                        "connect (if possible)", "");
   BoolParameter alwaysShowServerDialog
   = new BoolParameter("AlwaysShowServerDialog",
                           "Always show the server dialog even if a server "+


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
What Every C/C++ and Fortran developer Should Know!
Read this article and learn how Intel has extended the reach of its 
next-generation tools to help Windows* and Linux* C/C++ and Fortran 
developers boost performance applications - including clusters. 
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________
Tigervnc-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tigervnc-commits

Reply via email to