From 6e27b4834bc5fb447aa2cba5da64870c42e4d7e9 Mon Sep 17 00:00:00 2001 From: Birunthan Mohanathas Date: Fri, 7 Oct 2011 17:36:33 +0000 Subject: [PATCH] Manage Skins: "Load order" text box now works in a more sensible manner (improved negative numbers handling) --- Library/DialogManage.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/Library/DialogManage.cpp b/Library/DialogManage.cpp index 91d3d471..95aa7abd 100644 --- a/Library/DialogManage.cpp +++ b/Library/DialogManage.cpp @@ -993,18 +993,27 @@ INT_PTR CDialogManage::CTabSkins::OnCommand(WPARAM wParam, LPARAM lParam) } else { - m_IgnoreUpdate = true; - // Convert text to number and set it to get rid of extra chars - int value = GetDlgItemInt(m_Window, IDC_MANAGESKINS_LOADORDER_TEXT, NULL, TRUE); + WCHAR buffer[32]; + int len = GetWindowText((HWND)lParam, buffer, 32); + if ((len == 0) || (len == 1 && buffer[0] == L'-')) + { + // Ignore if empty or if - is only char + break; + } + + // Get selection + DWORD sel = Edit_GetSel((HWND)lParam); + + // Reset value (to get rid of invalid chars) + m_IgnoreUpdate = true; + int value = _wtoi(buffer); SetDlgItemInt(m_Window, IDC_MANAGESKINS_LOADORDER_TEXT, value, TRUE); - // Move caret to end - Edit_SetSel((HWND)lParam, 32, 32); + // Reset selection + Edit_SetSel((HWND)lParam, LOWORD(sel), HIWORD(sel)); - WCHAR buffer[32]; _itow(value, buffer, 10); - WritePrivateProfileString(m_SkinName.c_str(), L"LoadOrder", buffer, Rainmeter->GetIniFile().c_str()); std::pair indexes = Rainmeter->GetMeterWindowIndex(m_SkinWindow); if (indexes.first != -1)