mirror of
https://github.com/nextcloud/desktop.git
synced 2024-12-18 03:41:50 +03:00
dc85ee3f0a
It seems like verclsid.exe hangs on our class IDs when invoked through explorer.exe for 5-10 seconds. It doesn't hang if I invoke the same command line from cmd.exe, so there could be some process parameters that don't play well with our extra thread or to the pipe connection that we do in it. Delay creating the RemotePathChecker thread until the first IsMemberOf call. verclsid.exe only seems to instantiate a object of each registered class, without actually using them, so we can use this as a workaround. This should be fixing issue #2680.
48 lines
No EOL
1.3 KiB
C++
48 lines
No EOL
1.3 KiB
C++
/**
|
|
* Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
|
|
*
|
|
* This library is free software; you can redistribute it and/or modify it under
|
|
* the terms of the GNU Lesser General Public License as published by the Free
|
|
* Software Foundation; either version 2.1 of the License, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
|
|
* details.
|
|
*/
|
|
|
|
#ifndef OCOVERLAY_H
|
|
#define OCOVERLAY_H
|
|
|
|
#pragma once
|
|
|
|
class RemotePathChecker;
|
|
|
|
class OCOverlay : public IShellIconOverlayIdentifier
|
|
|
|
{
|
|
public:
|
|
OCOverlay(int state);
|
|
|
|
IFACEMETHODIMP_(ULONG) AddRef();
|
|
IFACEMETHODIMP GetOverlayInfo(PWSTR pwszIconFile, int cchMax, int *pIndex, DWORD *pdwFlags);
|
|
IFACEMETHODIMP GetPriority(int *pPriority);
|
|
IFACEMETHODIMP IsMemberOf(PCWSTR pwszPath, DWORD dwAttrib);
|
|
IFACEMETHODIMP QueryInterface(REFIID riid, void **ppv);
|
|
IFACEMETHODIMP_(ULONG) Release();
|
|
|
|
protected:
|
|
~OCOverlay();
|
|
|
|
private:
|
|
//bool _GenerateMessage(const wchar_t*, std::wstring*);
|
|
void lazyInit();
|
|
|
|
bool _IsOverlaysEnabled();
|
|
long _referenceCount;
|
|
RemotePathChecker* _checker;
|
|
int _state;
|
|
};
|
|
|
|
#endif |