2009-05-20 2 views
2

내 gwt 1.6 응용 프로그램이 하이퍼 링크에서 마우스 클릭을 가로 채기 때문에 사용자가 "작성자"에 대한 링크를 Shift- 클릭하면 작성자에게 이동하는 대신 편집 ... 대화 상자가 표시됩니다 페이지. 그것은 잘 작동하고 있습니다.제어 - 클릭 컨텍스트 메뉴, gwt 억제 1.6

이제 사용자가 둘 이상의 작성자를 선택하기 위해 Ctrl 키를 누른 상태에서 클릭 할 수있게하고 싶지만 브라우저의 기본 팝업 메뉴를 표시하지 않는 방법을 알아낼 수 없습니다. 이 코드는 제대로 시프트 클릭을 처리하지만, 내가 클릭 제어 및 파이어 폭스에서 반 실패 (호출되는 handleCtrlClick(),하지만 난 여전히 브라우저 메뉴를 얻을) 때 호스트 브라우저에서 실패


    public void onModuleLoad() { 
    Event.addNativePreviewHandler(this); 
    } 

    // 
    // Preview events-- look for shift-clicks on paper/author links, and pops up 
    // edit dialog boxes. 
    // And looks for control-click to do multiple selection. 
    // 
    public void onPreviewNativeEvent(Event.NativePreviewEvent pe) { 
    NativeEvent e = pe.getNativeEvent(); 
    switch (Event.getTypeInt(e.getType())) { 
    case Event.ONCLICK: 
     if (e.getShiftKey()) { handleShiftClick(e); } 
     if (e.getCtrlKey()) { handleCtrlClick(e); } 
     break; 
    case Event.ONCONTEXTMENU: 
     if (e.getCtrlKey()) { // THIS IS NOT WORKING... 
     e.preventDefault(); 
     e.stopPropagation(); 
     } 
     break; 
    } 
    } 

중단 점을 ONCONTEXTMENU 대/소문자는 절대 호출되지 않습니다.

답변

0

점점 가까워지고 있습니다.


    public void onModuleLoad() { 
    Event.addNativePreviewHandler(this); // Catch shift- or control- clicks on links 
    addContextMenuEventListener(RootPanel.getBodyElement()); 
    }

protected native void addContextMenuEventListener(Element elem) /-{ elem.oncontextmenu = function(e) { return false; // TODO: only return false if control key down... }; }-/;

그러면 마우스 오른쪽 버튼 클릭 메뉴가 완전히 비활성화됩니다. 컨트롤 키를 눌렀을 때만 사용을 중지하고 싶습니다 ...

1

원 버튼 마우스 (iMac)를 사용하지 않는 한 IIRC ctrl + 클릭은 여러 항목을 선택하는 올바른 방법입니다), 그 경우 나는 당신을 도울 수 없습니다.

자세한 내용을 제공해 주시겠습니까?

편집 :

이유 (예를 들어, 사용하지 않도록 설정) 다음 (아마도 수직의 MenuBar + 메뉴 아이템에 따라) 자신의 상황에 맞는 메뉴 위젯을 작성하려면 contextmenu을 무시하고 단지 Ctrl 키 + 마우스 오른쪽 단추에 표시하지? 즉

이 다소이 (의사 코드) 같은 MouseHandler는을 만들 것입니다 :

public void onMouseDown(MouseDownEvent event) { 
    Widget sender = (Widget) event.getSource(); 

    int button = event.getNativeButton(); 


    if (button == NativeEvent.BUTTON_LEFT) { 
     if(event.is_ctrl_also) 
     { 
      // Add to selection 
      selection = selection + sender; 
     } 
     else 
     { 
      // Lose selection and start a new one 
      selection = sender; 
     } 
    } 
    else if(button == NativeEvent.BUTTON_RIGHT) { 
     if(event.is_ctrl_also) 
     { 
      // show context menu 
      this.contextmenu.show(); 
     } 
     else 
     { 
      // do something else 
     } 
    } 

    return; 
} 

내가 Ctrl 키 Leftclick이의 ContextMenu 이벤트를 쏜 버그가 발생하지했지만, 난 당신이 확신 순열을 사용하는 Firefox에 대해서만 해결 방법을 만들 수도 있습니다.

+0

원하는 동작 : 컨트롤 - 왼쪽 클릭 : 다중 선택 마우스 오른쪽 버튼으로 클릭 : 브라우저의 메뉴가 팝업됩니다. 문제는 Firefox (적어도)는 컨트롤 왼쪽 클릭을 마우스 오른쪽 버튼 클릭과 같은 것으로 취급한다는 것입니다 (oncontextmenu 이벤트가 발생 함). – gavinandresen

관련 문제