1
0
Эх сурвалжийг харах

Bug 2079: Allow opening all sites in a folder in PuTTY

https://winscp.net/tracker/2079

Source commit: df812d5290861e3c3ffcb9aac340401d8b332d83
Martin Prikryl 3 жил өмнө
parent
commit
475c4c4bb9

+ 26 - 9
source/forms/Login.cpp

@@ -1243,8 +1243,9 @@ void __fastcall TLoginDialog::ActionListUpdate(TBasicAction * BasicAction,
   }
   else if (Action == PuttyAction)
   {
-    TSessionData * Data = GetSessionData();
-    Action->Enabled = (NewSiteSelected || SiteSelected) && CanOpen() && !Data->IsLocalBrowser;
+    Action->Enabled =
+      (IsSiteAndCanOpen() && !GetSessionData()->IsLocalBrowser) ||
+      (IsFolderOrWorkspaceAndCanOpen() && IsFolderNode(SessionTree->Selected));
   }
   else if (Action == SaveSessionAction)
   {
@@ -1318,12 +1319,23 @@ bool __fastcall TLoginDialog::IsCloneToNewSiteDefault()
   return !FEditing && !FRenaming && IsSiteNode(SessionTree->Selected) && !StoredSessions->CanOpen(GetSessionData());
 }
 //---------------------------------------------------------------------------
-bool __fastcall TLoginDialog::CanOpen()
+bool TLoginDialog::IsSiteAndCanOpen()
 {
   TSessionData * Data = GetSessionData();
   return
-    ((Data != NULL) && StoredSessions->CanOpen(Data) && !FEditing) ||
-    (IsFolderOrWorkspaceNode(SessionTree->Selected) && HasNodeAnySession(SessionTree->Selected, true));
+    ((Data != NULL) && StoredSessions->CanOpen(Data) && !FEditing);
+}
+//---------------------------------------------------------------------------
+bool TLoginDialog::IsFolderOrWorkspaceAndCanOpen()
+{
+  return IsFolderOrWorkspaceNode(SessionTree->Selected) && HasNodeAnySession(SessionTree->Selected, true);
+}
+//---------------------------------------------------------------------------
+bool __fastcall TLoginDialog::CanOpen()
+{
+  return
+    IsSiteAndCanOpen() ||
+    IsFolderOrWorkspaceAndCanOpen();
 }
 //---------------------------------------------------------------------------
 void __fastcall TLoginDialog::Idle()
@@ -3084,10 +3096,15 @@ void __fastcall TLoginDialog::PuttyActionExecute(TObject * /*Sender*/)
   // in case user manages to release it before following finishes
   bool Close = !OpenInNewWindow();
 
-  std::unique_ptr<TSessionData> Data(CloneSelectedSession());
-  // putty does not support resolving environment variables in session settings
-  Data->ExpandEnvironmentVariables();
-  OpenSessionInPutty(GUIConfiguration->PuttyPath, Data.get());
+  std::unique_ptr<TList> DataList(new TList());
+  SaveDataList(DataList.get());
+  for (int Index = 0; Index < DataList->Count; Index++)
+  {
+    TSessionData * Data = reinterpret_cast<TSessionData *>(DataList->Items[Index]);
+    // putty does not support resolving environment variables in session settings
+    Data->ExpandEnvironmentVariables();
+    OpenSessionInPutty(GUIConfiguration->PuttyPath, Data);
+  }
 
   if (Close)
   {

+ 3 - 0
source/forms/Login.dfm

@@ -1247,6 +1247,9 @@ object LoginDialog: TLoginDialog
       Action = LoginAction
       Default = True
     end
+    object OpeninPuTTY4: TMenuItem
+      Action = PuttyAction
+    end
     object N11: TMenuItem
       Caption = '-'
     end

+ 3 - 0
source/forms/Login.h

@@ -211,6 +211,7 @@ __published:
   TCheckBox *ShowAgainCheck;
   TPanel *BasicS3Panel;
   TCheckBox *S3CredentialsEnvCheck;
+  TMenuItem *OpeninPuTTY4;
   void __fastcall DataChange(TObject *Sender);
   void __fastcall FormShow(TObject *Sender);
   void __fastcall SessionTreeDblClick(TObject *Sender);
@@ -386,6 +387,8 @@ private:
   void __fastcall SaveAsSession(bool ForceDialog);
   void __fastcall InvalidateSessionData();
   bool __fastcall CanOpen();
+  bool IsSiteAndCanOpen();
+  bool IsFolderOrWorkspaceAndCanOpen();
   bool __fastcall IsCloneToNewSiteDefault();
   bool __fastcall IsDefaultResult(TModalResult Result);
   void __fastcall UpdateNodeImage(TTreeNode * Node);