Changeset 103 for trunk/src


Ignore:
Timestamp:
Jun 19, 2008, 1:02:02 AM (17 years ago)
Author:
lpino
Message:

Fixed showing popups menus and posting events from menu bars

Location:
trunk/src/plugins/org.eclipse.swt/Eclipse SWT/pm/org/eclipse/swt/widgets
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/plugins/org.eclipse.swt/Eclipse SWT/pm/org/eclipse/swt/widgets/Control.java

    r101 r103  
    1313 */
    1414
     15import java.util.MissingResourceException;
    1516import org.eclipse.swt.internal.pm.*;
    1617import org.eclipse.swt.graphics.*;
     
    29422943    switch (msg) {
    29432944//        case OS.WM_ADJUSTWINDOWPOS: result = WM_ADJUSTWINDOWPOS (mp1, mp2); break;
     2945//        case OS.WM_BUTTON2DBLCLK: result = WM_BUTTON2DBLCLK (mp1, mp2); break;
    29442946        case OS.WM_CALCVALIDRECTS: result = WM_CALCVALIDRECTS (mp1, mp2); break;
    29452947        case OS.WM_CHAR: result = WM_CHAR (mp1, mp2); break;
     
    29642966//        case OS.WM_ENDSESSION: result = WM_ENDSESSION (wParam, lParam); break;
    29652967        case OS.WM_ERASEBACKGROUND: result = WM_ERASEBACKGROUND (mp1, mp2); break;
     2968        case OS.WM_FOCUSCHANGE: result = WM_FOCUSCHANGE (mp1, mp2); break;
    29662969        case OS.WM_QUERYDLGCODE: result = WM_QUERYDLGCODE (mp1, mp2); break;
    29672970//        case OS.WM_HELP: result = WM_HELP (wParam, lParam); break;
     
    30283031    return null;
    30293032}
    3030 
     3033//MRESULT OS.WM_BUTTON2DBLCLK (int mp1, int mp2) {
     3034//    return null;
     3035//}
    30313036MRESULT WM_CALCVALIDRECTS (int mp1, int mp2) {
    30323037    return null;
     
    30513056
    30523057MRESULT WM_COMMAND (int mp1, int mp2) {
    3053 //@@TODO(dmik): do we need this?
    3054 //      /*
    3055 //      * When the WM_COMMAND message is sent from a
    3056 //      * menu, the HWND parameter in LPARAM is zero.
    3057 //      */
    3058 //      if (lParam == 0) {
    3059 //              Decorations shell = menuShell ();
    3060 //              if (shell.isEnabled ()) {
    3061 //                      int id = wParam & 0xFFFF;
    3062 //                      MenuItem item = shell.findMenuItem (id);
    3063 //                      if (item != null && item.isEnabled ()) {
    3064 //                              return item.wmCommandChild (wParam, lParam);
    3065 //                      }
    3066 //              }
    3067 //              return null;
    3068 //      }
    3069 //      Control control = WidgetTable.get (lParam);
    3070 //      if (control == null) return null;
    3071 //      return control.wmCommandChild (wParam, lParam);
    30723058    switch (OS.SHORT1FROMMP (mp2)) {
    3073         //@@TODO(dmik)
    30743059        case OS.CMDSRC_MENU:
    3075             System.out.println("Control:WM_COMMAND - CMDSRC_MENU");
     3060            Decorations shell = menuShell ();
     3061            if (shell.isEnabled ()) {
     3062                    int id = mp1;
     3063                    MenuItem item = shell.findMenuItem (id);
     3064                    if (item != null && item.isEnabled ()) {
     3065                            return item.wmCommandChild (mp1, mp2);
     3066                    }
     3067            }
    30763068            break;
    30773069        //    return null;
     
    30863078        //case OS.CMDSRC_PRINTDLG:
    30873079    }
    3088     System.out.println("Control:WM_COMMAND - Calling wmCommandChild");
    30893080    int hwndChild = OS.WinWindowFromID (handle, OS.SHORT1FROMMP (mp1));
    30903081    Control control = WidgetTable.get (hwndChild);
    3091     System.out.println("Control:WM_COMMAND - Control handle = " + Integer.toHexString (handle));
    3092     System.out.println("Control:WM_COMMAND - Child handle = " + Integer.toHexString (hwndChild));
    3093 //    System.out.println("Control:WM_COMMAND - Menu handle = " + Integer.toHexString (menu.handle));
    30943082    if (control == null) return null;
    30953083    return control.wmCommandChild (mp1, mp2);
     
    31053093      */
    31063094//      if (mp2 != handle) return null;
    3107       boolean bIsWaiting = true;
    3108       System.out.println("Control:WM_CONTEXTMENU - PARENT HANDLE = " + Integer.toHexString (handle));
     3095      int parentHandle = OS.WinQueryWindow(menu.handle, OS.QW_PARENT);
    31093096      int hab = parent.getDisplay ().hab;
    31103097    //@@TODO(lpino) Remove debug msg
    3111       System.out.println("Control:WM_CONTEXTMENU - MENU HANDLE = " + Integer.toHexString (menu.handle));
    3112       short flOptions = OS.PU_HCONSTRAIN | OS.PU_VCONSTRAIN | OS.PU_MOUSEBUTTON1DOWN | OS.PU_KEYBOARD | OS.PU_MOUSEBUTTON1;
    3113       boolean rc = OS.WinPopupMenu(handle, handle, menu.handle, 0, OS.SHORT1FROMMP(mp1), OS.SHORT2FROMMP(mp1), flOptions);
     3098//      System.out.println("Control:WM_CONTEXTMENU - PARENT HANDLE = " + Integer.toHexString (parentHandle));
     3099//      System.out.println("Control:WM_CONTEXTMENU - MENU HANDLE = " + Integer.toHexString (menu.handle));
     3100      short flOptions = OS.PU_HCONSTRAIN | OS.PU_VCONSTRAIN | OS.PU_KEYBOARD | OS.PU_MOUSEBUTTON1;
     3101      boolean rc = OS.WinPopupMenu(parentHandle, parentHandle, menu.handle, 0, OS.SHORT1FROMMP(mp1), OS.SHORT2FROMMP(mp1), flOptions);
    31143102//      if (menu != null && !menu.isDisposed ()) {
    31153103//              menu.setVisible (true);
    31163104//      }
    3117 //       while(bIsWaiting){       
    3118 //            QMSG qmsg = new QMSG ();
    3119 //
    3120 //            OS.WinGetMsg(hab,qmsg, 0, 0, 0);
    3121 //            if (qmsg.msg == OS.WM_COMMAND)
    3122 //                bIsWaiting = false;
    3123 //            OS.WinDispatchMsg(hab, qmsg);
    3124 //          System.out.println("Control:WM_CONTEXTMENU");
    3125 //        }
    3126       System.out.println("Control:WM_CONTEXTMENU - ABOUT TO RETURN" );
    31273105      return MRESULT.TRUE;
    31283106}
     
    32563234
    32573235      /* Ignore WM_INITMENU for an accelerator */
    3258       System.out.println("Control:WM_INITMENU " + OS.WinIsWindowVisible(mp2));
     3236      System.out.println("Control:WM_INITMENU -  MENU HANDLE = " + Integer.toHexString (mp2));
    32593237      Display display = getDisplay ();
    32603238      if (display.accelKeyHit) return null;
     
    32943272              }
    32953273      }
    3296       System.out.println("Control:WM_INITMENU " + menu);
     3274      if(menu == null)
     3275        System.out.println("Control:WM_INITMENU " + menu);
     3276      else
     3277        System.out.println("Control:WM_INITMENU " + Integer.toHexString (menu.handle));   
    32973278//
    32983279//      /*
     
    34913472//
    34923473MRESULT WM_MENUSELECT (int mp1, int mp2) {
    3493     System.out.println("Control:WM_MENUSELECT");
     3474    System.out.println("Control:WM_MENUSELECT - MP1 SHORT 1= " + OS.SHORT1FROMMP(mp1));
     3475    System.out.println("Control:WM_MENUSELECT - MP1 SHORT 2= " + OS.SHORT2FROMMP(mp1));
     3476    if(OS.SHORT2FROMMP(mp1) == 0) return MRESULT.FALSE;
    34943477//      int code = wParam >> 16;
    3495 //      Shell shell = getShell ();
     3478      Shell shell = getShell ();
    34963479//      if (code == -1 && lParam == 0) {
    34973480//              Menu menu = shell.activeMenu;
     
    35733556//              if (item != null) item.sendEvent (SWT.Arm);
    35743557//      }
    3575       return null;
     3558//      int parentHandle = OS.WinQueryWindow(menu.handle, OS.QW_PARENT);
     3559//      boolean bIsWaiting = true;
     3560//      int hab = 0;
     3561//      if(parent == null)
     3562//          hab = getDisplay().hab;
     3563//      else
     3564//          hab = parent.getDisplay ().hab;
     3565//       while(bIsWaiting){       
     3566//            QMSG qmsg = new QMSG ();
     3567//
     3568//            OS.WinGetMsg(hab,qmsg, 0, 0, 0);
     3569//            if (qmsg.msg == OS.WM_COMMAND || qmsg.msg == OS.WM_MENUSELECT)
     3570//                bIsWaiting = false;
     3571//            OS.WinDispatchMsg(hab, qmsg);
     3572//          System.out.println("Control:WM_CONTEXTMENU");
     3573//        }
     3574      return MRESULT.TRUE;
    35763575}
    35773576//
     
    40404039    return new MRESULT (result);
    40414040}
    4042 
     4041MRESULT WM_FOCUSCHANGE (int mp1, int mp2) {
     4042    System.out.println("Control:WM_FOCUSCHANGE - HANDLE = " + Integer.toHexString (mp1));
     4043    callWindowProc (OS.WM_FOCUSCHANGE, mp1, mp2);
     4044    return MRESULT.ZERO;
     4045}
    40434046//MRESULT WM_ADJUSTWINDOWPOS (int mp1, int mp2) {
    40444047//    System.out.println("Control:WM_ADJUSTWINDOWPOS");
  • trunk/src/plugins/org.eclipse.swt/Eclipse SWT/pm/org/eclipse/swt/widgets/Menu.java

    r98 r103  
    241241);
    242242        } else  if ((style & SWT.POP_UP) != 0) {
    243 //            short flOptions = OS.PU_MOUSEBUTTON1DOWN | OS.PU_KEYBOARD | OS.PU_MOUSEBUTTON1;
    244             handle = OS.WinCreateWindow (OS.HWND_DESKTOP,       /* parent window */
     243            handle = OS.WinCreateWindow (parent.handle,                     /* parent window */
    245244                                                        PSZ.getAtom (OS.WC_MENU),       /* class name */
    246                                                         null,   /* window text */
    247                                                         0,      /* window style */
    248                                                         0, 0, 0, 0, /* size and position */
    249                                                         OS.NULLHANDLE,  /* owner window */
    250                                                         OS.HWND_TOP, /* sibling window */
    251                                                         0,      /* ID */
    252                                                         OS.NULLHANDLE,  /* control data */
    253                                                         0               /* presentation parameters */
     245                                                        null,                                               /* window text */
     246                                                        0,                                                   /* window style */
     247                                                        0, 0, 0, 0,                                       /* size and position */
     248                                                        parent.handle,                              /* owner window */
     249                                                        OS.HWND_TOP,                            /* sibling window */
     250                                                        0,                                                  /* ID */
     251                                                        OS.NULLHANDLE,                          /* control data */
     252                                                        0                                                   /* presentation parameters */
    254253                                                        );
    255 //          boolean rc = OS.WinPopupMenu(OS.HWND_DESKTOP, OS.HWND_DESKTOP, handle, 0, 0, 0, flOptions);
    256254System.out.println (
    257255    "Menu.createHandle(): POPUP menu window has been created:\n" +
  • trunk/src/plugins/org.eclipse.swt/Eclipse SWT/pm/org/eclipse/swt/widgets/MenuItem.java

    r91 r103  
    633633        if(rc == OS.MIT_ERROR || rc == OS.MIT_MEMERROR)
    634634            error (SWT.ERROR_CANNOT_SET_MENU);
    635 //      parent.destroyAcceleratorTable ();
     635        parent.destroyAcceleratorTable ();
    636636}
    637637
     
    683683
    684684MRESULT wmCommandChild (int mp1, int mp2) {
    685     System.out.println("MenuItem:wmCommandChild");
    686685        if ((style & (SWT.CHECK | SWT.RADIO)) != 0) {
    687686                setSelection (!getSelection ());
  • trunk/src/plugins/org.eclipse.swt/Eclipse SWT/pm/org/eclipse/swt/widgets/Shell.java

    r101 r103  
    102102public class Shell extends Decorations {
    103103    Display display;
    104 //@@TODO(dmik)
    105104    Menu activeMenu;
    106105//    int hIMC;
     
    12491248//      return result;
    12501249//}
    1251 //MRESULT WM_CONTEXTMENU (int mp1, int mp2) {
    1252 //    System.out.println("Shell:WM_CONTEXTMENU - PARENT HANDLE = " + Integer.toHexString (handle));
    1253 //    System.out.println("Control:WM_CONTEXTMENU - MENU HANDLE = " + Integer.toHexString (activeMenu.handle));
    1254 //    return MRESULT.TRUE;
    1255 //}
    1256 }
     1250}
Note: See TracChangeset for help on using the changeset viewer.