diff options
author | Benjamin Otte <otte@redhat.com> | 2012-11-13 22:02:53 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2012-11-14 01:55:28 +0100 |
commit | c08efb2b3291692dd3ad12cc95d4daf3735a0630 (patch) | |
tree | 50c2559ae940c93c1376dba0b83ea0407cf505d6 /gtk/gtksizerequest.c | |
parent | c98ee1ec396ccd8cb4c87780ee08adad88fdf3e3 (diff) | |
download | gtk+-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.c | 32 |
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; } /** |