]> code.delx.au - gnu-emacs/blobdiff - src/w32reg.c
(BASE_PURESIZE): Increment base size.
[gnu-emacs] / src / w32reg.c
index 3a2bd1b68d94f0341565ea376ee70d8d75736bc3..6d3137f1d4f770ad0e80d1d21ebca9a208c50f0d 100644 (file)
@@ -30,6 +30,53 @@ Boston, MA 02111-1307, USA.  */
 
 #define REG_ROOT "SOFTWARE\\GNU\\Emacs"
 
+/* Default system colors from the Display Control Panel settings.  */
+#define SYSTEM_DEFAULT_RESOURCES                          \
+  "emacs.foreground:SystemWindowText\0"                          \
+  "emacs.background:SystemWindow\0"                       \
+  "emacs.tooltip.attributeForeground:SystemInfoText\0"    \
+  "emacs.tooltip.attributeBackground:SystemInfoWindow\0"  \
+  "emacs.tool-bar.attributeForeground:SystemButtonText\0" \
+  "emacs.tool-bar.attributeBackground:SystemButtonFace\0" \
+  "emacs.menu.attributeForeground:SystemMenuText\0"       \
+  "emacs.menu.attributeBackground:SystemMenu\0"           \
+  "emacs.scroll-bar.attributeForeground:SystemScrollbar"
+
+/* Other possibilities for default faces:
+
+  region: Could use SystemHilight, but interferes with our ability to
+  see most syntax highlighting through the region face.
+
+  modeline: Could use System(In)ActiveTitle, gradient versions (not
+  supported on 95 and NT), but modeline is more like a status bar
+  really (which don't appear to be configurable in Windows).
+
+  highlight: Could use SystemHotTrackingColor, but it is not supported
+  on Windows 95 or NT, and other apps only seem to use it for menus
+  anyway.
+
+*/
+
+static char *
+w32_get_rdb_resource (rdb, resource)
+     char *rdb;
+     char *resource;
+{
+  char *value = rdb;
+  int len = strlen (resource);
+
+  while (*value)
+    {
+      /* Comparison is case-insensitive because registry searches are too.  */
+      if ((strnicmp (value, resource, len) == 0) && (value[len] == ':'))
+        return xstrdup (&value[len + 1]);
+
+      value = strchr (value, '\0') + 1;
+    }
+
+  return NULL;
+}
+
 LPBYTE
 w32_get_string_resource (name, class, dwexptype)
      char *name, *class;
@@ -89,7 +136,9 @@ w32_get_string_resource (name, class, dwexptype)
          hive = HKEY_LOCAL_MACHINE;
          goto trykey;
        }
-      return (NULL);
+
+      /* Check if there are Windows specific defaults defined.  */
+      return w32_get_rdb_resource (SYSTEM_DEFAULT_RESOURCES, name);
     }
   return (lpvalue);
 }
@@ -99,8 +148,18 @@ w32_get_string_resource (name, class, dwexptype)
 
 char *
 x_get_string_resource (rdb, name, class)
-     int rdb;
+     XrmDatabase rdb;
      char *name, *class;
 {
+  if (rdb)
+    {
+      char *resource;
+
+      if (resource = w32_get_rdb_resource (rdb, name))
+        return resource;
+      if (resource = w32_get_rdb_resource (rdb, class))
+        return resource;
+    }
+
   return (w32_get_string_resource (name, class, REG_SZ));
 }