Module: wine Branch: master Commit: f5adac3b1960ed2803e27346b799eafbe98bc99a URL: http://source.winehq.org/git/wine.git/?a=commit;h=f5adac3b1960ed2803e27346b7...
Author: Jeremy White jwhite@codeweavers.com Date: Mon Dec 24 13:34:34 2007 -0600
wintab32: Don't return information for non existent cursors.
---
dlls/winex11.drv/wintab.c | 181 +++++++++++++++++++++++--------------------- 1 files changed, 95 insertions(+), 86 deletions(-)
diff --git a/dlls/winex11.drv/wintab.c b/dlls/winex11.drv/wintab.c index 11c8bfc..4b208da 100644 --- a/dlls/winex11.drv/wintab.c +++ b/dlls/winex11.drv/wintab.c @@ -1129,95 +1129,104 @@ UINT X11DRV_WTInfoW(UINT wCategory, UINT nIndex, LPVOID lpOutput) case WTI_CURSORS+7: case WTI_CURSORS+8: case WTI_CURSORS+9: - tgtcursor = &gSysCursor[wCategory - WTI_CURSORS]; - switch (nIndex) + if (wCategory - WTI_CURSORS >= gNumCursors) { - case CSR_NAME: - rc = CopyTabletData(lpOutput, &tgtcursor->NAME, - (strlenW(tgtcursor->NAME)+1) * sizeof(WCHAR)); - break; - case CSR_ACTIVE: - rc = CopyTabletData(lpOutput,&tgtcursor->ACTIVE, - sizeof(BOOL)); - break; - case CSR_PKTDATA: - rc = CopyTabletData(lpOutput,&tgtcursor->PKTDATA, - sizeof(WTPKT)); - break; - case CSR_BUTTONS: - rc = CopyTabletData(lpOutput,&tgtcursor->BUTTONS, - sizeof(BYTE)); - break; - case CSR_BUTTONBITS: - rc = CopyTabletData(lpOutput,&tgtcursor->BUTTONBITS, - sizeof(BYTE)); - break; - case CSR_BTNNAMES: - FIXME("Button Names not returned correctly\n"); - rc = CopyTabletData(lpOutput,&tgtcursor->BTNNAMES, - tgtcursor->cchBTNNAMES*sizeof(WCHAR)); - break; - case CSR_BUTTONMAP: - rc = CopyTabletData(lpOutput,&tgtcursor->BUTTONMAP, - sizeof(BYTE)*32); - break; - case CSR_SYSBTNMAP: - rc = CopyTabletData(lpOutput,&tgtcursor->SYSBTNMAP, - sizeof(BYTE)*32); - break; - case CSR_NPBTNMARKS: - rc = CopyTabletData(lpOutput,&tgtcursor->NPBTNMARKS, - sizeof(UINT)*2); - break; - case CSR_NPBUTTON: - rc = CopyTabletData(lpOutput,&tgtcursor->NPBUTTON, - sizeof(BYTE)); - break; - case CSR_NPRESPONSE: - FIXME("Not returning CSR_NPRESPONSE correctly\n"); - rc = 0; - break; - case CSR_TPBUTTON: - rc = CopyTabletData(lpOutput,&tgtcursor->TPBUTTON, - sizeof(BYTE)); - break; - case CSR_TPBTNMARKS: - rc = CopyTabletData(lpOutput,&tgtcursor->TPBTNMARKS, - sizeof(UINT)*2); - break; - case CSR_TPRESPONSE: - FIXME("Not returning CSR_TPRESPONSE correctly\n"); - rc = 0; - break; - case CSR_PHYSID: + rc = 0; + WARN("Requested cursor information for non existent cursor %d; only %d cursors\n", + wCategory - WTI_CURSORS, gNumCursors); + } + else + { + tgtcursor = &gSysCursor[wCategory - WTI_CURSORS]; + switch (nIndex) { - DWORD id; - id = tgtcursor->PHYSID; - rc = CopyTabletData(lpOutput,&id,sizeof(DWORD)); + case CSR_NAME: + rc = CopyTabletData(lpOutput, &tgtcursor->NAME, + (strlenW(tgtcursor->NAME)+1) * sizeof(WCHAR)); + break; + case CSR_ACTIVE: + rc = CopyTabletData(lpOutput,&tgtcursor->ACTIVE, + sizeof(BOOL)); + break; + case CSR_PKTDATA: + rc = CopyTabletData(lpOutput,&tgtcursor->PKTDATA, + sizeof(WTPKT)); + break; + case CSR_BUTTONS: + rc = CopyTabletData(lpOutput,&tgtcursor->BUTTONS, + sizeof(BYTE)); + break; + case CSR_BUTTONBITS: + rc = CopyTabletData(lpOutput,&tgtcursor->BUTTONBITS, + sizeof(BYTE)); + break; + case CSR_BTNNAMES: + FIXME("Button Names not returned correctly\n"); + rc = CopyTabletData(lpOutput,&tgtcursor->BTNNAMES, + tgtcursor->cchBTNNAMES*sizeof(WCHAR)); + break; + case CSR_BUTTONMAP: + rc = CopyTabletData(lpOutput,&tgtcursor->BUTTONMAP, + sizeof(BYTE)*32); + break; + case CSR_SYSBTNMAP: + rc = CopyTabletData(lpOutput,&tgtcursor->SYSBTNMAP, + sizeof(BYTE)*32); + break; + case CSR_NPBTNMARKS: + rc = CopyTabletData(lpOutput,&tgtcursor->NPBTNMARKS, + sizeof(UINT)*2); + break; + case CSR_NPBUTTON: + rc = CopyTabletData(lpOutput,&tgtcursor->NPBUTTON, + sizeof(BYTE)); + break; + case CSR_NPRESPONSE: + FIXME("Not returning CSR_NPRESPONSE correctly\n"); + rc = 0; + break; + case CSR_TPBUTTON: + rc = CopyTabletData(lpOutput,&tgtcursor->TPBUTTON, + sizeof(BYTE)); + break; + case CSR_TPBTNMARKS: + rc = CopyTabletData(lpOutput,&tgtcursor->TPBTNMARKS, + sizeof(UINT)*2); + break; + case CSR_TPRESPONSE: + FIXME("Not returning CSR_TPRESPONSE correctly\n"); + rc = 0; + break; + case CSR_PHYSID: + { + DWORD id; + id = tgtcursor->PHYSID; + rc = CopyTabletData(lpOutput,&id,sizeof(DWORD)); + } + break; + case CSR_MODE: + rc = CopyTabletData(lpOutput,&tgtcursor->MODE,sizeof(UINT)); + break; + case CSR_MINPKTDATA: + rc = CopyTabletData(lpOutput,&tgtcursor->MINPKTDATA, + sizeof(UINT)); + break; + case CSR_MINBUTTONS: + rc = CopyTabletData(lpOutput,&tgtcursor->MINBUTTONS, + sizeof(UINT)); + break; + case CSR_CAPABILITIES: + rc = CopyTabletData(lpOutput,&tgtcursor->CAPABILITIES, + sizeof(UINT)); + break; + case CSR_TYPE: + rc = CopyTabletData(lpOutput,&tgtcursor->TYPE, + sizeof(UINT)); + break; + default: + FIXME("WTI_CURSORS unhandled index %i\n",nIndex); + rc = 0; } - break; - case CSR_MODE: - rc = CopyTabletData(lpOutput,&tgtcursor->MODE,sizeof(UINT)); - break; - case CSR_MINPKTDATA: - rc = CopyTabletData(lpOutput,&tgtcursor->MINPKTDATA, - sizeof(UINT)); - break; - case CSR_MINBUTTONS: - rc = CopyTabletData(lpOutput,&tgtcursor->MINBUTTONS, - sizeof(UINT)); - break; - case CSR_CAPABILITIES: - rc = CopyTabletData(lpOutput,&tgtcursor->CAPABILITIES, - sizeof(UINT)); - break; - case CSR_TYPE: - rc = CopyTabletData(lpOutput,&tgtcursor->TYPE, - sizeof(UINT)); - break; - default: - FIXME("WTI_CURSORS unhandled index %i\n",nIndex); - rc = 0; } break; case WTI_DEVICES: