From 64d04cee950f1b501940af04e95bfeb13db963ef Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <fourdan.olivier@wanadoo.fr>
Date: Tue, 21 Sep 2004 19:27:01 +0000
Subject: [PATCH] Merge custom keytheme wit hsystem default to avoid missing
 shortcuts that prevent the WM to start.

(Old svn revision: 11961)
---
 src/parserc.c  | 12 +++++++++---
 src/parserc.h  |  1 +
 src/settings.c | 14 ++++++++++++--
 3 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/src/parserc.c b/src/parserc.c
index 1869a2b0e..787f0c1fc 100644
--- a/src/parserc.c
+++ b/src/parserc.c
@@ -163,6 +163,13 @@ setIntValueFromInt (const gchar * lvalue, int value, Settings rc[])
     return result;
 }
 
+gchar *
+
+getSystemThemeDir (void)
+{
+    return g_build_filename (DATADIR, "themes", DEFAULT_THEME, "xfwm4", NULL);
+}
+
 gchar *
 getThemeDir (const gchar * theme, const gchar * file)
 {
@@ -179,8 +186,7 @@ getThemeDir (const gchar * theme, const gchar * file)
         }
         else
         {
-            return g_build_filename (DATADIR, "themes", DEFAULT_THEME, 
-                    "xfwm4", NULL);
+            return getSystemThemeDir ();
         }
     }
     else
@@ -205,7 +211,7 @@ getThemeDir (const gchar * theme, const gchar * file)
     }
     
     /* Pfew, really can't find that theme nowhere! */
-    return g_build_filename (DATADIR, "themes", DEFAULT_THEME, "xfwm4", NULL);
+    return getSystemThemeDir ();
 }
 
 void
diff --git a/src/parserc.h b/src/parserc.h
index fd13688cb..5fa0e3f5a 100644
--- a/src/parserc.h
+++ b/src/parserc.h
@@ -35,6 +35,7 @@ gchar *getValue (const gchar *, Settings rc[]);
 gboolean setValue (const gchar *, const gchar *, Settings rc[]);
 gboolean setBooleanValueFromInt (const gchar *, int, Settings rc[]);
 gboolean setIntValueFromInt (const gchar *, int, Settings rc[]);
+gchar *getSystemThemeDir (void);
 gchar *getThemeDir (const gchar *, const gchar *);
 void freeRc (Settings rc[]);
 
diff --git a/src/settings.c b/src/settings.c
index 37bd16bc7..f8abadc60 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -334,8 +334,10 @@ static void
 loadRcData (ScreenInfo *screen_info, Settings rc[])
 {
     gchar *homedir;
-    gchar *keytheme;
     gchar *keythemevalue;
+    gchar *keytheme;
+    gchar *system_keytheme;
+
 
     if (!parseRc ("defaults", PACKAGE_DATADIR, rc))
     {
@@ -345,8 +347,16 @@ loadRcData (ScreenInfo *screen_info, Settings rc[])
     keythemevalue = getValue ("keytheme", rc);
     if (keythemevalue)
     {
+        system_keytheme = getSystemThemeDir ();
+        parseRc (KEYTHEMERC, system_keytheme, rc);
+        
         keytheme = getThemeDir (keythemevalue, KEYTHEMERC);
-        parseRc (KEYTHEMERC, keytheme, rc);
+        if (strcmp (keytheme, keytheme))
+        {
+            /* If there is a custom key theme, merge it with system defaults */
+            parseRc (KEYTHEMERC, keytheme, rc);
+        }
+        g_free (system_keytheme);
         g_free (keytheme);
     }
     homedir = xfce_resource_save_location (XFCE_RESOURCE_CONFIG, 
-- 
GitLab