This is a list of things to check when testing window size/pos functions. === gtk_widget_set_size_request(): - causes the widget to request the given size - for toplevel windows, changes the default-requested size if no default size is set and gtk_window_resize() has not been called - passing -1 for either width or height reverts to "natural" request in that dimension - passing 0 is allowed, and results in requisition of 1x1 (0x0 is a permitted requisition, but equivalent to 1x1, we use 1x1 for implementation convenience) - causes notifies on width_request, height_request properties gtk_window_resize(): - causes a configure request in all cases if the window is mapped, unless the new size is the same as the old size - overrides the default size on map if the window is unmapped - allows size of 0, equivalent to 1 - clamped to geometry hints gtk_window_set_default_size(): - has no effect after the window has been mapped the first time, unless the window has been unrealized in which case it should have an effect - allows size of 0, equivalent to 1 - allows size of -1 to unset the default size - clamped to geometry hints - gtk_window_resize() overrides it - causes notifies on default_width, default_height properties gtk_window_get_default_size(): - returns the values last passed to set_default_size(), including -1. If set_default_size() has not been called, returns -1. gtk_window_move(): - always causes a configure request if the window is mapped, unless the last configure request we sent was for the same position being moved to - position may be negative to move windows offscreen - if GTK_WIN_POS_CENTER_ALWAYS (or other future position constraints we may add) is in effect, the move request is clamped to obey the constraints. thus calling gtk_window_move() on a CENTER_ALWAYS window may trigger the window to bounce back to center if it wasn't there - overrides all GTK_WIN_POS_ except CENTER_ALWAYS gtk_window_get_size(): - obtains the client-side known size of widget->window, as last received from a configure event - prior to mapping, returns the default size we will request - between realization and mapping, computes default size rather than looking at widget->window up-to-date size, so the size will be correct after force-realizing a window gtk_window_get_position(): - obtains the point to be passed to gtk_window_move() in order to keep the window in its current position - round-trips to the server to get the position; this is suboptimal from both a race condition and speed standpoint but required to get window frame size - if the window is unmapped, returns the default position we will request gtk_window_set_position(): - not the inverse of get_position(), sadly - modifies the default positioning of the window - if set to CENTER_ALWAYS and the window is mapped, results in a configure request moving the window to the center, unless the window was already centered - ignored if gtk_window_move() called, with the exception of CENTER_ALWAYS gtk_window_parse_geometry(): - parses a standard X geometry string - toggles on one or both of GDK_HINT_USER_SIZE, GDK_HINT_USER_POS - "xprop" shows user size/position are set on the window - calls gtk_window_set_default_size() to set the window size - calls gtk_window_move() to set the window position - calls gtk_window_set_gravity() to set the window gravity gtk_window_reshow_with_initial_size(): - for use by GUI builders; unrealizes and re-shows the window, using default size (and also position, but position is reset on any hide anyway) - window should be positioned and sized as it was on initial map, barring odd window managers gtk_window_set_geometry_hints(): - if a hint is set with this function, we do not override it in other parts of the code General behavior === - no infinite loops or nasty fighting-the-user flicker during operations such as moving/resizing a window Properties === GtkWindow::default_width, GtkWindow::default_height: - default_width is -1 if unset, or >= 0 if a default width is set - default_height is -1 if unset, or >= 0 if a default height is set GtkWindow::resizable: - if FALSE, we set the min size to the max size in the geometry hints. - If the app programmer has called gtk_window_set_geometry_hints() however and set min or max size, we don't replace the hint they set. GtkWidget::width_request, GtkWidget::height_request: - if -1, default requisition of widget is used - otherwise, override default requisition