changeset 36835:6bc38224c74a

Fix bug with Win32 GUI preferences. The combobox entry must not be used as the priority option's name. Translate between the text presented to the user and the internal name to be used.
author ib
date Mon, 24 Feb 2014 15:20:34 +0000
parents b2e529a2cbab
children 51caf7b56556
files gui/win32/preferences.c
diffstat 1 files changed, 36 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/gui/win32/preferences.c	Mon Feb 24 14:32:28 2014 +0000
+++ b/gui/win32/preferences.c	Mon Feb 24 15:20:34 2014 +0000
@@ -41,6 +41,40 @@
 #include "dialogs.h"
 
 
+/**
+ * @brief Translate between the priority text presented to the user
+ *        and the internal priority name.
+ *
+ * @param prio priority text or name to be translated
+ * @param idx 0 (translate internal name to localized user text) or
+ *            1 (translate localized user text to internal name)
+ *
+ * @return translation according to @a idx
+ */
+static const char *get_priority (const char *prio, int idx)
+{
+  static const struct
+  {
+    const char *localization;
+    const char *name;
+  } priority[] = {{MSGTR_GUI_WIN32_PriorityHigh, "high"},
+                  {MSGTR_GUI_WIN32_PriorityAboveNormal, "abovenormal"},
+                  {MSGTR_GUI_WIN32_PriorityNormal, "normal"},
+                  {MSGTR_GUI_WIN32_PriorityBelowNormal, "belownormal"},
+                  {MSGTR_GUI_WIN32_PriorityLow, "idle"}};
+  unsigned int i;
+
+  for (i = 0; i < sizeof(priority) / sizeof(*priority); i++)
+  {
+    const char *l = acp(priority[i].localization);
+
+    if (strcmp(idx == 0 ? priority[i].name : l, prio) == 0)
+      return (idx == 0 ? l : priority[i].name);
+  }
+
+  return NULL;
+}
+
 static LRESULT CALLBACK PrefsWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
 {
     HWND btn, label, edit1, edit2, updown1, updown2, track1, track2;
@@ -425,7 +459,7 @@
             if(proc_priority)
                 SendDlgItemMessage(hwnd, ID_PRIO, CB_SETCURSEL,
                                    (WPARAM)SendMessage(prio, CB_FINDSTRING, -1,
-                                   (LPARAM)proc_priority), 0);
+                                   (LPARAM)get_priority(proc_priority, 0)), 0);
 
             else SendDlgItemMessage(hwnd, ID_PRIO, CB_SETCURSEL, 2, 0);
 
@@ -542,7 +576,7 @@
                     strl = SendMessage(prio, CB_GETLBTEXTLEN, (WPARAM)idx, 0);
                     procprio = malloc(strl + 1);
                     SendMessage(prio, CB_GETLBTEXT, (WPARAM)idx, (LPARAM)procprio);
-                    setdup(&proc_priority, procprio);
+                    setdup(&proc_priority, get_priority(procprio, 1));
                     free(procprio);
 
                     /* double buffering */