GTK# 实现窗口不在任务栏显示的方案咨询(适配GTK 3.24版本)
GTK 3.24 窗口隐藏任务栏图标实现方案
不同运行环境下的可用实现方案如下:
X11 后端(Linux 常见桌面默认)
直接调用GDK原生API设置跳过任务栏提示即可,代码示例:
若使用PyGObject开发,对应代码为:// 需在窗口show操作前执行 GdkWindow *gdk_window = gtk_widget_get_window(GTK_WIDGET(your_window_obj)); gdk_window_set_skip_taskbar_hint(gdk_window, TRUE);your_window.set_skip_taskbar_hint(True)Wayland 后端
Wayland场景下任务栏显示逻辑由合成器控制,可通过修改窗口类型hint实现隐藏,代码示例:
主流合成器(Mutter、KWin等)都会识别该类型,不为其生成任务栏入口。// 需在窗口实例化后、show操作前执行 gtk_window_set_type_hint(GTK_WINDOW(your_window_obj), GDK_WINDOW_TYPE_HINT_UTILITY);Windows 平台
GTK的跨平台hint在Windows下适配性有限,需调用原生Win32 API修改窗口属性实现,代码示例:// 需引入gdk/gdkwin32.h、windows.h头文件 GdkWindow *gdk_window = gtk_widget_get_window(GTK_WIDGET(your_window_obj)); HWND hwnd = GDK_WIN32_WINDOW(gdk_window)->handle; LONG_PTR ex_style = GetWindowLongPtrW(hwnd, GWL_EXSTYLE); // 移除任务栏显示属性、新增工具窗口属性 ex_style &= ~WS_EX_APPWINDOW; ex_style |= WS_EX_TOOLWINDOW; SetWindowLongPtrW(hwnd, GWL_EXSTYLE, ex_style);
通用注意事项:
- 所有属性修改操作必须在窗口
gtk_widget_show_all()执行前完成,否则配置可能不生效- 若窗口为子窗口,设置
gtk_window_set_transient_for()绑定父窗口后,多数桌面环境默认不会为子窗口渲染任务栏图标

内容的提问来源于stack exchange,提问作者INTENSA
相关产品推荐
相关产品推荐

