aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/hw/xwin/InitOutput.c
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server/hw/xwin/InitOutput.c')
-rw-r--r--xorg-server/hw/xwin/InitOutput.c123
1 files changed, 74 insertions, 49 deletions
diff --git a/xorg-server/hw/xwin/InitOutput.c b/xorg-server/hw/xwin/InitOutput.c
index 9413350e6..7a4f8446d 100644
--- a/xorg-server/hw/xwin/InitOutput.c
+++ b/xorg-server/hw/xwin/InitOutput.c
@@ -35,12 +35,10 @@ from The Open Group.
#include "winmsg.h"
#include "winconfig.h"
#include "winprefs.h"
-#ifdef XWIN_CLIPBOARD
-#include "X11/Xlocale.h"
-#endif
#ifdef DPMSExtension
#include "dpmsproc.h"
#endif
+#include <locale.h>
#ifdef __CYGWIN__
#include <mntent.h>
#endif
@@ -48,15 +46,12 @@ from The Open Group.
#include "xkbsrv.h"
#endif
#ifdef RELOCATE_PROJECTROOT
-#pragma push_macro("Status")
#undef Status
-#define Status wStatus
#include <shlobj.h>
-#pragma pop_macro("Status")
-typedef WINAPI HRESULT(*SHGETFOLDERPATHPROC) (HWND hwndOwner,
- int nFolder,
- HANDLE hToken,
- DWORD dwFlags, LPTSTR pszPath);
+typedef HRESULT (__stdcall * SHGETFOLDERPATHPROC)(HWND hwndOwner,
+ int nFolder,
+ HANDLE hToken,
+ DWORD dwFlags, LPTSTR pszPath);
#endif
#include "glx_extinit.h"
#ifdef XWIN_GLX_WINDOWS
@@ -133,6 +128,7 @@ winClipboardShutdown(void)
if (g_fClipboard && g_fClipboardLaunched && g_fClipboardStarted) {
/* Synchronously destroy the clipboard window */
if (g_hwndClipboard != NULL) {
+ g_fClipboardStarted=FALSE; /* This is to avoid dead-locls caused by the clipboard thread still doing some stuff */
SendMessage(g_hwndClipboard, WM_DESTROY, 0, 0);
/* NOTE: g_hwndClipboard is set to NULL in winclipboardthread.c */
}
@@ -142,9 +138,6 @@ winClipboardShutdown(void)
/* Wait for the clipboard thread to exit */
pthread_join(g_ptClipboardProc, NULL);
- g_fClipboardLaunched = FALSE;
- g_fClipboardStarted = FALSE;
-
winDebug("winClipboardShutdown - Clipboard thread has exited.\n");
}
}
@@ -218,14 +211,12 @@ ddxGiveUp(enum ExitCode error)
{
int i;
-#if CYGDEBUG
winDebug("ddxGiveUp\n");
-#endif
/* Perform per-screen deinitialization */
for (i = 0; i < g_iNumScreens; ++i) {
/* Delete the tray icon */
- if (!g_ScreenInfo[i].fNoTrayIcon && g_ScreenInfo[i].pScreen)
+ if (!g_ScreenInfo[i].fNoTrayIcon && g_ScreenInfo[i].pScreen && !pref.fNoTrayIcon)
winDeleteNotifyIcon(winGetScreenPriv(g_ScreenInfo[i].pScreen));
}
@@ -271,9 +262,11 @@ ddxGiveUp(enum ExitCode error)
PostQuitMessage(0);
{
+ int iReturn;
+
winDebug("ddxGiveUp - Releasing termination mutex\n");
- int iReturn = pthread_mutex_unlock(&g_pmTerminating);
+ iReturn = pthread_mutex_unlock(&g_pmTerminating);
if (iReturn != 0) {
ErrorF("winMsgWindowProc - pthread_mutex_unlock () failed: %d\n",
@@ -288,9 +281,7 @@ ddxGiveUp(enum ExitCode error)
void
AbortDDX(enum ExitCode error)
{
-#if CYGDEBUG
winDebug("AbortDDX\n");
-#endif
ddxGiveUp(error);
}
@@ -373,8 +364,10 @@ winCheckMount(void)
return;
}
+#ifdef WINDBG
if (!binary)
- winMsg(X_WARNING, "/tmp mounted in textmode\n");
+ winDebug("/tmp mounted in textmode\n");
+#endif
}
#else
static void
@@ -426,8 +419,19 @@ winFixupPaths(void)
#ifdef READ_FONTDIRS
{
/* Open fontpath configuration file */
+#if defined WIN32 && defined __MINGW32__
+qsdf qsdf qsdf qsdf
+ static Bool once = False;
+ char buffer[MAX_PATH];
+ snprintf(buffer, sizeof(buffer), "%s\\font-dirs", basedir);
+ buffer[sizeof(buffer)-1] = 0;
+ FILE *fontdirs = fopen(buffer, "rt");
+ if (once) fontdirs = NULL;
+ else once = True;
+#else
+qsdfqsdf qsdf qsdf
FILE *fontdirs = fopen(ETCX11DIR "/font-dirs", "rt");
-
+#endif
if (fontdirs != NULL) {
char buffer[256];
int needs_sep = TRUE;
@@ -591,7 +595,7 @@ winFixupPaths(void)
}
#endif /* RELOCATE_PROJECTROOT */
if (changed_fontpath)
- winMsg(font_from, "FontPath set to \"%s\"\n", defaultFontPath);
+ winDebug ("FontPath set to \"%s\"\n", defaultFontPath);
#ifdef RELOCATE_PROJECTROOT
if (getenv("XKEYSYMDB") == NULL) {
@@ -615,6 +619,13 @@ winFixupPaths(void)
buffer[sizeof(buffer) - 1] = 0;
putenv(buffer);
}
+ if (getenv("XHOSTPREFIX") == NULL) {
+ char buffer[MAX_PATH];
+ snprintf(buffer, sizeof(buffer), "XHOSTPREFIX=%s\\X",
+ basedir);
+ buffer[sizeof(buffer)-1] = 0;
+ putenv(buffer);
+ }
if (getenv("HOME") == NULL) {
char buffer[MAX_PATH + 5];
@@ -627,7 +638,7 @@ winFixupPaths(void)
putenv(buffer);
}
else {
- winMsg(X_ERROR, "Can not determine HOME directory\n");
+ ErrorF ("Can not determine HOME directory\n");
}
}
if (!g_fLogFileChanged) {
@@ -636,16 +647,17 @@ winFixupPaths(void)
if (size && size < sizeof(buffer)) {
snprintf(buffer + size, sizeof(buffer) - size,
- "XWin.%s.log", display);
+ "VCXSrv.%s.log", display);
buffer[sizeof(buffer) - 1] = 0;
g_pszLogFile = buffer;
- winMsg(X_DEFAULT, "Logfile set to \"%s\"\n", g_pszLogFile);
+ GetLongPathName(buffer, buffer, MAX_PATH);
+ winDebug ("Logfile set to \"%s\"\n", g_pszLogFile);
}
}
{
static char xkbbasedir[MAX_PATH];
- snprintf(xkbbasedir, sizeof(xkbbasedir), "%s\\xkb", basedir);
+ snprintf(xkbbasedir, sizeof(xkbbasedir), "%s\\xkbdata", basedir);
if (sizeof(xkbbasedir) > 0)
xkbbasedir[sizeof(xkbbasedir) - 1] = 0;
XkbBaseDirectory = xkbbasedir;
@@ -655,11 +667,8 @@ winFixupPaths(void)
}
void
-OsVendorInit(void)
+OsVendorPreInit(int argc, char *argv[])
{
- /* Re-initialize global variables on server reset */
- winInitializeGlobals();
-
winFixupPaths();
#ifdef DDXOSVERRORF
@@ -680,6 +689,17 @@ OsVendorInit(void)
LogSetParameter(XLOG_VERBOSITY, g_iLogVerbose);
LogSetParameter(XLOG_FILE_VERBOSITY, g_iLogVerbose);
+ /* Log the command line */
+ winLogCommandLine(argc, argv);
+
+}
+
+void
+OsVendorInit(void)
+{
+ /* Re-initialize global variables on server reset */
+ winInitializeGlobals();
+
/* Log the version information */
if (serverGeneration == 1)
winLogVersionInfo();
@@ -717,8 +737,7 @@ OsVendorInit(void)
g_ScreenInfo[j].iE3BTimeout = WIN_DEFAULT_E3B_TIME;
if (reportOnce) {
reportOnce = FALSE;
- winMsg(X_PROBED,
- "Windows reports only %d mouse buttons, defaulting to -emulate3buttons\n",
+ winDebug("Windows reports only %d mouse buttons, defaulting to -emulate3buttons\n",
mouseButtons);
}
}
@@ -741,6 +760,10 @@ winUseMsg(void)
#ifdef XWIN_CLIPBOARD
ErrorF("-[no]clipboard\n"
"\tEnable [disable] the clipboard integration. Default is enabled.\n");
+ ErrorF ("-[no]clipboardprimary\n"
+ "\t[Do not] map the PRIMARY selection to the windows clipboard.\n"
+ "\tThe CLIPBOARD selection is always mapped if -clipboard is enabled.\n"
+ "\tDefault is mapped.\n");
#endif
ErrorF("-clipupdates num_boxes\n"
@@ -788,7 +811,7 @@ winUseMsg(void)
ErrorF("-ignoreinput\n" "\tIgnore keyboard and mouse input.\n");
-#ifdef XWIN_MULTIWINDOWEXTWM
+#ifdef XWIN_MULTIWINDOWINTWM
ErrorF("-internalwm\n" "\tRun the internal window manager.\n");
#endif
@@ -877,10 +900,11 @@ winUseMsg(void)
ErrorF("-[no]unixkill\n" "\tCtrl+Alt+Backspace exits the X Server.\n");
-#ifdef XWIN_GLX_WINDOWS
ErrorF("-[no]wgl\n"
"\tEnable the GLX extension to use the native Windows WGL interface for hardware-accelerated OpenGL\n");
-#endif
+
+ ErrorF("-swrastwgl\n"
+ "\tEnable the GLX extension to use the native Windows WGL interface based on the swrast interface for accelerated OpenGL\n");
ErrorF("-[no]winkill\n" "\tAlt+F4 exits the X Server.\n");
@@ -941,12 +965,7 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char *argv[])
if (serverGeneration == 1)
XwinExtensionInit();
- /* Log the command line */
- winLogCommandLine(argc, argv);
-
-#if CYGDEBUG
winDebug("InitOutput\n");
-#endif
/* Validate command-line arguments */
if (serverGeneration == 1 && !winValidateArgs()) {
@@ -965,11 +984,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char *argv[])
#ifdef XWIN_XF86CONFIG
/* Try to read the xorg.conf-style configuration file */
if (!winReadConfigfile())
- winErrorFVerb(1, "InitOutput - Error reading config file\n");
+ ErrorF ("InitOutput - Error reading config file\n");
#else
- winMsg(X_INFO, "xorg.conf is not supported\n");
- winMsg(X_INFO, "See http://x.cygwin.com/docs/faq/cygwin-x-faq.html "
- "for more information\n");
winConfigFiles();
#endif
@@ -1025,13 +1041,22 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char *argv[])
* setlocale applies to all threads in the current process.
* Apply locale specified in LANG environment variable.
*/
- setlocale(LC_ALL, "");
+ if (!setlocale (LC_ALL, ""))
+ {
+ ErrorF ("setlocale failed.\n");
+ }
+
+ /* See if X supports the current locale */
+ if (XSupportsLocale () == FALSE)
+ {
+ ErrorF ("Warning: Locale not supported by X, falling back to 'C' locale.\n");
+ setlocale(LC_ALL, "C");
+ }
+
}
#endif
-#if CYGDEBUG || YES
winDebug("InitOutput - Returning.\n");
-#endif
}
/*
@@ -1053,7 +1078,7 @@ winCheckDisplayNumber(void)
/* Check display range */
nDisp = atoi(display);
- if (nDisp < 0 || nDisp > 65535) {
+ if (nDisp < 0 || nDisp > 59535) {
ErrorF("winCheckDisplayNumber - Bad display number: %d\n", nDisp);
return FALSE;
}
@@ -1094,7 +1119,7 @@ winCheckDisplayNumber(void)
}
if (GetLastError() == ERROR_ALREADY_EXISTS) {
ErrorF("winCheckDisplayNumber - "
- PROJECT_NAME " is already running on display %d\n", nDisp);
+ "VCXsrv, Xming or Cygwin/X is already running on display %d\n", nDisp);
return FALSE;
}