diff options
Diffstat (limited to 'src/VBox/Additions/x11/VBoxClient')
18 files changed, 132 insertions, 116 deletions
diff --git a/src/VBox/Additions/x11/VBoxClient/VBoxClient.h b/src/VBox/Additions/x11/VBoxClient/VBoxClient.h index d2405149..63d5842a 100644 --- a/src/VBox/Additions/x11/VBoxClient/VBoxClient.h +++ b/src/VBox/Additions/x11/VBoxClient/VBoxClient.h @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2006-2007 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; diff --git a/src/VBox/Additions/x11/VBoxClient/clipboard.cpp b/src/VBox/Additions/x11/VBoxClient/clipboard.cpp index 4097d174..24ba7e9d 100644 --- a/src/VBox/Additions/x11/VBoxClient/clipboard.cpp +++ b/src/VBox/Additions/x11/VBoxClient/clipboard.cpp @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2007 Oracle Corporation + * Copyright (C) 2007-2012 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; diff --git a/src/VBox/Additions/x11/VBoxClient/display.cpp b/src/VBox/Additions/x11/VBoxClient/display.cpp index d6889023..e4a0eb48 100644 --- a/src/VBox/Additions/x11/VBoxClient/display.cpp +++ b/src/VBox/Additions/x11/VBoxClient/display.cpp @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2006-2007 Oracle Corporation + * Copyright (C) 2006-2012 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -157,6 +157,7 @@ static int runDisplay(Display *pDisplay) Cursor hClockCursor = XCreateFontCursor(pDisplay, XC_watch); Cursor hArrowCursor = XCreateFontCursor(pDisplay, XC_left_ptr); int RRMaj, RRMin; + bool fExtDispReqSupport = true; if (!XRRQueryVersion(pDisplay, &RRMaj, &RRMin)) RRMin = 0; const char *pcszXrandr = "xrandr"; @@ -168,7 +169,8 @@ static int runDisplay(Display *pDisplay) return rc; while (true) { - uint32_t fEvents = 0, cx = 0, cy = 0, cBits = 0, iDisplay = 0; + uint32_t fEvents = 0, cx = 0, cy = 0, cBits = 0, iDisplay = 0, cxOrg = 0, cyOrg = 0; + bool fEnabled = false; rc = VbglR3WaitEvent( VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST | VMMDEV_EVENT_MOUSE_CAPABILITIES_CHANGED, RT_INDEFINITE_WAIT, &fEvents); @@ -189,8 +191,20 @@ static int runDisplay(Display *pDisplay) * driver has had a chance to update its list. */ if (RT_SUCCESS(rc) && (fEvents & VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST)) { - int rc2 = VbglR3GetDisplayChangeRequest(&cx, &cy, &cBits, - &iDisplay, true); + int rc2 = VbglR3GetDisplayChangeRequestEx(&cx, &cy, &cBits, + &iDisplay, &cxOrg, &cyOrg, &fEnabled, true); + /* Extended display version not supported on host */ + if (RT_FAILURE(rc2)) + { + LogRel(("GetDisplayChangeReq Extended Version not supported. " + "Trying for Normal Mode with cx=%d & cy=%d\n", cx, cy)); + fExtDispReqSupport = false; + rc2 = VbglR3GetDisplayChangeRequest(&cx, &cy, &cBits, &iDisplay, true); + } + else + LogRelFlowFunc(("Got Extended Param from Host cx=%d, cy=%d, bpp=%d, iDisp=%d, " + "OrgX=%d, OrgY=%d Enb=%d\n", cx, cy, cBits, iDisplay, + cxOrg, cyOrg, fEnabled)); /* If we are not stopping, sleep for a bit to avoid using up too much CPU while retrying. */ if (RT_FAILURE(rc2)) @@ -201,18 +215,56 @@ static int runDisplay(Display *pDisplay) else { char szCommand[256]; - RTStrPrintf(szCommand, sizeof(szCommand), - "%s --output VBOX%u --set VBOX_MODE %dx%d", - pcszXrandr, iDisplay, cx, cy); - system(szCommand); - RTStrPrintf(szCommand, sizeof(szCommand), - "%s --output VBOX%u --preferred", - pcszXrandr, iDisplay); - system(szCommand); + if (fExtDispReqSupport) + { + if (fEnabled) + { + if (cx != 0 && cy != 0) + { + RTStrPrintf(szCommand, sizeof(szCommand), + "%s --output VBOX%u --set VBOX_MODE %dx%d", + pcszXrandr, iDisplay, cx, cy); + system(szCommand); + } + /* Extended Display support possible . Secondary monitor position supported */ + if (cxOrg != 0 || cyOrg != 0) + { + RTStrPrintf(szCommand, sizeof(szCommand), + "%s --output VBOX%u --auto --pos %dx%d", + pcszXrandr, iDisplay, cxOrg, cyOrg); + system(szCommand); + } + RTStrPrintf(szCommand, sizeof(szCommand), + "%s --output VBOX%u --preferred", + pcszXrandr, iDisplay); + system(szCommand); + } + else /* disable the virtual monitor */ + { + RTStrPrintf(szCommand, sizeof(szCommand), + "%s --output VBOX%u --off", + pcszXrandr, iDisplay); + system(szCommand); + } + } + else /* Extended display support not possible */ + { + if (cx != 0 && cy != 0) + { + RTStrPrintf(szCommand, sizeof(szCommand), + "%s --output VBOX%u --set VBOX_MODE %dx%d", + pcszXrandr, iDisplay, cx, cy); + system(szCommand); + RTStrPrintf(szCommand, sizeof(szCommand), + "%s --output VBOX%u --preferred", + pcszXrandr, iDisplay); + system(szCommand); + } + } + } } } - LogRelFlowFunc(("returning VINF_SUCCESS\n")); return VINF_SUCCESS; } diff --git a/src/VBox/Additions/x11/VBoxClient/draganddrop.cpp b/src/VBox/Additions/x11/VBoxClient/draganddrop.cpp index 0753d588..f38a89f5 100644 --- a/src/VBox/Additions/x11/VBoxClient/draganddrop.cpp +++ b/src/VBox/Additions/x11/VBoxClient/draganddrop.cpp @@ -14,6 +14,9 @@ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. */ +#include <errno.h> +#include <poll.h> + #include <X11/Xlib.h> #include <X11/Xatom.h> //#include <X11/extensions/XTest.h> @@ -80,7 +83,7 @@ # include <iprt/stream.h> # define DO(s) RTPrintf s #else -# define DO(s) do {} while(0) +# define DO(s) do {} while (0) //# define DO(s) Log s #endif @@ -423,7 +426,6 @@ public: , m_hX11Thread(NIL_RTTHREAD) , m_hEventSem(NIL_RTSEMEVENT) , m_pCurDnD(0) - , m_fSrvStopping(false) {} virtual const char *getPidFilePath() { return ".vboxclient-draganddrop.pid"; } @@ -434,14 +436,13 @@ public: virtual void cleanup() { - /* Cleanup */ - x11DragAndDropTerm(); + /* Nothing to do, everything should be cleaned up automatically when the + * user process/X11 client exits. */ VbglR3DnDTerm(); }; private: int x11DragAndDropInit(); - int x11DragAndDropTerm(); static int hgcmEventThread(RTTHREAD hThread, void *pvUser); static int x11EventThread(RTTHREAD hThread, void *pvUser); @@ -474,7 +475,6 @@ private: RTTHREAD m_hX11Thread; RTSEMEVENT m_hEventSem; DragInstance *m_pCurDnD; - bool m_fSrvStopping; friend class DragInstance; }; @@ -594,7 +594,7 @@ int DragInstance::init(uint32_t u32ScreenId) Atom ver = VBOX_XDND_VERSION; XChangeProperty(m_pDisplay, m_proxyWin, xAtom(XA_XdndAware), XA_ATOM, 32, PropModeReplace, reinterpret_cast<unsigned char*>(&ver), 1); - } while(0); + } while (0); m_state = Initialized; @@ -1136,7 +1136,7 @@ int DragInstance::ghDropped(const RTCString &strFormat, uint32_t action) break; } } - } while(tries--); + } while (tries--); if (clme) { /* Make some paranoid checks. */ @@ -1502,6 +1502,8 @@ RTCList<RTCString> toStringList(void *pvData, uint32_t cData) return strList; } +#ifdef VBOX_WITH_DRAG_AND_DROP_GH + bool DragAndDropService::waitForXMsg(XEvent &ecm, int type, uint32_t uiMaxMS /* = 100 */) { const uint64_t uiStart = RTTimeProgramMilliTS(); @@ -1529,11 +1531,13 @@ bool DragAndDropService::waitForXMsg(XEvent &ecm, int type, uint32_t uiMaxMS /* // if (RT_FAILURE(rc)) // return false; } - while(RTTimeProgramMilliTS() - uiStart < uiMaxMS); + while (RTTimeProgramMilliTS() - uiStart < uiMaxMS); return false; } +#endif + void DragAndDropService::clearEventQueue() { m_eventQueue.clear(); @@ -1544,12 +1548,6 @@ int DragAndDropService::run(bool fDaemonised /* = false */) int rc = VINF_SUCCESS; LogRelFlowFunc(("\n")); - /* We need to initialize XLib with thread support, otherwise our - * simultaneously access to the display makes trouble (has to be called - * before any usage of XLib). */ - if (!XInitThreads()) - AssertMsgFailedReturn(("Failed to initialize thread-safe XLib.\n"), VERR_GENERAL_FAILURE); - do { /* Initialize our service */ @@ -1573,7 +1571,7 @@ int DragAndDropService::run(bool fDaemonised /* = false */) DnDEvent e; RT_ZERO(e); if (m_eventQueue.isEmpty()) - rc = RTSemEventWait(m_hEventSem, 50); + rc = RTSemEventWait(m_hEventSem, RT_INDEFINITE_WAIT); if (!m_eventQueue.isEmpty()) { e = m_eventQueue.first(); @@ -1664,8 +1662,9 @@ int DragAndDropService::run(bool fDaemonised /* = false */) } } } - } while(!ASMAtomicReadBool(&m_fSrvStopping)); - } while(0); + XFlush(m_pDisplay); + } while (1); + } while (0); LogRelFlowFunc(("returning %Rrc\n", rc)); return rc; @@ -1698,57 +1697,19 @@ int DragAndDropService::x11DragAndDropInit() rc = RTThreadCreate(&m_hX11Thread, x11EventThread, this, 0, RTTHREADTYPE_MSG_PUMP, RTTHREADFLAGS_WAITABLE, "X11-NOTIFY"); - } while(0); + } while (0); - /* Cleanup on failure */ - if (RT_FAILURE(rc)) - x11DragAndDropTerm(); + /* No clean-up code for now, as we have no good way of testing it and things + * should get cleaned up when the user process/X11 client exits. */ return rc; } -int DragAndDropService::x11DragAndDropTerm() -{ - /* Mark that we are stopping. */ - ASMAtomicWriteBool(&m_fSrvStopping, true); - - if (m_pDisplay) - { - /* Send a x11 client messages to the x11 event loop. */ - XClientMessageEvent m; - RT_ZERO(m); - m.type = ClientMessage; - m.display = m_pDisplay; - m.window = None; - m.message_type = xAtom(XA_dndstop); - m.format = 32; - int xrc = XSendEvent(m_pDisplay, None, True, NoEventMask, reinterpret_cast<XEvent*>(&m)); - if (RT_UNLIKELY(xrc == 0)) - DO(("DnD_TERM: error sending xevent\n")); - } - /* Wait for our event threads to stop. */ -// if (m_hX11Thread) -// RTThreadWait(m_hX11Thread, RT_INDEFINITE_WAIT, 0); -// if (m_hHGCMThread) -// RTThreadWait(m_hHGCMThread, RT_INDEFINITE_WAIT, 0); - /* Cleanup */ - /* todo: This doesn't work. The semaphore was interrupted by the user - * signal. It is not possible to destroy a semaphore while it is in interrupted state. - * According to Frank, the cleanup stuff done here is done _wrong_. We just - * should signal the main loop to stop and do the cleanup there. Needs - * adoption in all VBoxClient::Service's. */ -// if (m_hEventSem) -// RTSemEventDestroy(m_hEventSem); - if (m_pDisplay) - XCloseDisplay(m_pDisplay); - return VINF_SUCCESS; -} - /* static */ int DragAndDropService::hgcmEventThread(RTTHREAD hThread, void *pvUser) { AssertPtrReturn(pvUser, VERR_INVALID_PARAMETER); - DragAndDropService *pSrv = static_cast<DragAndDropService*>(pvUser); + DragAndDropService *pThis = static_cast<DragAndDropService*>(pvUser); DnDEvent e; do { @@ -1758,12 +1719,12 @@ int DragAndDropService::hgcmEventThread(RTTHREAD hThread, void *pvUser) int rc = VbglR3DnDProcessNextMessage(&e.hgcm); if (RT_SUCCESS(rc)) { - pSrv->m_eventQueue.append(e); - rc = RTSemEventSignal(pSrv->m_hEventSem); + pThis->m_eventQueue.append(e); + rc = RTSemEventSignal(pThis->m_hEventSem); if (RT_FAILURE(rc)) return rc; } - } while(!ASMAtomicReadBool(&pSrv->m_fSrvStopping)); + } while (1); return VINF_SUCCESS; } @@ -1772,38 +1733,45 @@ int DragAndDropService::hgcmEventThread(RTTHREAD hThread, void *pvUser) int DragAndDropService::x11EventThread(RTTHREAD hThread, void *pvUser) { AssertPtrReturn(pvUser, VERR_INVALID_PARAMETER); - DragAndDropService *pSrv = static_cast<DragAndDropService*>(pvUser); + DragAndDropService *pThis = static_cast<DragAndDropService*>(pvUser); DnDEvent e; do { - /* Wait for new events. We can't use XIfEvent here, cause this locks + /* Wait for new events. We can't use XIfEvent here, because this locks * the window connection with a mutex and if no X11 events occurs this - * blocks any other calls we made to X11. So instead check for new - * events and if there are not any new one, sleep for a certain amount - * of time. */ - if (XEventsQueued(pSrv->m_pDisplay, QueuedAfterFlush) > 0) + * blocks any other calls we made to X11. So instead poll for new events + * on the connection file descriptor. */ + /** @todo Make sure the locking is right - Xlib displays should never be + * used from two threads at once. */ + if (XEventsQueued(pThis->m_pDisplay, QueuedAfterFlush) > 0) { RT_ZERO(e); e.type = DnDEvent::X11_Type; - XNextEvent(pSrv->m_pDisplay, &e.x11); - /* Check for a stop message. */ -// if ( e.x11.type == ClientMessage -// && e.x11.xclient.message_type == xAtom(XA_dndstop)) -// { -// break; -// } -// if (isDnDRespondEvent(pSrv->m_pDisplay, &e.x11, 0)) + XNextEvent(pThis->m_pDisplay, &e.x11); { /* Appending makes a copy of the event structure. */ - pSrv->m_eventQueue.append(e); - int rc = RTSemEventSignal(pSrv->m_hEventSem); + pThis->m_eventQueue.append(e); + int rc = RTSemEventSignal(pThis->m_hEventSem); if (RT_FAILURE(rc)) return rc; } } else - RTThreadSleep(25); - } while(!ASMAtomicReadBool(&pSrv->m_fSrvStopping)); + { + struct pollfd pollFD; + + pollFD.fd = ConnectionNumber(pThis->m_pDisplay); + pollFD.events = POLLIN | POLLPRI; + if ( (poll(&pollFD, 1, -1) < 0 && errno != EINTR) + || pollFD.revents & POLLNVAL) + { + LogRel(("X11 event thread: poll failed, stopping.\n")); + /** @todo Just stop the whole service. What use is it just + * to stop one thread? */ + return RTErrConvertFromErrno(errno); + } + } + } while (1); return VINF_SUCCESS; } diff --git a/src/VBox/Additions/x11/VBoxClient/hostversion.cpp b/src/VBox/Additions/x11/VBoxClient/hostversion.cpp index 71ecbc86..5a5f5032 100644 --- a/src/VBox/Additions/x11/VBoxClient/hostversion.cpp +++ b/src/VBox/Additions/x11/VBoxClient/hostversion.cpp @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 2011 Oracle Corporation + * Copyright (C) 2011-2012 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; diff --git a/src/VBox/Additions/x11/VBoxClient/main.cpp b/src/VBox/Additions/x11/VBoxClient/main.cpp index d069b856..7846397c 100644 --- a/src/VBox/Additions/x11/VBoxClient/main.cpp +++ b/src/VBox/Additions/x11/VBoxClient/main.cpp @@ -5,7 +5,7 @@ */ /* - * Copyright (C) 2006-2010 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -170,6 +170,8 @@ void vboxClientUsage(const char *pcszFileName) */ int main(int argc, char *argv[]) { + if (!XInitThreads()) + return 1; /* Initialise our runtime before all else. */ int rc = RTR3InitExe(argc, &argv, 0); if (RT_FAILURE(rc)) diff --git a/src/VBox/Additions/x11/VBoxClient/seamless-glue.h b/src/VBox/Additions/x11/VBoxClient/seamless-glue.h index d8fa32e0..6b617b4b 100644 --- a/src/VBox/Additions/x11/VBoxClient/seamless-glue.h +++ b/src/VBox/Additions/x11/VBoxClient/seamless-glue.h @@ -5,7 +5,7 @@ */ /* - * Copyright (C) 2006-2007 Oracle Corporation + * Copyright (C) 2006-2010 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; diff --git a/src/VBox/Additions/x11/VBoxClient/seamless-guest.h b/src/VBox/Additions/x11/VBoxClient/seamless-guest.h index 4a2d4220..e468531a 100644 --- a/src/VBox/Additions/x11/VBoxClient/seamless-guest.h +++ b/src/VBox/Additions/x11/VBoxClient/seamless-guest.h @@ -5,7 +5,7 @@ */ /* - * Copyright (C) 2006-2007 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; diff --git a/src/VBox/Additions/x11/VBoxClient/seamless-host.cpp b/src/VBox/Additions/x11/VBoxClient/seamless-host.cpp index ab04873b..81467a3e 100644 --- a/src/VBox/Additions/x11/VBoxClient/seamless-host.cpp +++ b/src/VBox/Additions/x11/VBoxClient/seamless-host.cpp @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2006-2007 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; diff --git a/src/VBox/Additions/x11/VBoxClient/seamless-host.h b/src/VBox/Additions/x11/VBoxClient/seamless-host.h index d10523bc..812eb881 100644 --- a/src/VBox/Additions/x11/VBoxClient/seamless-host.h +++ b/src/VBox/Additions/x11/VBoxClient/seamless-host.h @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2006-2007 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; diff --git a/src/VBox/Additions/x11/VBoxClient/seamless-x11.cpp b/src/VBox/Additions/x11/VBoxClient/seamless-x11.cpp index 9e345d84..7c7d8a34 100644 --- a/src/VBox/Additions/x11/VBoxClient/seamless-x11.cpp +++ b/src/VBox/Additions/x11/VBoxClient/seamless-x11.cpp @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 2008 Oracle Corporation + * Copyright (C) 2008-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; diff --git a/src/VBox/Additions/x11/VBoxClient/seamless-x11.h b/src/VBox/Additions/x11/VBoxClient/seamless-x11.h index db2a6f12..68fcad1b 100644 --- a/src/VBox/Additions/x11/VBoxClient/seamless-x11.h +++ b/src/VBox/Additions/x11/VBoxClient/seamless-x11.h @@ -5,7 +5,7 @@ */ /* - * Copyright (C) 2006-2007 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; diff --git a/src/VBox/Additions/x11/VBoxClient/seamless.cpp b/src/VBox/Additions/x11/VBoxClient/seamless.cpp index 214f87a7..e3ab64a8 100644 --- a/src/VBox/Additions/x11/VBoxClient/seamless.cpp +++ b/src/VBox/Additions/x11/VBoxClient/seamless.cpp @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2006-2007 Oracle Corporation + * Copyright (C) 2006-2012 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -33,12 +33,6 @@ public: } virtual int run(bool fDaemonised /* = false */) { - /* Initialise threading in X11 and in Xt. */ - if (!XInitThreads()) - { - LogRel(("VBoxClient: error initialising threads in X11, exiting.\n")); - return VERR_NOT_SUPPORTED; - } int rc = mSeamless.init(); if (RT_FAILURE(rc)) return rc; diff --git a/src/VBox/Additions/x11/VBoxClient/seamless.h b/src/VBox/Additions/x11/VBoxClient/seamless.h index 46b45b6e..c1ffc279 100644 --- a/src/VBox/Additions/x11/VBoxClient/seamless.h +++ b/src/VBox/Additions/x11/VBoxClient/seamless.h @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2006-2007 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; diff --git a/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11-auto.cpp b/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11-auto.cpp index 0c7c4fc6..d79080d2 100644 --- a/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11-auto.cpp +++ b/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11-auto.cpp @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2007 Oracle Corporation + * Copyright (C) 2007-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; diff --git a/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11.cpp b/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11.cpp index 44d3bc2a..638f2cff 100644 --- a/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11.cpp +++ b/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11.cpp @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 2007 Oracle Corporation + * Copyright (C) 2007-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; diff --git a/src/VBox/Additions/x11/VBoxClient/thread.cpp b/src/VBox/Additions/x11/VBoxClient/thread.cpp index 182070f3..4655cb7b 100644 --- a/src/VBox/Additions/x11/VBoxClient/thread.cpp +++ b/src/VBox/Additions/x11/VBoxClient/thread.cpp @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2006-2007 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; diff --git a/src/VBox/Additions/x11/VBoxClient/thread.h b/src/VBox/Additions/x11/VBoxClient/thread.h index 2c4321d4..8cd118ac 100644 --- a/src/VBox/Additions/x11/VBoxClient/thread.h +++ b/src/VBox/Additions/x11/VBoxClient/thread.h @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2006-2007 Oracle Corporation + * Copyright (C) 2006-2010 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; |