Переглянути джерело

Login button says "Open" when workspace (or folder) is selected so that it makes sense with local-local-only workspaces

Source commit: 65243c631302a6aac0434a5d2d2553387aff47e9
Martin Prikryl 4 роки тому
батько
коміт
71fc7f81fa

+ 49 - 19
source/forms/Login.cpp

@@ -28,12 +28,16 @@
 #pragma resource "*.dfm"
 //---------------------------------------------------------------------------
 const int SiteImageIndex = 1;
-const int OpenFolderImageIndex = 2;
+const int OpenedFolderImageIndex = 2;
 const int ClosedFolderImageIndex = 3;
 const int WorkspaceImageIndex = 4;
 const int NewSiteImageIndex = 6;
 const int SiteColorMaskImageIndex = 8;
 //---------------------------------------------------------------------------
+const int LoginImageIndex = 0;
+const int OpenWorkspaceImageIndex = 5;
+const int OpenFolderImageIndex = 6;
+//---------------------------------------------------------------------------
 bool __fastcall DoLoginDialog(TList * DataList, TForm * LinkedForm)
 {
   DebugAssert(DataList != NULL);
@@ -145,7 +149,6 @@ void __fastcall TLoginDialog::InitControls()
   MenuButton(ManageButton);
 
   FixButtonImage(LoginButton);
-  CenterButtonImage(LoginButton);
 
   SelectScaledImageList(SessionImageList);
   SelectScaledImageList(ActionImageList);
@@ -158,6 +161,23 @@ void __fastcall TLoginDialog::InitControls()
   }
 }
 //---------------------------------------------------------------------
+void TLoginDialog::UpdateLoginButton()
+{
+  TAction * Action = DebugNotNull(dynamic_cast<TAction *>(LoginButton->Action));
+  int ImageIndex = Action->ImageIndex;
+  if (FButtonImagesMap.find(ImageIndex) == FButtonImagesMap.end())
+  {
+    int LoginIndex = AddLoginButtonImage(ImageIndex, true);
+    FButtonImagesMap.insert(std::make_pair(ImageIndex, LoginIndex));
+    AddLoginButtonImage(ImageIndex, false);
+  }
+
+  LoginButton->ImageIndex = FButtonImagesMap[ImageIndex];
+  LoginButton->DisabledImageIndex = FButtonImagesMap[ImageIndex] + 1;
+
+  CenterButtonImage(LoginButton);
+}
+//---------------------------------------------------------------------
 void __fastcall TLoginDialog::GenerateImages()
 {
   // Generate button images.
@@ -166,9 +186,8 @@ void __fastcall TLoginDialog::GenerateImages()
   FButtonImageList.reset(new TImageList(this));
   FButtonImageList->SetSize(ActionImageList->Width, ActionImageList->Height);
   LoginButton->Images = FButtonImageList.get();
-
-  LoginButton->ImageIndex = AddLoginButtonImage(true);
-  LoginButton->DisabledImageIndex = AddLoginButtonImage(false);
+  FButtonImagesMap.clear();
+  UpdateLoginButton();
 
   SessionImageList->BeginUpdate();
   try
@@ -185,25 +204,32 @@ void __fastcall TLoginDialog::GenerateImages()
   }
 }
 //---------------------------------------------------------------------
-int __fastcall TLoginDialog::AddLoginButtonImage(bool Enabled)
+void TLoginDialog::FloodFill(TBitmap * Bitmap, int X, int Y)
+{
+  // A background is white, but there's also white used on the image itself.
+  // So we first replace the background white with a unique color,
+  // setting it as a transparent later.
+  // This is obviously a hack specific to this particular image.
+  // 16x16 version does not have any background
+  if (Bitmap->Canvas->Pixels[X][Y] == clWhite)
+  {
+    Bitmap->Canvas->FloodFill(X, Y, clWhite, fsSurface);
+  }
+}
+//---------------------------------------------------------------------
+int TLoginDialog::AddLoginButtonImage(int Index, bool Enabled)
 {
   std::unique_ptr<TBitmap> Bitmap(new TBitmap());
   Bitmap->SetSize(ActionImageList->Width, ActionImageList->Height);
 
-  ActionImageList->Draw(Bitmap->Canvas, 0, 0, LoginAction->ImageIndex, Enabled);
+  ActionImageList->Draw(Bitmap->Canvas, 0, 0, Index, Enabled);
 
   const TColor TransparentColor = clFuchsia;
 
-  // 16x16 version does not have any background
-  if (Bitmap->Canvas->Pixels[0][0] == clWhite)
-  {
-    // A background is white, but there's also white used on the image itself.
-    // So we first replace the background white with a unique color,
-    // setting it as a transparent later.
-    // This is obviously a hack specific to this particular image.
-    Bitmap->Canvas->Brush->Color = TransparentColor;
-    Bitmap->Canvas->FloodFill(0, 0, Bitmap->Canvas->Pixels[0][0], fsSurface);
-  }
+  Bitmap->Canvas->Brush->Color = TransparentColor;
+  FloodFill(Bitmap.get(), 0, 0);
+  FloodFill(Bitmap.get(), Bitmap->Width - 1, Bitmap->Height - 1);
+  FloodFill(Bitmap.get(), Bitmap->Width - 1, 0);
 
   return FButtonImageList->AddMasked(Bitmap.get(), TransparentColor);
 }
@@ -426,8 +452,8 @@ void __fastcall TLoginDialog::LoadSessions()
 void __fastcall TLoginDialog::UpdateFolderNode(TTreeNode * Node)
 {
   DebugAssert((Node->ImageIndex == 0) ||
-    (Node->ImageIndex == OpenFolderImageIndex) || (Node->ImageIndex == ClosedFolderImageIndex));
-  SetNodeImage(Node, (Node->Expanded ? OpenFolderImageIndex : ClosedFolderImageIndex));
+    (Node->ImageIndex == OpenedFolderImageIndex) || (Node->ImageIndex == ClosedFolderImageIndex));
+  SetNodeImage(Node, (Node->Expanded ? OpenedFolderImageIndex : ClosedFolderImageIndex));
 }
 //---------------------------------------------------------------------------
 void __fastcall TLoginDialog::NewSite()
@@ -1163,6 +1189,7 @@ void __fastcall TLoginDialog::ActionListUpdate(TBasicAction * BasicAction,
   bool NewSiteSelected = IsNewSiteNode(SessionTree->Selected);
   bool SiteSelected = IsSiteNode(SessionTree->Selected);
   bool FolderOrWorkspaceSelected = IsFolderOrWorkspaceNode(SessionTree->Selected);
+  bool WorkspaceSelected = IsWorkspaceNode(SessionTree->Selected);
 
   TAction * Action = DebugNotNull(dynamic_cast<TAction *>(BasicAction));
   bool PrevEnabled = Action->Enabled;
@@ -1202,6 +1229,9 @@ void __fastcall TLoginDialog::ActionListUpdate(TBasicAction * BasicAction,
   else if (Action == LoginAction)
   {
     LoginAction->Enabled = CanOpen();
+    LoginAction->Caption = FolderOrWorkspaceSelected ? LoadStr(LOGIN_OPEN) : LoadStr(LOGIN_LOGIN);
+    LoginAction->ImageIndex = FolderOrWorkspaceSelected ? (WorkspaceSelected ? OpenWorkspaceImageIndex : OpenFolderImageIndex) : LoginImageIndex;
+    UpdateLoginButton();
   }
   else if (Action == PuttyAction)
   {

+ 290 - 219
source/forms/Login.dfm

@@ -570,7 +570,7 @@ object LoginDialog: TLoginDialog
     end
     object LoginAction: TAction
       Category = 'Session'
-      Caption = 'Login'
+      Caption = 'LoginX'
       ImageIndex = 0
       OnExecute = LoginActionExecute
     end
@@ -1888,6 +1888,50 @@ object LoginDialog: TLoginDialog
           2A76E8C04B54037C52D3319D8AD5100863CB9C3928067C02D2BC0C2480FF0CFF
           BFF8D73C06EB61FCFFFF3F297A310000D54FEADB815A8A100000000049454E44
           AE426082}
+      end
+      item
+        Background = clWindow
+        Name = 'Open Workspace (reduced alpha)'
+        PngImage.Data = {
+          89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+          61000000097048597300000EC400000EC401952B0E1B000001BD4944415478DA
+          63FCCFF09F8112C0886E805E50EBFFFB4FDE10D4A82823C270695D35238601BC
+          6685FF2D82CA081A70625D17C3E753FD10030ECE72FFFFE9D50DB044D4A62086
+          B5F31A18E62D5AC590141786930E4E6A4018706699C97F13372D880BBC84199E
+          1FEA21E80249BB128801BB261AFFB7F49061E011E08418E02BC1F0687F37C3A6
+          63B718FCACD450681800F1E51C4BA106F42AFFB7F556834B8AC6A933DCDBD345
+          D0054A2E65100376F628FD778BD04504629022C3CD9D9D0C3B4EDD61F0305341
+          A16100C457772F4732204C83E1ECC1C70CCF1E7E24290D7009C832000D50FC6F
+          E124CB70FBAE208371D06CA235FFFBFD8AE1F0E21288018A6AFC0C8C6C620C2A
+          BA620C0C7FDF0393172350092384466623D1772E3D67F8CDEA0B34A05BF13F07
+          373383818D2E031FDF0F0686FF7F706A42A60F6FB9C5609B719D91714797C27F
+          26666606E7004D60BAFE0456C0884B2394FDF3C75F86433BDE32B8169C6364DC
+          D621FF5F5A9A8B414E9E0B68FB5FA86206240D0C283488FAF8F90FC3DB5FF60C
+          86FEC058D8D226074C482E0C82E25248B6C10C6040F091C42F1DDAC3A01F7610
+          62E4D64E8DFF7F7F7F2329FAD838F919DC8B2F810D000069E9B13EA494622F00
+          00000049454E44AE426082}
+      end
+      item
+        Background = clWindow
+        Name = 'Open saved session (reduced alpha)'
+        PngImage.Data = {
+          89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
+          61000000097048597300000EC400000EC401952B0E1B000001D04944415478DA
+          63FCCFF09F011B088848FEFFECF94B067C404A529C8111970166F63EFF27CE5C
+          C6F0E71F03C3DF7FFF913090FFF73F50FC3F435B593C7E036AFB574234C034FE
+          FF8FC29F51170531E0E8C290FFEF1E9F4631A079B72E437EE75A867F40C5DF7F
+          3330BCFEFC8FE1D38FFF0C5F80F8DB2F90D87F867BCB80063CBBB6F5FFBD6315
+          0CD60106A82E087EC7105DB791E1E987FF0C5F7F326075E79999010C8CFB6738
+          FFD7B364671092E0433520EC33835DFE16BC817868A20F03E3A616B9FFAE21DA
+          189276E94C0CB28A1A780D787CFF06C400DF04430CC9A0A2BF0C4F5EFEC76B80
+          8C9424D480381D86CB279F313CBCF58EE13F7E3D28809D5B18EA852065865387
+          BF31D8A56C265AF3FF7FDF19F64E0F8318A06F26CAF0F92B0F83B699023092DF
+          303030320295304268643612FDE8F61B86F71F4D2006884A7030A8E8AB318888
+          02DDFFFF174E4DC8F4C93DF71814AD27410C606563667009D4626066FC02761E
+          234C210ECDFFFE3230EC5AFF80C1A3E40623D80049494E0615555EA0ED7FA00A
+          19900C6040A141D4D7EF7F191EBFD161308F5C0831C0CCD986414C4E09C92698
+          010C083E92F8AD33471938246318E48D63181977F619FCFFF9ED1DF1710704CC
+          2C1C0C5E1537C1260200C2D2CE041B22121A0000000049454E44AE426082}
       end>
     Left = 41
     Top = 253
@@ -2623,6 +2667,60 @@ object LoginDialog: TLoginDialog
           7D6A27A681D69EC60CFFFE7C26A899118B05C776DFC3E2C2EC62BC06C1F9FF31
           D56C9F3609C3C0C340DA86816CF0FF905FCD637BB881FFFF139D95890200B8D8
           399E6C933D3B0000000049454E44AE426082}
+      end
+      item
+        Background = clWindow
+        Name = 'Open Workspace (reduced alpha)'
+        PngImage.Data = {
+          89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D
+          0D000000097048597300000EC400000EC401952B0E1B000002524944415478DA
+          63FCCFF09F011D3896ECF9FFE0E51706528082380FC3FE1E1746466C062AC66E
+          F8AFA2634E928177AE9C64B8BF3800B78133CB1DC1EC798B563124C58561B0D1
+          F9E99DFB510D3C3CD7E7FF87E797C1ECBC9B13196ECEF327C985EA491B11061E
+          98E9FA5F404A8041C9CC162CA95F22C770758E1FC3BA233719826CD451686C00
+          24A79DB20962E0C1B9DEFFF945D98086D900A5FE83B15EA90AC3C559BE24B950
+          3F6D33C4C04D2D72FF1D52B2A08631400DD464383BDD8761F3F1DB0CBE96AA28
+          3436009233CEDC8230D0312515EE3A10D22DD3633835D59B24179A656F453230
+          391E6CD8E5DDFB18DE3C7A429241C880474485016CA0537214C3E7B7EF181E5D
+          79C560163A8B2CC3FEFE7ECF707C7919D4C0A45086FBE7AF30F04B3931882AC8
+          31FCFEF910254C41801116244862C8F4FDB3E71838053D20063A2705309CDAB8
+          9FC138A09A8199F929C3BFBF9FF16A4658C000173BBD612B8343E6054818DA47
+          39339CDE7A9EC136AE9AE1F7B773780CFA0FE5A2CAFDFEF68DE1CCD6B30C2EF9
+          272106EAD8E9307CF9CCC3A0666EC9F0F7D76384663C2E44A69FDD7AC8F0EDAB
+          0E839E773BC44031791106590D530676962F0CFF7E23BCCB087711039A21A8EC
+          3BD79F3258245C6004EB0119C8C1C9C6E090D4C8C0C8F88DE1FF7F5C6186CD50
+          06867FFFFE30EC9B3785C1A3F406C24071191106155D39867F7FBE62D5841A04
+          0C2891F2EDCB2F86A72F15182CA296400CDC35C1E4BFA6A50183849A2E16EF60
+          31182D08EE9C3AC2C02EE4CBA068960831F0DCC6C2FF4F2EAF652017F0082B31
+          3866EE878708D602961200000B4F2280CA91D9330000000049454E44AE426082}
+      end
+      item
+        Background = clWindow
+        Name = 'Open saved session (reduced alpha)'
+        PngImage.Data = {
+          89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D
+          0D000000097048597300000EC400000EC401952B0E1B0000027D4944415478DA
+          9DD45F4853511C07F0EFC5F00F484D32FF55D6A424C15150AD24D3B915084DB0
+          42962391DC0AECA13DB4A78C40E9A142B2221F8C4611453D14ADD01E0A345382
+          74CEC841112363392BB1B2B65DE6FEDCD3DDBDEBCE3BEFD6D80F0EE7DC3FBFCF
+          39E777FF50040489E260B391B867BF21D5585B52042A19A8ACD592DE9BF7C130
+          004308C20C617BF07DF4DCD26B5DE6D6FF83177A1FB037C792C302120F023D67
+          8EC6C0118B962C7C9D123059B102A7EF00677B1E0A093CC2B6E84AE38FFBCEE9
+          78F065DF7E222B91A14CB937CA117C1A1BC1896E3FCCDD8F96AC081CECF113FC
+          619BC7CFC0B7484007C03602E7BD6650C3960364D59A4C16ABE620082520D0E8
+          8671EA929503E7BD846BBF682018962ED33BCB61504FCF971295F1A408A2A263
+          B5EE355A3AFBE1FE0D0442896BFD2F46AF35F0609DF1786C7504C2587DC4861A
+          537FCAAFCDABABDA286868E580A917839877CDA40CC4C79C379B07D5063D3C3F
+          7EC2E59883B2E9465A5838B880DB5D87A2605B13A6271D5859AC42815C8EE0E2
+          67514D2341898EC5D722FDF4841D3979F53CA8696BC4D893216C6FEC4046861B
+          4CD89334593C017F6EDC3A0055FB5B8A036BF51AD89E4DA2BAA50341DA2E0908
+          3D593E4990A6611B98C03ED31B1EACACA984D7938BF25D550807BEC42590E413
+          B0FDEC47177CDE0A6CD55EE4C1820DF958BF6527B25678C1043DE26D895E3F22
+          3976BE7743BEE7320A37AB79303B27132A43270BD0EC8E12D54C0A8D7CC7210C
+          DEBA8E7AF307EE160E2C5C978F4D8A5230219F64D2F26DC61E0AED0DC0FD7D23
+          76EBEFF2E0F32B3B4845D53614952B24100938AE04CEF15164E53540AE3CC683
+          76AB89CC381E23DDC85D5D86BAF621A122497FB0E9C45F3B1A770093C6179800
+          00000049454E44AE426082}
       end>
     Left = 153
     Top = 253
@@ -3284,115 +3382,32 @@ object LoginDialog: TLoginDialog
     PngImages = <
       item
         Background = clWindow
-        Name = 'Login'
+        Name = 'Login (reduced alpha)'
         PngImage.Data = {
           89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D
-          F8000000097048597300000EC400000EC401952B0E1B00000A4F694343505068
-          6F746F73686F70204943432070726F66696C65000078DA9D53675453E9163DF7
-          DEF4424B8880944B6F5215082052428B801491262A2109104A8821A1D91551C1
-          114545041BC8A088038E8E808C15512C0C8A0AD807E421A28E83A3888ACAFBE1
-          7BA36BD6BCF7E6CDFEB5D73EE7ACF39DB3CF07C0080C9648335135800CA9421E
-          11E083C7C4C6E1E42E40810A2470001008B3642173FD230100F87E3C3C2B22C0
-          07BE000178D30B0800C04D9BC0301C87FF0FEA42995C01808401C07491384B08
-          801400407A8E42A600404601809D98265300A0040060CB6362E300502D006027
-          7FE6D300809DF8997B01005B94211501A09100201365884400683B00ACCF568A
-          450058300014664BC43900D82D00304957664800B0B700C0CE100BB200080C00
-          305188852900047B0060C8232378008499001446F2573CF12BAE10E72A000078
-          99B23CB9243945815B082D710757572E1E28CE49172B14366102619A402EC279
-          99193281340FE0F3CC0000A0911511E083F3FD78CE0EAECECE368EB60E5F2DEA
-          BF06FF226262E3FEE5CFAB70400000E1747ED1FE2C2FB31A803B06806DFEA225
-          EE04685E0BA075F78B66B20F40B500A0E9DA57F370F87E3C3C45A190B9D9D9E5
-          E4E4D84AC4425B61CA577DFE67C25FC057FD6CF97E3CFCF7F5E0BEE22481325D
-          814704F8E0C2CCF44CA51CCF92098462DCE68F47FCB70BFFFC1DD322C44962B9
-          582A14E35112718E449A8CF332A52289429229C525D2FF64E2DF2CFB033EDF35
-          00B06A3E017B912DA85D6303F64B27105874C0E2F70000F2BB6FC1D428080380
-          6883E1CF77FFEF3FFD47A02500806649927100005E44242E54CAB33FC7080000
-          44A0812AB0411BF4C1182CC0061CC105DCC10BFC6036844224C4C24210420A64
-          801C726029AC82422886CDB01D2A602FD4401D34C051688693700E2EC255B80E
-          3D700FFA61089EC128BC81090441C808136121DA8801628A58238E08179985F8
-          21C14804128B2420C9881451224B91354831528A542055481DF23D720239875C
-          46BA913BC8003282FC86BC47319481B2513DD40CB543B9A8371A8446A20BD064
-          74319A8F16A09BD072B41A3D8C36A1E7D0AB680FDA8F3E43C730C0E8180733C4
-          6C302EC6C342B1382C099363CBB122AC0CABC61AB056AC03BB89F563CFB17704
-          128145C0093604774220611E4148584C584ED848A8201C243411DA0937090384
-          51C2272293A84BB426BA11F9C4186232318758482C23D6128F132F107B8843C4
-          37241289433227B9900249B1A454D212D246D26E5223E92CA99B34481A2393C9
-          DA646BB20739942C202BC885E49DE4C3E433E41BE421F25B0A9D624071A4F853
-          E22852CA6A4A19E510E534E5066598324155A39A52DDA8A15411358F5A42ADA1
-          B652AF5187A81334759A39CD8316494BA5ADA295D31A681768F769AFE874BA11
-          DD951E4E97D057D2CBE947E897E803F4770C0D861583C7886728199B18071867
-          197718AF984CA619D38B19C754303731EB98E7990F996F55582AB62A7C1591CA
-          0A954A9526951B2A2F54A9AAA6AADEAA0B55F355CB548FA95E537DAE46553353
-          E3A909D496AB55AA9D50EB531B5367A93BA887AA67A86F543FA47E59FD890659
-          C34CC34F43A451A0B15FE3BCC6200B6319B3782C216B0DAB86758135C426B1CD
-          D97C762ABB98FD1DBB8B3DAAA9A13943334A3357B352F394663F07E39871F89C
-          744E09E728A797F37E8ADE14EF29E2291BA6344CB931655C6BAA96979658AB48
-          AB51AB47EBBD36AEEDA79DA6BD45BB59FB810E41C74A275C2747678FCE059DE7
-          53D953DDA70AA7164D3D3AF5AE2EAA6BA51BA1BB4477BF6EA7EE989EBE5E809E
-          4C6FA7DE79BDE7FA1C7D2FFD54FD6DFAA7F5470C5806B30C2406DB0CCE183CC5
-          35716F3C1D2FC7DBF151435DC34043A561956197E18491B9D13CA3D5468D460F
-          8C69C65CE324E36DC66DC6A326062621264B4DEA4DEE9A524DB9A629A63B4C3B
-          4CC7CDCCCDA2CDD699359B3D31D732E79BE79BD79BDFB7605A785A2CB6A8B6B8
-          6549B2E45AA659EEB6BC6E855A3959A558555A5DB346AD9DAD25D6BBADBBA711
-          A7B94E934EAB9ED667C3B0F1B6C9B6A9B719B0E5D806DBAEB66DB67D61676217
-          67B7C5AEC3EE93BD937DBA7D8DFD3D070D87D90EAB1D5A1D7E73B472143A563A
-          DE9ACE9CEE3F7DC5F496E92F6758CF10CFD833E3B613CB29C4699D539BD34767
-          1767B97383F3888B894B82CB2E973E2E9B1BC6DDC8BDE44A74F5715DE17AD2F5
-          9D9BB39BC2EDA8DBAFEE36EE69EE87DC9FCC349F299E593373D0C3C843E051E5
-          D13F0B9F95306BDFAC7E4F434F8167B5E7232F632F9157ADD7B0B7A577AAF761
-          EF173EF63E729FE33EE33C37DE32DE595FCC37C0B7C8B7CB4FC36F9E5F85DF43
-          7F23FF64FF7AFFD100A78025016703898141815B02FBF87A7C21BF8E3F3ADB65
-          F6B2D9ED418CA0B94115418F82AD82E5C1AD2168C8EC90AD21F7E798CE91CE69
-          0E85507EE8D6D00761E6618BC37E0C2785878557863F8E7088581AD131973577
-          D1DC4373DF44FA449644DE9B67314F39AF2D4A352A3EAA2E6A3CDA37BA34BA3F
-          C62E6659CCD5589D58496C4B1C392E2AAE366E6CBEDFFCEDF387E29DE20BE37B
-          17982FC85D7079A1CEC2F485A716A92E122C3A96404C884E3894F041102AA816
-          8C25F21377258E0A79C21DC267222FD136D188D8435C2A1E4EF2482A4D7A92EC
-          91BC357924C533A52CE5B98427A990BC4C0D4CDD9B3A9E169A76206D323D3ABD
-          31839291907142AA214D93B667EA67E66676CBAC6585B2FEC56E8BB72F1E9507
-          C96BB390AC05592D0AB642A6E8545A28D72A07B267655766BFCD89CA3996AB9E
-          2BCDEDCCB3CADB90379CEF9FFFED12C212E192B6A5864B572D1D58E6BDAC6A39
-          B23C7179DB0AE315052B865606AC3CB88AB62A6DD54FABED5797AE7EBD267A4D
-          6B815EC1CA82C1B5016BEB0B550AE5857DEBDCD7ED5D4F582F59DFB561FA869D
-          1B3E15898AAE14DB1797157FD828DC78E51B876FCABF99DC94B4A9ABC4B964CF
-          66D266E9E6DE2D9E5B0E96AA97E6970E6E0DD9DAB40DDF56B4EDF5F645DB2F97
-          CD28DBBB83B643B9A3BF3CB8BC65A7C9CECD3B3F54A454F454FA5436EED2DDB5
-          61D7F86ED1EE1B7BBCF634ECD5DB5BBCF7FD3EC9BEDB5501554DD566D565FB49
-          FBB3F73FAE89AAE9F896FB6D5DAD4E6D71EDC703D203FD07230EB6D7B9D4D51D
-          D23D54528FD62BEB470EC71FBEFE9DEF772D0D360D558D9CC6E223704479E4E9
-          F709DFF71E0D3ADA768C7BACE107D31F761D671D2F6A429AF29A469B539AFB5B
-          625BBA4FCC3ED1D6EADE7AFC47DB1F0F9C343C59794AF354C969DAE982D39367
-          F2CF8C9D959D7D7E2EF9DC60DBA2B67BE763CEDF6A0F6FEFBA1074E1D245FF8B
-          E73BBC3BCE5CF2B874F2B2DBE51357B8579AAF3A5F6DEA74EA3CFE93D34FC7BB
-          9CBB9AAEB95C6BB9EE7ABDB57B66F7E91B9E37CEDDF4BD79F116FFD6D59E393D
-          DDBDF37A6FF7C5F7F5DF16DD7E7227FDCECBBBD97727EEADBC4FBC5FF440ED41
-          D943DD87D53F5BFEDCD8EFDC7F6AC077A0F3D1DC47F7068583CFFE91F58F0F43
-          058F998FCB860D86EB9E383E3939E23F72FDE9FCA743CF64CF269E17FEA2FECB
-          AE17162F7EF8D5EBD7CED198D1A197F29793BF6D7CA5FDEAC0EB19AFDBC6C2C6
-          1EBEC97833315EF456FBEDC177DC771DEFA3DF0F4FE47C207F28FF68F9B1F553
-          D0A7FB93199393FF040398F3FC63332DDB0000029C4944415478DA63FCFFFF3F
-          032D0123C802F956215F4666C6998C0C0C92D43014E8E4E7FFFEFECB7C54FD7E
-          23D802850EE1A722CAFC529C02EC5471F5F70F3F19DEDCFDF8EC41C55B69B005
-          8A1DC2FFA50D45E10A4AB51B197CA443189819998936F4EFFFBF0C5B9EAE61E8
-          BE5A0FE63F3DFF9AE17EC55B46B80552FA2270C5473C6F30300221E941F39FC1
-          66BB0698FDECE21B540B247584E10A8FF9DC02D3565BD488361C5DCFF32B6F51
-          2D10D712822B3EE1771B4C5B6C5225DA02743D2FAFBD43B5404C4310AEF864C0
-          1D306DBE41054C379AF431745DAC63F8FAFB0B4E0BD0F5BCBAF11ED502515501
-          B8E253C177C1B4D95A6538FFC5B7670C35A7F2192EBD3D87D502743DAF6F7F40
-          B500984C71BAEE74E83D7824CEBD3699610E1083520D3635A6AB95C0343099A2
-          5A20A4C8C77036FC3E51E17DF9ED7986AAE3F90CCFBE3E868BC1F41AAF5404D3
-          EFEE7F42B540509E97E15CE403A223F5EB9F2F0C1D67EA18B6DE5F07E6C3F41A
-          2D5700D3EF1F7E46B540409687E17CF443E22D004678FBE95AB80530BD864BE5
-          C1F487C75F502DE097E266B810F788B8207A739EA1E2500EC3D32F882082E935
-          582407A63F3EFB8A6A01AF04174E032F253C8647F2CC8B13817802C3DF7F7FB1
-          AAD15B200BA63FBFF8866A018F18276E17273D6178FEF52943D9FE6C860BAFCE
-          E0540302BAF364C0F49757DF512DE016E6802BBE92FA144CEBCC9606D39D8E93
-          199A8E56327CFD853BA3A1EBF9FAF607AA055C8288A2FA6AFA3330AD3D538AE8
-          4847D7F3EDFD4F540B38F8D9E08AAF673E07D39AD389AF7FD0F5FCF8F80BD502
-          761E5684E29CE76417D79A532016FCFCF21BD502362E16B8C266E75E8650ED68
-          922C0119BEFAEA5286DABDC560FEAF6F7F101680AA4C663626292626D25D8D0D
-          FCFBF79FE1EFAF7F882A93E6953E2D01008A32A1E056C0D8740000000049454E
-          44AE426082}
+          F8000000097048597300000EC400000EC401952B0E1B000002964944415478DA
+          63FCCFF09F819680116681D964ADFFAFBFBCA48AA1A23CE20CA772AF31C22D30
+          9FACFDFFAFF877064E0176AA58F0FDC34F06E6979C0C2773AF32822D506C17FE
+          2F6D280A5750AADDC8E0231DC2C0CCC84CB4A17FFFFF65D8F2740D43F7D57A30
+          FFE9F9D70CF72BDF222C90D217812B3EE2798381918191649783CCB2D9AE0166
+          3FBBF806D502491D61B8C2633EB7C0B4D51635A20D47D7F3FCCA5B540BC4B584
+          E08A4FF8DD06D3169B5489B6005DCFCB6BEF502D10D310842B3E1970074C9B6F
+          5001D38D267D0C5D17EB18BEFEFE82D302743DAF6EBC47B540545500AEF854F0
+          5D306DB65619CE7FF1ED1943CDA97C864B6FCF61B5005DCFEBDB1F502D1051E6
+          C7E9BAD3A1F7E09138F7DA648639400C4A35D8D498AE5602D36FEE7E44B54048
+          918FE16CF87DA2C2FBF2DBF30C55C7F3199E7D7D0C1783E9355EA908A6DFDDFF
+          846A81A03C2FC3B9C8074447EAD73F5F183ACED4316CBDBF0ECC87E9355AAE00
+          A6DF3FFC8C6A81802C0FC3F9E887C45B008CF0F6D3B5700B607A0D97CA83E90F
+          8FBFA05AC02FC5CD7021EE117141F4E63C43C5A11C86A75F104104D36BB0480E
+          4C7F7CF615D5025E092E9C065E4A780C8FE499172702F10486BFFFFE6255A3B7
+          40164C7F7EF10DD5021E314EDC2E4E7AC2F0FCEB5386B2FDD90C175E9DC1A906
+          0474E7C980E92FAFBEA35AC02DCC01577C25F52998D6992D0DA63B1D2733341D
+          AD64F8FA0B774643D7F3F5ED0F540BB8041145F5D5F467605A7BA614D1918EAE
+          E7DBFB9FA81670F0B3C1155FCF7C0EA635A74B126D01BA9E1F1F7FA15AC0CEC3
+          8A509CF39CECE25A730AC4829F5F7EA35AC0C6C50257D8ECDCCB10AA1D4D9225
+          2073565F5DCA50BBB718CCFFF5ED0FC2025095F9E6D72B062626D25D8D0DFCFB
+          F79F41844D0C516582004D2B7D5A0200C7EF81F87689240F0000000049454E44
+          AE426082}
       end
       item
         Background = clWindow
@@ -3784,6 +3799,67 @@ object LoginDialog: TLoginDialog
           28E13C886AF88F419309EAAF5566A533013E21DE502BC5930A529342C6F75EF2
           BA0C3CD30349C6BB2693432AAF653200CFE8B12FFE592375E1C77BFC7480FFD9
           7E020EF8EA5A9F9886D50000000049454E44AE426082}
+      end
+      item
+        Background = clWindow
+        Name = 'Open Workspace (reduced alpha)'
+        PngImage.Data = {
+          89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D
+          F8000000097048597300000EC400000EC401952B0E1B000002C34944415478DA
+          B5965F48537114C7BF3795C22247658ECC5C2E5BE5CC28989AFFD215F9BF2112
+          9119A16316964F99D063F412F8500F1286FA90F412F64FD34A42A745736654A6
+          8D39B37CB0196AA9A939E7F66BDBCDDD6DDEEDD245CFCB39BFDFF9DDEFE79CF3
+          837B2F4540B09A46F902C8AFBC2443C6195EC2A2900D68AF3C4AF904EC2C7C4C
+          7649E3780106FBBAF0B55EC10DA8AE4875C47577EFA3E8EC49A777DD5B32D775
+          C98D7677C0ABDA6C3269FCE40628D3DF82BEEE04AF0E24454F1880BAFA18116C
+          13204296F42F4D43632E87A3BF26D7113F7CAD475EA2C4E99BB55F60322FB28A
+          DBF351CA461AD0519B458282D7DAC4135C8ED080FDE5627CBC93C3AB83185513
+          0D68BCBE831C515E748ABA032478773BDB1137690CC8898F74FAD69E215B0716
+          56717BFED085A7AE80F3A09C0006145D1E85EEAA2C5E1DC84A9B1940AA52E910
+          FED0DC825F46232F4136DB2A4E010D283E87B9A94918BAF44828AC5F11718BF9
+          27D4354A1A90567C06A38343B01211440733303FA35D362EB08CD035F61CF1A8
+          6100D3E3414B8053F8DCA1813856854001B0681A6615718310DF605D47274224
+          2534405E940FCD83E7387CBA12C4A283D532CD593DB5EC0DE07EBEABA111F24B
+          7DF42527176442FBA81369AA9B30FD567B1D83D73179746336CD43D3D0868CF2
+          7E1A70E0B80C63C30B90CAF361FED3CB51ADEFBBB0C713233F3032E087B8827B
+          34205C2AC246610C84E25058CDDFFFAF7A8FD85E8CA15B87759BF3B03BA98C06
+          084204D89B9C8BF541F320D659A662C20FD2D3F2167BE455088E48A401FE016B
+          109FAD8065D60042D844D8D65EF66CCF6BDBF4C8BAFA8D727464076C090B874C
+          A1B2553FC321C20D999B1AC7FBD6374851BD600011FBB6431826B00116BC8C81
+          318A033231368B05FF7448D3AF3180D85C053685893966ED9123ECFB7DEA6708
+          8E2C4568B48206743ABE64BD5829F30B084466858E7276BCDABF2D7F0121CD66
+          94EF2CB6F70000000049454E44AE426082}
+      end
+      item
+        Background = clWindow
+        Name = 'Open saved session (reduced alpha)'
+        PngImage.Data = {
+          89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D
+          F8000000097048597300000EC400000EC401952B0E1B000002E64944415478DA
+          AD956B48536118C7FFC7EC82810D2F65B3E552120347D187D9C55B0E0975C92A
+          C14CA5C86911655FAC0F1241378810ACC00F827E0AA90F4A21229611DBCABC14
+          15E625736816F38299CECDE53677DE4EE7ECE69C9DB3E88197F776CEEFF7BCCF
+          399C431110088DA3056A62189F147CBD649B18542002799A92D4D43D024D0334
+          2170D084E9C1F5CE35EFBD1B15A70217DCA979CCDCEC8139DC505F01505D5914
+          B8E06A75A31BC04199E63C89EFBCF65ABE47F0AA5E49E6263E2D038AB6CA9052
+          D242790B2AAA9ABC32062B322D12CC33CDB44863C14A60B1816904FA86024EA0
+          A9CD2422B108B1F214278A938EF6E8303B3E8FF4B3ED944B507EF7292BF86126
+          6C9BB5007687FF2AF4D61F07A5ADCF219B22D733F06437D8BB1FE9E9C0B7DEF7
+          ECEC66BB0CC5D75B603002B625FED2BE7E700454F3ADED245D7DC10B0ABFA23F
+          A1C8EF40EAA516C1CF4C775FE9129C0325409091DF0DC98E04C182EFA39F39C1
+          21B59A857C6C6D656A3E2118C02B30853B0525A76131CE61B86B08078B1FFE17
+          B8C3FE139A3A3527C82829C2A47E8479EDA490EECDC2A2B9DBA744FECAB67C4C
+          F9EC4FE987619C0E75094E6040DB89B8A4528488282C59C7FC425648C8EAFB83
+          5A1D36C7977202C5993C7436B5E1C0C92A10C72068C73C6FF6D48A2FC0F2EBBB
+          1A9BA1B8D847B182B4C26C743DD121A3EC1EAC268DA092FCED344B561BDE34BE
+          40D6E57E4EB0E7B01CD36336242AF260FFD5CB932DBF78C63005C39735D857D8
+          C0096212A5088DDA8DA8B868D0F689C0B3F719EB7B06B021FC18E253CA398168
+          8B08BB5273B15164659E81D99331090CEC1ABF6B7D8B04450D2263933941F0DA
+          20EC57AAE058180621FE20FEE6ABAC31F777BF1C424EE557F603C90A22243190
+          ABCA4068330F845F6231CEE0C3F30EA4953DF308A409628863C218816D953278
+          82E291CC4C2FC01A940959F66D8F2029578530491C4FAD7D80C4BFA45FD38688
+          9DE7112D5371026D5D36314EF6E17F45F0BA10645D1974FF0503FA27FF4BFC06
+          1724C314CE0D96DE0000000049454E44AE426082}
       end>
     Left = 278
     Top = 253
@@ -3795,119 +3871,36 @@ object LoginDialog: TLoginDialog
     PngImages = <
       item
         Background = clWindow
-        Name = 'Login'
+        Name = 'Login (reduced alpha)'
         PngImage.Data = {
           89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A
-          F4000000097048597300000EC400000EC401952B0E1B00000A4F694343505068
-          6F746F73686F70204943432070726F66696C65000078DA9D53675453E9163DF7
-          DEF4424B8880944B6F5215082052428B801491262A2109104A8821A1D91551C1
-          114545041BC8A088038E8E808C15512C0C8A0AD807E421A28E83A3888ACAFBE1
-          7BA36BD6BCF7E6CDFEB5D73EE7ACF39DB3CF07C0080C9648335135800CA9421E
-          11E083C7C4C6E1E42E40810A2470001008B3642173FD230100F87E3C3C2B22C0
-          07BE000178D30B0800C04D9BC0301C87FF0FEA42995C01808401C07491384B08
-          801400407A8E42A600404601809D98265300A0040060CB6362E300502D006027
-          7FE6D300809DF8997B01005B94211501A09100201365884400683B00ACCF568A
-          450058300014664BC43900D82D00304957664800B0B700C0CE100BB200080C00
-          305188852900047B0060C8232378008499001446F2573CF12BAE10E72A000078
-          99B23CB9243945815B082D710757572E1E28CE49172B14366102619A402EC279
-          99193281340FE0F3CC0000A0911511E083F3FD78CE0EAECECE368EB60E5F2DEA
-          BF06FF226262E3FEE5CFAB70400000E1747ED1FE2C2FB31A803B06806DFEA225
-          EE04685E0BA075F78B66B20F40B500A0E9DA57F370F87E3C3C45A190B9D9D9E5
-          E4E4D84AC4425B61CA577DFE67C25FC057FD6CF97E3CFCF7F5E0BEE22481325D
-          814704F8E0C2CCF44CA51CCF92098462DCE68F47FCB70BFFFC1DD322C44962B9
-          582A14E35112718E449A8CF332A52289429229C525D2FF64E2DF2CFB033EDF35
-          00B06A3E017B912DA85D6303F64B27105874C0E2F70000F2BB6FC1D428080380
-          6883E1CF77FFEF3FFD47A02500806649927100005E44242E54CAB33FC7080000
-          44A0812AB0411BF4C1182CC0061CC105DCC10BFC6036844224C4C24210420A64
-          801C726029AC82422886CDB01D2A602FD4401D34C051688693700E2EC255B80E
-          3D700FFA61089EC128BC81090441C808136121DA8801628A58238E08179985F8
-          21C14804128B2420C9881451224B91354831528A542055481DF23D720239875C
-          46BA913BC8003282FC86BC47319481B2513DD40CB543B9A8371A8446A20BD064
-          74319A8F16A09BD072B41A3D8C36A1E7D0AB680FDA8F3E43C730C0E8180733C4
-          6C302EC6C342B1382C099363CBB122AC0CABC61AB056AC03BB89F563CFB17704
-          128145C0093604774220611E4148584C584ED848A8201C243411DA0937090384
-          51C2272293A84BB426BA11F9C4186232318758482C23D6128F132F107B8843C4
-          37241289433227B9900249B1A454D212D246D26E5223E92CA99B34481A2393C9
-          DA646BB20739942C202BC885E49DE4C3E433E41BE421F25B0A9D624071A4F853
-          E22852CA6A4A19E510E534E5066598324155A39A52DDA8A15411358F5A42ADA1
-          B652AF5187A81334759A39CD8316494BA5ADA295D31A681768F769AFE874BA11
-          DD951E4E97D057D2CBE947E897E803F4770C0D861583C7886728199B18071867
-          197718AF984CA619D38B19C754303731EB98E7990F996F55582AB62A7C1591CA
-          0A954A9526951B2A2F54A9AAA6AADEAA0B55F355CB548FA95E537DAE46553353
-          E3A909D496AB55AA9D50EB531B5367A93BA887AA67A86F543FA47E59FD890659
-          C34CC34F43A451A0B15FE3BCC6200B6319B3782C216B0DAB86758135C426B1CD
-          D97C762ABB98FD1DBB8B3DAAA9A13943334A3357B352F394663F07E39871F89C
-          744E09E728A797F37E8ADE14EF29E2291BA6344CB931655C6BAA96979658AB48
-          AB51AB47EBBD36AEEDA79DA6BD45BB59FB810E41C74A275C2747678FCE059DE7
-          53D953DDA70AA7164D3D3AF5AE2EAA6BA51BA1BB4477BF6EA7EE989EBE5E809E
-          4C6FA7DE79BDE7FA1C7D2FFD54FD6DFAA7F5470C5806B30C2406DB0CCE183CC5
-          35716F3C1D2FC7DBF151435DC34043A561956197E18491B9D13CA3D5468D460F
-          8C69C65CE324E36DC66DC6A326062621264B4DEA4DEE9A524DB9A629A63B4C3B
-          4CC7CDCCCDA2CDD699359B3D31D732E79BE79BD79BDFB7605A785A2CB6A8B6B8
-          6549B2E45AA659EEB6BC6E855A3959A558555A5DB346AD9DAD25D6BBADBBA711
-          A7B94E934EAB9ED667C3B0F1B6C9B6A9B719B0E5D806DBAEB66DB67D61676217
-          67B7C5AEC3EE93BD937DBA7D8DFD3D070D87D90EAB1D5A1D7E73B472143A563A
-          DE9ACE9CEE3F7DC5F496E92F6758CF10CFD833E3B613CB29C4699D539BD34767
-          1767B97383F3888B894B82CB2E973E2E9B1BC6DDC8BDE44A74F5715DE17AD2F5
-          9D9BB39BC2EDA8DBAFEE36EE69EE87DC9FCC349F299E593373D0C3C843E051E5
-          D13F0B9F95306BDFAC7E4F434F8167B5E7232F632F9157ADD7B0B7A577AAF761
-          EF173EF63E729FE33EE33C37DE32DE595FCC37C0B7C8B7CB4FC36F9E5F85DF43
-          7F23FF64FF7AFFD100A78025016703898141815B02FBF87A7C21BF8E3F3ADB65
-          F6B2D9ED418CA0B94115418F82AD82E5C1AD2168C8EC90AD21F7E798CE91CE69
-          0E85507EE8D6D00761E6618BC37E0C2785878557863F8E7088581AD131973577
-          D1DC4373DF44FA449644DE9B67314F39AF2D4A352A3EAA2E6A3CDA37BA34BA3F
-          C62E6659CCD5589D58496C4B1C392E2AAE366E6CBEDFFCEDF387E29DE20BE37B
-          17982FC85D7079A1CEC2F485A716A92E122C3A96404C884E3894F041102AA816
-          8C25F21377258E0A79C21DC267222FD136D188D8435C2A1E4EF2482A4D7A92EC
-          91BC357924C533A52CE5B98427A990BC4C0D4CDD9B3A9E169A76206D323D3ABD
-          31839291907142AA214D93B667EA67E66676CBAC6585B2FEC56E8BB72F1E9507
-          C96BB390AC05592D0AB642A6E8545A28D72A07B267655766BFCD89CA3996AB9E
-          2BCDEDCCB3CADB90379CEF9FFFED12C212E192B6A5864B572D1D58E6BDAC6A39
-          B23C7179DB0AE315052B865606AC3CB88AB62A6DD54FABED5797AE7EBD267A4D
-          6B815EC1CA82C1B5016BEB0B550AE5857DEBDCD7ED5D4F582F59DFB561FA869D
-          1B3E15898AAE14DB1797157FD828DC78E51B876FCABF99DC94B4A9ABC4B964CF
-          66D266E9E6DE2D9E5B0E96AA97E6970E6E0DD9DAB40DDF56B4EDF5F645DB2F97
-          CD28DBBB83B643B9A3BF3CB8BC65A7C9CECD3B3F54A454F454FA5436EED2DDB5
-          61D7F86ED1EE1B7BBCF634ECD5DB5BBCF7FD3EC9BEDB5501554DD566D565FB49
-          FBB3F73FAE89AAE9F896FB6D5DAD4E6D71EDC703D203FD07230EB6D7B9D4D51D
-          D23D54528FD62BEB470EC71FBEFE9DEF772D0D360D558D9CC6E223704479E4E9
-          F709DFF71E0D3ADA768C7BACE107D31F761D671D2F6A429AF29A469B539AFB5B
-          625BBA4FCC3ED1D6EADE7AFC47DB1F0F9C343C59794AF354C969DAE982D39367
-          F2CF8C9D959D7D7E2EF9DC60DBA2B67BE763CEDF6A0F6FEFBA1074E1D245FF8B
-          E73BBC3BCE5CF2B874F2B2DBE51357B8579AAF3A5F6DEA74EA3CFE93D34FC7BB
-          9CBB9AAEB95C6BB9EE7ABDB57B66F7E91B9E37CEDDF4BD79F116FFD6D59E393D
-          DDBDF37A6FF7C5F7F5DF16DD7E7227FDCECBBBD97727EEADBC4FBC5FF440ED41
-          D943DD87D53F5BFEDCD8EFDC7F6AC077A0F3D1DC47F7068583CFFE91F58F0F43
-          058F998FCB860D86EB9E383E3939E23F72FDE9FCA743CF64CF269E17FEA2FECB
-          AE17162F7EF8D5EBD7CED198D1A197F29793BF6D7CA5FDEAC0EB19AFDBC6C2C6
-          1EBEC97833315EF456FBEDC177DC771DEFA3DF0F4FE47C207F28FF68F9B1F553
-          D0A7FB93199393FF040398F3FC63332DDB000003284944415478DA63FCFFFF3F
-          C34002C641E300E94621395676C6F98C0CFF6D80C26CB4B1EEFFAFFF0C8C477E
-          FFFC9FF8B4FEDD23140728B40BED1390E575E415E364606464A48DF540BB3EBF
-          FACEF0E1F1E7FD0F2ADF39A13840B143E8A7B4A1281BAD2C4776C4D3F3AF7FDD
-          AF78C78EE600E1FFD2062234B51C069E5E78C370BFE22D238603A4F4B03BA04C
-          A791C14F2E9C819181F4D0F90F849B1EAD64E8BA520F177B76098703247584B1
-          1A72D4E7265996233BC27A8B3A9CFFFCCA5BEC0E90D016C26AC071DFDB60DA72
-          B32AC99663D3FBE2EA3BEC0E10D714C46AC809FF3B60DA62A30AC90EC0A6F7E5
-          F5F7D81D20A68EDD012703218698AF8718D2613E95A1E3420DC3879FEF093A00
-          5D2F08BCBA89C301A2AA02580D39157C174C9BAD5586F33FFE7ACFD07EAE8661
-          DFD31D781D80AE17045EDFFE80DD01222AFC4405EBE9907B7036C801EDE7AA71
-          86064CADE91A25B8D89B3B1FB13B40588938079C09BB87C2FF000C8DB633D50C
-          FB9EECC0A9D66415C2016FEFE1708090021F5CD1D988FB44390619801CD07ABA
-          0A253460E618AF50848BBD7BF009BB0304E578E18ACE453D20D901E0D0005A0E
-          72C4DE47DB51CC315AA60057F3FED167EC0E1090E5812B3A1FFD906C07B49CAA
-          843B00668EE15279849AC75FB03B805F9A1BAEE842EC23922D0759DA7CA20225
-          0A60E6182C96838B7D7CFA15BB03F824B989B2E8623CAAE34016361FAF60D8F3
-          703B4EB5FA0B110EF8F41C87037825B88872C0A584C770F69E87DB189A80967F
-          F8F11EAF5ABD05B270B1CF2FBE6177000FB031820D5C4E7A02A675E7C9C0F920
-          5F371D2D67D8FD601B5EC7A2EB05812FC046095607708B706035E44ACA5330AD
-          33471A4CF7BBCC66683C520EF4F53B82A185AE1704BEBEF981DD015C42D81D70
-          350D6288F62C6906520136BDDFDEE17000A7203B5643AEA53F03D35A33A54876
-          0036BDDFDFFFC4EE000E7EEC8DE16B99CF286E90684D4738E0C7C75FD81DC0CE
-          8BDD018D0E5D0C61DA316437C9565D5DC2507FA00C2EF6F3330E07B071B392ED
-          4B52C0AFAFBFB13940E8272B170B300868DB2C0785C9EF6F7F309BE5A08E0933
-          2B9323130B134DADFFF7E71FC3DFDFFF303B2603DE351B2830E00E0000F44308
-          DF7A6C2FDC0000000049454E44AE426082}
+          F4000000097048597300000EC400000EC401952B0E1B000003224944415478DA
+          63FCCFF09F612001E3A07240D4B280FF679E9C60F8FDF7374D2C636566653091
+          B1605816B58111C301914BFDFF5FFF778181578C93819191916C4BF081FFFFFF
+          337C7EF59D4193C9806179F446461407A87549FC17D3E3A799E5C88E7875E923
+          C3ADB217A80E506C17FE2F6D204253CB61E0E985370CF72BDF623A404A0FBB03
+          CA741A19FCE4C2191819480F1D90F99B1EAD64E8BA520F177B76098703247584
+          B11A72D4E7265996233BC27A8B3A9CFFFCCA5BEC0E90D016C26AC071DFDB60DA
+          72B32AC99663D3FBE2EA3BEC0E10D714C46AC809FF3B60DA62A30AC90EC0A6F7
+          E5F5F7D81D20A68EDD012703218698AF8718D2613E95A1E3420DC3879FEF093A
+          005D2F08BCBA89C301A2AA02580D39157C174C9BAD5586F33FFE7ACFD07EAE86
+          61DFD31D781D80AE17045EDFFE80DD01222AFC4405EBE9907B7036C801EDE7AA
+          7186064CADE91A25B8D89B3B1FB13B40588938079C09BB87C2FF000C8DB633D5
+          0CFB9EECC0A9D66415C2016FEFE1708090021F5CD1D988FB44390619801CD07A
+          BA0A253460E618AF50848BBD7BF009BB0304E578E18ACE453D20D901E0D0005A
+          0E72C4DE47DB51CC315AA60057F3FED167EC0E1090E5812B3A1FFD906C07B49C
+          AA843B00668EE15279849AC75FB03B805F9A1BAEE842EC23922D0759DA7CA202
+          250A60E6182C96838B7D7CFA15BB03F824B989B2E8623CAAE34016361FAF60D8
+          F3703B4EB5FA0B110EF8F41C87037825B88872C0A584C770F69E87DB189A8096
+          7FF8F11EAF5ABD05B270B1CF2FBE6177000FB031820D5C4E7A02A675E7C9C0F9
+          205F371D2D67D8FD601B5EC7A2EB05812FC046095607708B706035E44ACA5330
+          AD33471A4CF7BBCC66683C520EF4F53B82A185AE1704BEBEF981DD015C42D81D
+          70350D6288F62C6906520136BDDFDEE17000A7203B5643AEA53F03D35A33A548
+          760036BDDFDFFFC4EE000E7E36EC86643EA3B841A2351DE1801F1F7F6177003B
+          2F7607343A74318469C790DD245B75750943FD8132B8D8CFCF381CC0C6CD4AB6
+          2F4901BFBEFEC67400A859CEC0FE0F244463EB81F6FD64C26C96833A26A79E1D
+          65606261A2A9F5FFFEFC633093B2C6EC9880C08076CD060A0CB8030033B5DDF0
+          F14A72EC0000000049454E44AE426082}
       end
       item
         Background = clWindow
@@ -4337,6 +4330,84 @@ object LoginDialog: TLoginDialog
           1EBFE344889233D1DEDA1FE04BF866E14D070308530BACDF349ECF683C5CC905
           209FA6A7CBB18441E79A49DF3DB88215E04EC51D07F80B8CCA82E42EA50F1200
           00000049454E44AE426082}
+      end
+      item
+        Background = clWindow
+        Name = 'Open Workspace (reduced alpha)'
+        PngImage.Data = {
+          89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A
+          F4000000097048597300000EC400000EC401952B0E1B000003894944415478DA
+          CD97594C13511486FF514131582211EB0215D00A86B40868D182EC120551D420
+          D1444441C50D9704892F3E698C89BB318A3198880FC62722028922C8E28A6044
+          C02014A254340A820B60A5EDB52D6218E64E193A21781E7ACF3DA73DE7EB7F97
+          C930040463698C5080C8C345A4F9E34FD10DDDA58E283915C58C18C063732ED9
+          1017211AE0765E315A72E26D03709EEE2A1AE0EB67ADED005999E1163FFBC66D
+          6C4BDAF02F3792F9CE9325FF3140C5F578D2F9E1251520BDE13CEAAEAD16BD04
+          3EA977E800F545C789DDC45EC8D5FBE90A243FC2ABAB71163FF7D15BCB181F34
+          9FEAD3CC9C379BEF8E3C2E40A7F62579766B2354095B6037C9C114FEAB0AF9F7
+          01658627AA2EAF12AD40C0AEBB5C808759CB894C39172E1E720CEACCF2951972
+          3CBF146BF1F39F365AC6D82572AA4F3373DE6CAA3DF95C80BC63734858EA1EDE
+          E6FD00DE787C3146B402EA7D057C0069FD011E0045860FCACEF503DC7BD16419
+          A317CDA3FA3433E7CD16728007203C753B5D81BF53C561258ACFAC14AD40C4A1
+          421E0592932C81DA07C5686FD58A6E64CD9C66F82024B5806101846C5A0FFD6F
+          1DAA0A2B109D5E347ADD891E05A7C31093D9C006085EBF12DFBE74A0B3632214
+          2B0EA1F75BC9C02F865610E0F3E77E7CFE084D653396A5DC6503A8E342D1A669
+          8544B61C33E7FB41D753C35B84B1A1F180FFA1AE1EBA5F1E50C69E60030446AB
+          A079AD8157E4414C96184CCBA1E52F488435A3CDDF94966386F76EB82D4C6003
+          2C0E55A0B6F22DD449670063038C86EF82FE19437D98F1C354E616C06F4D0E9C
+          6629D800FE81F35053FD0E51BBAFA0AFBB0C84186C96994F2D6234A2342717B1
+          4734DC63E8E52D45478F2302D6A4A1AFA78A5D6818C91981803FBF76A1BEA215
+          6169455C0037D7299820F5855C150C83AEC9A6F51DCEFFA4D1A2AB5D06FFB517
+          B80053257698A35E0D17D95418F55F6C6ECC58D9A80DCFEA2199BD059E81295C
+          00077B06FEEB92E0E0D86DDA843DBC45C428F322BF120BA2B330CD7D29178031
+          85A2CCCF03C37BD30624021A58CFD3EE8AE29BE5A61BB099617D6F0040E22C81
+          6FB00AFADEB6619A0A01E3E6F47D06D456F7222AFD091DC0C337000B4256998E
+          8A4E60E3914175B6B5A0A5B60BAAC46C3A80B79F0CCE2E0E43CE3F9FA42357E3
+          93F607ECA55B210FDE4B07084A4884C4F2E2616D3351E2C44A6E90FFEA7E1E5C
+          FD8F422A8FE002DC3B1B4074DDED184D1B37DEDE7403363243E3825F4C46CBC6
+          1CE00F1DAE12FFACD6A3760000000049454E44AE426082}
+      end
+      item
+        Background = clWindow
+        Name = 'Open saved session (reduced alpha)'
+        PngImage.Data = {
+          89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A
+          F4000000097048597300000EC400000EC401952B0E1B000004344944415478DA
+          C5967B6C53551CC7BF57EC60B875AF6C0C6C3719CE559359D84217F760734C54
+          DC24B02C05133694B9CC8ECC487CED1F638CC6040D46A309C6074631F8074422
+          B8105D8031A74279C81C05365B1CAB6BB352DBD2EDF6DDE369DDA377BD77EB6D
+          43F82537F7DC73CEEF7C3FBFDFEFDC7B2E434020C65A35AF9081CB5744F9CC35
+          65F143F8ECE33D4CA8CD88055055D793FC024542002386AB38DB7B2C7E00D97D
+          8568D4EC01A1AE61EFA97BE47330B27F7A8C5EC7BF7815C6BF87130358212FC0
+          66CDDEF03389100F5970AA11D9EF0B00131E02A71BB87CF8658C8D1A1203C85D
+          918F4D1D1F0A461FBADF7213385CA01781CB3BAB6139BE1BE6B191C400727265
+          68E8F824AC1619A997466A7112D8D850D4FCEB9A8E7562DC6CE407E8FF6A0BF9
+          D7789ED73153BE16152D8798104056F672D4EFDA87A980E1A7C2E65B04761799
+          298590DDF85E03ABC5140DA0EB79874816BB5058FE22AFE370FF070804D2D1FC
+          E6696464E55080CFC31BCDCE121AF56CED1732FDA136D8ACE35C009BF12239F3
+          DD36A89A5A2059923C1517668B4ACDE76671F6F0B778E38755484BCFC2E3BBF6
+          639C0AB35E7125BC76F03938EC562EC0A94F1F23790FAF42F6CA42442847B52D
+          86216CED322125350DAB771C803F284E3C64835F6FC784D3C10538FA763EA969
+          EDE0118D0659AFEEC7D27B52B0E6D983A2C5437671FF36B093137C00EDE1098C
+          40F4D3ED5AF5EF5842CB5459511E17C02FFDBFC2ED7645033CDAFA3CBF2801A7
+          BF76AB16499224D1C28BBAAE86EF817715F0FABC3C19D8D1FC7F8D4E9CC4CD1B
+          A3714517ABD9BDE9D8FED6252EC0BA671A11A064E7BAFBB0A1B3E7F6A9133FBA
+          DFAFC6C6D787B800958D4FC261B1D27774318A9FD80D97E324B714A2DAC263CE
+          7113F45A03AA76CE29417943354C06235265B5585E540A0F3B20B80813A3185F
+          FB1F9D0EEE4939940DEF7101CA36A8A0FF538FA2F52F61A93400BFD728BC2011
+          23CC7DBED2DB875C8506F2D54D5C80B5D5C518D40EA1BC991EB3C12104038E98
+          A264780F336118ED916ED4BCF00733E33F0D5052763F062E8CA04EB30FBEC9D3
+          F4500988AE2FEFBC886C916010BDDF1CC1535DFA688022C53258D914946E6A87
+          8F3D2FB8486C59E09F3761B343D7378A9AF69E6800B92C15772F53A250558980
+          E7AFB8EABBD03CB3DE08FBCD3C946CFE281A20234D82FC479E46765E06827E4B
+          DC62CC3C1BF5DA191DA4F7B6A0A06C673440721283922DCD484E99A49B90155C
+          24916C9CFB518BAAB60126D2630680A1DD75AD6DF4633D42372089416CFE71BE
+          43EDC4813E6C7CCDC00F20CD944259A982DF35B680E84291F3F7FBE9AFF1E005
+          17EA3A7FE30758A92CC583EBEAE9ABE211211C5B3642661BBB8EEB8376A8D45F
+          F20328D6E421333B79CEFB2F94D2D885A7CD6C744292D38207AA3AF9012A9AD4
+          90E6C8C4A797CC3316D1BEF4F35194AA4F31736786017EDA5B423CAC15B7D3EE
+          5A9444BF80C3FC0077D2EE38C07FA2E884FF4C7BCF980000000049454E44AE42
+          6082}
       end>
     Left = 406
     Top = 253

+ 4 - 1
source/forms/Login.h

@@ -313,6 +313,7 @@ private:
   bool FLoading;
   bool FSortEnablePending;
   std::unique_ptr<TImageList> FButtonImageList;
+  std::map<int, int> FButtonImagesMap;
   TIncrementalSearch FSiteSearch;
   TForm * FLinkedForm;
   TPoint FPrevPos;
@@ -399,12 +400,14 @@ private:
   void __fastcall ParseHostName();
   void __fastcall ResetNewSiteData();
   TModalResult __fastcall DefaultResult();
-  int __fastcall AddLoginButtonImage(bool Enabled);
+  int AddLoginButtonImage(int Index, bool Enabled);
   void __fastcall WMWindowPosChanged(TWMWindowPosChanged & Message);
   void __fastcall CMDpiChanged(TMessage & Message);
   void __fastcall GenerateImages();
   void __fastcall CMVisibleChanged(TMessage & Message);
   void UpdateS3Credentials();
+  void UpdateLoginButton();
+  void FloodFill(TBitmap * Bitmap, int X, int Y);
 
 protected:
   void __fastcall Default();

+ 2 - 0
source/resource/TextsWin.h

@@ -647,6 +647,8 @@
 #define RIGHT_MENU_CAPTION      6037
 #define COPY_LOCAL_COPY_CAPTION 6038
 #define COPY_LOCAL_MOVE_CAPTION 6039
+#define LOGIN_OPEN              6040
+#define LOGIN_LOGIN             6041
 
 // 2xxx is reserved for TextsFileZilla.h
 

+ 2 - 0
source/resource/TextsWin1.rc

@@ -652,6 +652,8 @@ BEGIN
         RIGHT_MENU_CAPTION, "&Right"
         COPY_LOCAL_COPY_CAPTION, "Copy"
         COPY_LOCAL_MOVE_CAPTION, "Move"
+        LOGIN_OPEN, "Open"
+        LOGIN_LOGIN, "Login"
 
         WIN_VARIABLE_STRINGS, "WIN_VARIABLE"
         WINSCP_COPYRIGHT, "Copyright © 2000–2021 Martin Prikryl"

+ 11 - 1
source/windows/WinInterface.cpp

@@ -1264,7 +1264,17 @@ void __fastcall CenterButtonImage(TButton * Button)
 
     std::unique_ptr<TCanvas> Canvas(CreateControlCanvas(Button));
 
-    UnicodeString Caption = Button->Caption.Trim();
+    UnicodeString Caption;
+    // Centering unlinks the caption from the action
+    TAction * Action = dynamic_cast<TAction *>(Button->Action);
+    if (Action != NULL)
+    {
+      Caption = Action->Caption;
+    }
+    else
+    {
+      Caption = Button->Caption.Trim();
+    }
     UnicodeString Padding;
     while (Canvas->TextWidth(Padding) < ImageWidth)
     {