Przeglądaj źródła

CPackWIX: Handle multiple shortcuts in the start menu

Richard Ulrich 12 lat temu
rodzic
commit
6e51ea9870
1 zmienionych plików z 13 dodań i 7 usunięć
  1. 13 7
      Source/CPack/WiX/cmCPackWIXGenerator.cxx

+ 13 - 7
Source/CPack/WiX/cmCPackWIXGenerator.cxx

@@ -380,7 +380,14 @@ bool cmCPackWIXGenerator::CreateWiXSourceFiles()
   directoryDefinitions.EndElement();
   directoryDefinitions.EndElement();
 
-  if (dirIdExecutables.size() > 0 && dirIdExecutables.size() % 3 == 0) {
+  if (dirIdExecutables.size() > 0 && dirIdExecutables.size() % 3 == 0)
+    {
+    fileDefinitions.BeginElement("DirectoryRef");
+    fileDefinitions.AddAttribute("Id", "PROGRAM_MENU_FOLDER");
+    fileDefinitions.BeginElement("Component");
+    fileDefinitions.AddAttribute("Id", "SHORTCUT");
+    fileDefinitions.AddAttribute("Guid", "*");
+
     std::vector<std::string>::iterator it;
     for ( it = dirIdExecutables.begin() ;
           it != dirIdExecutables.end();
@@ -390,13 +397,12 @@ bool cmCPackWIXGenerator::CreateWiXSourceFiles()
       std::string iconName = *it++;
       std::string directoryId = *it;
 
-      fileDefinitions.BeginElement("DirectoryRef");
-      fileDefinitions.AddAttribute("Id", "PROGRAM_MENU_FOLDER");
-      fileDefinitions.BeginElement("Component");
-      fileDefinitions.AddAttribute("Id", "SHORTCUT");
-      fileDefinitions.AddAttribute("Guid", "*");
       fileDefinitions.BeginElement("Shortcut");
-      fileDefinitions.AddAttribute("Id", "SHORTCUT_");
+      std::string shortcutName = fileName; // the iconName is mor likely to contain blanks early on
+      std::string::size_type const dotPos = shortcutName.find('.');
+      if(std::string::npos == dotPos)
+        { shortcutName = shortcutName.substr(0, dotPos); }
+      fileDefinitions.AddAttribute("Id", "SHORTCUT_" + shortcutName);
       fileDefinitions.AddAttribute("Name", iconName);
       std::string target = "[" + directoryId + "]" + fileName;
       fileDefinitions.AddAttribute("Target", target);