Fixed the bug with crashing vncviewer when it works in the 
scaling mode and scale < 10%.
Scale part of vncviewer code improvements.

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2232 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/win/vncviewer/DesktopWindow.cxx b/win/vncviewer/DesktopWindow.cxx
index 5aba780..4a316ad 100644
--- a/win/vncviewer/DesktopWindow.cxx
+++ b/win/vncviewer/DesktopWindow.cxx
@@ -858,8 +858,8 @@
     // Send a pointer event to the server
     oldpos = p;
     if (buffer->isScaling()) {
-      p.x /= buffer->getScaleRatio();
-      p.y /= buffer->getScaleRatio();
+      p.x /= buffer->getScaleRatioX();
+      p.y /= buffer->getScaleRatioY();
     }
     ptr.pointerEvent(callback, p, mask);
 #ifdef WM_MOUSEWHEEL
@@ -1005,13 +1005,15 @@
 
 void DesktopWindow::setAutoScaling(bool as) { 
   autoScaling = as;
+  if (isToolbarEnabled()) refreshToolbarButtons();
   if (as) fitBufferToWindow();
 }
 
-void DesktopWindow::setDesktopScaleRatio(double scale_ratio) {
-  buffer->setScaleRatio(scale_ratio);
-  if (!isAutoScaling()) resizeDesktopWindowToBuffer();
+void DesktopWindow::setDesktopScale(int scale_) {
+  if (buffer->getScale() == scale_ || scale_ <= 0) return;
+  buffer->setScale(scale_);
   if (isToolbarEnabled()) refreshToolbarButtons();
+  if (!isAutoScaling()) resizeDesktopWindowToBuffer();
   char *newTitle = new char[strlen(desktopName)+20];
   sprintf(newTitle, "%s @ %i%%", desktopName, getDesktopScale());
   SetWindowText(handle, TStr(newTitle));
@@ -1037,7 +1039,7 @@
   } else { 
     scale_ratio = double(client_size.width()) / buffer->getSrcWidth();
   }
-  setDesktopScaleRatio(scale_ratio);
+  setDesktopScale(int(scale_ratio * 100));
 }
 
 void