From e74f58afb4c0d8bd6b8759ae9879ea08705254f1 Mon Sep 17 00:00:00 2001 From: Quantum Date: Wed, 3 Jun 2026 01:20:15 -0400 Subject: [PATCH] [idd] helper: allow no GPU warning to be configured --- idd/LGIddHelper/CConfigWindow.cpp | 27 +++++++++++++++++++++++---- idd/LGIddHelper/CConfigWindow.h | 5 +++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/idd/LGIddHelper/CConfigWindow.cpp b/idd/LGIddHelper/CConfigWindow.cpp index 398f7e8c..378c6462 100644 --- a/idd/LGIddHelper/CConfigWindow.cpp +++ b/idd/LGIddHelper/CConfigWindow.cpp @@ -23,6 +23,7 @@ #include "CGroupBox.h" #include "CEditWidget.h" #include "CButton.h" +#include "CCheckbox.h" #include #include #include @@ -51,6 +52,7 @@ CConfigWindow::CConfigWindow() : m_scale(1) { m_modes = m_settings.getModes(); m_defaultRefresh = m_settings.getDefaultRefresh(); + m_noGPU = m_settings.getNoGPU(); } if (!CreateWindowEx(0, MAKEINTATOM(s_atom), L"Looking Glass IDD Configuration", @@ -90,6 +92,7 @@ void CConfigWindow::updateFont() *m_version, *m_modeGroup, *m_modeBox, *m_widthLabel, *m_heightLabel, *m_refreshLabel, *m_modeWidth, *m_modeHeight, *m_modeRefresh, *m_modeUpdate, *m_modeDelete, *m_autosizeGroup, *m_defRefreshLabel, *m_defRefresh, *m_defRefreshHz, + *m_prefGroup, *m_prefNoGPU, })) SendMessage(child, WM_SETFONT, (WPARAM)m_font.Get(), 1); } @@ -167,6 +170,12 @@ LRESULT CConfigWindow::onCreate() else m_defRefresh->disable(); + m_prefGroup.reset(new CGroupBox(L"Preferences", WS_CHILD | WS_VISIBLE, m_hwnd)); + m_prefNoGPU.reset(new CCheckbox(L"Disable no GPU warning", WS_CHILD | WS_VISIBLE, m_hwnd)); + + if (m_noGPU) + m_prefNoGPU->setChecked(*m_noGPU); + LONG width, height; getMinimumSize(width, height); SetWindowPos(m_hwnd, NULL, 0, 0, width, height, SWP_NOMOVE | SWP_NOZORDER); @@ -203,6 +212,9 @@ LRESULT CConfigWindow::onResize(DWORD width, DWORD height) pos.pinTopLeft(*m_defRefreshLabel, 236, 64, 95, 20); pos.pinTopLeft(*m_defRefresh, 331, 64, 63, 20); pos.pinTopLeft(*m_defRefreshHz, 398, 64, 16, 20); + + pos.pinTopLeft(*m_prefGroup, 224, 100, 200, 52); + pos.pinTopLeft(*m_prefNoGPU, 236, 124, 176, 20); return 0; } @@ -231,11 +243,11 @@ void CConfigWindow::onModeListSelectChange() LRESULT CConfigWindow::onCommand(WORD id, WORD code, HWND hwnd) { - if (hwnd == *m_modeBox && code == LBN_SELCHANGE && m_modes) + if (m_modeBox && hwnd == *m_modeBox && code == LBN_SELCHANGE && m_modes) { onModeListSelectChange(); } - else if (hwnd == *m_modeUpdate && code == BN_CLICKED && m_modes) + else if (m_modeUpdate && hwnd == *m_modeUpdate && code == BN_CLICKED && m_modes) { int sel = m_modeBox->getSel(); if (sel == LB_ERR) @@ -264,7 +276,7 @@ LRESULT CConfigWindow::onCommand(WORD id, WORD code, HWND hwnd) if (result != ERROR_SUCCESS) DEBUG_ERROR_HR((HRESULT) result, "Failed to save modes"); } - else if (hwnd == *m_modeDelete && code == BN_CLICKED && m_modes) + else if (m_modeDelete && hwnd == *m_modeDelete && code == BN_CLICKED && m_modes) { int sel = m_modeBox->getSel(); if (sel == LB_ERR) @@ -281,7 +293,7 @@ LRESULT CConfigWindow::onCommand(WORD id, WORD code, HWND hwnd) updateModeList(); onModeListSelectChange(); } - else if (hwnd == *m_defRefresh && code == EN_CHANGE && m_defaultRefresh) + else if (m_defRefresh && hwnd == *m_defRefresh && code == EN_CHANGE && m_defaultRefresh) { int value; try @@ -298,5 +310,12 @@ LRESULT CConfigWindow::onCommand(WORD id, WORD code, HWND hwnd) if (result != ERROR_SUCCESS) DEBUG_ERROR_HR((HRESULT)result, "Failed to default refresh"); } + else if (m_prefNoGPU && hwnd == *m_prefNoGPU && code == BN_CLICKED && m_noGPU) + { + DEBUG_INFO("GPU button clicked"); + *m_noGPU ^= true; + m_settings.setNoGPU(*m_noGPU); + m_prefNoGPU->setChecked(*m_noGPU); + } return 0; } diff --git a/idd/LGIddHelper/CConfigWindow.h b/idd/LGIddHelper/CConfigWindow.h index f8fbecf7..9a68b6bb 100644 --- a/idd/LGIddHelper/CConfigWindow.h +++ b/idd/LGIddHelper/CConfigWindow.h @@ -32,6 +32,7 @@ class CListBox; class CGroupBox; class CEditWidget; class CButton; +class CCheckbox; class CConfigWindow : public CWindow { @@ -57,12 +58,16 @@ class CConfigWindow : public CWindow std::unique_ptr m_defRefresh; std::unique_ptr m_defRefreshHz; + std::unique_ptr m_prefGroup; + std::unique_ptr m_prefNoGPU; + std::function m_onDestroy; double m_scale; Microsoft::WRL::Wrappers::HandleT m_font; CRegistrySettings m_settings; std::optional> m_modes; std::optional m_defaultRefresh; + std::optional m_noGPU; void getMinimumSize(LONG &width, LONG &height); void updateFont();