Gtk 抓取指针,无需从其他软件"stealing"



目前在我的应用程序,我抓住指针知道当用户点击一些我的第一个窗口的窗口外的小部件隐藏我的第二个窗口。不幸的是,如果我抓住指针,那么用户需要在我的应用程序外点击两次,将焦点设置在另一个窗口上。

当窗口获得焦点时,我抓住指针:

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的语言回答我

为什么不用"enter-notify-signal"呢?当指针进入小部件的窗口时,在某个地方创建一个开/关开关,并在"按钮-按-信号"中使用它。当按钮被按下时,如果它是on,则做某事,如果它是off,则做其他事情

相关内容

最新更新