diff -ur pinentry-0.7.4/debian/changelog pinentry-0.7.4-new/debian/changelog
--- pinentry-0.7.4/debian/changelog	2008-01-24 00:09:10.000000000 +0100
+++ pinentry-0.7.4-new/debian/changelog	2008-01-24 00:08:35.000000000 +0100
@@ -1,3 +1,9 @@
+pinentry (0.7.4-2nomeata1) UNRELEASED; urgency=low
+
+  * make transient
+
+ -- Joachim Breitner <nomeata@debian.org>  Thu, 24 Jan 2008 00:08:01 +0100
+
 pinentry (0.7.4-2) unstable; urgency=low
 
   * debian/copyright: converted to UTF-8 (closes: #455738)
Nur in pinentry-0.7.4-new/debian: changelog.orig.
diff -ur pinentry-0.7.4/gtk+-2/pinentry-gtk-2.c pinentry-0.7.4-new/gtk+-2/pinentry-gtk-2.c
--- pinentry-0.7.4/gtk+-2/pinentry-gtk-2.c	2007-11-28 23:57:55.000000000 +0100
+++ pinentry-0.7.4-new/gtk+-2/pinentry-gtk-2.c	2008-01-24 00:08:35.000000000 +0100
@@ -93,6 +93,22 @@
 				 GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
 }
 
+/* Realize the window as transient, if we will grab the keyboard */
+static void
+make_transient (GtkWidget *win, GdkEvent *event, gpointer data)
+{
+  GdkScreen *screen;
+  GdkWindow *root;
+
+  if (!pinentry->grab)
+    return;
+
+  /* Make window transient for the root window */
+  screen = gdk_screen_get_default();
+  root = gdk_screen_get_root_window(screen);
+  gdk_window_set_transient_for(win->window, root);
+
+}
 
 /* Grab the keyboard for maximum security */
 static void
@@ -110,6 +126,9 @@
 ungrab_keyboard (GtkWidget *win, GdkEvent *event, gpointer data)
 {
   gdk_keyboard_ungrab (gdk_event_get_time (event));
+  
+  /* Unmake window transient for the root window */
+  gdk_window_set_transient_for(win->window, NULL);
 }
 
 
@@ -260,6 +279,10 @@
 		    G_CALLBACK (constrain_size), NULL);
   if (!confirm_mode)
     {
+      if (pinentry->grab)
+	      g_signal_connect (G_OBJECT (win),
+	      		"realize",
+			G_CALLBACK (make_transient), NULL);
       g_signal_connect (G_OBJECT (win),
 			pinentry->grab ? "map-event" : "focus-in-event",
 			G_CALLBACK (grab_keyboard), NULL);
Nur in pinentry-0.7.4-new/gtk+-2: pinentry-gtk-2.c.orig.
