summaryrefslogtreecommitdiff
path: root/gtk/gtksizerequest.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2012-11-13 22:02:53 +0100
committerBenjamin Otte <otte@redhat.com>2012-11-14 01:55:28 +0100
commitc08efb2b3291692dd3ad12cc95d4daf3735a0630 (patch)
tree50c2559ae940c93c1376dba0b83ea0407cf505d6 /gtk/gtksizerequest.c
parentc98ee1ec396ccd8cb4c87780ee08adad88fdf3e3 (diff)
downloadgtk+-c08efb2b3291692dd3ad12cc95d4daf3735a0630.tar.gz
sizerequest: Cache the request mode
... in the GtkSizeRequestCache. That way, we only need to query it once, and can remove the caching code from GtkContainer.
Diffstat (limited to 'gtk/gtksizerequest.c')
-rw-r--r--gtk/gtksizerequest.c32
1 files changed, 12 insertions, 20 deletions
diff --git a/gtk/gtksizerequest.c b/gtk/gtksizerequest.c
index eff854f200..99191f5583 100644
--- a/gtk/gtksizerequest.c
+++ b/gtk/gtksizerequest.c
@@ -84,24 +84,6 @@ pop_recursion_check (GtkWidget *widget,
}
-/* This function checks if 'request_needed' flag is present
- * and resets the cache state if a request is needed for
- * a given orientation.
- */
-static SizeRequestCache *
-init_cache (GtkWidget *widget)
-{
- SizeRequestCache *cache;
-
- cache = _gtk_widget_peek_request_cache (widget);
-
- if (_gtk_widget_get_width_request_needed (widget) ||
- _gtk_widget_get_height_request_needed (widget))
- _gtk_size_request_cache_clear (cache);
-
- return cache;
-}
-
/* looks for a cached size request for this for_size. If not
* found, returns the oldest entry so it can be overwritten
*
@@ -118,7 +100,7 @@ get_cached_size (GtkWidget *widget,
SizeRequest **cached_sizes;
guint i, n_sizes;
- cache = init_cache (widget);
+ cache = _gtk_widget_peek_request_cache (widget);
if (for_size < 0)
{
@@ -507,9 +489,19 @@ _gtk_widget_compute_size_for_orientation (GtkWidget *widget,
GtkSizeRequestMode
gtk_widget_get_request_mode (GtkWidget *widget)
{
+ SizeRequestCache *cache;
+
g_return_val_if_fail (GTK_IS_WIDGET (widget), GTK_SIZE_REQUEST_CONSTANT_SIZE);
- return GTK_WIDGET_GET_CLASS (widget)->get_request_mode (widget);
+ cache = _gtk_widget_peek_request_cache (widget);
+
+ if (!cache->request_mode_valid)
+ {
+ cache->request_mode = GTK_WIDGET_GET_CLASS (widget)->get_request_mode (widget);
+ cache->request_mode_valid = TRUE;
+ }
+
+ return cache->request_mode;
}
/**