]> Pileus Git - ~andy/gtk/commitdiff
Avoid popping up the completions across the edge of the monitor. Part of
authorMatthias Clasen <maclas@gmx.de>
Tue, 2 Mar 2004 22:20:04 +0000 (22:20 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Tue, 2 Mar 2004 22:20:04 +0000 (22:20 +0000)
Tue Mar  2 23:08:12 2004  Matthias Clasen  <maclas@gmx.de>

* gtk/gtkentrycompletion.c (_gtk_entry_completion_popup): Avoid
popping up the completions across the edge of the monitor.
Part of #135561.

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkentrycompletion.c

index 50de61757a57a1e2e8aec73055df8f601fd2a3eb..a9ce5212b5d2ad77a5751b474d1c14d509bb0b30 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Tue Mar  2 23:08:12 2004  Matthias Clasen  <maclas@gmx.de>
+
+       * gtk/gtkentrycompletion.c (_gtk_entry_completion_popup): Avoid
+       popping up the completions across the edge of the monitor.
+       Part of #135561.
+
 Tue Mar  2 16:47:40 2004  Owen Taylor  <otaylor@redhat.com>
 
        * tests/testfilechooser.c (set_filename_existing_nonexistent_cb): 
index 50de61757a57a1e2e8aec73055df8f601fd2a3eb..a9ce5212b5d2ad77a5751b474d1c14d509bb0b30 100644 (file)
@@ -1,3 +1,9 @@
+Tue Mar  2 23:08:12 2004  Matthias Clasen  <maclas@gmx.de>
+
+       * gtk/gtkentrycompletion.c (_gtk_entry_completion_popup): Avoid
+       popping up the completions across the edge of the monitor.
+       Part of #135561.
+
 Tue Mar  2 16:47:40 2004  Owen Taylor  <otaylor@redhat.com>
 
        * tests/testfilechooser.c (set_filename_existing_nonexistent_cb): 
index 50de61757a57a1e2e8aec73055df8f601fd2a3eb..a9ce5212b5d2ad77a5751b474d1c14d509bb0b30 100644 (file)
@@ -1,3 +1,9 @@
+Tue Mar  2 23:08:12 2004  Matthias Clasen  <maclas@gmx.de>
+
+       * gtk/gtkentrycompletion.c (_gtk_entry_completion_popup): Avoid
+       popping up the completions across the edge of the monitor.
+       Part of #135561.
+
 Tue Mar  2 16:47:40 2004  Owen Taylor  <otaylor@redhat.com>
 
        * tests/testfilechooser.c (set_filename_existing_nonexistent_cb): 
index 50de61757a57a1e2e8aec73055df8f601fd2a3eb..a9ce5212b5d2ad77a5751b474d1c14d509bb0b30 100644 (file)
@@ -1,3 +1,9 @@
+Tue Mar  2 23:08:12 2004  Matthias Clasen  <maclas@gmx.de>
+
+       * gtk/gtkentrycompletion.c (_gtk_entry_completion_popup): Avoid
+       popping up the completions across the edge of the monitor.
+       Part of #135561.
+
 Tue Mar  2 16:47:40 2004  Owen Taylor  <otaylor@redhat.com>
 
        * tests/testfilechooser.c (set_filename_existing_nonexistent_cb): 
index 50de61757a57a1e2e8aec73055df8f601fd2a3eb..a9ce5212b5d2ad77a5751b474d1c14d509bb0b30 100644 (file)
@@ -1,3 +1,9 @@
+Tue Mar  2 23:08:12 2004  Matthias Clasen  <maclas@gmx.de>
+
+       * gtk/gtkentrycompletion.c (_gtk_entry_completion_popup): Avoid
+       popping up the completions across the edge of the monitor.
+       Part of #135561.
+
 Tue Mar  2 16:47:40 2004  Owen Taylor  <otaylor@redhat.com>
 
        * tests/testfilechooser.c (set_filename_existing_nonexistent_cb): 
index c1ee65a588287f0cfcfbd283b4f1c83ffac176ae..8b81c3bc0805922739b9a9fd5cf2fdb67b5978bf 100644 (file)
@@ -1112,6 +1112,10 @@ _gtk_entry_completion_popup (GtkEntryCompletion *completion)
 {
   gint x, y, x_border, y_border;
   gint height;
+  GdkScreen *screen;
+  gint monitor_num;
+  GdkRectangle monitor;
+  GtkRequisition popup_req;
 
   if (GTK_WIDGET_MAPPED (completion->priv->popup_window))
     return;
@@ -1126,7 +1130,24 @@ _gtk_entry_completion_popup (GtkEntryCompletion *completion)
 
   height = _gtk_entry_completion_resize_popup (completion);
 
-  gtk_window_move (GTK_WINDOW (completion->priv->popup_window), x, y + height);
+  gtk_widget_size_request (completion->priv->popup_window, &popup_req);
+
+  screen = gtk_widget_get_screen (GTK_WIDGET (completion->priv->entry));
+  monitor_num = gdk_screen_get_monitor_at_window (screen, 
+                                                 GTK_WIDGET (completion->priv->entry)->window);
+  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
+  
+  if (x < monitor.x)
+    x = monitor.x;
+  else if (x + popup_req.width > monitor.x + monitor.width)
+    x = monitor.x + monitor.width - popup_req.width;
+  
+  if (y + height + popup_req.height <= monitor.y + monitor.height)
+    y += height;
+  else
+    y -= popup_req.height;
+
+  gtk_window_move (GTK_WINDOW (completion->priv->popup_window), x, y);
 
   gtk_widget_show (completion->priv->popup_window);