forked from AuroraMiddleware/gtk
window: Be smarter about computing the default size
See the code comments for the reasoning behind this. After we don't force a "guessed" minimum size for labels anymore, a lot of issues started to surface that this patch attempts to fix. In particular: 1) Tooltips where wrapped as much as possible. 2) The recentchooser submenu displayed only ellipsize dots.
This commit is contained in:
parent
08b2ac1d90
commit
85aebe74cf
@ -4833,18 +4833,71 @@ gtk_window_unmap (GtkWidget *widget)
|
|||||||
gtk_widget_unmap (child);
|
gtk_widget_unmap (child);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (Note: Replace "size" with "width" or "height". Also, the request
|
||||||
|
* mode is honoured.)
|
||||||
|
* For selecting the default window size, the following conditions
|
||||||
|
* should hold (in order of importance):
|
||||||
|
* - the size is not below the minimum size
|
||||||
|
* Windows cannot be resized below their minimum size, so we must
|
||||||
|
* ensure we don't do that either.
|
||||||
|
* - the size is not above the natural size
|
||||||
|
* It seems weird to allocate more than this in an initial guess.
|
||||||
|
* - the size does not exceed that of a maximized window
|
||||||
|
* We want to see the whole window after all.
|
||||||
|
* (Note that this may not be possible to achieve due to imperfect
|
||||||
|
* information from the windowing system.)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* We use these for now to not make windows too big by accident. Note
|
||||||
|
* that we still clamp these numbers by screen size. Also note that
|
||||||
|
* minimum size still overrides this. So keep your windows small! :)
|
||||||
|
*/
|
||||||
|
#define MAX_DEFAULT_WINDOW_WIDTH 640
|
||||||
|
#define MAX_DEFAULT_WINDOW_HEIGHT 480
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_window_guess_default_size (GtkWindow *window,
|
gtk_window_guess_default_size (GtkWindow *window,
|
||||||
gint *width,
|
gint *width,
|
||||||
gint *height)
|
gint *height)
|
||||||
{
|
{
|
||||||
GtkWidget *widget = GTK_WIDGET (window);
|
GtkWidget *widget = GTK_WIDGET (window);
|
||||||
GtkRequisition requisition;
|
GdkScreen *screen;
|
||||||
|
int minimum, natural;
|
||||||
|
|
||||||
gtk_widget_get_preferred_size (widget, &requisition, NULL);
|
screen = gtk_widget_get_screen (widget);
|
||||||
|
|
||||||
*width = requisition.width;
|
*width = gdk_screen_get_width (screen);
|
||||||
*height = requisition.height;
|
*height = gdk_screen_get_height (screen);
|
||||||
|
|
||||||
|
if (*width < *height)
|
||||||
|
{
|
||||||
|
/* landscape */
|
||||||
|
*width = MIN (*width, MAX_DEFAULT_WINDOW_WIDTH);
|
||||||
|
*height = MIN (*height, MAX_DEFAULT_WINDOW_HEIGHT);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* portrait */
|
||||||
|
*width = MIN (*width, MAX_DEFAULT_WINDOW_HEIGHT);
|
||||||
|
*height = MIN (*height, MAX_DEFAULT_WINDOW_WIDTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gtk_widget_get_request_mode (widget) == GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT)
|
||||||
|
{
|
||||||
|
gtk_widget_get_preferred_height (widget, &minimum, &natural);
|
||||||
|
*height = MAX (minimum, MIN (*height, natural));
|
||||||
|
|
||||||
|
gtk_widget_get_preferred_width_for_height (widget, *height, &minimum, &natural);
|
||||||
|
*width = MAX (minimum, MIN (*width, natural));
|
||||||
|
}
|
||||||
|
else /* GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH or CONSTANT_SIZE */
|
||||||
|
{
|
||||||
|
gtk_widget_get_preferred_width (widget, &minimum, &natural);
|
||||||
|
*width = MAX (minimum, MIN (*width, natural));
|
||||||
|
|
||||||
|
gtk_widget_get_preferred_height_for_width (widget, *width, &minimum, &natural);
|
||||||
|
*height = MAX (minimum, MIN (*height, natural));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user