在 OSX 上将新的 GTK 3 窗口置于前台

Posted

技术标签:

【中文标题】在 OSX 上将新的 GTK 3 窗口置于前台【英文标题】:Bring new GTK 3 window to foreground on OSX 【发布时间】:2016-11-26 17:35:30 【问题描述】:

如何在 OSX sierra 上将任何新的 GTK 3 窗口置于前台?我打开的任何窗口(使用 gtk-rs 或 python)首先在后台结束。我试过了:

set_modal(true) set_keep_above(true) present()

似乎没有任何帮助,我找不到任何关于该方向的错误报告。知道如何实现这一目标吗?

GTK 是通过自制软件安装的:

languitar@miles ~/code/rust (master)> brew info gtk+3
gtk+3: stable 3.22.4 (bottled)
Toolkit for creating graphical user interfaces
http://gtk.org/
/usr/local/Cellar/gtk+3/3.22.4 (1,395 files, 70.0M) *
  Poured from bottle on 2016-11-26 at 17:11:24
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/gtk+3.rb
==> Dependencies
Build: pkg-config ✔
Required: gdk-pixbuf ✔, atk ✔, gobject-introspection ✔, libepoxy ✔, pango ✔, glib ✔, hicolor-icon-theme ✔
Recommended: gsettings-desktop-schemas ✔
Optional: jasper ✔

【问题讨论】:

您是否检查过您的代码是否可以在 Linux 等其他平台上运行? 主要玩家是您的窗口管理器,他决定新窗口将出现在哪里。你检查 WM 的设置了吗? @jcoppens 很好,那就是 OSX。我不知道如何为 OSX 配置类似的东西。 Gtk 3 在后台使用原生的 cocoa 工具包。这里不需要 X11 仿真。 我假设您使用show_all() 来确定显示窗口。 raise() 怎么样? 【参考方案1】:

四处走动,这个问题很快就结束了,没有显示任何代码。所以我会发布代码应该是什么样的。并不是说你没有尝试过这个。只是想帮忙。

use article::Article;
use homepage;
use gtk;
use gtk::traits::*;
use gdk::ffi::GdkRGBA;
use pango;

fn configure_window(window: &gtk::Window) 
    window.set_title("Phoronix Reader");
    let (width, height) = (600, 500);
    window.set_default_size(width, height);
    window.connect_delete_event(|_,_| 
        gtk::main_quit();
        gtk::signal::Inhibit(true)
    );


pub fn launch() 
    gtk::init().unwrap_or_else(|_| panic!("Failed to initialize GTK."));

    let window = gtk::Window::new(gtk::WindowType::Toplevel).unwrap();
    configure_window(&window);

    window.show_all();

    gtk::main();

【讨论】:

我基本上已经做到了。不过,该窗口不会出现在其他窗口之上。

以上是关于在 OSX 上将新的 GTK 3 窗口置于前台的主要内容,如果未能解决你的问题,请参考以下文章

MainWindowHandle 为 0 时将窗口置于前台

从 Access 将 Excel 窗口置于前台

如何在 OSX 中使用 C++ opencv highgui 将活动窗口设置为 opencv 图像

如何将我的窗口投影为前台的活动窗口

将应用程序置于前台

在不将它们置于前台的情况下进行应用间通信的最佳方法?