Ignore:
Timestamp:
May 22, 2000, 7:21:11 PM (25 years ago)
Author:
cbratschi
Message:

merged controls with Corel WINE 20000513, maximize/minimize fix

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/edit.cpp

    r3153 r3584  
    1 /* $Id: edit.cpp,v 1.38 2000-03-18 16:13:26 cbratschi Exp $ */
     1/* $Id: edit.cpp,v 1.39 2000-05-22 17:21:07 cbratschi Exp $ */
    22/*
    33 *      Edit control
     
    99 *      Copyright  1999 Christoph Bratschi
    1010 *
    11  * Corel version: 20000317
     11 * Corel version: 20000513
    1212 * (WINE version: 991212)
    1313 *
     
    109109        BOOL bCaptureState; /* flag indicating whether mouse was captured */
    110110        BOOL bEnableState;             /* flag keeping the enable state */
     111        HWND hwndListBox;              /* handle of ComboBox's listbox or NULL */
    111112        /*
    112113         *      only for multi line controls
     
    590591        case WM_GETDLGCODE:
    591592                //DPRINTF_EDIT_MSG32("WM_GETDLGCODE");
    592                 result = DLGC_HASSETSEL | DLGC_WANTCHARS | DLGC_WANTARROWS;
    593                 if (es->style & ES_WANTRETURN)
     593                result = DLGC_HASSETSEL | DLGC_WANTCHARS | DLGC_WANTARROWS;
     594
     595                if (lParam && (((LPMSG)lParam)->message == WM_KEYDOWN))
    594596                {
    595                    LPMSG msg = (LPMSG)lParam;
    596                    if (msg && (msg->message == WM_KEYDOWN) && (msg->wParam == VK_RETURN))
     597                   int vk = (int)((LPMSG)lParam)->wParam;
     598
     599                   if ((GetWindowLongA(hwnd,GWL_STYLE) & ES_WANTRETURN) && vk == VK_RETURN)
     600                   {
    597601                      result |= DLGC_WANTMESSAGE;
     602                   }
     603                   else if (es->hwndListBox && (vk == VK_RETURN || vk == VK_ESCAPE))
     604                   {
     605                      if (SendMessageA(GetParent(hwnd), CB_GETDROPPEDSTATE, 0, 0))
     606                         result |= DLGC_WANTMESSAGE;
     607                   }
    598608                }
    599609                break;
     
    601611        case WM_CHAR:
    602612                //DPRINTF_EDIT_MSG32("WM_CHAR");
     613                if (((CHAR)wParam == VK_RETURN || (CHAR)wParam == VK_ESCAPE) && es->hwndListBox)
     614                {
     615                   HWND hwndParent = GetParent(hwnd);
     616               
     617                   if (SendMessageA(hwndParent, CB_GETDROPPEDSTATE, 0, 0))
     618                      SendMessageA(hwndParent, WM_KEYDOWN, wParam, 0);
     619                   break;
     620                }
    603621                EDIT_WM_Char(hwnd, es, (CHAR)wParam, (DWORD)lParam);
    604622                break;
     
    33693387 *
    33703388 */
    3371 static BOOL EDIT_CheckCombo(HWND hwnd, UINT msg, INT key, DWORD key_data)
    3372 {
    3373         HWND hLBox;
    3374 
    3375         /********************************************************************
    3376          * This if statement used to check to see if the parent of the
    3377          * edit control was a 'combobox' by comparing the ATOM of the parent
    3378          * to a table of internal window control ATOMs.  However, this check
    3379          * would fail if the parent was a superclassed combobox (Although
    3380          * having the same basic functionality of a combobox, it has a
    3381          * different name and ATOM, thus defeating this check.)
    3382          *
    3383          * The safe way to determine if the parent is a combobox is to send it
    3384          * a message only a combo box would understand.  I send it a message
    3385          * CB_GETCOUNT, if I get 0 then the parent is not a combobox -
    3386          * return FALSE.  If I get > 0, then the parent IS a combobox
    3387          * (or sub/super classed derrivative thereof)
    3388          ********************************************************************/
    3389 #if 0 //CB: our code
    3390         if (GetClassWord(GetParent(hwnd),GCW_ATOM) ==  GlobalFindAtomA(COMBOBOXCLASSNAME) &&
    3391                         (hLBox = COMBO_GetLBWindow(GetParent(hwnd))))
    3392 #else
    3393         if (
    3394              ((SendMessageA(GetParent(hwnd), CB_GETCOUNT, 0, 0)) > 0) &&
    3395              (hLBox = COMBO_GetLBWindow(GetParent(hwnd)))
    3396            )
    3397 #endif
    3398         {
    3399                 HWND hCombo = GetParent(hwnd);
    3400                 BOOL bUIFlip = TRUE;
    3401 
    3402                 //TRACE_(combo)("[%04x]: handling msg %04x (%04x)\n",
    3403                 //             wnd->hwndSelf, (UINT16)msg, (UINT16)key);
    3404 
    3405                 switch (msg) {
    3406                 case WM_KEYDOWN: /* Handle F4 and arrow keys */
    3407                         if (key != VK_F4) {
    3408                                 bUIFlip = (BOOL)SendMessageA(hCombo, CB_GETEXTENDEDUI, 0, 0);
    3409                                 if (SendMessageA(hCombo, CB_GETDROPPEDSTATE, 0, 0))
    3410                                         bUIFlip = FALSE;
    3411                         }
    3412                         if (!bUIFlip)
    3413                                 SendMessageA(hLBox, WM_KEYDOWN, (WPARAM)key, 0);
    3414                         else {
    3415                                 /* make sure ComboLBox pops up */
    3416                                 SendMessageA(hCombo, CB_SETEXTENDEDUI, 0, 0);
    3417                                 SendMessageA(hLBox, WM_KEYDOWN, VK_F4, 0);
    3418                                 SendMessageA(hCombo, CB_SETEXTENDEDUI, 1, 0);
    3419                         }
    3420                         break;
    3421                 case WM_SYSKEYDOWN: /* Handle Alt+up/down arrows */
    3422                         bUIFlip = (BOOL)SendMessageA(hCombo, CB_GETEXTENDEDUI, 0, 0);
    3423                         if (bUIFlip) {
    3424                                 bUIFlip = (BOOL)SendMessageA(hCombo, CB_GETDROPPEDSTATE, 0, 0);
    3425                                 SendMessageA(hCombo, CB_SHOWDROPDOWN, (bUIFlip) ? FALSE : TRUE, 0);
    3426                         } else
    3427                                 SendMessageA(hLBox, WM_KEYDOWN, VK_F4, 0);
    3428                         break;
    3429                 }
    3430                 return TRUE;
    3431         }
    3432         return FALSE;
    3433 }
    3434 
     3389static BOOL EDIT_CheckCombo(HWND hwnd, EDITSTATE *es, UINT msg, INT key, DWORD key_data)
     3390{
     3391   HWND hLBox = es->hwndListBox;
     3392   HWND hCombo;
     3393   BOOL bDropped;
     3394   int  nEUI;
     3395
     3396   if (!hLBox)
     3397      return FALSE;
     3398
     3399   hCombo   = GetParent(hwnd);
     3400   bDropped = TRUE;
     3401   nEUI     = 0;
     3402
     3403   //TRACE_(combo)("[%04x]: handling msg %04x (%04x)\n",
     3404   //                        wnd->hwndSelf, (UINT16)msg, (UINT16)key);
     3405
     3406   if (key == VK_UP || key == VK_DOWN)
     3407   {
     3408      if (SendMessageA(hCombo, CB_GETEXTENDEDUI, 0, 0))
     3409         nEUI = 1;
     3410
     3411      if (msg == WM_KEYDOWN || nEUI)
     3412          bDropped = (BOOL)SendMessageA(hCombo, CB_GETDROPPEDSTATE, 0, 0);
     3413   }
     3414
     3415   switch (msg)
     3416   {
     3417      case WM_KEYDOWN:
     3418         if (!bDropped && nEUI && (key == VK_UP || key == VK_DOWN))
     3419         {
     3420            /* make sure ComboLBox pops up */
     3421            SendMessageA(hCombo, CB_SETEXTENDEDUI, FALSE, 0);
     3422            key = VK_F4;
     3423            nEUI = 2;
     3424         }
     3425
     3426         SendMessageA(hLBox, WM_KEYDOWN, (WPARAM)key, 0);
     3427         break;
     3428
     3429      case WM_SYSKEYDOWN: /* Handle Alt+up/down arrows */
     3430         if (nEUI)
     3431            SendMessageA(hCombo, CB_SHOWDROPDOWN, bDropped ? FALSE : TRUE, 0);
     3432         else
     3433            SendMessageA(hLBox, WM_KEYDOWN, (WPARAM)VK_F4, 0);
     3434         break;
     3435   }
     3436
     3437   if(nEUI == 2)
     3438      SendMessageA(hCombo, CB_SETEXTENDEDUI, TRUE, 0);
     3439
     3440   return TRUE;
     3441}
    34353442
    34363443/*********************************************************************
     
    34563463        case VK_F4:
    34573464        case VK_UP:
    3458                 if (EDIT_CheckCombo(hwnd, WM_KEYDOWN, key, key_data))
    3459                         break;
    3460                 if (key == VK_F4)
     3465                if (EDIT_CheckCombo(hwnd,es, WM_KEYDOWN, key, key_data) || key == VK_F4)
    34613466                        break;
    34623467                /* fall through */
     
    34713476                break;
    34723477        case VK_DOWN:
    3473                 if (EDIT_CheckCombo(hwnd, WM_KEYDOWN, key, key_data))
     3478                if (EDIT_CheckCombo(hwnd,es, WM_KEYDOWN, key, key_data))
    34743479                        break;
    34753480                /* fall through */
     
    34913496                if (es->style & ES_MULTILINE)
    34923497                        EDIT_MovePageUp_ML(hwnd, es, shift);
     3498                else
     3499                        EDIT_CheckCombo(hwnd, es, WM_KEYDOWN, key, key_data);
    34933500                break;
    34943501        case VK_NEXT:
    34953502                if (es->style & ES_MULTILINE)
    34963503                        EDIT_MovePageDown_ML(hwnd, es, shift);
     3504                else
     3505                        EDIT_CheckCombo(hwnd, es, WM_KEYDOWN, key, key_data);
    34973506                break;
    34983507        case VK_DELETE:
     
    37093718        }
    37103719
     3720        if (es->style & ES_COMBO)
     3721           es->hwndListBox = GetDlgItem(cs->hwndParent, ID_CB_LISTBOX);
     3722
    37113723        if (es->style & ES_MULTILINE) {
    37123724                es->buffer_size = BUFSTART_MULTI;
     
    40764088                return 0;
    40774089        } else if ((key == VK_UP) || (key == VK_DOWN))
    4078                 if (EDIT_CheckCombo(hwnd, WM_SYSKEYDOWN, key, key_data))
     4090        {
     4091                if (EDIT_CheckCombo(hwnd,es, WM_SYSKEYDOWN, key, key_data))
    40794092                        return 0;
     4093         }
    40804094        return DefWindowProcA(hwnd, WM_SYSKEYDOWN, (WPARAM)key, (LPARAM)key_data);
    40814095}
Note: See TracChangeset for help on using the changeset viewer.