Sophie

Sophie

distrib > Mandriva > cs4.0 > i586 > by-pkgid > fa9b6a46c8aad7f4f199c98596a0ec2a > files > 19

kdelibs-3.5.4-1.1.20060mlcs4.src.rpm

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