触摸屏上的 GTK+3 组合框解决方法

问题描述 投票:0回答:1

我正在开发 GTK+3 python 应用程序,该应用程序在触摸屏上的嵌入式系统上运行。我需要使用组合框,但它与触摸输入不兼容。如果我点击它,它会显示下拉菜单,当我抬起手指时该菜单就会关闭。它还选择我第一次触摸显示屏的坐标选项。如果我将手指拖动到其他地方来选择其他选项,它不会选择任何内容。如果第一次单击坐标位于渲染的下拉列表之外,则手指抬起时它不会关闭并且行为正确。

我发现了十多年前提到的这个错误,但我找不到任何解决方法。我尝试用我制作的一些补丁重新编译 GTK,但这是一个相当复杂的项目,而且我没有成功。我不确定如何调试我的补丁,我什至不确定我的补丁是否成功传播到 gtk 和 pygobject 库。

这里有一些现有的解决方法或补丁来在触摸屏上使用组合框吗?

python touch gtk3
1个回答
0
投票

好的,我找到了这个解决方法。我已经为 Gtk+3_3.24.36 创建了 yocto 补丁。我只是重写了负责设置弹出窗口小部件的垂直位置的代码。默认情况下,弹出窗口小部件的位置使所选选项与组合框对齐。在我的解决方法中,弹出窗口小部件位于组合框下方,远离用户手指。对我来说效果很好。

diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c
index ef4996c..727085e 100644
--- a/gtk/gtkcombobox.c
+++ b/gtk/gtkcombobox.c
@@ -2209,7 +2219,7 @@ gtk_combo_box_menu_popup (GtkComboBox    
*combo_box,
       g_object_set (priv->popup_widget,
                     "anchor-hints", (GDK_ANCHOR_SLIDE |
                                      GDK_ANCHOR_RESIZE),
-                    "rect-anchor-dy", rect_anchor_dy,
+                    "rect-anchor-dy", 30,
                     NULL);

       g_signal_connect (priv->popup_widget,
© www.soinside.com 2019 - 2024. All rights reserved.