From 8683cd23f3276ecc5038f13b28a93b6fa1d2e28a Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Thu, 27 Apr 2017 14:40:35 -0500 Subject: [PATCH] Icon changes --- .gitignore | 1 + htdocs/favicon.ico | Bin 0 -> 1150 bytes htdocs/index.html | 1 + include/siadrive_api/siacommon.h.in | 10 +++++++++ res/SiaDriveLogo.ico | Bin 0 -> 8062 bytes res/SiaDriveLogo.png | Bin 0 -> 1889 bytes res/SiaDriveLogo.xcf | Bin 0 -> 3760 bytes src/siadrive/main.cpp | 3 --- src/siadrive/siadriveapp.cpp | 2 +- src/siadrive/siadrivehandler.cpp | 31 +++++++++++++++++++++++++++- src/siadrive_api/siacommon.cpp | 3 ++- src/siadrive_api/siadriveconfig.cpp | 10 +++++++-- 12 files changed, 53 insertions(+), 8 deletions(-) create mode 100644 htdocs/favicon.ico create mode 100644 res/SiaDriveLogo.ico create mode 100644 res/SiaDriveLogo.png create mode 100644 res/SiaDriveLogo.xcf diff --git a/.gitignore b/.gitignore index 98d300c..5a05fcd 100644 --- a/.gitignore +++ b/.gitignore @@ -256,3 +256,4 @@ ModelManifest.xml /SiaDrive_Packager_Debug.iss /include/siadrive_api/siacommon.h /SiaDrive_Packager_Release.iss +/3rd_party/Sia-v1.2.1-windows-amd64.zip diff --git a/htdocs/favicon.ico b/htdocs/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..96921a5586c8c0ae0d7390f2c0f3afb75befb33b GIT binary patch literal 1150 zcmd5)Nla5w6g_|FBtcOFrbVPyL=wh;J5ds%Vzf2Hsda*d#uA%AHyXmAAt97#sL)b@ zmO>E%8cifbuuKBBNT~xZ*tl~;TxgWkl|X{`m#}DmV#3b%bKZUT{(J7d@B9xi^u)!1 zb~Va)AOS!cfkG77h?4>6-R_tTg#G_$(_YE|fzj$S)P#L>PC9)qEBmA_TXUq~u(a@0 z&OfIm4z&7oiB6yKh`2$r{;Q^xmpAUJJqF`JtEp~pe(wU*_HmALOmd=HI(<3{3-fS7 zn;ma%RF;_P5*I65+3+%pyIKyCh3Qk2T{UGvO<)5mJ47wn@P9=wpS&BHuj-6_YtZn5UV5RP#vTF0ac z; SiaDrive + diff --git a/include/siadrive_api/siacommon.h.in b/include/siadrive_api/siacommon.h.in index 6b1c5d9..7967c2c 100644 --- a/include/siadrive_api/siacommon.h.in +++ b/include/siadrive_api/siacommon.h.in @@ -112,6 +112,14 @@ get_access:\ type Get##name() const { return json_doc[#name].get();}\ set_access:\ type Set##name(const type& value) { json_doc[#name] = value; return value; }\ +protected:\ + bool Check##name() { return json_doc.find(#name) != json_doc.end(); } + +#define JPropertyCb(type, name, get_access, set_access, json_doc, cb) \ +get_access:\ + type Get##name() const { return json_doc[#name].get();}\ +set_access:\ + type Set##name(const type& value) { json_doc[#name] = value; cb(value); return value; }\ protected:\ bool Check##name() { return json_doc.find(#name) != json_doc.end(); } @@ -212,6 +220,8 @@ BOOL SIADRIVE_EXPORTABLE RecurDeleteFilesByExtentsion(const SString& folder, con std::vector SIADRIVE_EXPORTABLE GetAvailableDrives(); std::int32_t SIADRIVE_EXPORTABLE GetRegistry(const SString& name, const std::int32_t& defaultValue); + +HRESULT SIADRIVE_EXPORTABLE CreateShortcut(const SString& execPath, const SString& description, const SString& shortcutPath, const bool& minimized); #endif bool SIADRIVE_EXPORTABLE ExecuteProcess(CSiaDriveConfig* siaDriveConfig, FilePath process, FilePath workingDir, const bool& waitForExit); diff --git a/res/SiaDriveLogo.ico b/res/SiaDriveLogo.ico new file mode 100644 index 0000000000000000000000000000000000000000..220267c07451fdc65753f4a74666966146c2ce90 GIT binary patch literal 8062 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 N(EY~5Yv!}(zX1n3{AK_E literal 0 HcmV?d00001 diff --git a/src/siadrive/main.cpp b/src/siadrive/main.cpp index 2f39298..1bd31b1 100644 --- a/src/siadrive/main.cpp +++ b/src/siadrive/main.cpp @@ -22,7 +22,6 @@ int APIENTRY wWinMain(HINSTANCE hInstance, { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); - ::CoInitializeEx(nullptr, COINIT_MULTITHREADED); std::shared_ptr siaDriveConfig(new CSiaDriveConfig); const EventLevel eventLevel = EventLevelFromString(siaDriveConfig->GetEventLevel()); @@ -72,7 +71,5 @@ int APIENTRY wWinMain(HINSTANCE hInstance, CefRunMessageLoop(); CefShutdown(); - ::CoUninitialize(); - return 0;; } diff --git a/src/siadrive/siadriveapp.cpp b/src/siadrive/siadriveapp.cpp index 2d370b4..a68dd24 100644 --- a/src/siadrive/siadriveapp.cpp +++ b/src/siadrive/siadriveapp.cpp @@ -383,7 +383,7 @@ void CSiaDriveApp::OnContextInitialized() #endif windowInfo.width = 800; windowInfo.height = 675; - + CefBrowserHost::CreateBrowser(windowInfo, handler, url.str(), browserSettings, nullptr); } } diff --git a/src/siadrive/siadrivehandler.cpp b/src/siadrive/siadrivehandler.cpp index e2e3db4..2dd5bad 100644 --- a/src/siadrive/siadrivehandler.cpp +++ b/src/siadrive/siadrivehandler.cpp @@ -5,11 +5,16 @@ #include #include #include - +#include using namespace Sia; +using namespace Sia::Api; CSiaDriveHandler* g_instance = nullptr; +#ifdef _WIN32 +static NOTIFYICONDATA g_notifyIcon = { 0 }; +#endif + CSiaDriveHandler::CSiaDriveHandler(const bool& useViews) : _useViews(useViews), _isClosing(false) @@ -51,6 +56,29 @@ void CSiaDriveHandler::OnTitleChange(CefRefPtr browser, const CefStr void CSiaDriveHandler::OnAfterCreated(CefRefPtr browser) { CEF_REQUIRE_UI_THREAD(); +#ifdef _WIN32 + SString filePath(FilePath(".\\htdocs\\favicon.ico").MakeAbsolute()); + HWND hwnd = browser->GetHost()->GetWindowHandle(); + HINSTANCE hinstance = ::GetModuleHandle(nullptr); + HICON icon = static_cast(::LoadImage(hinstance, &filePath[0], IMAGE_ICON, 16, 16, LR_LOADFROMFILE | LR_SHARED)); + + ::SendMessage(hwnd, WM_SETICON, ICON_SMALL, reinterpret_cast(icon)); + ::SendMessage(hwnd, WM_SETICON, ICON_BIG, reinterpret_cast(icon)); + ::SendMessage(GetWindow(hwnd, GW_OWNER), WM_SETICON, ICON_SMALL, reinterpret_cast(icon)); + ::SendMessage(GetWindow(hwnd, GW_OWNER), WM_SETICON, ICON_BIG, reinterpret_cast(icon)); + + g_notifyIcon.cbSize = sizeof(g_notifyIcon); + g_notifyIcon.hWnd = hwnd; + g_notifyIcon.hIcon = icon; + GUID g = { 0 }; + ::CoCreateGuid(&g); + g_notifyIcon.guidItem = g; + g_notifyIcon.uVersion = NOTIFYICON_VERSION_4; + g_notifyIcon.uFlags = NIF_ICON | NIF_GUID; + ::Shell_NotifyIcon(NIM_ADD, &g_notifyIcon); +#else + a +#endif _browserList.push_back(browser); } @@ -87,6 +115,7 @@ void CSiaDriveHandler::OnBeforeClose(CefRefPtr browser) if (_browserList.empty()) { CefQuitMessageLoop(); + ::Shell_NotifyIcon(NIM_DELETE, &g_notifyIcon); } } diff --git a/src/siadrive_api/siacommon.cpp b/src/siadrive_api/siacommon.cpp index e9ef72c..cd4d675 100644 --- a/src/siadrive_api/siacommon.cpp +++ b/src/siadrive_api/siacommon.cpp @@ -234,7 +234,7 @@ bool ExecuteProcess(CSiaDriveConfig* siaDriveConfig, FilePath process, FilePath return false; } -HRESULT CreateShortcut(const SString& execPath, const SString& description, const SString& shortcutPath) +HRESULT CreateShortcut(const SString& execPath, const SString& description, const SString& shortcutPath, const bool& minimized) { IShellLink* shellLink(nullptr); HRESULT hr = ::CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_IShellLink, reinterpret_cast(&shellLink)); @@ -243,6 +243,7 @@ HRESULT CreateShortcut(const SString& execPath, const SString& description, cons shellLink->SetPath(&execPath[0]); shellLink->SetWorkingDirectory(&FilePath(execPath).RemoveFileName()[0]); shellLink->SetDescription(&description[0]); + shellLink->SetShowCmd(minimized ? SW_MINIMIZE : SW_SHOWDEFAULT); IPersistFile* persistFile(nullptr); hr = shellLink->QueryInterface(IID_IPersistFile, reinterpret_cast(&persistFile)); diff --git a/src/siadrive_api/siadriveconfig.cpp b/src/siadrive_api/siadriveconfig.cpp index 7542d7e..d432706 100644 --- a/src/siadrive_api/siadriveconfig.cpp +++ b/src/siadrive_api/siadriveconfig.cpp @@ -23,8 +23,9 @@ CSiaDriveConfig::~CSiaDriveConfig() void CSiaDriveConfig::OnAutoStartOnLogonChanged(const bool& value) { +#ifndef _DEBUG #ifdef _WIN32 - PWSTR startupPath; + PWSTR startupPath = nullptr; if (SUCCEEDED(::SHGetKnownFolderPath(FOLDERID_Startup, 0, nullptr, &startupPath))) { FilePath shortcutPath(startupPath, "SiaDrive.lnk"); @@ -37,7 +38,7 @@ void CSiaDriveConfig::OnAutoStartOnLogonChanged(const bool& value) SString execPath; execPath.Resize(MAX_PATH + 1); GetModuleFileName(::GetModuleHandle(nullptr), &execPath[0], MAX_PATH); - CreateShortcut(execPath, "SiaDrive", shortcutPath); + CreateShortcut(execPath, "SiaDrive", shortcutPath, true); } } else if (exists) @@ -49,6 +50,7 @@ void CSiaDriveConfig::OnAutoStartOnLogonChanged(const bool& value) #else a #endif +#endif } bool CSiaDriveConfig::LoadDefaults() @@ -150,6 +152,10 @@ bool CSiaDriveConfig::LoadDefaults() SetLaunchFileMgrOnMount(true); changed = true; } + + // Do this to add/remove shortcut on start-up + OnAutoStartOnLogonChanged(GetAutoStartOnLogon()); + return changed; }