如何修复 Ubuntu VSCode、(基于 Chrome)浏览器、Typora 应用程序和其他应用程序的失焦(对话框)窗口?

如何修复 Ubuntu VSCode、(基于 Chrome)浏览器、Typora 应用程序和其他应用程序的失焦(对话框)窗口?

Visual Studio Code 和 Typora 等应用程序会在程序后面打开打开和保存对话框窗口。而在 Brave 和 Chrome 浏览器中,我使用的另存为对话框窗口没有聚焦,因此我必须使用鼠标单击并聚焦鼠标,然后才能编辑文件名等。

这件事已经困扰我好一段时间了。

如果以下解决方法对您有用,请回复修复此问题的其他程序。

答案1

这是针对标题中列出的程序以及您的应用程序的一个恼人问题的两步解决方法。请告诉我它是否有效以及适用于哪些程序。

注 1:当应用窗口不是全屏且足够小,打开或保存对话框窗口无法容纳在屏幕的空白处时,对话框窗口将在主窗口旁边打开,焦点在主窗口上。只要主窗口最大化或足够大,对话框窗口就会强制显示在主窗口上方,此解决方法对我来说有效。

步骤 1:安装 gnome 扩展“Grand Theft Focus”以聚焦 Visual Studio Code 的对话框窗口和...:

https://extensions.gnome.org/extension/5410/grand-theft-focus/

第 2 步:使用 devilspie2 聚焦浏览器(基于 Chrome)的对话框窗口......:

我正在使用 Brave 浏览器。

致谢

从终端安装 devilspie2:

sudo apt install devilspie2

通过创建以下文件来创建规则:

nano ~/.config/devilspie2/devilspie2.lua

插入以下代码:

if ( get_application_name() == 'xdg-desktop-portal-gnome' and get_window_type() == 'WINDOW_TYPE_DIALOG' )
then
    focus_window();
end

保存并退出文件。

如果出现文件夹文件不存在的错误,只需运行一次 devilspie2。它将创建配置目录并退出,因为没有规则,然后尝试再次创建规则。

通过 Alt+F2 运行 devilspie,打开 (a) Chrome (基于) 浏览器并按下 来测试它是否有效Ctrl + s。对话框窗口应该处于焦点状态。

如果一切正常,请将 devilspie2 添加到您的启动应用程序中,它将在下次登录时运行。

步骤 3:%U从 Typora 桌面启动器重新打开:

有趣的是,只需%U从 Typora 的桌面启动器中删除即可解决问题,可能与上述步骤之一结合使用。桌面启动器现在显示:

[Desktop Entry]
Version=1.1
Type=Application
Name=Typora
GenericName=Markdown Editor
Comment=a minimal Markdown reading & writing app. Change Log: (https://>
Icon=typora
Exec=typora
Actions=
MimeType=text/markdown;text/x-markdown;
Categories=Office;WordProcessor;
StartupNotify=true

这些是解决这个恼人的问题的解决方法,直到开发人员解决这个问题。

我希望它能对你们有所帮助。

答案2

由于某种原因,我没有得到典型的(Ubuntuforums 原始)答案

if ( get_application_name() == 'xdg-desktop-portal-gnome' and get_window_type() == 'WINDOW_TYPE_DIALOG' )
then
    focus_window();
end

首先,在使用 Ubuntu Mate 时,我看到的“应用程序名称”或 WM_CLASS 是WM_CLASS(STRING) = "xdg-desktop-portal-gtk", "Xdg-desktop-portal-gtk"

尽管如此,即使尝试改变这些或仅仅使用单独,focus_window()如果没有 Alt-Tabbing 或单击回原始程序窗口,我也无法让对话框聚焦。

通过快速调试,我确实看到窗口已被检测到并且焦点已启动,但我仍然没有看到窗口。因此,我改用 xdotool 来激活窗口。这似乎适用于我遇到问题的所有对话框:

if (get_window_type() == 'WINDOW_TYPE_DIALOG') then
    local window_title = get_window_name()
    print('Window title: ' .. window_title)
    os.execute('xdotool search --name "' .. window_title .. '" windowactivate')
end

相关内容