【问题标题】:Gtk Grab pointer without "stealing" it from other softwareGtk 抓取指针而不从其他软件“窃取”它
【发布时间】: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 的语言回答我。

【问题讨论】:

    标签: gtk gtk3


    【解决方案1】:

    你为什么不使用“enter-notify-signal”?当指针进入您的小部件窗口时,在某处创建一个开/关开关并在“按钮按下信号”中使用它。如果按下按钮时它打开做某事,如果它关闭做其他事情

    【讨论】:

      猜你喜欢
      • 2013-08-23
      • 1970-01-01
      • 1970-01-01
      • 2015-05-29
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多