display.cpp revision 0a95212cc657b3c58b8bba4fd925871371f44f67
/* $Id$ */
/** @file
* X11 guest client - display management.
*/
/*
* Copyright (C) 2006-2007 Sun Microsystems, Inc.
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* Clara, CA 95054 USA or visit http://www.sun.com if you need
* additional information or have any questions.
*/
/** @todo this should probably be replaced by something IPRT */
/* For system() and WEXITSTATUS() */
#include <stdlib.h>
#include <errno.h>
#include <X11/cursorfont.h>
#include <VBox/VBoxGuestLib.h>
#include "VBoxClient.h"
{
int rc = VINF_SUCCESS;
uint32_t fMouseFeatures = 0;
LogRelFlowFunc(("testing dynamic resizing\n"));
int iDummy;
if (RT_SUCCESS(rc))
else
/* Log and ignore the return value, as there is not much we can do with
* it. */
/* Enable support for switching between hardware and software cursors */
LogRelFlowFunc(("enabling relative mouse re-capturing support\n"));
if (RT_SUCCESS(rc))
{
{
0);
if (RT_SUCCESS(rc))
}
else
}
if (RT_FAILURE(rc))
{
}
return VINF_SUCCESS;
}
void cleanupDisplay(void)
{
uint32_t fMouseFeatures = 0;
LogRelFlowFunc(("\n"));
if (RT_SUCCESS(rc))
LogRelFlowFunc(("returning\n"));
}
/** This thread just runs a dummy X11 event loop to be sure that we get
* terminated should the X server exit. */
static int x11ConnectionMonitor(RTTHREAD, void *)
{
while (true)
return 0;
}
/**
* This method first resets the current resolution using RandR to wake up
* the graphics driver, then sets the resolution requested if it is among
* those offered by the driver.
*/
{
int cSizes;
/* Reset the current mode */
if (pConfig)
{
unsigned uDist = UINT32_MAX;
int iMode = -1;
for (int i = 0; i < cSizes; ++i)
{
#define VBCL_SQUARE(x) (x) * (x)
{
iMode = i;
}
}
if (iMode >= 0)
{
Time config_timestamp = 0;
}
}
}
/**
* Display change request monitor thread function.
* Before entering the loop, we re-read the last request
* received, and if the first one received inside the
* loop is identical we ignore it, because it is probably
* stale.
*/
{
LogRelFlowFunc(("\n"));
RTTHREADTYPE_INFREQUENT_POLLER, 0, "X11 monitor");
if (RT_FAILURE(rc))
return rc;
while (true)
{
/* Jiggle the mouse pointer to wake up the driver. */
/* And if it is a size hint, set the new size now that the video
* driver has had a chance to update its list. */
{
&iDisplay, true);
/* If we are not stopping, sleep for a bit to avoid using up
too much CPU while retrying. */
if (RT_FAILURE(rc2))
else
}
}
LogRelFlowFunc(("returning VINF_SUCCESS\n"));
return VINF_SUCCESS;
}
{
public:
virtual const char *getPidFilePath()
{
return ".vboxclient-display.pid";
}
{
if (!pDisplay)
return VERR_NOT_FOUND;
if (RT_SUCCESS(rc))
return rc;
}
virtual void cleanup()
{
}
};
{
return new DisplayService;
}