【发布时间】:2014-07-15 15:03:44
【问题描述】:
目前在我的应用程序中,我正在抓取指针以了解用户何时在我的第一个窗口的一些小部件之外单击以隐藏我的第二个窗口。不幸的是,如果我抓住指针,那么用户需要在我的应用程序外部单击两次才能将焦点设置在另一个窗口上。
当窗口获得焦点时,我会抓住指针:
this.focus_in_event.connect(()=>{
var pointer = Gdk.Display.get_default ().get_device_manager ().get_client_pointer ();
pointer.grab (this.get_window (), Gdk.GrabOwnership.NONE, true,
Gdk.EventMask.BUTTON_PRESS_MASK, null, Gdk.CURRENT_TIME);
Gtk.device_grab_add (this, pointer, false);
return false;
});
当点击事件发生并且某些窗口小部件没有“锁定”指针时:
this.button_press_event.connect ( ()=>{
if (!lock_mouse_click) {
var pointer = Gdk.Display.get_default ().get_device_manager ().get_client_pointer ();
Gtk.device_grab_remove (this, pointer);
pointer.ungrab (Gdk.CURRENT_TIME);
feed_view.hide ();
}
lock_mouse_click = false;
return false;
});
我想做的是“偷看”指针,而不是在我的应用程序之外窃取鼠标事件。
我在 vala 中的代码,但你可以用任何使用 gtk 的语言回答我。
【问题讨论】: