aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/hw/xwin/winconfig.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2012-03-26 14:23:28 +0200
committermarha <marha@users.sourceforge.net>2012-03-26 14:23:28 +0200
commit76bcc36ed305418a3ddc5752d287ede894243e1b (patch)
treebacb320c825768471ce56f058f17ce863d592376 /xorg-server/hw/xwin/winconfig.c
parent7d894e32566b710952c44cbc71939ad1d9e2fa8d (diff)
parent0f834b91a4768673833ab4917e87d86c237bb1a6 (diff)
downloadvcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.tar.gz
vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.tar.bz2
vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.zip
Merge remote-tracking branch 'origin/released'
Conflicts: pixman/pixman/pixman-mmx.c xorg-server/Xext/shm.c xorg-server/Xext/syncsrv.h xorg-server/Xext/xvmain.c xorg-server/Xi/exevents.c xorg-server/Xi/opendev.c xorg-server/composite/compalloc.c xorg-server/composite/compoverlay.c xorg-server/dix/colormap.c xorg-server/dix/devices.c xorg-server/dix/dispatch.c xorg-server/dix/dixfonts.c xorg-server/dix/eventconvert.c xorg-server/dix/events.c xorg-server/dix/gc.c xorg-server/dix/getevents.c xorg-server/dix/main.c xorg-server/dix/privates.c xorg-server/dix/registry.c xorg-server/dix/resource.c xorg-server/exa/exa_accel.c xorg-server/exa/exa_migration_classic.c xorg-server/exa/exa_unaccel.c xorg-server/fb/fb.h xorg-server/fb/fbcopy.c xorg-server/fb/fbpixmap.c xorg-server/glx/dispatch.h xorg-server/glx/glapi.h xorg-server/glx/glapi_gentable.c xorg-server/glx/glapitable.h xorg-server/glx/glprocs.h xorg-server/glx/glxcmds.c xorg-server/glx/glxcmdsswap.c xorg-server/glx/glxdricommon.c xorg-server/glx/glxdriswrast.c xorg-server/glx/glxext.c xorg-server/glx/indirect_dispatch.c xorg-server/glx/indirect_dispatch.h xorg-server/glx/indirect_dispatch_swap.c xorg-server/glx/indirect_size.h xorg-server/glx/indirect_size_get.h xorg-server/glx/indirect_table.c xorg-server/glx/indirect_util.c xorg-server/glx/rensize.c xorg-server/glx/single2swap.c xorg-server/glx/singlepix.c xorg-server/glx/singlepixswap.c xorg-server/glx/singlesize.c xorg-server/hw/dmx/dmxinit.c xorg-server/hw/kdrive/ephyr/ephyr.c xorg-server/hw/kdrive/ephyr/hostx.c xorg-server/hw/kdrive/ephyr/hostx.h xorg-server/hw/kdrive/src/kinput.c xorg-server/hw/xfree86/common/compiler.h xorg-server/hw/xwin/InitInput.c xorg-server/hw/xwin/InitOutput.c xorg-server/hw/xwin/ddraw.h xorg-server/hw/xwin/glx/glwrap.c xorg-server/hw/xwin/glx/indirect.c xorg-server/hw/xwin/glx/wgl_ext_api.h xorg-server/hw/xwin/glx/winpriv.c xorg-server/hw/xwin/win.h xorg-server/hw/xwin/winallpriv.c xorg-server/hw/xwin/winauth.c xorg-server/hw/xwin/winclipboard.h xorg-server/hw/xwin/winclipboardinit.c xorg-server/hw/xwin/winclipboardthread.c xorg-server/hw/xwin/winclipboardunicode.c xorg-server/hw/xwin/winclipboardwndproc.c xorg-server/hw/xwin/winclipboardwrappers.c xorg-server/hw/xwin/winclipboardxevents.c xorg-server/hw/xwin/wincmap.c xorg-server/hw/xwin/winconfig.c xorg-server/hw/xwin/wincreatewnd.c xorg-server/hw/xwin/wincursor.c xorg-server/hw/xwin/windialogs.c xorg-server/hw/xwin/winengine.c xorg-server/hw/xwin/winerror.c xorg-server/hw/xwin/wingc.c xorg-server/hw/xwin/wingetsp.c xorg-server/hw/xwin/winkeybd.c xorg-server/hw/xwin/winkeybd.h xorg-server/hw/xwin/winlayouts.h xorg-server/hw/xwin/winmisc.c xorg-server/hw/xwin/winmonitors.c xorg-server/hw/xwin/winmouse.c xorg-server/hw/xwin/winmsg.c xorg-server/hw/xwin/winmsg.h xorg-server/hw/xwin/winmultiwindowclass.c xorg-server/hw/xwin/winmultiwindowicons.c xorg-server/hw/xwin/winmultiwindowshape.c xorg-server/hw/xwin/winmultiwindowwindow.c xorg-server/hw/xwin/winmultiwindowwm.c xorg-server/hw/xwin/winmultiwindowwndproc.c xorg-server/hw/xwin/winnativegdi.c xorg-server/hw/xwin/winpfbdd.c xorg-server/hw/xwin/winpixmap.c xorg-server/hw/xwin/winpolyline.c xorg-server/hw/xwin/winprefs.c xorg-server/hw/xwin/winprocarg.c xorg-server/hw/xwin/winregistry.c xorg-server/hw/xwin/winscrinit.c xorg-server/hw/xwin/winsetsp.c xorg-server/hw/xwin/winshaddd.c xorg-server/hw/xwin/winshadddnl.c xorg-server/hw/xwin/winshadgdi.c xorg-server/hw/xwin/wintrayicon.c xorg-server/hw/xwin/winwin32rootless.c xorg-server/hw/xwin/winwin32rootlesswindow.c xorg-server/hw/xwin/winwin32rootlesswndproc.c xorg-server/hw/xwin/winwindow.c xorg-server/hw/xwin/winwindow.h xorg-server/hw/xwin/winwindowswm.c xorg-server/hw/xwin/winwndproc.c xorg-server/include/callback.h xorg-server/include/dixstruct.h xorg-server/include/misc.h xorg-server/include/os.h xorg-server/include/scrnintstr.h xorg-server/mi/micmap.c xorg-server/mi/miinitext.c xorg-server/mi/mioverlay.c xorg-server/mi/misprite.c xorg-server/mi/mivaltree.c xorg-server/mi/miwindow.c xorg-server/miext/damage/damage.c xorg-server/miext/rootless/rootlessGC.c xorg-server/miext/rootless/rootlessWindow.c xorg-server/os/WaitFor.c xorg-server/os/access.c xorg-server/os/connection.c xorg-server/os/io.c xorg-server/os/log.c xorg-server/os/osinit.c xorg-server/os/utils.c xorg-server/os/xdmcp.c xorg-server/os/xprintf.c xorg-server/os/xstrans.c xorg-server/render/mipict.c xorg-server/xkb/xkbActions.c xorg-server/xkb/xkbInit.c xorg-server/xkeyboard-config/compat/default.in
Diffstat (limited to 'xorg-server/hw/xwin/winconfig.c')
-rw-r--r--xorg-server/hw/xwin/winconfig.c1485
1 files changed, 688 insertions, 797 deletions
diff --git a/xorg-server/hw/xwin/winconfig.c b/xorg-server/hw/xwin/winconfig.c
index 4441550b0..57825af72 100644
--- a/xorg-server/hw/xwin/winconfig.c
+++ b/xorg-server/hw/xwin/winconfig.c
@@ -63,42 +63,42 @@ XF86ConfigPtr g_xf86configptr = NULL;
WinCmdlineRec g_cmdline = {
#ifdef XWIN_XF86CONFIG
- NULL, /* configFile */
- NULL, /* configDir */
+ NULL, /* configFile */
+ NULL, /* configDir */
#endif
- NULL, /* fontPath */
+ NULL, /* fontPath */
#ifdef XWIN_XF86CONFIG
- NULL, /* keyboard */
+ NULL, /* keyboard */
#endif
- NULL, /* xkbRules */
- NULL, /* xkbModel */
- NULL, /* xkbLayout */
- NULL, /* xkbVariant */
- NULL, /* xkbOptions */
- NULL, /* screenname */
- NULL, /* mousename */
- FALSE, /* emulate3Buttons */
- 0 /* emulate3Timeout */
+ NULL, /* xkbRules */
+ NULL, /* xkbModel */
+ NULL, /* xkbLayout */
+ NULL, /* xkbVariant */
+ NULL, /* xkbOptions */
+ NULL, /* screenname */
+ NULL, /* mousename */
+ FALSE, /* emulate3Buttons */
+ 0 /* emulate3Timeout */
};
winInfoRec g_winInfo = {
- { /* keyboard */
- 0, /* leds */
- 500, /* delay */
- 30 /* rate */
- }
- ,
- { /* xkb */
- NULL, /* rules */
- NULL, /* model */
- NULL, /* layout */
- NULL, /* variant */
- NULL, /* options */
- }
- ,
- {
- FALSE,
- 50}
+ { /* keyboard */
+ 0, /* leds */
+ 500, /* delay */
+ 30 /* rate */
+ }
+ ,
+ { /* xkb */
+ NULL, /* rules */
+ NULL, /* model */
+ NULL, /* layout */
+ NULL, /* variant */
+ NULL, /* options */
+ }
+ ,
+ {
+ FALSE,
+ 50}
};
#define NULL_IF_EMPTY(x) (winNameCompare(x,"")?x:NULL)
@@ -106,130 +106,111 @@ winInfoRec g_winInfo = {
#ifdef XWIN_XF86CONFIG
serverLayoutRec g_winConfigLayout;
-static Bool ParseOptionValue (int scrnIndex, pointer options,
- OptionInfoPtr p);
-static Bool configLayout (serverLayoutPtr, XF86ConfLayoutPtr, char *);
-static Bool configImpliedLayout (serverLayoutPtr, XF86ConfScreenPtr);
-static Bool GetBoolValue (OptionInfoPtr p, const char *s);
-
+static Bool ParseOptionValue(int scrnIndex, pointer options, OptionInfoPtr p);
+static Bool configLayout(serverLayoutPtr, XF86ConfLayoutPtr, char *);
+static Bool configImpliedLayout(serverLayoutPtr, XF86ConfScreenPtr);
+static Bool GetBoolValue(OptionInfoPtr p, const char *s);
Bool
-winReadConfigfile ()
+winReadConfigfile()
{
- Bool retval = TRUE;
- char *filename, *dirname;
- MessageType filefrom = X_DEFAULT;
- MessageType dirfrom = X_DEFAULT;
- char *xf86ConfigFile = NULL;
- char *xf86ConfigDir = NULL;
-
- if (g_cmdline.configFile)
- {
- filefrom = X_CMDLINE;
- xf86ConfigFile = g_cmdline.configFile;
+ Bool retval = TRUE;
+ char *filename, *dirname;
+ MessageType filefrom = X_DEFAULT;
+ MessageType dirfrom = X_DEFAULT;
+ char *xf86ConfigFile = NULL;
+ char *xf86ConfigDir = NULL;
+
+ if (g_cmdline.configFile) {
+ filefrom = X_CMDLINE;
+ xf86ConfigFile = g_cmdline.configFile;
}
- if (g_cmdline.configDir)
- {
- dirfrom = X_CMDLINE;
- xf86ConfigDir = g_cmdline.configDir;
+ if (g_cmdline.configDir) {
+ dirfrom = X_CMDLINE;
+ xf86ConfigDir = g_cmdline.configDir;
}
- /* Parse config file into data structure */
- xf86initConfigFiles();
- dirname = xf86openConfigDirFiles (CONFIGDIRPATH, xf86ConfigDir, PROJECTROOT);
- filename = xf86openConfigFile (CONFIGPATH, xf86ConfigFile, PROJECTROOT);
+ /* Parse config file into data structure */
+ xf86initConfigFiles();
+ dirname = xf86openConfigDirFiles(CONFIGDIRPATH, xf86ConfigDir, PROJECTROOT);
+ filename = xf86openConfigFile(CONFIGPATH, xf86ConfigFile, PROJECTROOT);
- /* Hack for backward compatibility */
- if (!filename && from == X_DEFAULT)
- filename = xf86openConfigFile (CONFIGPATH, "XF86Config", PROJECTROOT);
+ /* Hack for backward compatibility */
+ if (!filename && from == X_DEFAULT)
+ filename = xf86openConfigFile(CONFIGPATH, "XF86Config", PROJECTROOT);
- if (filename)
- {
- winDebug ("Using config file: \"%s\"\n", filename);
+ if (filename) {
+ winDebug ("Using config file: \"%s\"\n", filename);
}
- else
- {
- ErrorF ("Unable to locate/open config file");
- if (xf86ConfigFile)
- ErrorF (": \"%s\"", xf86ConfigFile);
- ErrorF ("\n");
+ else {
+ ErrorF ("Unable to locate/open config file");
+ if (xf86ConfigFile)
+ ErrorF(": \"%s\"", xf86ConfigFile);
+ ErrorF("\n");
}
- if (dirname)
- {
- winMsg (from, "Using config directory: \"%s\"\n", dirname);
+ if (dirname) {
+ winMsg(from, "Using config directory: \"%s\"\n", dirname);
}
- else
- {
- winMsg (X_ERROR, "Unable to locate/open config directory");
- if (xf86ConfigDir)
- ErrorF (": \"%s\"", xf86ConfigDir);
- ErrorF ("\n");
+ else {
+ winMsg(X_ERROR, "Unable to locate/open config directory");
+ if (xf86ConfigDir)
+ ErrorF(": \"%s\"", xf86ConfigDir);
+ ErrorF("\n");
}
- if (!filename && !dirname)
- {
- return FALSE;
+ if (!filename && !dirname) {
+ return FALSE;
}
- free(filename);
- free(dirname);
- if ((g_xf86configptr = xf86readConfigFile ()) == NULL)
- {
- ErrorF ("Problem parsing the config file\n");
- return FALSE;
+ free(filename);
+ free(dirname);
+ if ((g_xf86configptr = xf86readConfigFile()) == NULL) {
+ ErrorF ("Problem parsing the config file\n");
+ return FALSE;
}
- xf86closeConfigFile ();
+ xf86closeConfigFile();
- LogPrintMarkers();
+ LogPrintMarkers();
- /* set options from data structure */
+ /* set options from data structure */
- if (g_xf86configptr->conf_layout_lst == NULL || g_cmdline.screenname != NULL)
- {
- if (g_cmdline.screenname == NULL)
- {
- winDebug ("No Layout section. Using the first Screen section.\n");
- }
- if (!configImpliedLayout (&g_winConfigLayout,
- g_xf86configptr->conf_screen_lst))
- {
- ErrorF ("Unable to determine the screen layout\n");
- return FALSE;
- }
+ if (g_xf86configptr->conf_layout_lst == NULL ||
+ g_cmdline.screenname != NULL) {
+ if (g_cmdline.screenname == NULL) {
+ winDebug ("No Layout section. Using the first Screen section.\n");
+ }
+ if (!configImpliedLayout(&g_winConfigLayout,
+ g_xf86configptr->conf_screen_lst)) {
+ ErrorF ("Unable to determine the screen layout\n");
+ return FALSE;
+ }
}
- else
- {
- /* Check if layout is given in the config file */
- if (g_xf86configptr->conf_flags != NULL)
- {
- char *dfltlayout = NULL;
- pointer optlist = g_xf86configptr->conf_flags->flg_option_lst;
-
- if (optlist && winFindOption (optlist, "defaultserverlayout"))
- dfltlayout =
- winSetStrOption (optlist, "defaultserverlayout", NULL);
-
- if (!configLayout (&g_winConfigLayout,
- g_xf86configptr->conf_layout_lst,
- dfltlayout))
- {
- ErrorF ("Unable to determine the screen layout\n");
- return FALSE;
- }
- }
- else
- {
- if (!configLayout (&g_winConfigLayout,
- g_xf86configptr->conf_layout_lst,
- NULL))
- {
- ErrorF ("Unable to determine the screen layout\n");
- return FALSE;
- }
- }
+ else {
+ /* Check if layout is given in the config file */
+ if (g_xf86configptr->conf_flags != NULL) {
+ char *dfltlayout = NULL;
+ pointer optlist = g_xf86configptr->conf_flags->flg_option_lst;
+
+ if (optlist && winFindOption(optlist, "defaultserverlayout"))
+ dfltlayout =
+ winSetStrOption(optlist, "defaultserverlayout", NULL);
+
+ if (!configLayout(&g_winConfigLayout,
+ g_xf86configptr->conf_layout_lst, dfltlayout)) {
+ ErrorF ("Unable to determine the screen layout\n");
+ return FALSE;
+ }
+ }
+ else {
+ if (!configLayout(&g_winConfigLayout,
+ g_xf86configptr->conf_layout_lst, NULL)) {
+ ErrorF ("Unable to determine the screen layout\n");
+ return FALSE;
+ }
+ }
}
- /* setup special config files */
- winConfigFiles ();
- return retval;
+ /* setup special config files */
+ winConfigFiles();
+ return retval;
}
#endif
@@ -238,270 +219,256 @@ winReadConfigfile ()
/* Set the keyboard configuration */
Bool
-winConfigKeyboard (DeviceIntPtr pDevice)
+winConfigKeyboard(DeviceIntPtr pDevice)
{
- char layoutName[KL_NAMELENGTH];
- unsigned char layoutFriendlyName[256];
- static unsigned int layoutNum = 0;
- int keyboardType;
+ char layoutName[KL_NAMELENGTH];
+ unsigned char layoutFriendlyName[256];
+ static unsigned int layoutNum = 0;
+ int keyboardType;
+
#ifdef XWIN_XF86CONFIG
- XF86ConfInputPtr kbd = NULL;
- XF86ConfInputPtr input_list = NULL;
- MessageType kbdfrom = X_CONFIG;
+ XF86ConfInputPtr kbd = NULL;
+ XF86ConfInputPtr input_list = NULL;
+ MessageType kbdfrom = X_CONFIG;
#endif
- MessageType from = X_DEFAULT;
- char *s = NULL;
-
- /* Setup defaults */
- XkbGetRulesDflts(&g_winInfo.xkb);
-
- /*
- * Query the windows autorepeat settings and change the xserver defaults.
- */
- {
- int kbd_delay;
- DWORD kbd_speed;
- if (SystemParametersInfo(SPI_GETKEYBOARDDELAY, 0, &kbd_delay, 0) &&
- SystemParametersInfo(SPI_GETKEYBOARDSPEED, 0, &kbd_speed, 0))
- {
- switch (kbd_delay)
- {
- case 0: g_winInfo.keyboard.delay = 250; break;
- case 1: g_winInfo.keyboard.delay = 500; break;
- case 2: g_winInfo.keyboard.delay = 750; break;
- default:
- case 3: g_winInfo.keyboard.delay = 1000; break;
- }
- g_winInfo.keyboard.rate = (kbd_speed>0)?kbd_speed:1;
- winDebug("Setting autorepeat to delay=%d, rate=%d\n",
- g_winInfo.keyboard.delay, g_winInfo.keyboard.rate);
- }
- }
-
-
- keyboardType = GetKeyboardType (0);
- if (keyboardType > 0 && GetKeyboardLayoutName (layoutName))
- {
- WinKBLayoutPtr pLayout;
- Bool bfound = FALSE;
-
- if (! layoutNum)
- layoutNum = strtoul (layoutName, (char **)NULL, 16);
- if ((layoutNum & 0xffff) == 0x411) {
- /* The japanese layouts know a lot of different IMEs which all have
- different layout numbers set. Map them to a single entry.
- Same might apply for chinese, korean and other symbol languages
- too */
- layoutNum = (layoutNum & 0xffff);
- if (keyboardType == 7)
- {
- /* Japanese layouts have problems with key event messages
- such as the lack of WM_KEYUP for Caps Lock key.
- Loading US layout fixes this problem. */
- if (LoadKeyboardLayout("00000409", KLF_ACTIVATE) != NULL)
- winDebug("Loading US keyboard layout.\n");
- else
- ErrorF ("LoadKeyboardLayout failed.\n");
- }
- }
+ MessageType from = X_DEFAULT;
+ char *s = NULL;
- /* Discover the friendly name of the current layout */
+ /* Setup defaults */
+ XkbGetRulesDflts(&g_winInfo.xkb);
+
+ /*
+ * Query the windows autorepeat settings and change the xserver defaults.
+ */
{
- HKEY regkey = NULL;
- const char regtempl[] = "SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\";
- char *regpath;
- DWORD namesize = sizeof(layoutFriendlyName);
-
- regpath = malloc(sizeof(regtempl) + KL_NAMELENGTH + 1);
- strcpy(regpath, regtempl);
- strcat(regpath, layoutName);
-
- if (!RegOpenKey(HKEY_LOCAL_MACHINE, regpath, &regkey))
- RegQueryValueEx(regkey, "Layout Text", 0, NULL, layoutFriendlyName, &namesize);
-
- /* Close registry key */
- if (regkey)
- RegCloseKey (regkey);
- free(regpath);
+ int kbd_delay;
+ DWORD kbd_speed;
+
+ if (SystemParametersInfo(SPI_GETKEYBOARDDELAY, 0, &kbd_delay, 0) &&
+ SystemParametersInfo(SPI_GETKEYBOARDSPEED, 0, &kbd_speed, 0)) {
+ switch (kbd_delay) {
+ case 0:
+ g_winInfo.keyboard.delay = 250;
+ break;
+ case 1:
+ g_winInfo.keyboard.delay = 500;
+ break;
+ case 2:
+ g_winInfo.keyboard.delay = 750;
+ break;
+ default:
+ case 3:
+ g_winInfo.keyboard.delay = 1000;
+ break;
+ }
+ g_winInfo.keyboard.rate = (kbd_speed > 0) ? kbd_speed : 1;
+ winDebug("Setting autorepeat to delay=%d, rate=%d\n",
+ g_winInfo.keyboard.delay, g_winInfo.keyboard.rate);
+ }
}
- winDebug ("Windows keyboard layout: \"%s\" (%08x) \"%s\", type %d\n",
- layoutName, layoutNum, layoutFriendlyName, keyboardType);
-
- for (pLayout = winKBLayouts; pLayout->winlayout != -1; pLayout++)
- {
- if (pLayout->winlayout != layoutNum)
- continue;
- if (pLayout->winkbtype > 0 && pLayout->winkbtype != keyboardType)
- continue;
-
- bfound = TRUE;
- winDebug (
- "Found matching XKB configuration \"%s\"\n",
- pLayout->layoutname);
-
- winDebug(
- "Model = \"%s\" Layout = \"%s\""
- " Variant = \"%s\" Options = \"%s\"\n",
- pLayout->xkbmodel ? pLayout->xkbmodel : "none",
- pLayout->xkblayout ? pLayout->xkblayout : "none",
- pLayout->xkbvariant ? pLayout->xkbvariant : "none",
- pLayout->xkboptions ? pLayout->xkboptions : "none");
-
- g_winInfo.xkb.model = pLayout->xkbmodel;
- g_winInfo.xkb.layout = pLayout->xkblayout;
- g_winInfo.xkb.variant = pLayout->xkbvariant;
- g_winInfo.xkb.options = pLayout->xkboptions;
-
-
- break;
- }
-
- if (!bfound)
- {
- ErrorF ("Keyboardlayout \"%s\" (%s) is unknown, using X server default layout\n", layoutFriendlyName, layoutName);
- }
- }
-
- /* parse the configuration */
-#ifdef XWIN_XF86CONFIG
- if (g_cmdline.keyboard)
- kbdfrom = X_CMDLINE;
+ keyboardType = GetKeyboardType(0);
+ if (keyboardType > 0 && GetKeyboardLayoutName(layoutName)) {
+ WinKBLayoutPtr pLayout;
+ Bool bfound = FALSE;
+
+ if (!layoutNum)
+ layoutNum = strtoul(layoutName, (char **) NULL, 16);
+ if ((layoutNum & 0xffff) == 0x411) {
+ /* The japanese layouts know a lot of different IMEs which all have
+ different layout numbers set. Map them to a single entry.
+ Same might apply for chinese, korean and other symbol languages
+ too */
+ layoutNum = (layoutNum & 0xffff);
+ if (keyboardType == 7) {
+ /* Japanese layouts have problems with key event messages
+ such as the lack of WM_KEYUP for Caps Lock key.
+ Loading US layout fixes this problem. */
+ if (LoadKeyboardLayout("00000409", KLF_ACTIVATE) != NULL)
+ winDebug("Loading US keyboard layout.\n");
+ else
+ ErrorF ("LoadKeyboardLayout failed.\n");
+ }
+ }
- /*
- * Until the layout code is finished, I search for the keyboard
- * device and configure the server with it.
- */
+ /* Discover the friendly name of the current layout */
+ {
+ HKEY regkey = NULL;
+ const char regtempl[] =
+ "SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\";
+ char *regpath;
+ DWORD namesize = sizeof(layoutFriendlyName);
+
+ regpath = malloc(sizeof(regtempl) + KL_NAMELENGTH + 1);
+ strcpy(regpath, regtempl);
+ strcat(regpath, layoutName);
+
+ if (!RegOpenKey(HKEY_LOCAL_MACHINE, regpath, &regkey))
+ RegQueryValueEx(regkey, "Layout Text", 0, NULL,
+ layoutFriendlyName, &namesize);
+
+ /* Close registry key */
+ if (regkey)
+ RegCloseKey(regkey);
+ free(regpath);
+ }
- if (g_xf86configptr != NULL)
- input_list = g_xf86configptr->conf_input_lst;
+ winDebug ("Windows keyboard layout: \"%s\" (%08x) \"%s\", type %d\n",
+ layoutName, layoutNum, layoutFriendlyName, keyboardType);
+
+ for (pLayout = winKBLayouts; pLayout->winlayout != -1; pLayout++) {
+ if (pLayout->winlayout != layoutNum)
+ continue;
+ if (pLayout->winkbtype > 0 && pLayout->winkbtype != keyboardType)
+ continue;
+
+ bfound = TRUE;
+ winDebug (
+ "Found matching XKB configuration \"%s\"\n",
+ pLayout->layoutname);
+
+ winDebug(
+ "Model = \"%s\" Layout = \"%s\""
+ " Variant = \"%s\" Options = \"%s\"\n",
+ pLayout->xkbmodel ? pLayout->xkbmodel : "none",
+ pLayout->xkblayout ? pLayout->xkblayout : "none",
+ pLayout->xkbvariant ? pLayout->xkbvariant : "none",
+ pLayout->xkboptions ? pLayout->xkboptions : "none");
+
+ g_winInfo.xkb.model = pLayout->xkbmodel;
+ g_winInfo.xkb.layout = pLayout->xkblayout;
+ g_winInfo.xkb.variant = pLayout->xkbvariant;
+ g_winInfo.xkb.options = pLayout->xkboptions;
+
+ break;
+ }
- while (input_list != NULL)
- {
- if (winNameCompare (input_list->inp_driver, "keyboard") == 0)
- {
- /* Check if device name matches requested name */
- if (g_cmdline.keyboard && winNameCompare (input_list->inp_identifier,
- g_cmdline.keyboard))
- continue;
- kbd = input_list;
- }
- input_list = input_list->list.next;
+ if (!bfound) {
+ ErrorF ("Keyboardlayout \"%s\" (%s) is unknown, using X server default layout\n",
+ layoutFriendlyName, layoutName);
+ }
}
- if (kbd != NULL)
- {
-
- if (kbd->inp_identifier)
- winDebug ("Using keyboard \"%s\" as primary keyboard\n",
- kbd->inp_identifier);
+ /* parse the configuration */
+#ifdef XWIN_XF86CONFIG
+ if (g_cmdline.keyboard)
+ kbdfrom = X_CMDLINE;
+
+ /*
+ * Until the layout code is finished, I search for the keyboard
+ * device and configure the server with it.
+ */
+
+ if (g_xf86configptr != NULL)
+ input_list = g_xf86configptr->conf_input_lst;
+
+ while (input_list != NULL) {
+ if (winNameCompare(input_list->inp_driver, "keyboard") == 0) {
+ /* Check if device name matches requested name */
+ if (g_cmdline.keyboard && winNameCompare(input_list->inp_identifier,
+ g_cmdline.keyboard))
+ continue;
+ kbd = input_list;
+ }
+ input_list = input_list->list.next;
+ }
- if ((s = winSetStrOption(kbd->inp_option_lst, "AutoRepeat", NULL)))
- {
- if ((sscanf(s, "%ld %ld", &g_winInfo.keyboard.delay,
- &g_winInfo.keyboard.rate) != 2) ||
- (g_winInfo.keyboard.delay < 1) ||
- (g_winInfo.keyboard.rate == 0) ||
- (1000 / g_winInfo.keyboard.rate) < 1)
- {
- ErrorF ("\"%s\" is not a valid AutoRepeat value", s);
- free(s);
- return FALSE;
+ if (kbd != NULL) {
+
+ if (kbd->inp_identifier)
+ winDebug ("Using keyboard \"%s\" as primary keyboard\n",
+ kbd->inp_identifier);
+
+ if ((s = winSetStrOption(kbd->inp_option_lst, "AutoRepeat", NULL))) {
+ if ((sscanf(s, "%ld %ld", &g_winInfo.keyboard.delay,
+ &g_winInfo.keyboard.rate) != 2) ||
+ (g_winInfo.keyboard.delay < 1) ||
+ (g_winInfo.keyboard.rate == 0) ||
+ (1000 / g_winInfo.keyboard.rate) < 1) {
+ ErrorF ("\"%s\" is not a valid AutoRepeat value", s);
+ free(s);
+ return FALSE;
}
- free(s);
- winDebug ("AutoRepeat: %ld %ld\n",
- g_winInfo.keyboard.delay, g_winInfo.keyboard.rate);
+ free(s);
+ winDebug ("AutoRepeat: %ld %ld\n",
+ g_winInfo.keyboard.delay, g_winInfo.keyboard.rate);
}
#endif
-
+
s = NULL;
- if (g_cmdline.xkbRules)
- {
+ if (g_cmdline.xkbRules) {
s = g_cmdline.xkbRules;
from = X_CMDLINE;
- }
+ }
#ifdef XWIN_XF86CONFIG
- else
- {
- s = winSetStrOption (kbd->inp_option_lst, "XkbRules", NULL);
+ else {
+ s = winSetStrOption(kbd->inp_option_lst, "XkbRules", NULL);
from = X_CONFIG;
- }
+ }
#endif
- if (s)
- {
- g_winInfo.xkb.rules = NULL_IF_EMPTY (s);
+ if (s) {
+ g_winInfo.xkb.rules = NULL_IF_EMPTY(s);
winDebug ("XKB: rules: \"%s\"\n", s);
- }
-
+ }
+
s = NULL;
- if (g_cmdline.xkbModel)
- {
+ if (g_cmdline.xkbModel) {
s = g_cmdline.xkbModel;
from = X_CMDLINE;
- }
+ }
#ifdef XWIN_XF86CONFIG
- else
- {
- s = winSetStrOption (kbd->inp_option_lst, "XkbModel", NULL);
+ else {
+ s = winSetStrOption(kbd->inp_option_lst, "XkbModel", NULL);
from = X_CONFIG;
- }
+ }
#endif
- if (s)
- {
- g_winInfo.xkb.model = NULL_IF_EMPTY (s);
- winDebug ("XKB: model: \"%s\"\n", s);
- }
+ if (s) {
+ g_winInfo.xkb.model = NULL_IF_EMPTY(s);
+ winDebug ("XKB: model: \"%s\"\n", s);
+ }
s = NULL;
- if (g_cmdline.xkbLayout)
- {
+ if (g_cmdline.xkbLayout) {
s = g_cmdline.xkbLayout;
from = X_CMDLINE;
- }
+ }
#ifdef XWIN_XF86CONFIG
- else
- {
- s = winSetStrOption (kbd->inp_option_lst, "XkbLayout", NULL);
+ else {
+ s = winSetStrOption(kbd->inp_option_lst, "XkbLayout", NULL);
from = X_CONFIG;
- }
+ }
#endif
- if (s)
- {
- g_winInfo.xkb.layout = NULL_IF_EMPTY (s);
- winDebug ("XKB: layout: \"%s\"\n", s);
- }
+ if (s) {
+ g_winInfo.xkb.layout = NULL_IF_EMPTY(s);
+ winDebug ("XKB: layout: \"%s\"\n", s);
+ }
s = NULL;
- if (g_cmdline.xkbVariant)
- {
+ if (g_cmdline.xkbVariant) {
s = g_cmdline.xkbVariant;
from = X_CMDLINE;
- }
+ }
#ifdef XWIN_XF86CONFIG
- else
- {
- s = winSetStrOption (kbd->inp_option_lst, "XkbVariant", NULL);
+ else {
+ s = winSetStrOption(kbd->inp_option_lst, "XkbVariant", NULL);
from = X_CONFIG;
- }
+ }
#endif
- if (s)
- {
- g_winInfo.xkb.variant = NULL_IF_EMPTY (s);
- winDebug ("XKB: variant: \"%s\"\n", s);
- }
+ if (s) {
+ g_winInfo.xkb.variant = NULL_IF_EMPTY(s);
+ winDebug ("XKB: variant: \"%s\"\n", s);
+ }
s = NULL;
- if (g_cmdline.xkbOptions)
- {
+ if (g_cmdline.xkbOptions) {
s = g_cmdline.xkbOptions;
from = X_CMDLINE;
- }
+ }
#ifdef XWIN_XF86CONFIG
- else
- {
- s = winSetStrOption (kbd->inp_option_lst, "XkbOptions", NULL);
+ else {
+ s = winSetStrOption(kbd->inp_option_lst, "XkbOptions", NULL);
from = X_CONFIG;
- }
+ }
#else
else
{
@@ -509,203 +476,184 @@ winConfigKeyboard (DeviceIntPtr pDevice)
s="grab:break_actions"; /* Currently attach default CTRL+ALT+NKP/ and CTRL+ALT+NKP* mappings to release grab functions */
}
#endif
- if (s)
- {
- g_winInfo.xkb.options = NULL_IF_EMPTY (s);
- winDebug ("XKB: options: \"%s\"\n", s);
- }
+ if (s) {
+ g_winInfo.xkb.options = NULL_IF_EMPTY(s);
+ winDebug ("XKB: options: \"%s\"\n", s);
+ }
#ifdef XWIN_XF86CONFIG
}
#endif
- return TRUE;
+ return TRUE;
}
-
#ifdef XWIN_XF86CONFIG
Bool
-winConfigMouse (DeviceIntPtr pDevice)
+winConfigMouse(DeviceIntPtr pDevice)
{
- MessageType mousefrom = X_CONFIG;
+ MessageType mousefrom = X_CONFIG;
- XF86ConfInputPtr mouse = NULL;
- XF86ConfInputPtr input_list = NULL;
+ XF86ConfInputPtr mouse = NULL;
+ XF86ConfInputPtr input_list = NULL;
- if (g_cmdline.mouse)
- mousefrom = X_CMDLINE;
+ if (g_cmdline.mouse)
+ mousefrom = X_CMDLINE;
- if (g_xf86configptr != NULL)
- input_list = g_xf86configptr->conf_input_lst;
+ if (g_xf86configptr != NULL)
+ input_list = g_xf86configptr->conf_input_lst;
- while (input_list != NULL)
- {
- if (winNameCompare (input_list->inp_driver, "mouse") == 0)
- {
- /* Check if device name matches requested name */
- if (g_cmdline.mouse && winNameCompare (input_list->inp_identifier,
- g_cmdline.mouse))
- continue;
- mouse = input_list;
- }
- input_list = input_list->list.next;
+ while (input_list != NULL) {
+ if (winNameCompare(input_list->inp_driver, "mouse") == 0) {
+ /* Check if device name matches requested name */
+ if (g_cmdline.mouse && winNameCompare(input_list->inp_identifier,
+ g_cmdline.mouse))
+ continue;
+ mouse = input_list;
+ }
+ input_list = input_list->list.next;
}
- if (mouse != NULL)
- {
- if (mouse->inp_identifier)
- winDebug ("Using pointer \"%s\" as primary pointer\n",
- mouse->inp_identifier);
-
- g_winInfo.pointer.emulate3Buttons =
- winSetBoolOption (mouse->inp_option_lst, "Emulate3Buttons", FALSE);
- if (g_cmdline.emulate3buttons)
- g_winInfo.pointer.emulate3Buttons = g_cmdline.emulate3buttons;
-
- g_winInfo.pointer.emulate3Timeout =
- winSetIntOption (mouse->inp_option_lst, "Emulate3Timeout", 50);
- if (g_cmdline.emulate3timeout)
- g_winInfo.pointer.emulate3Timeout = g_cmdline.emulate3timeout;
+ if (mouse != NULL) {
+ if (mouse->inp_identifier)
+ winDebug ("Using pointer \"%s\" as primary pointer\n",
+ mouse->inp_identifier);
+
+ g_winInfo.pointer.emulate3Buttons =
+ winSetBoolOption(mouse->inp_option_lst, "Emulate3Buttons", FALSE);
+ if (g_cmdline.emulate3buttons)
+ g_winInfo.pointer.emulate3Buttons = g_cmdline.emulate3buttons;
+
+ g_winInfo.pointer.emulate3Timeout =
+ winSetIntOption(mouse->inp_option_lst, "Emulate3Timeout", 50);
+ if (g_cmdline.emulate3timeout)
+ g_winInfo.pointer.emulate3Timeout = g_cmdline.emulate3timeout;
}
- else
- {
+ else {
winDebug ("No primary pointer configured\n");
winDebug ("Using compiletime defaults for pointer\n");
}
- return TRUE;
+ return TRUE;
}
-
Bool
-winConfigFiles ()
+winConfigFiles()
{
- MessageType from;
- XF86ConfFilesPtr filesptr = NULL;
+ MessageType from;
+ XF86ConfFilesPtr filesptr = NULL;
- /* set some shortcuts */
- if (g_xf86configptr != NULL)
- {
- filesptr = g_xf86configptr->conf_files;
+ /* set some shortcuts */
+ if (g_xf86configptr != NULL) {
+ filesptr = g_xf86configptr->conf_files;
}
+ /* Fontpath */
+ from = X_DEFAULT;
- /* Fontpath */
- from = X_DEFAULT;
-
- if (g_cmdline.fontPath)
- {
- from = X_CMDLINE;
- defaultFontPath = g_cmdline.fontPath;
+ if (g_cmdline.fontPath) {
+ from = X_CMDLINE;
+ defaultFontPath = g_cmdline.fontPath;
}
- else if (filesptr != NULL && filesptr->file_fontpath)
- {
- from = X_CONFIG;
- defaultFontPath = strdup (filesptr->file_fontpath);
+ else if (filesptr != NULL && filesptr->file_fontpath) {
+ from = X_CONFIG;
+ defaultFontPath = strdup(filesptr->file_fontpath);
}
- winDebug ("FontPath set to \"%s\"\n", defaultFontPath);
+ winDebug ("FontPath set to \"%s\"\n", defaultFontPath);
- return TRUE;
+ return TRUE;
}
#else
Bool
-winConfigFiles (void)
+winConfigFiles(void)
{
- /* Fontpath */
- if (g_cmdline.fontPath)
- {
- defaultFontPath = g_cmdline.fontPath;
- winDebug("FontPath set to \"%s\"\n", defaultFontPath);
+ /* Fontpath */
+ if (g_cmdline.fontPath) {
+ defaultFontPath = g_cmdline.fontPath;
+ winDebug("FontPath set to \"%s\"\n", defaultFontPath);
}
- return TRUE;
+ return TRUE;
}
#endif
-
Bool
-winConfigOptions (void)
+winConfigOptions(void)
{
- return TRUE;
+ return TRUE;
}
-
Bool
-winConfigScreens (void)
+winConfigScreens(void)
{
- return TRUE;
+ return TRUE;
}
-
#ifdef XWIN_XF86CONFIG
char *
-winSetStrOption (pointer optlist, const char *name, char *deflt)
+winSetStrOption(pointer optlist, const char *name, char *deflt)
{
- OptionInfoRec o;
-
- o.name = name;
- o.type = OPTV_STRING;
- if (ParseOptionValue (-1, optlist, &o))
- deflt = o.value.str;
- if (deflt)
- return strdup (deflt);
- else
- return NULL;
+ OptionInfoRec o;
+
+ o.name = name;
+ o.type = OPTV_STRING;
+ if (ParseOptionValue(-1, optlist, &o))
+ deflt = o.value.str;
+ if (deflt)
+ return strdup(deflt);
+ else
+ return NULL;
}
-
int
-winSetBoolOption (pointer optlist, const char *name, int deflt)
+winSetBoolOption(pointer optlist, const char *name, int deflt)
{
- OptionInfoRec o;
+ OptionInfoRec o;
- o.name = name;
- o.type = OPTV_BOOLEAN;
- if (ParseOptionValue (-1, optlist, &o))
- deflt = o.value.bool;
- return deflt;
+ o.name = name;
+ o.type = OPTV_BOOLEAN;
+ if (ParseOptionValue(-1, optlist, &o))
+ deflt = o.value.bool;
+ return deflt;
}
-
int
-winSetIntOption (pointer optlist, const char *name, int deflt)
+winSetIntOption(pointer optlist, const char *name, int deflt)
{
- OptionInfoRec o;
+ OptionInfoRec o;
- o.name = name;
- o.type = OPTV_INTEGER;
- if (ParseOptionValue (-1, optlist, &o))
- deflt = o.value.num;
- return deflt;
+ o.name = name;
+ o.type = OPTV_INTEGER;
+ if (ParseOptionValue(-1, optlist, &o))
+ deflt = o.value.num;
+ return deflt;
}
-
double
-winSetRealOption (pointer optlist, const char *name, double deflt)
+winSetRealOption(pointer optlist, const char *name, double deflt)
{
- OptionInfoRec o;
+ OptionInfoRec o;
- o.name = name;
- o.type = OPTV_REAL;
- if (ParseOptionValue (-1, optlist, &o))
- deflt = o.value.realnum;
- return deflt;
+ o.name = name;
+ o.type = OPTV_REAL;
+ if (ParseOptionValue(-1, optlist, &o))
+ deflt = o.value.realnum;
+ return deflt;
}
double
-winSetPercentOption (pointer optlist, const char *name, double deflt)
+winSetPercentOption(pointer optlist, const char *name, double deflt)
{
- OptionInfoRec o;
+ OptionInfoRec o;
- o.name = name;
- o.type = OPTV_PERCENT;
- if (ParseOptionValue (-1, optlist, &o))
- deflt = o.value.realnum;
- return deflt;
+ o.name = name;
+ o.type = OPTV_PERCENT;
+ if (ParseOptionValue(-1, optlist, &o))
+ deflt = o.value.realnum;
+ return deflt;
}
#endif
-
/*
* Compare two strings for equality. This is caseinsensitive and
* The characters '_', ' ' (space) and '\t' (tab) are treated as
@@ -713,45 +661,42 @@ winSetPercentOption (pointer optlist, const char *name, double deflt)
*/
int
-winNameCompare (const char *s1, const char *s2)
+winNameCompare(const char *s1, const char *s2)
{
- char c1, c2;
+ char c1, c2;
- if (!s1 || *s1 == 0)
- {
- if (!s2 || *s2 == 0)
- return 0;
- else
- return 1;
+ if (!s1 || *s1 == 0) {
+ if (!s2 || *s2 == 0)
+ return 0;
+ else
+ return 1;
}
- while (*s1 == '_' || *s1 == ' ' || *s1 == '\t')
- s1++;
- while (*s2 == '_' || *s2 == ' ' || *s2 == '\t')
- s2++;
+ while (*s1 == '_' || *s1 == ' ' || *s1 == '\t')
+ s1++;
+ while (*s2 == '_' || *s2 == ' ' || *s2 == '\t')
+ s2++;
- c1 = (isupper ((int)*s1) ? tolower ((int)*s1) : *s1);
- c2 = (isupper ((int)*s2) ? tolower ((int)*s2) : *s2);
+ c1 = (isupper((int) *s1) ? tolower((int) *s1) : *s1);
+ c2 = (isupper((int) *s2) ? tolower((int) *s2) : *s2);
- while (c1 == c2)
- {
- if (c1 == 0)
- return 0;
- s1++;
- s2++;
-
- while (*s1 == '_' || *s1 == ' ' || *s1 == '\t')
- s1++;
- while (*s2 == '_' || *s2 == ' ' || *s2 == '\t')
- s2++;
-
- c1 = (isupper ((int)*s1) ? tolower ((int)*s1) : *s1);
- c2 = (isupper ((int)*s2) ? tolower ((int)*s2) : *s2);
+ while (c1 == c2) {
+ if (c1 == 0)
+ return 0;
+ s1++;
+ s2++;
+
+ while (*s1 == '_' || *s1 == ' ' || *s1 == '\t')
+ s1++;
+ while (*s2 == '_' || *s2 == ' ' || *s2 == '\t')
+ s2++;
+
+ c1 = (isupper((int) *s1) ? tolower((int) *s1) : *s1);
+ c2 = (isupper((int) *s2) ? tolower((int) *s2) : *s2);
}
- return c1 - c2;
+ return c1 - c2;
}
-
#ifdef XWIN_XF86CONFIG
/*
* Find the named option in the list.
@@ -759,351 +704,297 @@ winNameCompare (const char *s1, const char *s2)
*/
XF86OptionPtr
-winFindOption (XF86OptionPtr list, const char *name)
+winFindOption(XF86OptionPtr list, const char *name)
{
- while (list)
- {
- if (winNameCompare (list->opt_name, name) == 0)
- return list;
- list = list->list.next;
+ while (list) {
+ if (winNameCompare(list->opt_name, name) == 0)
+ return list;
+ list = list->list.next;
}
- return NULL;
+ return NULL;
}
-
/*
* Find the Value of an named option.
* @return The option value or NULL if not found.
*/
char *
-winFindOptionValue (XF86OptionPtr list, const char *name)
+winFindOptionValue(XF86OptionPtr list, const char *name)
{
- list = winFindOption (list, name);
- if (list)
- {
- if (list->opt_val)
- return list->opt_val;
- else
- return "";
+ list = winFindOption(list, name);
+ if (list) {
+ if (list->opt_val)
+ return list->opt_val;
+ else
+ return "";
}
- return NULL;
+ return NULL;
}
-
/*
* Parse the option.
*/
static Bool
-ParseOptionValue (int scrnIndex, pointer options, OptionInfoPtr p)
+ParseOptionValue(int scrnIndex, pointer options, OptionInfoPtr p)
{
- char *s, *end;
+ char *s, *end;
- if ((s = winFindOptionValue (options, p->name)) != NULL)
- {
- switch (p->type)
- {
- case OPTV_INTEGER:
- if (*s == '\0')
- {
+ if ((s = winFindOptionValue(options, p->name)) != NULL) {
+ switch (p->type) {
+ case OPTV_INTEGER:
+ if (*s == '\0') {
winDebug ( "Option \"%s\" requires an integer value\n",
- p->name);
- p->found = FALSE;
- }
- else
- {
- p->value.num = strtoul (s, &end, 0);
- if (*end == '\0')
- {
- p->found = TRUE;
- }
- else
- {
- winDebug ( "Option \"%s\" requires an integer value\n",
- p->name);
- p->found = FALSE;
- }
- }
- break;
- case OPTV_STRING:
- if (*s == '\0')
- {
- winDebug ( "Option \"%s\" requires an string value\n", p->name);
- p->found = FALSE;
- }
- else
- {
- p->value.str = s;
- p->found = TRUE;
- }
- break;
- case OPTV_ANYSTR:
- p->value.str = s;
- p->found = TRUE;
- break;
- case OPTV_REAL:
- if (*s == '\0')
- {
- winDebug ( "Option \"%s\" requires a floating point value\n",
- p->name);
- p->found = FALSE;
- }
- else
- {
- p->value.realnum = strtod (s, &end);
- if (*end == '\0')
- {
- p->found = TRUE;
- }
- else
- {
- winDebug ( "Option \"%s\" requires a floating point value\n",
- p->name);
- p->found = FALSE;
- }
- }
- break;
- case OPTV_BOOLEAN:
- if (GetBoolValue (p, s))
- {
- p->found = TRUE;
- }
- else
- {
- winDebug ( "Option \"%s\" requires a boolean value\n", p->name);
- p->found = FALSE;
- }
- break;
- case OPTV_PERCENT:
- if (*s == '\0')
- {
- winDrvMsg (scrnIndex, X_WARNING,
- "Option \"%s\" requires a percent value\n",
- p->name);
- p->found = FALSE;
- }
- else
- {
- double percent = strtod (s, &end);
-
- if (end != s && winNameCompare (end, "%"))
- {
- p->found = TRUE;
- p->value.realnum = percent;
- }
- else
- {
- winDrvMsg (scrnIndex, X_WARNING,
- "Option \"%s\" requires a frequency value\n",
- p->name);
- p->found = FALSE;
- }
- }
- case OPTV_FREQ:
- if (*s == '\0')
- {
- winDebug ( "Option \"%s\" requires a frequency value\n",
- p->name);
- p->found = FALSE;
- }
- else
- {
- double freq = strtod (s, &end);
- int units = 0;
-
- if (end != s)
- {
- p->found = TRUE;
- if (!winNameCompare (end, "Hz"))
- units = 1;
- else if (!winNameCompare (end, "kHz") ||
- !winNameCompare (end, "k"))
- units = 1000;
- else if (!winNameCompare (end, "MHz") ||
- !winNameCompare (end, "M"))
- units = 1000000;
- else
- {
- winDebug ( "Option \"%s\" requires a frequency value\n",
- p->name);
- p->found = FALSE;
- }
- if (p->found)
- freq *= (double) units;
- }
- else
- {
- winDebug ( "Option \"%s\" requires a frequency value\n",
- p->name);
- p->found = FALSE;
- }
- if (p->found)
- {
- p->value.freq.freq = freq;
- p->value.freq.units = units;
- }
- }
- break;
- case OPTV_NONE:
- /* Should never get here */
- p->found = FALSE;
- break;
- }
- if (p->found)
- {
- winDebug ("Option \"%s\"", p->name);
- if (!(p->type == OPTV_BOOLEAN && *s == 0))
- {
- winDebug (" \"%s\"", s);
- }
- winDebug ("\n");
- }
+ p->found = FALSE;
+ }
+ else {
+ p->value.num = strtoul(s, &end, 0);
+ if (*end == '\0') {
+ p->found = TRUE;
+ }
+ else {
+ winDebug ( "Option \"%s\" requires an integer value\n",
+ p->name);
+ p->found = FALSE;
+ }
+ }
+ break;
+ case OPTV_STRING:
+ if (*s == '\0') {
+ winDebug ( "Option \"%s\" requires an string value\n", p->name);
+ p->found = FALSE;
+ }
+ else {
+ p->value.str = s;
+ p->found = TRUE;
+ }
+ break;
+ case OPTV_ANYSTR:
+ p->value.str = s;
+ p->found = TRUE;
+ break;
+ case OPTV_REAL:
+ if (*s == '\0') {
+ winDebug ( "Option \"%s\" requires a floating point value\n",
+ p->name);
+ p->found = FALSE;
+ }
+ else {
+ p->value.realnum = strtod(s, &end);
+ if (*end == '\0') {
+ p->found = TRUE;
+ }
+ else {
+ winDebug ( "Option \"%s\" requires a floating point value\n",
+ p->name);
+ p->found = FALSE;
+ }
+ }
+ break;
+ case OPTV_BOOLEAN:
+ if (GetBoolValue(p, s)) {
+ p->found = TRUE;
+ }
+ else {
+ winDebug ( "Option \"%s\" requires a boolean value\n", p->name);
+ p->found = FALSE;
+ }
+ break;
+ case OPTV_PERCENT:
+ if (*s == '\0') {
+ winDrvMsg(scrnIndex, X_WARNING,
+ "Option \"%s\" requires a percent value\n", p->name);
+ p->found = FALSE;
+ }
+ else {
+ double percent = strtod(s, &end);
+
+ if (end != s && winNameCompare(end, "%")) {
+ p->found = TRUE;
+ p->value.realnum = percent;
+ }
+ else {
+ winDrvMsg(scrnIndex, X_WARNING,
+ "Option \"%s\" requires a frequency value\n",
+ p->name);
+ p->found = FALSE;
+ }
+ }
+ case OPTV_FREQ:
+ if (*s == '\0') {
+ winDebug ( "Option \"%s\" requires a frequency value\n",
+ p->name);
+ p->found = FALSE;
+ }
+ else {
+ double freq = strtod(s, &end);
+ int units = 0;
+
+ if (end != s) {
+ p->found = TRUE;
+ if (!winNameCompare(end, "Hz"))
+ units = 1;
+ else if (!winNameCompare(end, "kHz") ||
+ !winNameCompare(end, "k"))
+ units = 1000;
+ else if (!winNameCompare(end, "MHz") ||
+ !winNameCompare(end, "M"))
+ units = 1000000;
+ else {
+ winDebug ( "Option \"%s\" requires a frequency value\n",
+ p->name);
+ p->found = FALSE;
+ }
+ if (p->found)
+ freq *= (double) units;
+ }
+ else {
+ winDebug ( "Option \"%s\" requires a frequency value\n",
+ p->name);
+ p->found = FALSE;
+ }
+ if (p->found) {
+ p->value.freq.freq = freq;
+ p->value.freq.units = units;
+ }
+ }
+ break;
+ case OPTV_NONE:
+ /* Should never get here */
+ p->found = FALSE;
+ break;
+ }
+ if (p->found) {
+ winDebug ("Option \"%s\"", p->name);
+ if (!(p->type == OPTV_BOOLEAN && *s == 0)) {
+ winDebug (" \"%s\"", s);
+ }
+ winDebug ("\n");
+ }
}
- else if (p->type == OPTV_BOOLEAN)
- {
- /* Look for matches with options with or without a "No" prefix. */
- char *n, *newn;
- OptionInfoRec opt;
-
- n = winNormalizeName (p->name);
- if (!n)
- {
- p->found = FALSE;
- return FALSE;
- }
- if (strncmp (n, "no", 2) == 0)
- {
- newn = n + 2;
- }
- else
- {
- free (n);
- n = malloc (strlen (p->name) + 2 + 1);
- if (!n)
- {
- p->found = FALSE;
- return FALSE;
- }
- strcpy (n, "No");
- strcat (n, p->name);
- newn = n;
- }
- if ((s = winFindOptionValue (options, newn)) != NULL)
- {
- if (GetBoolValue (&opt, s))
- {
- p->value.bool = !opt.value.bool;
- p->found = TRUE;
- }
- else
- {
- winDebug ( "Option \"%s\" requires a boolean value\n", newn);
- p->found = FALSE;
- }
- }
- else
- {
- p->found = FALSE;
- }
- if (p->found)
- {
- winDebug ("Option \"%s\"", newn);
- if (*s != 0)
- {
- winDebug (" \"%s\"", s);
- }
- winDebug ("\n");
- }
- free (n);
+ else if (p->type == OPTV_BOOLEAN) {
+ /* Look for matches with options with or without a "No" prefix. */
+ char *n, *newn;
+ OptionInfoRec opt;
+
+ n = winNormalizeName(p->name);
+ if (!n) {
+ p->found = FALSE;
+ return FALSE;
+ }
+ if (strncmp(n, "no", 2) == 0) {
+ newn = n + 2;
+ }
+ else {
+ free(n);
+ n = malloc(strlen(p->name) + 2 + 1);
+ if (!n) {
+ p->found = FALSE;
+ return FALSE;
+ }
+ strcpy(n, "No");
+ strcat(n, p->name);
+ newn = n;
+ }
+ if ((s = winFindOptionValue(options, newn)) != NULL) {
+ if (GetBoolValue(&opt, s)) {
+ p->value.bool = !opt.value.bool;
+ p->found = TRUE;
+ }
+ else {
+ winDebug ( "Option \"%s\" requires a boolean value\n", newn);
+ p->found = FALSE;
+ }
+ }
+ else {
+ p->found = FALSE;
+ }
+ if (p->found) {
+ winDebug ("Option \"%s\"", newn);
+ if (*s != 0) {
+ winDebug (" \"%s\"", s);
+ }
+ winDebug ("\n");
+ }
+ free(n);
}
- else
- {
- p->found = FALSE;
+ else {
+ p->found = FALSE;
}
- return p->found;
+ return p->found;
}
-
static Bool
-configLayout (serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout,
- char *default_layout)
+configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout,
+ char *default_layout)
{
#if 0
#pragma warn UNIMPLEMENTED
#endif
- return TRUE;
+ return TRUE;
}
-
static Bool
-configImpliedLayout (serverLayoutPtr servlayoutp,
- XF86ConfScreenPtr conf_screen)
+configImpliedLayout(serverLayoutPtr servlayoutp, XF86ConfScreenPtr conf_screen)
{
#if 0
#pragma warn UNIMPLEMENTED
#endif
- return TRUE;
+ return TRUE;
}
-
static Bool
-GetBoolValue (OptionInfoPtr p, const char *s)
+GetBoolValue(OptionInfoPtr p, const char *s)
{
- if (*s == 0)
- {
- p->value.bool = TRUE;
+ if (*s == 0) {
+ p->value.bool = TRUE;
}
- else
- {
- if (winNameCompare (s, "1") == 0)
- p->value.bool = TRUE;
- else if (winNameCompare (s, "on") == 0)
- p->value.bool = TRUE;
- else if (winNameCompare (s, "true") == 0)
- p->value.bool = TRUE;
- else if (winNameCompare (s, "yes") == 0)
- p->value.bool = TRUE;
- else if (winNameCompare (s, "0") == 0)
- p->value.bool = FALSE;
- else if (winNameCompare (s, "off") == 0)
- p->value.bool = FALSE;
- else if (winNameCompare (s, "false") == 0)
- p->value.bool = FALSE;
- else if (winNameCompare (s, "no") == 0)
- p->value.bool = FALSE;
+ else {
+ if (winNameCompare(s, "1") == 0)
+ p->value.bool = TRUE;
+ else if (winNameCompare(s, "on") == 0)
+ p->value.bool = TRUE;
+ else if (winNameCompare(s, "true") == 0)
+ p->value.bool = TRUE;
+ else if (winNameCompare(s, "yes") == 0)
+ p->value.bool = TRUE;
+ else if (winNameCompare(s, "0") == 0)
+ p->value.bool = FALSE;
+ else if (winNameCompare(s, "off") == 0)
+ p->value.bool = FALSE;
+ else if (winNameCompare(s, "false") == 0)
+ p->value.bool = FALSE;
+ else if (winNameCompare(s, "no") == 0)
+ p->value.bool = FALSE;
}
- return TRUE;
+ return TRUE;
}
#endif
-
char *
-winNormalizeName (const char *s)
+winNormalizeName(const char *s)
{
- char *ret, *q;
- const char *p;
-
- if (s == NULL)
- return NULL;
-
- ret = malloc (strlen (s) + 1);
- for (p = s, q = ret; *p != 0; p++)
- {
- switch (*p)
- {
- case '_':
- case ' ':
- case '\t':
- continue;
- default:
- if (isupper ((int)*p))
- *q++ = tolower ((int)*p);
- else
- *q++ = *p;
- }
+ char *ret, *q;
+ const char *p;
+
+ if (s == NULL)
+ return NULL;
+
+ ret = malloc(strlen(s) + 1);
+ for (p = s, q = ret; *p != 0; p++) {
+ switch (*p) {
+ case '_':
+ case ' ':
+ case '\t':
+ continue;
+ default:
+ if (isupper((int) *p))
+ *q++ = tolower((int) *p);
+ else
+ *q++ = *p;
+ }
}
- *q = '\0';
- return ret;
+ *q = '\0';
+ return ret;
}
-