--- kdelibs-3.5.1/kded/kbuildsycoca.cpp.xdg_mandriva_kstddirs 2005-10-31 11:14:36.000000000 -0500 +++ kdelibs-3.5.1/kded/kbuildsycoca.cpp 2006-02-09 11:04:11.000000000 -0500 @@ -378,8 +378,40 @@ connect(g_vfolder, SIGNAL(newService(const QString &, KService **)), this, SLOT(slotCreateEntry(const QString &, KService **))); + + // locate menu theme data in the config file + QString _menuType = KStandardDirs::readMenuConfig("MenuFile", QString::null); + if (_menuType.isNull()) + { + QString _versionMenu = KStandardDirs::menu_type_by_version(); + if( _versionMenu == "kde" ) + _menuType = "applications.menu"; + else if( _versionMenu == "mdk" ) + { + switch( KStandardDirs::mandriva_distro_version() ) + { + case KStandardDirs::POWERPACK: + _menuType = "applications-mdk.menu"; + break; + case KStandardDirs::DISCOVERY: + _menuType = "applications-mdk.menu"; + break; + case KStandardDirs::POWERPACKPLUS: + _menuType = "applications-mdk.menu"; + break; + case KStandardDirs::DOWNLOAD: + _menuType = "applications-mdk.menu"; + break; + default: + _menuType = "applications-mdk.menu"; + break; + } + } + else + _menuType = "applications-simplified.menu"; + } - VFolderMenu::SubMenu *kdeMenu = g_vfolder->parseMenu("applications.menu", true); + VFolderMenu::SubMenu *kdeMenu = g_vfolder->parseMenu(_menuType, true); KServiceGroup *entry = g_bsgf->addNew("/", kdeMenu->directoryFile, 0, false); entry->setLayoutInfo(kdeMenu->layoutList); --- kdelibs-3.5.1/kdecore/kstandarddirs.cpp.xdg_mandriva_kstddirs 2005-09-29 05:47:40.000000000 -0400 +++ kdelibs-3.5.1/kdecore/kstandarddirs.cpp 2006-02-09 11:03:05.000000000 -0500 @@ -1017,6 +1017,7 @@ } QString KStandardDirs::kde_default(const char *type) { + QString typeMenu = menu_type_by_version(); if (!strcmp(type, "data")) return "share/apps/"; if (!strcmp(type, "html")) @@ -1054,9 +1055,37 @@ if (!strcmp(type, "qtplugins")) return "lib" KDELIBSUFF "/kde3/plugins"; if (!strcmp(type, "xdgdata-apps")) - return "applications/"; + { + // check config - can't use KConfig here + QString appsPath = readMenuConfig("AppsPath", QString::null); + if (!appsPath.isNull()) + return appsPath; + + if( typeMenu == "kde" ) + return "applications/"; + else if( typeMenu == "mdk" ) + return "applications/"; + else if( typeMenu == "mdk-simplified") + return "simplified/applications/"; + else + return "applications/"; + } if (!strcmp(type, "xdgdata-dirs")) - return "desktop-directories/"; + { + // check config - can't use KConfig here + QString dirsPath = readMenuConfig("DirsPath", QString::null); + if (!dirsPath.isNull()) + return dirsPath; + + if( typeMenu == "kde" ) + return "desktop-directories/"; + else if( typeMenu == "mdk" ) + return "desktop-directories/"; + else if( typeMenu == "mdk-simplified") + return "simplified/desktop-directories/"; + else + return "desktop-directories/"; + } if (!strcmp(type, "xdgconf-menu")) return "menus/"; if (!strcmp(type, "kcfg")) @@ -1674,3 +1703,177 @@ QString file = filename.mid(slash); return inst->dirs()->saveLocation(type, dir, createDir) + file; } + + +// Mandriva only changes + +QString KStandardDirs::menu_type_by_version() +{ + QString kde_menu; + kde_menu=QString("/etc/menu/disable_mdk_customization"); + + QString mdk_menu_simplified; + mdk_menu_simplified=QString("/etc/menu/enable_simplified"); + + QString mdk_kde_menu_users=QDir::homeDirPath ()+"/"+".menu/"+QString("enable_mdk_customization"); + QString kde_menu_users=QDir::homeDirPath ()+"/"+".menu/"+QString("disable_mdk_customization"); + QString mdk_menu_simplified_users=QDir::homeDirPath ()+"/"+".menu/"+QString("enable_simplified"); + + // Root user + if( getuid()==0) + { + if( QFile(kde_menu_users).exists()) + return "kde"; + else if(QFile(mdk_kde_menu_users).exists()) + return "mdk"; + else if(QFile(mdk_menu_simplified_users).exists()) + return "mdk-simplified"; + else + { + if (QFile(kde_menu).exists()) + return "kde"; + else if(QFile(mdk_menu_simplified).exists()) + return "mdk-simplified"; + else + return default_menu_type_by_version(); + } + } + else //users + { + QString path; + if( QFile(kde_menu_users).exists()) + path="kde"; + else if(QFile(mdk_kde_menu_users).exists()) + path="mdk"; + else if(QFile(mdk_menu_simplified_users).exists()) + path="mdk-simplified"; + else if(QFile(kde_menu).exists()) + path="kde"; + else if(QFile(mdk_menu_simplified).exists()) + path="mdk-simplified"; + else + path=default_menu_type_by_version(); + return path; + } + return QString("mdk"); +} + +QString KStandardDirs::default_menu_type_by_version() +{ + QFile file( "/etc/sysconfig/system" ); + if( file.exists()) + { + QString menuType("mdk"); + if ( file.open( IO_ReadOnly ) ) { + QTextStream stream( &file ); + QString line; + while ( !stream.atEnd() ) + { + line = stream.readLine(); // line of text excluding '\n' + if( line.contains("META_CLASS=PowerPack")!=0) + { + menuType = "mdk"; + break; + } + else if( line.contains("META_CLASS=desktop")!=0) + { + menuType = "mdk-simplified"; + break; + } + else if( line.contains("META_CLASS=server")!=0) + { + menuType = "mdk"; + break; + } + } + file.close(); + return menuType; + } + } + return QString("kde"); +} + +KStandardDirs::distroVersionType KStandardDirs::mandriva_distro_version() +{ + QFile file( "/etc/sysconfig/system" ); + if( file.exists()) + { + KStandardDirs::distroVersionType type=DOWNLOAD; + if ( file.open( IO_ReadOnly ) ) { + QTextStream stream( &file ); + QString line; + while ( !stream.atEnd() ) + { + line = stream.readLine(); // line of text excluding '\n' + if( (line.contains("META_CLASS=PowerPack")!=0) || (line.contains("META_CLASS=powerpack")!=0)) + { + type = POWERPACK; + break; + } + else if( line.contains("META_CLASS=desktop")!=0) + { + type = DISCOVERY; + break; + } + else if( line.contains("META_CLASS=server")!=0) + { + type = POWERPACKPLUS; + break; + } + } + file.close(); + return type; + } + } + return DOWNLOAD; +} + +QString KStandardDirs::mandriva_merge_directory() +{ + return QDir::homeDirPath() + "/.kde/DESKTOP_ENTRY/"; +} + +QString KStandardDirs::readMenuConfig(const QString &config, const QString &defvalue) +{ + QString lookup = config + "="; + QFile file; + + // Read settings from user home path + file.setName(QDir::homeDirPath() + "/.menu/menurc"); + if (file.exists() && file.open(IO_ReadOnly)) + { + QString path; + while (file.readLine(path, 256) != -1) + { + path = path.stripWhiteSpace(); + path = path.replace(QRegExp(" *= *"), "="); // remove spaces in "Key = Value" + if (path.startsWith(lookup)) + { + file.close(); + return path.remove(lookup); + } + } + file.close(); + } + + // if the entry was not found in the home path, try the system one + file.setName("/etc/menu/menurc"); + if (file.exists() && file.open(IO_ReadOnly)) + { + QString path; + while (file.readLine(path, 256) != -1) + { + path = path.stripWhiteSpace(); + path = path.replace(QRegExp(" *= *"), "="); // remove spaces in "Key = Value" + if (path.startsWith(lookup)) + { + file.close(); + return path.remove(lookup); + } + } + file.close(); + } + // if neither was found, return a null string + return defvalue; +} + --- kdelibs-3.5.1/kdecore/kstandarddirs.h.xdg_mandriva_kstddirs 2005-09-29 05:47:40.000000000 -0400 +++ kdelibs-3.5.1/kdecore/kstandarddirs.h 2006-02-09 11:03:05.000000000 -0500 @@ -585,6 +585,21 @@ */ static bool exists(const QString &fullPath); + //------------------------------ + // Mandriva only patches + + static QString menu_type_by_version(); + static QString default_menu_type_by_version(); + static QString mandriva_merge_directory(); + + enum distroVersionType { DOWNLOAD = 0, POWERPACK, DISCOVERY, POWERPACKPLUS }; + static distroVersionType mandriva_distro_version(); + static distroVersionType mandrake_distro_version() { return mandriva_distro_version(); } + static QString readMenuConfig(const QString &config, const QString &defvalue); + + //------------------------------ + + /** * Expands all symbolic links and resolves references to * '/./', '/../' and extra '/' characters in @p dirname