2011-09-29 78 views
0

我想要一個Gtk :: Widgets的列表,當點擊時我需要突出顯示這個小部件,但是當用戶按下按鈕並拖動到另一個小部件時,第一個將'不高興'和新的將突出顯示在enter_notify上。當鼠標關閉時,Gtk :: Widget on_enter_notify?

我試過在多種組合中使用on_enter_notify_event和on_button_press_event(是的,我添加了事件),但每次我按下小部件時,它都會啓動一個拖動事件,並且enter_notify和leave_notify贏得' t火。

有沒有辦法忽略拖動事件?我嘗試在啓動時結束它,但我認爲問題在於on_notify不會隨鼠標向下觸發。還有另一種方法嗎?

任何幫助或建議,將不勝感激。

+0

也許你應該通過組合按鈕事件/按鈕釋放事件來處理高光。 – erick2red

+0

@ erick2red這就是我原來的樣子。拖動事件仍然開始,我無法突出顯示其他單元格。 – paullj1

+0

然後,看看[GtkButton代碼](http://git.gnome.org/browse/gtk+/tree/gtk/gtkbutton.c) – erick2red

回答

1

好的,顯然當一個小部件被激活或點擊時,GdkDevice'grab()是小部件,只發送事件給THAT小部件。所以我從設備中取出了這個設備,並在其上調用了'ungrab()',這樣它就可以讓其他單元接收事件。然後在我的其他單元格上,我檢查on_enter_notify_event中的event->狀態以查看鼠標是否關閉,並且瞧!該單元格突出顯示。

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

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

    return true; 
}