Dylan Smith : wordpad: Apply changes on dropdown selection for comboboxes on toolbar.

Alexandre Julliard julliard at winehq.org
Fri Jun 20 06:22:30 CDT 2008


Module: wine
Branch: master
Commit: 2ee7bcc13c64c1822ae9eafaac505704b1c1a7a7
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2ee7bcc13c64c1822ae9eafaac505704b1c1a7a7

Author: Dylan Smith <dylan.ah.smith at gmail.com>
Date:   Tue Jun 17 21:19:15 2008 -0400

wordpad: Apply changes on dropdown selection for comboboxes on toolbar.

The changes were previously being applied only when the combobox's edit
control lost focus notifying an end edit event.  In addition, the
selection of an item from the dropdown list should also cause the
changes to be applied. New functions were created to handle the
duplication in expected behaviour for these two events.

---

 programs/wordpad/wordpad.c |  121 +++++++++++++++++++++++++++++++++++--------
 1 files changed, 98 insertions(+), 23 deletions(-)

diff --git a/programs/wordpad/wordpad.c b/programs/wordpad/wordpad.c
index 29dc755..596b8fc 100644
--- a/programs/wordpad/wordpad.c
+++ b/programs/wordpad/wordpad.c
@@ -269,6 +269,32 @@ static void set_size(float size)
     SendMessageW(hEditorWnd, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&fmt);
 }
 
+static void on_sizelist_modified(HWND hwndSizeList, LPWSTR wszNewFontSize)
+{
+    WCHAR sizeBuffer[MAX_STRING_LEN];
+    CHARFORMAT2W format;
+
+    ZeroMemory(&format, sizeof(format));
+    format.cbSize = sizeof(format);
+    SendMessageW(hEditorWnd, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&format);
+
+    wsprintfW(sizeBuffer, stringFormat, format.yHeight / 20);
+    if(lstrcmpW(sizeBuffer, wszNewFontSize))
+    {
+        float size = 0;
+        if(number_from_string((LPCWSTR) wszNewFontSize, &size, FALSE)
+           && size > 0)
+        {
+            set_size(size);
+        } else
+        {
+            SetWindowTextW(hwndSizeList, sizeBuffer);
+            MessageBoxW(hMainWnd, MAKEINTRESOURCEW(STRING_INVALID_NUMBER),
+                        wszAppTitle, MB_OK | MB_ICONINFORMATION);
+        }
+    }
+}
+
 static void add_size(HWND hSizeListWnd, unsigned size)
 {
     WCHAR buffer[3];
@@ -441,6 +467,17 @@ static void set_default_font(void)
     SendMessageW(hEditorWnd, EM_SETCHARFORMAT,  SCF_DEFAULT, (LPARAM)&fmt);
 }
 
+static void on_fontlist_modified(HWND hwndFontList, LPWSTR wszNewFaceName)
+{
+    CHARFORMAT2W format;
+    ZeroMemory(&format, sizeof(format));
+    format.cbSize = sizeof(format);
+    SendMessageW(hEditorWnd, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&format);
+
+    if(lstrcmpW(format.szFaceName, wszNewFaceName))
+        set_font((LPCWSTR) wszNewFaceName);
+}
+
 static void add_font(LPCWSTR fontName, DWORD fontType, HWND hListWnd, NEWTEXTMETRICEXW *ntmc)
 {
     COMBOBOXEXITEMW cbItem;
@@ -1217,6 +1254,45 @@ static void number_with_units(LPWSTR buffer, int number)
     MultiByteToWideChar(CP_ACP, 0, string, -1, buffer, MAX_STRING_LEN);
 }
 
+static BOOL get_comboexlist_selection(HWND hComboEx, LPWSTR wszBuffer, UINT bufferLength)
+{
+    HANDLE hHeap;
+    COMBOBOXEXITEM cbItem;
+    COMBOBOXINFO cbInfo;
+    HWND hCombo, hList;
+    int idx, result;
+    char *szBuffer;
+    hCombo = (HWND)SendMessage(hComboEx, CBEM_GETCOMBOCONTROL, 0, 0);
+    if (!hCombo)
+        return FALSE;
+    cbInfo.cbSize = sizeof(COMBOBOXINFO);
+    result = SendMessage(hCombo, CB_GETCOMBOBOXINFO, 0, (LPARAM)&cbInfo);
+    if (!result)
+        return FALSE;
+    hList = cbInfo.hwndList;
+    idx = SendMessage(hList, LB_GETCURSEL, 0, 0);
+    if (idx < 0)
+        return FALSE;
+
+    hHeap = GetProcessHeap();
+    szBuffer = HeapAlloc(hHeap, HEAP_ZERO_MEMORY, bufferLength);
+    ZeroMemory(&cbItem, sizeof(cbItem));
+    cbItem.mask = CBEIF_TEXT;
+    cbItem.iItem = idx;
+    cbItem.pszText = szBuffer;
+    cbItem.cchTextMax = bufferLength-1;
+    result = SendMessage(hComboEx, CBEM_GETITEM, 0, (LPARAM)&cbItem);
+    if (!result)
+    {
+        HeapFree(hHeap, 0, szBuffer);
+        return FALSE;
+    }
+
+    result = MultiByteToWideChar(CP_ACP, 0, szBuffer, -1, wszBuffer, bufferLength);
+    HeapFree(hHeap, 0, szBuffer);
+    return result != 0;
+}
+
 static INT_PTR CALLBACK datetime_proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 {
     switch(message)
@@ -1774,39 +1850,18 @@ static LRESULT OnNotify( HWND hWnd, WPARAM wParam, LPARAM lParam)
     NMHDR *pHdr = (NMHDR *)lParam;
     HWND hwndFontList = GetDlgItem(hwndReBar, IDC_FONTLIST);
     HWND hwndSizeList = GetDlgItem(hwndReBar, IDC_SIZELIST);
-    WCHAR sizeBuffer[MAX_PATH];
 
     if (pHdr->hwndFrom == hwndFontList || pHdr->hwndFrom == hwndSizeList)
     {
         if (pHdr->code == CBEN_ENDEDITW)
         {
-            CHARFORMAT2W format;
             NMCBEENDEDIT *endEdit = (NMCBEENDEDIT *)lParam;
-
-            ZeroMemory(&format, sizeof(format));
-            format.cbSize = sizeof(format);
-            SendMessageW(hwndEditor, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&format);
-
             if(pHdr->hwndFrom == hwndFontList)
             {
-                if(lstrcmpW(format.szFaceName, (LPWSTR)endEdit->szText))
-                    set_font((LPCWSTR) endEdit->szText);
+                on_fontlist_modified(hwndFontList, (LPWSTR)endEdit->szText);
             } else if (pHdr->hwndFrom == hwndSizeList)
             {
-                wsprintfW(sizeBuffer, stringFormat, format.yHeight / 20);
-                if(lstrcmpW(sizeBuffer, (LPWSTR)endEdit->szText))
-                {
-                    float size = 0;
-                    if(number_from_string((LPWSTR)endEdit->szText, &size, FALSE)
-                       && size > 0)
-                    {
-                        set_size(size);
-                    } else
-                    {
-                        SetWindowTextW(hwndSizeList, sizeBuffer);
-                        MessageBoxW(hMainWnd, MAKEINTRESOURCEW(STRING_INVALID_NUMBER), wszAppTitle, MB_OK | MB_ICONINFORMATION);
-                    }
-                }
+                on_sizelist_modified(hwndSizeList, (LPWSTR)endEdit->szText);
             }
         }
         return 0;
@@ -2194,6 +2249,26 @@ static LRESULT OnCommand( HWND hWnd, WPARAM wParam, LPARAM lParam)
         dialog_viewproperties();
         break;
 
+    case IDC_FONTLIST:
+        if (HIWORD(wParam) == CBN_SELENDOK)
+        {
+            WCHAR buffer[LF_FACESIZE];
+            HWND hwndFontList = (HWND)lParam;
+            get_comboexlist_selection(hwndFontList, buffer, LF_FACESIZE);
+            on_fontlist_modified(hwndFontList, buffer);
+        }
+        break;
+
+    case IDC_SIZELIST:
+        if (HIWORD(wParam) == CBN_SELENDOK)
+        {
+            WCHAR buffer[MAX_STRING_LEN+1];
+            HWND hwndSizeList = (HWND)lParam;
+            get_comboexlist_selection(hwndSizeList, buffer, MAX_STRING_LEN+1);
+            on_sizelist_modified(hwndSizeList, buffer);
+        }
+        break;
+
     default:
         SendMessageW(hwndEditor, WM_COMMAND, wParam, lParam);
         break;




More information about the wine-cvs mailing list