Fix typos
[TortoiseGit.git] / src / Utils / ClipboardHelper.h
blob6d97151a5275b3d70c1c850ab128589e51007a82
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2003-2010, 2020 - TortoiseSVN
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #pragma once
22 class CClipboardHelper
24 public:
25 CClipboardHelper() : bClipBoardOpen(false) {}
26 ~CClipboardHelper();
27 bool Open(HWND hOwningWnd);
28 static HGLOBAL GlobalAlloc(SIZE_T dwBytes);
29 private:
30 bool bClipBoardOpen;
33 inline CClipboardHelper::~CClipboardHelper()
35 if (bClipBoardOpen)
36 CloseClipboard();
39 inline bool CClipboardHelper::Open(HWND hOwningWnd)
41 // OpenClipboard may fail if another application has opened the clipboard.
42 // Try up to 8 times, with an initial delay of 1 ms and an exponential back off
43 // for a maximum total delay of 127 ms (1+2+4+8+16+32+64).
44 const int tries = 8;
45 for (int attempt = 0; attempt < tries; ++attempt)
47 if (attempt > 0)
48 ::Sleep(1 << (attempt - 1));
49 bClipBoardOpen = (OpenClipboard(hOwningWnd) != 0);
50 if (bClipBoardOpen)
51 return true;
53 return false;
56 inline HGLOBAL CClipboardHelper::GlobalAlloc(SIZE_T dwBytes)
58 return ::GlobalAlloc(GMEM_MOVEABLE, dwBytes);