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; - } }