fix missing tray icon bug

This commit is contained in:
2022-07-22 01:47:05 +02:00
parent ecfb2f206d
commit b986bfde39
5 changed files with 20 additions and 26 deletions

View File

@@ -23,10 +23,8 @@
#include "resource.h"
#include "AsuroTool.h"
class __declspec(uuid("3bc52579-15fd-43bb-9686-6273c238535e")) TrayGUID;
UINT const WMAPP_NOTIFYCALLBACK = WM_APP + 1;
UINT const WMAPP_HIDEFLYOUT = WM_APP + 2;
const UINT TRAY_ID = 420;
const UINT WMAPP_NOTIFYCALLBACK = WM_APP + 1;
// Globals for use in callbacks
DrawData* gDrawData;
@@ -75,8 +73,8 @@ void init(DrawData& drawData, ApplicationData& appData)
// Set tray icon
NOTIFYICONDATA nid = { sizeof(nid) };
nid.hWnd = drawData.window_handle;
nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE | NIF_SHOWTIP | NIF_GUID;
nid.guidItem = __uuidof(TrayGUID);
nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE | NIF_SHOWTIP;
nid.uID = TRAY_ID;
nid.uCallbackMessage = WMAPP_NOTIFYCALLBACK;
HRESULT iconResult;
@@ -123,10 +121,6 @@ void draw(DrawData& drawData, ApplicationData& appData)
{
justDocked = false;
// sad :(
gDrawData = &drawData;
gAppData = &appData;
// Actual Drawing
if (isHidden)
{
@@ -167,9 +161,9 @@ void cleanup(DrawData& drawData, ApplicationData& appData)
{
// Remove tray icon
NOTIFYICONDATA nid = { sizeof(nid) };
nid.uFlags = NIF_GUID;
nid.guidItem = __uuidof(TrayGUID);
bool test = Shell_NotifyIcon(NIM_DELETE, &nid);
nid.hWnd = drawData.window_handle;
nid.uID = TRAY_ID;
Shell_NotifyIcon(NIM_DELETE, &nid);
}
ImVec2 menuBar(DrawData& drawData, ApplicationData& appData)
@@ -181,9 +175,7 @@ ImVec2 menuBar(DrawData& drawData, ApplicationData& appData)
{
if (ImGui::BeginMenu("Settings"))
{
bool prevDocked = appData.settings.docked;
ImGui::Checkbox("Docked", &appData.settings.docked);
if (appData.settings.docked != prevDocked)
if (ImGui::Checkbox("Docked", &appData.settings.docked))
{
closeMenu = true;
updateDocked(drawData, appData);
@@ -378,12 +370,13 @@ LRESULT CALLBACK trayIconEventHandler(int code, WPARAM wParam, LPARAM lParam)
if (data->message == WMAPP_NOTIFYCALLBACK)
{
switch (data->lParam)
auto id = HIWORD(data->lParam);
auto trayEvent = LOWORD(data->lParam);
if (id == TRAY_ID && trayEvent == WM_LBUTTONUP)
{
case NIN_SELECT:
glfwShowWindow(gDrawData->window);
glfwRestoreWindow(gDrawData->window);
break;
}
}
}