linux - 当焦点窗口最大化和离开最大化模式时接收信号

标签 linux bash gtk x11 gnome

我正在编写一个将作为守护进程运行的脚本。 我需要检查屏幕上何时有一个最大化的焦点窗口,以及何时没有最大化焦点窗口并在这两种情况下运行我的脚本(bash)。 谁能帮帮我?

最佳答案

我不知道有任何解决方案可以开箱即用,但您可以通过利用 libwnck 轻松完成要求的工作。 .在下面的一个非常基本的示例中,它捕获了当前屏幕上的任何最大化:

/* gcc $(pkg-config --cflags --libs libwnck-1.0) test.c -o test */

#include <gdk/gdk.h>

#define WNCK_I_KNOW_THIS_IS_UNSTABLE
#include <libwnck/libwnck.h>


static void
geometry_changed(WnckWindow *window)
{
    if (wnck_window_is_maximized(window)) {
        g_print("A window has been maximized\n");
    }
}

static void
window_opened(WnckScreen *screen, WnckWindow *window)
{
    g_signal_connect(window, "geometry-changed",
                     G_CALLBACK(geometry_changed), NULL);

    /* Force a geometry-changed emission on already opened windows:
     * remove it if you need to catch only *new* maximizations */
    geometry_changed(window);
}

gint
main(gint argc, gchar *argv[])
{
    GMainLoop *loop;
    WnckScreen *screen;

    gdk_init(&argc, &argv);

    screen = wnck_screen_get(0);
    g_signal_connect(screen, "window-opened",
                     G_CALLBACK(window_opened), NULL);

    loop = g_main_loop_new(NULL, FALSE);
    g_main_loop_run(loop);
    g_main_loop_unref(loop);

    return 0;
}

附录

如果您想知道窗口焦点何时更改,可以将回调连接到 active-window-changed相关 WnckScreen 的信号,例如以下未经测试的代码段:

static void
active_window_changed(WnckScreen *screen)
{
    WnckWindow *active_window = wnck_screen_get_active_window(screen);
    if (wnck_window_is_maximized(active_window)) {
        g_print("The active window is maximized\n");
    }
}

...
g_signal_connect(screen, "active-window-changed",
                 G_CALLBACK(active_window_changed), NULL);
...

关于linux - 当焦点窗口最大化和离开最大化模式时接收信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22723192/

相关文章:

python - 如何安装 python 包

c - C中子进程的内存使用

python - 运行脚本以在终端中调用命令

php exec() 未通过 cron 作业运行

c++ - Gtk/Gtkmm 动态滚动

linux - Coreutils 测试套件命令

regex - 从 'system' 命令返回的字符串的编码

linux - 我的第一个 Bash 脚本看起来效率不高

c - 如何在 C/GTK 中打开一个图像而不是小部件?

gcc - 如何用gtk3编译gtk2.0程序?