how gtk window set and keep key event focus?

Sometimes we need set focus to some window, and it can be implemented by gtk method -- gtk_window_present(). while we should note gtk_window_present() has 2 functionalities. The first is to show the window if it not; the second is set focus to it if it has show. Please refer to the following code. So we can make it focus on window by calling gtk_widget_show() before.

        if (GTK_WIDGET_VISIBLE (window))
        {
            gdk_window_show (widget->window);
            .....
                gdk_window_focus (widget->window, timestamp);
        }
        else
        {
            gtk_widget_show (widget);
        }
----code in gtkwindow.c


Now we maybe have another issue, we show another window and we want the focus keep in the origin one (maybe they are 2 different processes). It seems similiar to modal mode. But I don't find directly support by gtk (maybe i missed it). Here is one solution.

For gtk window, there are 2 types focus, one is top level focus, and one is focus widget. When GtkWindow focus out, it will notify the state changed. We can connect the signal and set the focus back.

connect signal:
g_signal_connect(window, "notify::has-toplevel-focus", G_CALLBACK(window_focus_changed), NULL);

process method:
static void menu_window_leave_focus(GtkWidget* widget, GParamSpec *pspec)
{
    if (some condition)
    {
        gtk_window_present(GTK_WINDOW(widget));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值