【问题标题】:gtk composite widget focusgtk 复合小部件焦点
【发布时间】:2010-12-08 14:10:26
【问题描述】:

我创建了一个复合小部件,其中 webkit_webview 小部件存储在带有 gtkvbox 基本小部件的滚动窗口中。每当包含的任何小部件具有焦点时,如何使基本 gtkvbox 小部件处于焦点?具体来说,我正在尝试添加仅在复合小部件处于焦点时才应处于活动状态的加速器。为了确定复合小部件是否在焦点上,我调用 gtk_widget_get_focused(),然后向上遍历小部件父级以填充找到基本小部件。似乎应该有更好的方法。

【问题讨论】:

    标签: c gtk


    【解决方案1】:

    一次只有一个小部件可以拥有全局输入焦点,这是用户在屏幕上看到的焦点,也是击键出现的位置。如果gtk_widget_has_focus(widget) 返回TRUE,则widget 具有全局输入焦点。不能让 webview 和 vbox 同时拥有全局输入焦点。

    您可以做的是在复合小部件的父级上调用gtk_container_get_focus_child(),如果返回值是您的复合小部件,那么焦点就在复合小部件内的某处。

    或者您可以连接到复合小部件上的"focus-in-event" 和"focus-out-event" 信号。我相当确定当其中一个包含的小部件获得或失去焦点时,这些会通知您。 (请记住首先在您的小部件上调用 gdk_window_set_events(widget->window, gdk_window_get_events(widget->window) | GDK_FOCUS_CHANGE_MASK),如 GTK 文档中所述。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 2022-01-16
      • 2019-05-31
      • 2019-10-30
      • 2017-10-22
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多