|  | @@ -66,10 +66,11 @@ void cmGlobalKdevelopGenerator::Generate()
 | 
	
		
			
				|  |  |      std::string projectDir=mf->GetHomeDirectory();
 | 
	
		
			
				|  |  |      std::string projectName=mf->GetProjectName();
 | 
	
		
			
				|  |  |      std::string cmakeFilePattern("CMakeLists.txt;*.cmake;");
 | 
	
		
			
				|  |  | +    std::string fileToOpen;
 | 
	
		
			
				|  |  |      // create the project.kdevelop.filelist file
 | 
	
		
			
				|  |  |      if(!this->CreateFilelistFile(it->second[0], it->second,
 | 
	
		
			
				|  |  |                                   outputDir, projectDir,
 | 
	
		
			
				|  |  | -                                 projectName, cmakeFilePattern))
 | 
	
		
			
				|  |  | +                                 projectName, cmakeFilePattern, fileToOpen))
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  |        cmSystemTools::Error("Can not create filelist file");
 | 
	
		
			
				|  |  |        return;
 | 
	
	
		
			
				|  | @@ -83,13 +84,13 @@ void cmGlobalKdevelopGenerator::Generate()
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  |        if (ti->second.GetType()==cmTarget::EXECUTABLE)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -        executable=ti->first;
 | 
	
		
			
				|  |  | +        executable = ti->second.GetProperty("LOCATION");
 | 
	
		
			
				|  |  |          break;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      // now create a project file
 | 
	
		
			
				|  |  |      this->CreateProjectFile(outputDir, projectDir, projectName,
 | 
	
		
			
				|  |  | -                            executable, cmakeFilePattern);
 | 
	
		
			
				|  |  | +                            executable, cmakeFilePattern, fileToOpen);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -99,7 +100,8 @@ bool cmGlobalKdevelopGenerator
 | 
	
		
			
				|  |  |                       const std::string& outputDir, 
 | 
	
		
			
				|  |  |                       const std::string& projectDirIn,
 | 
	
		
			
				|  |  |                       const std::string& projectname,
 | 
	
		
			
				|  |  | -                     std::string& cmakeFilePattern) 
 | 
	
		
			
				|  |  | +                     std::string& cmakeFilePattern,
 | 
	
		
			
				|  |  | +                     std::string& fileToOpen)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    std::string projectDir = projectDirIn + "/";
 | 
	
		
			
				|  |  |    std::string filename = outputDir+ "/" + projectname +".kdevelop.filelist";
 | 
	
	
		
			
				|  | @@ -188,11 +190,21 @@ bool cmGlobalKdevelopGenerator
 | 
	
		
			
				|  |  |      return false;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |     
 | 
	
		
			
				|  |  | +  fileToOpen="";
 | 
	
		
			
				|  |  |    for (std::set<cmStdString>::const_iterator it=files.begin(); 
 | 
	
		
			
				|  |  |         it!=files.end(); it++)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |      // get the full path to the file
 | 
	
		
			
				|  |  |      tmp=cmSystemTools::CollapseFullPath(it->c_str(), projectDir.c_str());
 | 
	
		
			
				|  |  | +    // just select the first source file
 | 
	
		
			
				|  |  | +    if (fileToOpen.empty())
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +       std::string ext = cmSystemTools::GetFilenameExtension(tmp);
 | 
	
		
			
				|  |  | +       if ((ext==".c") || (ext==".cc") || (ext==".cpp") || (ext==".C") || (ext==".h"))
 | 
	
		
			
				|  |  | +       {
 | 
	
		
			
				|  |  | +          fileToOpen=tmp;
 | 
	
		
			
				|  |  | +       }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      // make it relative to the project dir
 | 
	
		
			
				|  |  |      cmSystemTools::ReplaceString(tmp, projectDir.c_str(), "");
 | 
	
		
			
				|  |  |      // only put relative paths
 | 
	
	
		
			
				|  | @@ -212,20 +224,24 @@ cmGlobalKdevelopGenerator::CreateProjectFile(const std::string& outputDir,
 | 
	
		
			
				|  |  |                                               const std::string& projectDir,
 | 
	
		
			
				|  |  |                                               const std::string& projectname, 
 | 
	
		
			
				|  |  |                                               const std::string& executable,
 | 
	
		
			
				|  |  | -                                             const std::string& cmakeFilePattern)
 | 
	
		
			
				|  |  | +                                             const std::string& cmakeFilePattern,
 | 
	
		
			
				|  |  | +                                             const std::string& fileToOpen)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    std::string filename=outputDir+"/";
 | 
	
		
			
				|  |  |    filename+=projectname+".kdevelop";
 | 
	
		
			
				|  |  | +  std::string sessionFilename=outputDir+"/";
 | 
	
		
			
				|  |  | +  sessionFilename+=projectname+".kdevses";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    if (cmSystemTools::FileExists(filename.c_str()))
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |      this->MergeProjectFiles(outputDir, projectDir, filename, 
 | 
	
		
			
				|  |  | -                            executable, cmakeFilePattern);
 | 
	
		
			
				|  |  | +                            executable, cmakeFilePattern, fileToOpen, sessionFilename);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    else
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      this->CreateNewProjectFile(outputDir, projectDir, filename,
 | 
	
		
			
				|  |  | -                               executable, cmakeFilePattern);
 | 
	
		
			
				|  |  | +                               executable, cmakeFilePattern, fileToOpen, sessionFilename);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |     
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -235,12 +251,14 @@ cmGlobalKdevelopGenerator::MergeProjectFiles(const std::string& outputDir,
 | 
	
		
			
				|  |  |                                               const std::string& projectDir, 
 | 
	
		
			
				|  |  |                                               const std::string& filename, 
 | 
	
		
			
				|  |  |                                               const std::string& executable, 
 | 
	
		
			
				|  |  | -                                             const std::string& cmakeFilePattern)
 | 
	
		
			
				|  |  | +                                             const std::string& cmakeFilePattern,
 | 
	
		
			
				|  |  | +                                             const std::string& fileToOpen,
 | 
	
		
			
				|  |  | +                                             const std::string& sessionFilename)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    std::ifstream oldProjectFile(filename.c_str());
 | 
	
		
			
				|  |  |    if (!oldProjectFile)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -    this->CreateNewProjectFile(outputDir, projectDir, filename, executable, cmakeFilePattern);
 | 
	
		
			
				|  |  | +    this->CreateNewProjectFile(outputDir, projectDir, filename, executable, cmakeFilePattern, fileToOpen, sessionFilename);
 | 
	
		
			
				|  |  |      return;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -305,7 +323,9 @@ cmGlobalKdevelopGenerator::CreateNewProjectFile(const std::string& outputDir,
 | 
	
		
			
				|  |  |                                                  const std::string& projectDir,
 | 
	
		
			
				|  |  |                                                  const std::string& filename,
 | 
	
		
			
				|  |  |                                                  const std::string& executable,
 | 
	
		
			
				|  |  | -                                                const std::string& cmakeFilePattern)
 | 
	
		
			
				|  |  | +                                                const std::string& cmakeFilePattern,
 | 
	
		
			
				|  |  | +                                                const std::string& fileToOpen,
 | 
	
		
			
				|  |  | +                                                const std::string& sessionFilename)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    cmGeneratedFileStream fout(filename.c_str());
 | 
	
		
			
				|  |  |    if(!fout)
 | 
	
	
		
			
				|  | @@ -331,7 +351,7 @@ cmGlobalKdevelopGenerator::CreateNewProjectFile(const std::string& outputDir,
 | 
	
		
			
				|  |  |    fout<<"  <kdevcustomproject>\n";
 | 
	
		
			
				|  |  |    fout<<"    <filelistdirectory>"<<outputDir.c_str()<<"</filelistdirectory>\n";
 | 
	
		
			
				|  |  |    fout<<"    <run>\n";
 | 
	
		
			
				|  |  | -  fout<<"      <mainprogram>"<<outputDir.c_str()<<"/"<<executable.c_str()<<"</mainprogram>\n";
 | 
	
		
			
				|  |  | +  fout<<"      <mainprogram>"<<executable.c_str()<<"</mainprogram>\n";
 | 
	
		
			
				|  |  |    fout<<"      <directoryradio>custom</directoryradio>\n";
 | 
	
		
			
				|  |  |    fout<<"      <customdirectory>/</customdirectory>\n";
 | 
	
		
			
				|  |  |    fout<<"      <programargs></programargs>\n";
 | 
	
	
		
			
				|  | @@ -409,5 +429,23 @@ cmGlobalKdevelopGenerator::CreateNewProjectFile(const std::string& outputDir,
 | 
	
		
			
				|  |  |    fout<<"  </kdevfileview>\n";
 | 
	
		
			
				|  |  |    fout<<"</kdevelop>\n";
 | 
	
		
			
				|  |  |    
 | 
	
		
			
				|  |  | +  if (sessionFilename.empty())
 | 
	
		
			
				|  |  | +     return;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // and a session file, so that kdevelop opens a file if it opens the project the first time
 | 
	
		
			
				|  |  | +  cmGeneratedFileStream devses(sessionFilename.c_str());
 | 
	
		
			
				|  |  | +  if(!devses)
 | 
	
		
			
				|  |  | +  {
 | 
	
		
			
				|  |  | +     return;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  devses<<"<?xml version = '1.0' encoding = \'UTF-8\'?>\n";
 | 
	
		
			
				|  |  | +  devses<<"<!DOCTYPE KDevPrjSession>\n";
 | 
	
		
			
				|  |  | +  devses<<"<KDevPrjSession>\n";
 | 
	
		
			
				|  |  | +  devses<<" <DocsAndViews NumberOfDocuments=\"1\" >\n";
 | 
	
		
			
				|  |  | +  devses<<"  <Doc0 NumberOfViews=\"1\" URL=\"file://"<<fileToOpen.c_str()<<"\" >\n";
 | 
	
		
			
				|  |  | +  devses<<"   <View0 line=\"0\" Type=\"Source\" />\n";
 | 
	
		
			
				|  |  | +  devses<<"  </Doc0>\n";
 | 
	
		
			
				|  |  | +  devses<<" </DocsAndViews>\n";
 | 
	
		
			
				|  |  | +  devses<<"</KDevPrjSession>\n";
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 |