Browse Source

Implement menu entry for forced refresh of screen.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4392 3789f03b-4d11-0410-bbf8-ca57d06f2519
tags/v1.1.90
Pierre Ossman 13 years ago
parent
commit
d4c61ce93b
3 changed files with 30 additions and 4 deletions
  1. 19
    3
      vncviewer/CConn.cxx
  2. 4
    0
      vncviewer/CConn.h
  3. 7
    1
      vncviewer/Viewport.cxx

+ 19
- 3
vncviewer/CConn.cxx View File

@@ -48,7 +48,8 @@ CConn::CConn(const char* vncServerName)
: serverHost(0), serverPort(0), sock(NULL), desktop(NULL),
currentEncoding(encodingTight), lastServerEncoding((unsigned int)-1),
formatChange(false), encodingChange(false),
firstUpdate(true), pendingUpdate(false)
firstUpdate(true), pendingUpdate(false),
forceNonincremental(false)
{
setShared(::shared);

@@ -98,6 +99,14 @@ CConn::~CConn()
delete sock;
}

void CConn::refreshFramebuffer()
{
// FIXME: We cannot safely trigger an update request directly but must
// wait for the next update to arrive.
if (!formatChange)
forceNonincremental = true;
}

// The RFB core is not properly asynchronous, so it calls this callback
// whenever it needs to block to wait for more data. Since FLTK is
// monitoring the socket, we just make sure FLTK gets to run.
@@ -442,9 +451,16 @@ void CConn::requestNewUpdate()
desktop->setServerPF(pf);
cp.setPF(pf);
writer()->writeSetPixelFormat(pf);

forceNonincremental = true;

formatChange = false;
}

checkEncodings();

writer()->writeFramebufferUpdateRequest(Rect(0, 0, cp.width, cp.height),
!formatChange);
formatChange = false;
!forceNonincremental);
forceNonincremental = false;
}

+ 4
- 0
vncviewer/CConn.h View File

@@ -32,6 +32,8 @@ public:
CConn(const char* vncServerName);
~CConn();

void refreshFramebuffer();

// FdInStreamBlockCallback methods
void blockCallback();

@@ -91,6 +93,8 @@ private:

bool firstUpdate;
bool pendingUpdate;

bool forceNonincremental;
};

#endif

+ 7
- 1
vncviewer/Viewport.cxx View File

@@ -56,7 +56,8 @@ static rfb::LogWriter vlog("Viewport");

// Menu constants

enum { ID_EXIT, ID_CTRL, ID_ALT, ID_MENUKEY, ID_CTRLALTDEL, ID_DISMISS };
enum { ID_EXIT, ID_CTRL, ID_ALT, ID_MENUKEY, ID_CTRLALTDEL,
ID_REFRESH, ID_DISMISS };

Viewport::Viewport(int w, int h, const rfb::PixelFormat& serverPF, CConn* cc_)
: Fl_Widget(0, 0, w, h), cc(cc_), frameBuffer(NULL), pixelTrans(NULL),
@@ -520,6 +521,8 @@ void Viewport::initContextMenu()
contextMenu->add("Secret shortcut menu key", FL_F + 8, NULL, (void*)ID_MENUKEY, FL_MENU_INVISIBLE); // Broken, see STR2613
contextMenu->add(_("Send Ctrl-Alt-Del"), 0, NULL, (void*)ID_CTRLALTDEL, FL_MENU_DIVIDER);

contextMenu->add(_("Refresh screen"), 0, NULL, (void*)ID_REFRESH, FL_MENU_DIVIDER);

contextMenu->add(_("Dismiss menu"), 0, NULL, (void*)ID_DISMISS, 0);
}

@@ -563,6 +566,9 @@ void Viewport::popupContextMenu()
cc->writer()->keyEvent(XK_Control_L, false);
}
break;
case ID_REFRESH:
cc->refreshFramebuffer();
break;
case ID_DISMISS:
// Don't need to do anything
break;

Loading…
Cancel
Save