diff -ur xsettings-kde-0.12.3/xsettings-kde.c xsettings-kde-0.12.3-gtktheme/xsettings-kde.c
--- xsettings-kde-0.12.3/xsettings-kde.c 2011-10-07 01:09:07.000000000 +0200
+++ xsettings-kde-0.12.3-gtktheme/xsettings-kde.c 2012-01-18 21:38:27.000000000 +0100
@@ -239,15 +239,12 @@
char filename[1024];
char kdeprefix[1024];
char *prefix;
- char color[1024];
char style[1024];
- char themefilename[1024];
struct passwd *password;
int i;
int user_file;
int file_index;
- color[0]= '\0';
kdeprefix[0]= '\0';
filename[0]= '\0';
style[0]='\0';
@@ -386,16 +383,6 @@
}
notify = 1;
}
- if (strncmp(buffer,"widgetStyle=",12) == 0) {
-
- /* found style */
- sscanf(buffer,"widgetStyle=%s", style);
-
- }
- if (strncmp(buffer,"ColorScheme=",12) == 0) {
- strcpy(color, buffer+12);
- color[strlen(color)-1]='\0';
- }
notify |= readDPI(buffer);
break;
@@ -451,59 +438,32 @@
} while (user_file == 0);
}
- if (buffer) {
- free (buffer);
- }
+ /* look for style set by kcm-gtk, enforce it through Net/ThemeName so GTK+ 3 also picks it up */
+ if (password) {
+ sprintf (filename, "%s/.gtkrc-2.0-kde4", password->pw_dir);
+ file = fopen (filename, "r");
+
+ if (file) {
+ while ((read = getline (&buffer, &len, file)) != -1) {
+ if (strncmp (buffer, "gtk-theme-name=", 15) == 0) {
+ sscanf (buffer, "gtk-theme-name=\"%1023[^\"]\"", style);
+ }
+ }
- if ((style[0] == '\0' || (!is_kde4 && strcmp(style, "ia_ora") == 0) || (is_kde4 && strcmp(style, "iaora-qt") == 0) || (is_kde4 && strcmp(style, "iaorakde") == 0)) && strncmp("Ia Ora ", color, 7) == 0)
- {
- strcpy(style, color);
- if (!is_kde4) {
- style[strlen(style)-6] = '\0';
+ fclose (file);
+ file = NULL;
}
}
-
- if (style[0]) {
- int gtkrc_access = 1;
- sprintf(themefilename, "/usr/share/themes/%s/gtk-2.0/gtkrc", style);
- if (password) {
- char gtkrc[1024];
- sprintf(gtkrc,"%s/.gtkrc-2.0", password->pw_dir);
- gtkrc_access = access (gtkrc, F_OK);
- /* if not .gtkrc-2.0, try KDE variant */
- if (gtkrc_access) {
- char *gtkrc_env;
- char *gtkrc_file;
-
- gtkrc_env = getenv ("GTK2_RC_FILES");
- gtkrc_file = NULL;
+ if (buffer) {
+ free (buffer);
+ }
- if (gtkrc_env) {
- do {
- if (gtkrc_file == NULL) {
- gtkrc_file = strtok (gtkrc_env, ":");
- }
- else {
- gtkrc_file = strtok (NULL, ":");
- }
- if (gtkrc_file != NULL) {
- if ((gtkrc_access = access (gtkrc_file, F_OK)) == 0) {
- break;
- }
- }
- } while (gtkrc_file != NULL );
- }
- }
+ if (style[0]) {
+ for (i = 0 ; i < max_display ; i++) {
+ xsettings_manager_set_string (managers[i], "Net/ThemeName", style);
}
-
- /* do not set theme name if .gtkrc is being used */
- if (gtkrc_access && (access (themefilename, F_OK) == 0 )) {
- for (i = 0 ; i < max_display ; i++) {
- xsettings_manager_set_string (managers[i], "Net/ThemeName", style);
- }
notify = 1;
- }
}