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));
- }
- }
转自:http://blog.csdn.net/zevolo/archive/2010/01/18/5208809.aspx