代码之家  ›  专栏  ›  技术社区  ›  Joe Soul-bringer

如何防止Gnome在执行alt tab时显示两个窗口?(c++应用程序)

  •  6
  • Joe Soul-bringer  · 技术社区  · 14 年前

    我正在gnome下开发一个QT/c++应用程序。

    应用程序包含主窗口和QListBox子窗口。

    当我离开应用程序时,这两个窗口都显示为单独的主窗口。

    当我(或稍后的用户)使用alt tab时,如何使它只显示一个窗口?

    我猜这种行为是因为一个主窗口没有剪裁子窗口-子窗口扩展了主窗口的边界。Gnome对许多其他应用程序也有不好的alt-tab行为,将模态对话框与主窗口分开显示。但就我的应用而言,这真的很烦人。

    我想我可以做一个巨大的透明窗口,包括现有的两个窗口。但最好找到一个“干净”的解决方案。

    here )

    编辑: 应用程序有一个QWidget作为其主窗口(不是QMainWindow),QListView包含在QWidget对象中,并通过向主窗口传递一个点来创建。 使用Qt::Tool | Qt::FramelessWindowHint设置样式。

    Qt::x11bypassWindowManagerInt样式

    2 回复  |  直到 14 年前
        1
  •  3
  •   jollyroger    14 年前

    为用户创建窗口时 QListBox 窗口设置a Qt::Tool 在其构造函数或更高版本中使用 setWindowFlags 函数调用。下面是一些代码片段(我省略了标题):

    int main(int argc, char** argv)
    {
        QApplication app(argc, argv);
        QMainWindow mw;
        mw.show();
        QWidget toolWindow(&mw, Qt::Window|Qt::Tool);
        QHBoxLayout layout(&toolWindow);
        toolWindow.setLayout(&layout);
        QListView lv(&toolWindow);
        layout.addWidget(&lv);
        toolWindow.show();
    
        return app.exec();
    }

    image proof on answer to question #3553428 .

    如果这不是你想要的,那么请说出正确工作的软件,或者你可以自己检查。进行此跑步 xprop 在终端窗口中,单击您感兴趣的窗口。输出将包含窗口标志。你感兴趣的是 _NET_WM_WINDOW_TYPE(ATOM) . 对于工具窗口(即未在alt tab中列出),此标志为:

    _NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_UTILITY, _NET_WM_WINDOW_TYPE_NORMAL
    

        2
  •  1
  •   nob    14 年前

    您可以使用wmctrl工具手动尝试。使用“-r-b SOMETHING”可以修改它的网络参数。在[1]中尝试这些。

    如果这可行,您可以将它们添加到Xlib调用中(如果您从Qt知道X11窗口号)。我相信这是可能的)。

    [1] http://standards.freedesktop.org/wm-spec/1.3/ar01s05.html