diff src/ui_tabcomp.c @ 12:147f4c4b9025

##### Note: GQview CVS on sourceforge is not always up to date, please use ##### ##### an offical release when making enhancements and translation updates. ##### Tue Mar 1 11:32:26 2005 John Ellis <johne@verizon.net> * src/Makefile.am: Add pan-view.[ch]: * image.[ch]: Add support for using a grid of tiles as soource image. Added scroll_notify callback for when the viewable regionis scrolled. Added ability to set min and max for the zoom range. Removed unnecessary gtk_widget_size_request from image_size_sync. Added image_scroll_to_point. * layout_util.c: Add menu item and callback for the new 'Pan view'. * pixbuf_util.c (pixbuf_draw_layout): Fix for when offset is non-zero. * typedefs.h: Add source tile stuff for ImageWindow. * ui_tabcomp.c: Fix tab completion pop-up menu placement. * pan-view.[ch]: New files for the pan view - 2.1 is officially started :)
author gqview
date Tue, 01 Mar 2005 17:16:34 +0000
parents d907d608745f
children 31759d770628
line wrap: on
line diff
--- a/src/ui_tabcomp.c	Tue Mar 01 14:50:03 2005 +0000
+++ b/src/ui_tabcomp.c	Tue Mar 01 17:16:34 2005 +0000
@@ -241,19 +241,40 @@
 	PangoRectangle strong_pos, weak_pos;
 	gint length;
 	gint xoffset, yoffset;
-							
+	GtkRequisition req;
+	GdkScreen *screen;
+	gint monitor_num;
+	GdkRectangle monitor;
 
 	gdk_window_get_origin(td->entry->window, x, y);
 
-	height = MIN(td->entry->requisition.height, td->entry->allocation.height);
-	*y += height;
+	screen = gtk_widget_get_screen(GTK_WIDGET(menu));
+	monitor_num = gdk_screen_get_monitor_at_window(screen, td->entry->window);
+	gdk_screen_get_monitor_geometry(screen, monitor_num, &monitor);
+
+	gtk_widget_size_request(GTK_WIDGET(menu), &req);
 
 	length = strlen(gtk_entry_get_text(GTK_ENTRY(td->entry)));
 	gtk_entry_get_layout_offsets(GTK_ENTRY(td->entry), &xoffset, &yoffset);
 
 	layout = gtk_entry_get_layout(GTK_ENTRY(td->entry));
 	pango_layout_get_cursor_pos(layout, length, &strong_pos, &weak_pos);
+
 	*x += strong_pos.x / PANGO_SCALE + xoffset;
+
+	height = MIN(td->entry->requisition.height, td->entry->allocation.height);
+
+	if (req.height > monitor.y + monitor.height - *y - height &&
+	    *y - monitor.y >  monitor.y + monitor.height - *y)
+		{
+		height = MIN(*y - monitor.y, req.height);
+		gtk_widget_set_size_request(GTK_WIDGET(menu), -1, height);
+		*y -= height;
+		}
+	else
+		{
+		*y += height;
+		}
 }
 
 static void tab_completion_popup_list(TabCompData *td, GList *list)