diff options
-rw-r--r-- | src/eom-application.c | 20 |
1 files 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)); } /** |