Thoughts about fixing bug 1848

Andreas Rosenberg sonix2003 at ctf-z.de
Sat Dec 6 16:32:46 CST 2003


I was thinking about fixing the bug 1848. 

Here are parts of the involved functions.

See my comments/questions with multiple *** inside:
-------------------------------
BOOL WINAPI TrackPopupMenu( HMENU hMenu, UINT wFlags, INT x, INT y,
                           INT nReserved, HWND hWnd, const RECT *lpRect )
{
    BOOL ret = FALSE;

    MENU_InitTracking(hWnd, hMenu, TRUE, wFlags);  /****** returns always TRUE */

    /* Send WM_INITMENUPOPUP message only if TPM_NONOTIFY flag is not specified */
    if (!(wFlags & TPM_NONOTIFY))
        SendMessageW( hWnd, WM_INITMENUPOPUP, (WPARAM)hMenu, 0);

    if (MENU_ShowPopup( hWnd, hMenu, 0, x, y, 0, 0 ))	/****** this may return FALSE if MENU_GetMenu fails */

      /****** how can we decide if the call failed, or a click outside the menu happened ???? */
      /****** I would suggest to let MENU_TrackMenu return -1 if clicked outside the menu and zero if */
	/****** something fails - this requires no other change */
	ret = MENU_TrackMenu( hMenu, wFlags | TPM_POPUPMENU, 0, 0, hWnd, lpRect );

    MENU_ExitTracking(hWnd);  /***** returns always TRUE */

    if( (!(wFlags & TPM_RETURNCMD)) && (ret != FALSE) )  /****** FALSE = 0*/
	ret = TRUE;

    return ret;
}


static INT MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y,
                              HWND hwnd, const RECT *lprect )
{
.....
    INT executedMenuId = -1;
....
    /*** If I understood things right - simply return executedMenuId */
    /*** suggestion:  return (executedMenuId)    */
    /*** could somebody please comment, if my assumption is correct? */
    return ((executedMenuId != -1) ? executedMenuId : 0);
}






More information about the wine-devel mailing list