2011-09-29 2 views
0

Gtk :: Widgets 목록을 만들려고하는데 위젯을 강조 표시해야하지만 사용자가 단추를 누른 상태에서 다른 위젯으로 드래그하면 첫 번째 것은 '강조 표시 안 함'이되고 새로운 것이 enter_notify에서 강조 표시됩니다.Gtk :: 위젯 on_enter_notify 마우스가 내려 갔을 때?

나는 on_enter_notify_event와 on_button_press_event를 여러 조합 (예, 이벤트 추가)으로 시도했지만 위젯을 누를 때마다 드래그 이벤트가 시작되고 enter_notify 및 leave_notify가 ' 화재.

끌기 이벤트를 무시할 수있는 방법이 있습니까? 시작될 때 끝내려고했는데 문제는 on_notify가 마우스를 놓으면 트리거되지 않는다고 생각합니다. 그것을하는 또 다른 방법이 있습니까?

도움이나 의견을 크게 주시면 감사하겠습니다.

+0

아마도 버튼 다운 이벤트/버튼 출시 이벤트를 결합하여 강조 표시를 처리해야합니다. – erick2red

+0

@ erick2red 그것이 원래 가지고 있던 방법입니다. 드래그 이벤트가 시작되고 다른 셀을 강조 표시 할 수 없습니다. – paullj1

+0

그런 다음 [GtkButton code] (http://git.gnome.org/browse/gtk+/tree/gtk/gtkbutton.c)를보십시오 – erick2red

답변

1

좋아요, 분명히 위젯이 활성화되거나 클릭되면 분명히 GdkDevice의 'grab()'가 위젯을 보내고 그 위젯에만 이벤트를 보냅니다. 그래서 이벤트에서 장치를 가져 와서 ungrab()을 호출하여 다른 셀에서 이벤트를 수신 할 수 있도록했습니다. 그런 다음 내 다른 셀에서 on_enter_notify_event의 이벤트 -> 상태를 확인하여 마우스가 눌려 있는지 확인합니다. 셀이 강조 표시됩니다.

bool cell::on_button_press_event(GdkEventButton* event) { 
    highlight_cell(); 

    gdk_device_ungrab(event->device, event->time); 

    return true; 
}