Revert the WM_GETDLGCODE handling patch completely this time. It
breaks too much.

diff --git a/controls/edit.c b/controls/edit.c
index 7ce698b..14e3629 100644
--- a/controls/edit.c
+++ b/controls/edit.c
@@ -745,18 +745,21 @@
 
 	case WM_GETDLGCODE:
 		result = DLGC_HASSETSEL | DLGC_WANTCHARS | DLGC_WANTARROWS;
-                if( es->hwndListBox )
-                {
-                    if (lParam && (((LPMSG)lParam)->message == WM_KEYDOWN))
-                    {
-                       int vk = (int)((LPMSG)lParam)->wParam;
-                       if( vk == VK_RETURN || vk == VK_ESCAPE)
-                           if( SendMessageW(GetParent(hwnd), CB_GETDROPPEDSTATE, 0, 0))
-                                result |= DLGC_WANTMESSAGE;
-                    }
-		} else
-                    /* It seems in all other cases Windows has this set: */
-                    result |= DLGC_WANTMESSAGE;
+
+		if (lParam && (((LPMSG)lParam)->message == WM_KEYDOWN))
+		{
+		   int vk = (int)((LPMSG)lParam)->wParam;
+
+		   if (vk == VK_RETURN && (GetWindowLongW( hwnd, GWL_STYLE ) & ES_WANTRETURN))
+		   {
+		      result |= DLGC_WANTMESSAGE;
+		   }
+		   else if (es->hwndListBox && (vk == VK_RETURN || vk == VK_ESCAPE))
+		   {
+		      if (SendMessageW(GetParent(hwnd), CB_GETDROPPEDSTATE, 0, 0))
+		         result |= DLGC_WANTMESSAGE;
+		   }
+		}
 		break;
 
         case WM_IME_CHAR: