Tom, This might be a opportunity to explore and use 'libnotify' and have a libnotify-popup present your message.
As for your original question, I don't have an answer that I treid and know for certain will work. However, This is what I would try by changing my code; 1. I would reread the gtk api to understand if gtk_widget_show() vs gtk_widget_show_all() vs gdk_window_present() would make the messagebox/window visible without redirecting focus. Otherwise, I would disable-focus, show the window, re-enable focus. On the other hand, libnotify should like the best way to proceed. Here is a quick sampler. James, ** required rpms: yum install libnotify libnotify-devel BEGIN CODE: /* notice.c Compile Command: $ gcc `pkg-config --cflags --libs libnotify` -o notice notice.c Usage: $ ./notice -s 5 -t "title of messagebox" -m "message in the box" or $ ./notice --help */ #include <libnotify/notify.h> /* cmd line var pointers */ static gchar *gd_pch_title; static gchar *gd_pch_body; static gchar *gd_pch_icon; static gint gd_i_seconds; int main(int argc, char * argv[] ) { NotifyNotification *nctx; GError *gerror = NULL; GOptionContext *context = NULL; /* --help message for command line */ GOptionEntry entries[] = { {"title", 't', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, &gd_pch_title, "Title text on msg box", "Title goes here!"}, {"message", 'm', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, &gd_pch_body, "Message body text", "message"}, {"icon-name", 'i', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, &gd_pch_icon, "icon to include next to message", "gtk-dialog-info ...-warning ...-error"}, {"show-seconds", 's', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_INT, &gd_i_seconds, "seconds to display message", "10"}, {NULL} }; /* Get command line parms */ context = g_option_context_new ( " - Commandline Notification Utility" " GPL2 [2008] <[EMAIL PROTECTED]>"); g_option_context_add_main_entries(context, entries, NULL); g_option_context_set_ignore_unknown_options(context, FALSE); g_option_context_set_help_enabled (context, TRUE); if (!(g_option_context_parse(context, &argc, &argv, &gerror))) { g_warning ("Parse command line failed: %s", gerror->message); g_option_context_free(context); g_error_free(gerror); return (1); } if (gd_pch_title == NULL) { gd_pch_title = "Title really needs to be here."; } if (gd_pch_body == NULL) { gd_pch_body = "message goes here."; } if (gd_pch_icon == NULL) { gd_pch_icon = "gtk-dialog-info"; } if (gd_i_seconds < 1 ) { gd_i_seconds = 10; } notify_init(argv[0]); nctx = notify_notification_new (gd_pch_title, gd_pch_body, gd_pch_icon, NULL); notify_notification_set_timeout (nctx, (gd_i_seconds * 1000) ); // 10 seconds if (!notify_notification_show (nctx, NULL)) { g_warning ("failed to send notification"); return 2; } g_object_unref(G_OBJECT(nctx)); notify_uninit(); return 0; } END CODE: On Thu, 2008-05-22 at 17:26 -0700, Tom Machinski wrote: > Hi, > > I wrote a simple GTK+ application that displays a popup window. > > The problem is that whenever the window is displayed, it immediately gets > ("steals") the focus. I would like to prevent that from happening: i.e., the > window should be created and displayed, but it should not be focused, but > instead focus should be retained by whatever window had it before the > creation of the new window. > > The only way I know to do that is by calling window.set_accept_focus(False) > before window.show(). The serious flaw with that method is that the > resulting window, while being prevented from stealing the focus, also can > not receive focus at any later time, even by intentional user action. > > Any better approaches? > > Tom > _______________________________________________ > gtk-app-devel-list mailing list > gtk-app-devel-list@gnome.org > http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list