Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59187
  • 博文数量: 10
  • 博客积分: 234
  • 博客等级: 二等列兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-26 21:07
个人简介

nothing important.

文章分类

全部博文(10)

文章存档

2012年(3)

2011年(7)

我的朋友

分类: C/C++

2011-06-03 17:51:38

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:
  1. g_signal_connect(window, "notify::has-toplevel-focus", G_CALLBACK(window_focus_changed), NULL);

process method:
  1. static void menu_window_leave_focus(GtkWidget* widget, GParamSpec *pspec)
  2. {
  3. if (some condition) {
  4. gtk_window_present(GTK_WINDOW(widget));
  5. }
  6. }


转自:http://blog.csdn.net/zevolo/archive/2010/01/18/5208809.aspx

阅读(2250) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~