c++ - 跨平台 Gtk3 应用,菜单栏一开始无响应
问题描述
我正在用 C++ 编写一个跨平台的 Gtk3 应用程序。最近我一直致力于与 MacOS 的集成:
- Gtkmm 3.24 通过 Homebrew 获得;
- XCode 12.0;
- macOS 卡塔利娜 10.15。
我从 Gtk::Application 派生了我的应用程序类。应用程序对象覆盖调用基类 'on_startup() 的 'on_startup()',然后使用 Gtk 构建器资源从 XML 文件构造 Gio::Menu 对象,然后使用 'Gtk::Application::set_app_menu( )' 来安装它:
MyApplication::on_startup()
{
Gtk::Application::on_startup();
// skipping details: ... Gtk builder reads Gio::Menu object from resource file ...
set_app_menu( pMenu );
}
当我第一次启动我的应用程序时:
- 菜单栏没有反应。应用程序菜单出现在屏幕顶部栏中的 Apple 菜单旁边,但都不响应鼠标单击;
- 除了冻结的菜单栏外,应用程序运行正常,其主窗口响应。
然而,那么:
- 单击任何其他打开的应用程序的窗口,该应用程序的菜单栏就会出现;
- 单击我的应用程序窗口以切换回它,它的菜单栏返回并且现在可以正常工作。
这是 100% 可重现的(起初冻结,切换到另一个应用程序并返回,现在菜单工作)。
我在 XCode 中创建了另一个项目并构建了 Gtkmm 示例“app_and_win_menus”,示例应用程序的行为方式完全相同。
所以我想我真的只是在寻找一种解决方法。我一直在网上搜索有关此问题的任何信息,并看到其他人普遍抱怨 MacOS 上的冻结菜单栏,但没有特定于 Gtk(此 Mac 上的所有其他应用程序正常工作,只是我使用 Gtk+/Gtkmm 构建的应用程序3.24 显示此问题)。
我意识到这听起来有点像错误报告,这可能不是提出它的地方,但我不确定从这里去哪里。非常感谢任何信息。
解决方案
推荐阅读
- java - 在 Recycler Adapter 中获取活动 onDestroy()
- google-tag-manager - 无法为 Google 跟踪代码管理器添加 AMP 变量
- python - 在python nlp中匹配一组单词和一组句子
- php - 使用 Laravel 的带有 docker 映像的 Bitbucket 管道
- android - 如何在任何类型的视图上检测android中的左右双击
- node.js - 获取带有模块元素的 Angular 应用程序 html 页面
- python - 如何在一小段延迟后一个接一个地打印字符
- php - 带有许多不同站点的 Laravel URL 语言前缀
- android - 是否可以在 firebase 测试实验室中添加自定义 15 英寸设备
- c# - 将反序列化的 json 数据传递给 View