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.
22 class CClipboardHelper
25 CClipboardHelper() : bClipBoardOpen(false) {}
27 bool Open(HWND hOwningWnd
);
28 static HGLOBAL
GlobalAlloc(SIZE_T dwBytes
);
33 inline CClipboardHelper::~CClipboardHelper()
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).
45 for (int attempt
= 0; attempt
< tries
; ++attempt
)
48 ::Sleep(1 << (attempt
- 1));
49 bClipBoardOpen
= (OpenClipboard(hOwningWnd
) != 0);
56 inline HGLOBAL
CClipboardHelper::GlobalAlloc(SIZE_T dwBytes
)
58 return ::GlobalAlloc(GMEM_MOVEABLE
, dwBytes
);