From 1b65a062fc01e15c4a461463a055b90d8cb3235e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Weber?= Date: Sat, 2 Apr 2016 19:08:25 +0200 Subject: Fix new windows not getting focus fixes (Issue #119) --- src/eom-application.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/eom-application.c b/src/eom-application.c index d1797df..6d56e0c 100644 --- a/src/eom-application.c +++ b/src/eom-application.c @@ -279,8 +279,24 @@ eom_application_get_file_window (EomApplication *application, GFile *file) static void eom_application_show_window (EomWindow *window, gpointer user_data) { - gtk_window_present_with_time (GTK_WINDOW (window), - GPOINTER_TO_UINT (user_data)); + guint32 timestamp = GPOINTER_TO_UINT (user_data); + + /* set the proper interaction time on the window. + * Fall back to roundtripping to the X server when we + * don't have the timestamp, e.g. when launched from + * terminal. We also need to make sure that the window + * has been realized otherwise it will not work. lame. + */ + if (!gtk_widget_get_realized (GTK_WIDGET (window))) + gtk_widget_realize (GTK_WIDGET (window)); + + if (timestamp <= 0) + timestamp = gdk_x11_get_server_time (gtk_widget_get_window (GTK_WIDGET (window))); + + gdk_x11_window_set_user_time (gtk_widget_get_window (GTK_WIDGET (window)), + timestamp); + + gtk_window_present (GTK_WINDOW (window)); } /** -- cgit v1.2.1