VirtualBox

Changeset 11659 in vbox


Ignore:
Timestamp:
Aug 26, 2008 12:32:46 PM (16 years ago)
Author:
vboxsync
Message:

Backed out r35359

Location:
trunk/src/VBox
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxBFE/COMDefs.h

    r11655 r11659  
    7474#endif /* !RT_OS_WINDOWS */
    7575
    76 #define ComSafeArrayIn(aType, aArg)         unsigned aArg##Size, aType *aArg
    77 #define ComSafeArrayInIsNull(aArg)          (aArg == NULL)
    78 #define ComSafeArrayInArg(aArg)             aArg##Size, aArg
    79 #define ComSafeArrayAsInParam(aArray)   \
    80     (aArray).size(), aArray.raw()
    81 
    82 
    83 namespace com
    84 {
    85     template<class T> class SafeArray {
    86         T t;
    87     public:
    88         SafeArray (size_t aSize) {}
    89         SafeArray (ComSafeArrayIn (T, aArg)) {}
    90         T &operator[] (size_t aIdx) { return t; }
    91         size_t size() const { return 0; }
    92         T *raw() { return &t; }
    93     };
    94 }
    9576#endif
  • trunk/src/VBox/Frontends/VBoxBFE/KeyboardImpl.cpp

    r11655 r11659  
    2525#else
    2626# include <VBox/com/defs.h>
    27 //# include <VBox/com/array.h>
    2827#endif
    2928#include <VBox/pdm.h>
     
    10099 *
    101100 * @returns COM status code
    102  * @param scancodes   Safe array of scancodes
     101 * @param scancodes   Pointer to the first scancode
     102 * @param count       Number of scancodes
    103103 * @param codesStored Address of variable to store the number
    104104 *                    of scancodes that were sent to the keyboard.
    105105                      This value can be NULL.
    106106 */
    107 STDMETHODIMP Keyboard::PutScancodes(ComSafeArrayIn (LONG, scancodes),
     107STDMETHODIMP Keyboard::PutScancodes(LONG *scancodes,
     108                                    ULONG count,
    108109                                    ULONG *codesStored)
    109110{
    110     if (ComSafeArrayInIsNull(scancodes))
     111    if (!scancodes)
    111112        return E_INVALIDARG;
    112113    if (!mpDrv)
    113114        return S_OK;
    114115
    115     com::SafeArray <LONG> keys(ComSafeArrayInArg(scancodes));
     116    LONG *currentScancode = scancodes;
    116117    int rcVBox = VINF_SUCCESS;
    117118
    118     for (uint32_t i = 0; (i < keys.size()) && VBOX_SUCCESS(rcVBox); i++)
    119     {
    120         rcVBox = mpDrv->pUpPort->pfnPutEvent(mpDrv->pUpPort, (uint8_t)keys[i]);
     119    for (uint32_t i = 0; (i < count) && VBOX_SUCCESS(rcVBox); i++, currentScancode++)
     120    {
     121        rcVBox = mpDrv->pUpPort->pfnPutEvent(mpDrv->pUpPort, *(uint8_t*)currentScancode);
    121122    }
    122123
     
    126127    /// @todo is it actually possible that not all scancodes can be transmitted?
    127128    if (codesStored)
    128         *codesStored = keys.size();
     129        *codesStored = count;
    129130
    130131    return S_OK;
     
    140141STDMETHODIMP Keyboard::PutCAD()
    141142{
    142     static com::SafeArray<LONG> cadSequence(6);
    143    
    144     cadSequence[0] = 0x1d; // Ctrl down
    145     cadSequence[1] = 0x38; // Alt down
    146     cadSequence[2] = 0x53; // Del down
    147     cadSequence[3] = 0xd3; // Del up
    148     cadSequence[4] = 0xb8; // Alt up
    149     cadSequence[5] = 0x9d; // Ctrl up
    150 
    151     return PutScancodes (ComSafeArrayAsInParam(cadSequence), NULL);
     143    static LONG cadSequence[] = {
     144        0x1d, // Ctrl down
     145        0x38, // Alt down
     146        0x53, // Del down
     147        0xd3, // Del up
     148        0xb8, // Alt up
     149        0x9d  // Ctrl up
     150    };
     151
     152    return PutScancodes (cadSequence, ELEMENTS (cadSequence), NULL);
    152153}
    153154
  • trunk/src/VBox/Frontends/VBoxBFE/KeyboardImpl.h

    r11655 r11659  
    4848
    4949    STDMETHOD(PutScancode)(LONG scancode);
    50     STDMETHOD(PutScancodes)(ComSafeArrayIn (LONG, scancodes),
     50    STDMETHOD(PutScancodes)(LONG *scancodes,
     51                            ULONG count,
    5152                            ULONG *codesStored);
    5253    STDMETHOD(PutCAD)();
  • trunk/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp

    r11655 r11659  
    47424742        case SDLK_F10: case SDLK_F11: case SDLK_F12:
    47434743        {
    4744             // /* send Ctrl-Alt-Fx to guest */
    4745             com::SafeArray<LONG> keys(6);
    4746            
    4747             keys[0] = 0x1d; // Ctrl down
    4748             keys[1] = 0x38; // Alt down
    4749             keys[2] = Keyevent2Keycode(pEv); // Fx down
    4750             keys[3] = keys[2] + 0x80; // Fx up
    4751             keys[4] = 0xb8; // Alt up
    4752             keys[5] = 0x9d;  // Ctrl up
    4753 
    4754             gKeyboard->PutScancodes(ComSafeArrayAsInParam(keys), NULL);
     4744            /* send Ctrl-Alt-Fx to guest */
     4745            static LONG keySequence[] = {
     4746                0x1d, // Ctrl down
     4747                0x38, // Alt down
     4748                0x00, // Fx down (placeholder)
     4749                0x00, // Fx up (placeholder)
     4750                0xb8, // Alt up
     4751                0x9d  // Ctrl up
     4752            };
     4753
     4754            /* put in the right Fx key */
     4755            keySequence[2] = Keyevent2Keycode(pEv);
     4756            keySequence[3] = keySequence[2] + 0x80;
     4757
     4758            gKeyboard->PutScancodes(keySequence, ELEMENTS(keySequence), NULL);
    47554759            return VINF_SUCCESS;
    47564760        }
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp

    r11655 r11659  
    13881388                    if (ke->key() >= Key_F1 && ke->key() <= Key_F12)
    13891389                    {
    1390                         QValueVector <LONG> combo (6);
     1390                        LONG combo [6];
    13911391                        combo [0] = 0x1d; /* Ctrl down */
    13921392                        combo [1] = 0x38; /* Alt  down */
     
    14081408
    14091409                        CKeyboard keyboard = mConsole.GetKeyboard();
    1410                         keyboard.PutScancodes (combo);
     1410                        keyboard.PutScancodes (combo, 6);
    14111411                    }
    14121412                    else if (ke->key() == Key_Home)
     
    26152615#endif
    26162616
    2617     std::vector <LONG> tmp(codes, &codes[count]);
    2618     QValueVector <LONG> scancodes (tmp);
    2619     keyboard.PutScancodes (scancodes);
     2617    keyboard.PutScancodes (codes, count);
    26202618
    26212619    /* grab the key from Qt */
     
    31873185                fSentRESEND = true;
    31883186            }
    3189             QValueVector <LONG> codes (2);
     3187            LONG codes [2];
    31903188            codes[0] = 0xE0;
    31913189            codes[1] = i | 0x80;
    3192             keyboard.PutScancodes (codes);
     3190            keyboard.PutScancodes (codes, 2);
    31933191        }
    31943192        mPressedKeys [i] = 0;
     
    32173215    AssertMsg (mAttached, ("Console must be attached"));
    32183216
    3219     QValueVector <LONG> codes (2);
     3217    LONG codes [2];
    32203218    CKeyboard keyboard = mConsole.GetKeyboard();
    32213219    for (uint i = 0; i < SIZEOF_ARRAY (mPressedKeys); ++ i)
     
    32363234            if (!(ns & IsExtKeyPressed))
    32373235                codes [1] |= 0x80;
    3238             keyboard.PutScancodes (codes);
     3236            keyboard.PutScancodes (codes, 2);
    32393237        }
    32403238    }
  • trunk/src/VBox/Frontends/VirtualBox4/src/VBoxConsoleView.cpp

    r11655 r11659  
    14261426                    if (ke->key() >= Qt::Key_F1 && ke->key() <= Qt::Key_F12)
    14271427                    {
    1428                         QVector <LONG> combo (6);
     1428                        LONG combo [6];
    14291429                        combo [0] = 0x1d; /* Ctrl down */
    14301430                        combo [1] = 0x38; /* Alt  down */
     
    14461446
    14471447                        CKeyboard keyboard = mConsole.GetKeyboard();
    1448                         keyboard.PutScancodes (combo);
     1448                        keyboard.PutScancodes (combo, 6);
    14491449                    }
    14501450                    else if (ke->key() == Qt::Key_Home)
     
    26572657#endif
    26582658
    2659     std::vector <LONG> scancodes(codes, &codes[count]);
    2660     keyboard.PutScancodes (QVector<LONG>::fromStdVector(scancodes));
     2659    keyboard.PutScancodes (codes, count);
    26612660
    26622661    /* grab the key from Qt */
     
    32273226                fSentRESEND = true;
    32283227            }
    3229             QVector <LONG> codes (2);
     3228            LONG codes [2];
    32303229            codes[0] = 0xE0;
    32313230            codes[1] = i | 0x80;
    3232             keyboard.PutScancodes (codes);
     3231            keyboard.PutScancodes (codes, 2);
    32333232        }
    32343233        mPressedKeys [i] = 0;
     
    32573256    AssertMsg (mAttached, ("Console must be attached"));
    32583257
    3259     QVector <LONG> codes (2);
     3258    LONG codes [2];
    32603259    CKeyboard keyboard = mConsole.GetKeyboard();
    32613260    for (uint i = 0; i < SIZEOF_ARRAY (mPressedKeys); ++ i)
     
    32763275            if (!(ns & IsExtKeyPressed))
    32773276                codes [1] |= 0x80;
    3278             keyboard.PutScancodes (codes);
     3277            keyboard.PutScancodes (codes, 2);
    32793278        }
    32803279    }
  • trunk/src/VBox/Main/KeyboardImpl.cpp

    r11655 r11659  
    2525#include "Logging.h"
    2626
    27 #include <VBox/com/array.h>
    2827#include <VBox/pdmdrv.h>
    2928#include <iprt/asm.h>
     
    149148                      This value can be NULL.
    150149 */
    151 STDMETHODIMP Keyboard::PutScancodes(ComSafeArrayIn (LONG, scancodes),
     150STDMETHODIMP Keyboard::PutScancodes(LONG *scancodes,
     151                                    ULONG count,
    152152                                    ULONG *codesStored)
    153153{
    154     if (ComSafeArrayInIsNull(scancodes))
     154    if (!scancodes)
    155155        return E_INVALIDARG;
    156156
     
    160160    CHECK_CONSOLE_DRV (mpDrv);
    161161
    162     com::SafeArray <LONG> keys(ComSafeArrayInArg(scancodes));
     162    LONG *currentScancode = scancodes;
    163163    int rcVBox = VINF_SUCCESS;
    164164
    165     for (uint32_t i = 0; (i < keys.size()) && VBOX_SUCCESS(rcVBox); i++)
    166     {
    167         rcVBox = mpDrv->pUpPort->pfnPutEvent(mpDrv->pUpPort, (uint8_t)keys[i]);
     165    for (uint32_t i = 0; (i < count) && VBOX_SUCCESS(rcVBox); i++, currentScancode++)
     166    {
     167        rcVBox = mpDrv->pUpPort->pfnPutEvent(mpDrv->pUpPort, *(uint8_t*)currentScancode);
    168168    }
    169169
     
    174174    /// @todo is it actually possible that not all scancodes can be transmitted?
    175175    if (codesStored)
    176         *codesStored = keys.size();
     176        *codesStored = count;
    177177
    178178    return S_OK;
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r11655 r11659  
    77077707  <interface
    77087708     name="IKeyboard" extends="$unknown"
    7709      uuid="2d1a531b-4c6e-49cc-8af6-5c857b78b5d7"
     7709     uuid="FD443EC1-000A-4F5B-9282-D72760A66916"
    77107710     wsmap="managed"
    77117711     >
     
    77247724    <method name="putScancodes">
    77257725      <desc>Sends an array of scancode to the keyboard.</desc>
    7726       <param name="scancodes" type="long" dir="in" safearray="yes"/>
     7726      <param name="scancodes" type="long" dir="in" array="count"/>
     7727      <param name="count" type="unsigned long" dir="in"/>
    77277728      <param name="codesStored" type="unsigned long" dir="return"/>
    77287729    </method>
  • trunk/src/VBox/Main/include/KeyboardImpl.h

    r11655 r11659  
    7272
    7373    STDMETHOD(PutScancode)(LONG scancode);
    74     STDMETHOD(PutScancodes)(ComSafeArrayIn (LONG, scancodes),
     74    STDMETHOD(PutScancodes)(LONG *scancodes,
     75                            ULONG count,
    7576                            ULONG *codesStored);
    7677    STDMETHOD(PutCAD)();
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette