1
0

Tray menu

This commit is contained in:
Scott E. Graves
2017-04-30 16:07:14 -05:00
parent 59c3788d45
commit c397d97cec
4 changed files with 102 additions and 8 deletions

View File

@@ -11,7 +11,7 @@ if not exist "%MODE%.complete" (
set CEF_USE_GN=1
if "%MODE%"=="Debug" (
set GN_DEFINES=is_win_fastlink=true fatal_linker_warnings=false
set GN_DEFINES=fatal_linker_warnings=false
) else (
set GN_DEFINES=fatal_linker_warnings=false
)
@@ -68,12 +68,10 @@ if not exist "%MODE%.complete" (
copy /y chromium_git\chromium\src\out\%MODE%_GN_x64\cef.pak bin\%MODE%\
copy /y chromium_git\chromium\src\out\%MODE%_GN_x64\*.bin bin\%MODE%\
copy /y chromium_git\chromium\src\out\%MODE%_GN_x64\cef_*.pak bin\%MODE%\
if "%MODE%"=="Release" (
echo "Cleaning build output... Please wait..."
rd /s /q chromium_git\chromium\src\out\%MODE%_GN_x64
rd /s /q chromium_git\chromium\src\out\%MODE%_GN_x86
)
echo "Cleaning build output... Please wait..."
rd /s /q chromium_git\chromium\src\out\%MODE%_GN_x64
rd /s /q chromium_git\chromium\src\out\%MODE%_GN_x86
echo "1">%MODE%.complete
)

View File

@@ -28,6 +28,8 @@ public:
JProperty(bool, LaunchBundledSiad, public, public, _configDocument)
JProperty(bool, LaunchFileMgrOnMount, public, public, _configDocument)
JProperty(std::string, EventLevel, public, public, _configDocument)
JProperty(bool, PromptOnClose, public, public, _configDocument)
JProperty(bool, CloseToTray, public, public, _configDocument)
private:
const bool _autoSave;

View File

@@ -12,7 +12,80 @@ using namespace Sia::Api;
CSiaDriveHandler* g_instance = nullptr;
#ifdef _WIN32
#define WM_SIA_TRAY_ICON (WM_USER+2048)
#define MENU_ITEM_SHOW_HIDE 0x00010000;
#define MENU_ITEM_EXIT 0x00010001;
static HMENU g_trayMenu = nullptr;
static WNDPROC g_defProc;
static NOTIFYICONDATA g_notifyIcon = { 0 };
static LRESULT CALLBACK SiaWndProc(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
if (msg == WM_SIA_TRAY_ICON)
{
switch (lparam)
{
case WM_LBUTTONDBLCLK:
{
::ShowWindow(wnd, ::IsWindowVisible(wnd) ? SW_HIDE : SW_RESTORE);
if (::IsWindowVisible(wnd))
{
::SetForegroundWindow(wnd);
}
}
break;
case WM_CONTEXTMENU:
{
// Create menu
if (g_trayMenu)
{
::DestroyMenu(g_trayMenu);
g_trayMenu = nullptr;
}
g_trayMenu = ::CreatePopupMenu();
// Add menu items
{
MENUITEMINFO menuItem = { 0 };
menuItem.cbSize = sizeof(menuItem);
menuItem.fMask = MIIM_STRING | MIIM_ID | MIIM_CHECKMARKS | MIIM_STATE | MIIM_TYPE;
menuItem.wID = MENU_ITEM_SHOW_HIDE;
menuItem.fType = MFT_RADIOCHECK;
menuItem.fState = ::IsWindowVisible(wnd) ? MFS_CHECKED : MFS_UNCHECKED;
menuItem.dwTypeData = ::IsWindowVisible(wnd) ? L"Hide" : L"Show";
::InsertMenuItem(g_trayMenu, 0, FALSE, &menuItem);
}
{
MENUITEMINFO menuItem = { 0 };
menuItem.cbSize = sizeof(menuItem);
menuItem.fMask = MIIM_TYPE;
menuItem.fType = MFT_SEPARATOR;
::InsertMenuItem(g_trayMenu, 0, FALSE, &menuItem);
}
{
MENUITEMINFO menuItem = { 0 };
menuItem.cbSize = sizeof(menuItem);
menuItem.fMask = MIIM_STRING | MIIM_ID | MIIM_TYPE;
menuItem.wID = MENU_ITEM_EXIT;
menuItem.fType = MFT_STRING;
menuItem.dwTypeData = L"Exit";
::InsertMenuItem(g_trayMenu, 0, FALSE, &menuItem);
}
// Display menu
POINT pt = { 0 };
::GetCursorPos(&pt);
::SetForegroundWindow(wnd);
::TrackPopupMenu(g_trayMenu, 0, pt.x, pt.y, 0, wnd, nullptr);
::PostMessage(wnd, WM_NULL, 0, 0);
}
break;
}
}
return ::CallWindowProc(g_defProc, wnd, msg, wparam, lparam);
}
#endif
CSiaDriveHandler::CSiaDriveHandler(const bool& useViews) :
@@ -71,6 +144,9 @@ void CSiaDriveHandler::OnAfterCreated(CefRefPtr<CefBrowser> browser)
CEF_REQUIRE_UI_THREAD();
#ifdef _WIN32
HWND hwnd = browser->GetHost()->GetWindowHandle();
g_defProc = reinterpret_cast<WNDPROC>(::GetWindowLongPtr(hwnd, GWLP_WNDPROC));
::SetWindowLongPtr(hwnd, GWLP_WNDPROC,reinterpret_cast<LONG_PTR>(SiaWndProc));
HINSTANCE hinstance = ::GetModuleHandle(nullptr);
HICON icon = ::LoadIcon(hinstance, L"IDI_ICON");
@@ -82,11 +158,12 @@ void CSiaDriveHandler::OnAfterCreated(CefRefPtr<CefBrowser> browser)
g_notifyIcon.cbSize = sizeof(g_notifyIcon);
g_notifyIcon.hWnd = hwnd;
g_notifyIcon.hIcon = icon;
g_notifyIcon.uCallbackMessage = WM_SIA_TRAY_ICON;
GUID g = { 0 };
::CoCreateGuid(&g);
g_notifyIcon.guidItem = g;
g_notifyIcon.uVersion = NOTIFYICON_VERSION_4;
g_notifyIcon.uFlags = NIF_ICON | NIF_GUID;
g_notifyIcon.uFlags = NIF_ICON | NIF_GUID | NIF_MESSAGE;
::Shell_NotifyIcon(NIM_ADD, &g_notifyIcon);
#else
a
@@ -130,6 +207,11 @@ void CSiaDriveHandler::OnBeforeClose(CefRefPtr<CefBrowser> browser)
if (_browserList.size() == 0)
{
::Shell_NotifyIcon(NIM_DELETE, &g_notifyIcon);
if (g_trayMenu)
{
::DestroyMenu(g_trayMenu);
g_trayMenu = nullptr;
}
CefQuitMessageLoop();
}
}

View File

@@ -166,6 +166,18 @@ bool CSiaDriveConfig::LoadDefaults()
changed = true;
}
if (!CheckPromptOnClose())
{
SetPromptOnClose(false);
changed = true;
}
if (!CheckCloseToTray())
{
SetCloseToTray(true);
changed = true;
}
return changed;
}