summaryrefslogtreecommitdiff
path: root/docs/sizing-test.txt
diff options
context:
space:
mode:
Diffstat (limited to 'docs/sizing-test.txt')
-rw-r--r--docs/sizing-test.txt121
1 files changed, 121 insertions, 0 deletions
diff --git a/docs/sizing-test.txt b/docs/sizing-test.txt
new file mode 100644
index 000000000..6954612d4
--- /dev/null
+++ b/docs/sizing-test.txt
@@ -0,0 +1,121 @@
+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::allow_grow, GtkWindow::resizable:
+ - equivalent properties; changing one notifies on the other
+ - 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
+
+