Show
Ignore:
Timestamp:
05/17/08 11:34:28 (8 months ago)
Author:
Frank Benoit <benoit@tionex.de>
branch:
default
Message:

Update to SWT 3.4M7

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • dwt/custom/CCombo.d

    r212 r213  
    5252static import tango.text.convert.Format; 
    5353import dwt.dwthelper.utils; 
     54import dwt.dwthelper.Runnable; 
    5455 
    5556/** 
     
    153154            } 
    154155            if (getShell () is event.widget) { 
    155                 handleFocus (DWT.FocusOut); 
     156                getDisplay().asyncExec(new class() Runnable { 
     157                    public void run() { 
     158                        if (isDisposed()) return; 
     159                        handleFocus (DWT.FocusOut); 
     160                    } 
     161                }); 
    156162            } 
    157163        } 
     
    166172    }; 
    167173 
    168     int [] comboEvents = [DWT.Dispose, DWT.Move, DWT.Resize]; 
     174    int [] comboEvents = [DWT.Dispose, DWT.FocusIn, DWT.Move, DWT.Resize]; 
    169175    for (int i=0; i<comboEvents.length; i++) this.addListener (comboEvents [i], listener); 
    170176 
    171     int [] textEvents = [DWT.KeyDown, DWT.KeyUp, DWT.MenuDetect, DWT.Modify, DWT.MouseDown, DWT.MouseUp, DWT.Traverse, DWT.FocusIn, DWT.Verify]; 
     177    int [] textEvents = [DWT.DefaultSelection, DWT.KeyDown, DWT.KeyUp, DWT.MenuDetect, DWT.Modify, DWT.MouseDown, DWT.MouseUp, DWT.MouseDoubleClick, DWT.MouseWheel, DWT.Traverse, DWT.FocusIn, DWT.Verify]; 
    172178    for (int i=0; i<textEvents.length; i++) text.addListener (textEvents [i], listener); 
    173179 
    174     int [] arrowEvents = [DWT.Selection, DWT.FocusIn]; 
     180    int [] arrowEvents = [DWT.MouseDown, DWT.MouseUp, DWT.Selection, DWT.FocusIn]; 
    175181    for (int i=0; i<arrowEvents.length; i++) arrow.addListener (arrowEvents [i], listener); 
    176182 
     
    180186static int checkStyle (int style) { 
    181187    int mask = DWT.BORDER | DWT.READ_ONLY | DWT.FLAT | DWT.LEFT_TO_RIGHT | DWT.RIGHT_TO_LEFT; 
    182     return style & mask
     188    return DWT.NO_FOCUS | (style & mask)
    183189} 
    184190/** 
     
    319325            break; 
    320326        } 
     327        case DWT.MouseDown: { 
     328            Event mouseEvent = new Event (); 
     329            mouseEvent.button = event.button; 
     330            mouseEvent.count = event.count; 
     331            mouseEvent.stateMask = event.stateMask; 
     332            mouseEvent.time = event.time; 
     333            mouseEvent.x = event.x; mouseEvent.y = event.y; 
     334            notifyListeners (DWT.MouseDown, mouseEvent); 
     335            event.doit = mouseEvent.doit; 
     336            break; 
     337        } 
     338        case DWT.MouseUp: { 
     339            Event mouseEvent = new Event (); 
     340            mouseEvent.button = event.button; 
     341            mouseEvent.count = event.count; 
     342            mouseEvent.stateMask = event.stateMask; 
     343            mouseEvent.time = event.time; 
     344            mouseEvent.x = event.x; mouseEvent.y = event.y; 
     345            notifyListeners (DWT.MouseUp, mouseEvent); 
     346            event.doit = mouseEvent.doit; 
     347            break; 
     348        } 
    321349        case DWT.Selection: { 
     350            text.setFocus(); 
    322351            dropDown (!isDropped ()); 
    323352            break; 
     
    363392            list = null; 
    364393            arrow = null; 
     394            break; 
     395        case DWT.FocusIn: 
     396            Control focusControl = getDisplay ().getFocusControl (); 
     397            if (focusControl is arrow || focusControl is list) return; 
     398            if (isDropped()) { 
     399                list.setFocus(); 
     400            } else { 
     401                text.setFocus(); 
     402            } 
    365403            break; 
    366404        case DWT.Move: 
     
    466504public void deselect (int index) { 
    467505    checkWidget (); 
    468     list.deselect (index); 
     506    if (0 <= index && index < list.getItemCount () && 
     507            index is list.getSelectionIndex() && 
     508            text.getText().equals(list.getItem(index))) { 
     509        text.setText("");  //$NON-NLS-1$ 
     510        list.deselect (index); 
     511    } 
    469512} 
    470513/** 
     
    484527public void deselectAll () { 
    485528    checkWidget (); 
     529    text.setText("");  //$NON-NLS-1$ 
    486530    list.deselectAll (); 
    487531} 
     
    490534    if (!drop) { 
    491535        popup.setVisible (false); 
    492         if (!isDisposed ()&& arrow.isFocusControl()) { 
     536        if (!isDisposed () && isFocusControl()) { 
    493537            text.setFocus(); 
    494538        } 
     
    528572    popup.setBounds (x, y, width, height); 
    529573    popup.setVisible (true); 
    530     list.setFocus (); 
     574    if (isFocusControl()) list.setFocus (); 
    531575} 
    532576/* 
     
    655699    checkWidget (); 
    656700    return list.getItems (); 
     701} 
     702/** 
     703 * Returns <code>true</code> if the receiver's list is visible, 
     704 * and <code>false</code> otherwise. 
     705 * <p> 
     706 * If one of the receiver's ancestors is not visible or some 
     707 * other condition makes the receiver not visible, this method 
     708 * may still indicate that it is considered visible even though 
     709 * it may not actually be showing. 
     710 * </p> 
     711 * 
     712 * @return the receiver's list's visibility state 
     713 * 
     714 * @exception DWTException <ul> 
     715 *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> 
     716 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> 
     717 * </ul> 
     718 * 
     719 * @since 3.4 
     720 */ 
     721public bool getListVisible () { 
     722    checkWidget (); 
     723    return isDropped(); 
    657724} 
    658725public override Menu getMenu() { 
     
    906973        public void getLocation (AccessibleControlEvent e) { 
    907974            Rectangle location = getBounds (); 
    908             Point pt = toDisplay (location.x, location.y); 
     975            Point pt = getParent().toDisplay (location.x, location.y); 
    909976            e.x = pt.x; 
    910977            e.y = pt.y; 
     
    10031070                    event.doit = false; 
    10041071                    break; 
     1072                case DWT.TRAVERSE_TAB_NEXT: 
     1073                case DWT.TRAVERSE_TAB_PREVIOUS: 
     1074                    event.doit = text.traverse(event.detail); 
     1075                    event.detail = DWT.TRAVERSE_NONE; 
     1076                    if (event.doit) dropDown(false); 
     1077                    return; 
    10051078                default: 
    10061079            } 
     
    10941167             * it again. To prevent the popup from showing again, we will let the selection 
    10951168             * event of the arrow button hide the popup. 
     1169             * In Windows, hiding the popup during the deactivate causes the deactivate 
     1170             * to be called twice and the selection event to be disappear. 
    10961171             */ 
    1097             if ("gtk".equals(DWT.getPlatform())) { 
     1172            if (!"carbon".equals(DWT.getPlatform())) { 
    10981173                Point point = arrow.toControl(getDisplay().getCursorLocation()); 
    10991174                Point size = arrow.getSize(); 
     
    13181393public override bool setFocus () { 
    13191394    checkWidget(); 
     1395    if (!isEnabled () || !isVisible ()) return false; 
    13201396    if (isFocusControl ()) return true; 
    13211397    return text.setFocus (); 
     
    13941470    checkWidget (); 
    13951471    return; 
     1472} 
     1473/** 
     1474 * Marks the receiver's list as visible if the argument is <code>true</code>, 
     1475 * and marks it invisible otherwise. 
     1476 * <p> 
     1477 * If one of the receiver's ancestors is not visible or some 
     1478 * other condition makes the receiver not visible, marking 
     1479 * it visible may not actually cause it to be displayed. 
     1480 * </p> 
     1481 * 
     1482 * @param visible the new visibility state 
     1483 * 
     1484 * @exception DWTException <ul> 
     1485 *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> 
     1486 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> 
     1487 * </ul> 
     1488 * 
     1489 * @since 3.4 
     1490 */ 
     1491public void setListVisible (bool visible) { 
     1492    checkWidget (); 
     1493    dropDown(visible); 
    13961494} 
    13971495public override void setMenu(Menu menu) { 
     
    15271625            break; 
    15281626        } 
     1627        case DWT.DefaultSelection: { 
     1628            dropDown (false); 
     1629            Event e = new Event (); 
     1630            e.time = event.time; 
     1631            e.stateMask = event.stateMask; 
     1632            notifyListeners (DWT.DefaultSelection, e); 
     1633            break; 
     1634        } 
    15291635        case DWT.KeyDown: { 
    15301636            Event keyEvent = new Event (); 
     
    15371643            event.doit = keyEvent.doit; 
    15381644            if (!event.doit) break; 
    1539  
    1540             if (event.character is DWT.CR) { 
    1541                 dropDown (false); 
    1542                 Event selectionEvent = new Event (); 
    1543                 selectionEvent.time = event.time; 
    1544                 selectionEvent.stateMask = event.stateMask; 
    1545                 notifyListeners (DWT.DefaultSelection, selectionEvent); 
    1546                 if (isDisposed ()) break; 
    1547             } 
    1548  
    15491645            if (event.keyCode is DWT.ARROW_UP || event.keyCode is DWT.ARROW_DOWN) { 
    15501646                event.doit = false; 
     
    16001696        } 
    16011697        case DWT.MouseDown: { 
     1698            Event mouseEvent = new Event (); 
     1699            mouseEvent.button = event.button; 
     1700            mouseEvent.count = event.count; 
     1701            mouseEvent.stateMask = event.stateMask; 
     1702            mouseEvent.time = event.time; 
     1703            mouseEvent.x = event.x; mouseEvent.y = event.y; 
     1704            notifyListeners (DWT.MouseDown, mouseEvent); 
     1705            if (isDisposed ()) break; 
     1706            event.doit = mouseEvent.doit; 
     1707            if (!event.doit) break; 
    16021708            if (event.button !is 1) return; 
    16031709            if (text.getEditable ()) return; 
     
    16091715        } 
    16101716        case DWT.MouseUp: { 
     1717            Event mouseEvent = new Event (); 
     1718            mouseEvent.button = event.button; 
     1719            mouseEvent.count = event.count; 
     1720            mouseEvent.stateMask = event.stateMask; 
     1721            mouseEvent.time = event.time; 
     1722            mouseEvent.x = event.x; mouseEvent.y = event.y; 
     1723            notifyListeners (DWT.MouseUp, mouseEvent); 
     1724            if (isDisposed ()) break; 
     1725            event.doit = mouseEvent.doit; 
     1726            if (!event.doit) break; 
    16111727            if (event.button !is 1) return; 
    16121728            if (text.getEditable ()) return; 
     
    16141730            break; 
    16151731        } 
     1732        case DWT.MouseDoubleClick: { 
     1733            Event mouseEvent = new Event (); 
     1734            mouseEvent.button = event.button; 
     1735            mouseEvent.count = event.count; 
     1736            mouseEvent.stateMask = event.stateMask; 
     1737            mouseEvent.time = event.time; 
     1738            mouseEvent.x = event.x; mouseEvent.y = event.y; 
     1739            notifyListeners (DWT.MouseDoubleClick, mouseEvent); 
     1740            break; 
     1741        } 
     1742        case DWT.MouseWheel: { 
     1743            Event keyEvent = new Event (); 
     1744            keyEvent.time = event.time; 
     1745            keyEvent.keyCode = event.count > 0 ? DWT.ARROW_UP : DWT.ARROW_DOWN; 
     1746            keyEvent.stateMask = event.stateMask; 
     1747            notifyListeners (DWT.KeyDown, keyEvent); 
     1748            if (isDisposed ()) break; 
     1749            event.doit = keyEvent.doit; 
     1750            if (!event.doit) break; 
     1751            if (event.count !is 0) { 
     1752                event.doit = false; 
     1753                int oldIndex = getSelectionIndex (); 
     1754                if (event.count > 0) { 
     1755                    select (Math.max (oldIndex - 1, 0)); 
     1756                } else { 
     1757                    select (Math.min (oldIndex + 1, getItemCount () - 1)); 
     1758                } 
     1759                if (oldIndex !is getSelectionIndex ()) { 
     1760                    Event e = new Event(); 
     1761                    e.time = event.time; 
     1762                    e.stateMask = event.stateMask; 
     1763                    notifyListeners (DWT.Selection, e); 
     1764                } 
     1765                if (isDisposed ()) break; 
     1766            } 
     1767            break; 
     1768        } 
    16161769        case DWT.Traverse: { 
    16171770            switch (event.detail) { 
    1618                 case DWT.TRAVERSE_RETURN: 
    16191771                case DWT.TRAVERSE_ARROW_PREVIOUS: 
    16201772                case DWT.TRAVERSE_ARROW_NEXT: 
     
    16241776                    event.doit = false; 
    16251777                    break; 
     1778                case DWT.TRAVERSE_TAB_PREVIOUS: 
     1779                    event.doit = traverse(DWT.TRAVERSE_TAB_PREVIOUS); 
     1780                    event.detail = DWT.TRAVERSE_NONE; 
     1781                    return; 
    16261782                default: 
    16271783            } 
    1628  
    16291784            Event e = new Event (); 
    16301785            e.time = event.time;