[gtk/cherry-pick-94024859] Merge branch 'wip/otte/for-main' into 'main'




commit e4c52b9feffbde847d8bc2000de469fc04b292ff
Author: Benjamin Otte <otte benjamin googlemail com>
Date:   Tue Apr 26 18:58:08 2022 +0000

    Merge branch 'wip/otte/for-main' into 'main'
    
    roaring: Remove extra careful code
    
    Closes #4252 and #4517
    
    See merge request GNOME/gtk!4669
    
    (cherry picked from commit 940248598e5bcef264aff7c18ac5e4bf5ffd2b75)
    
    ea79f2dc roaring: Remove extra careful code
    25520964 ffmpeg: Hey, this variable is const now!
    515b1f52 boxlayout: Do not infloop

 gtk/gtkboxlayout.c             | 43 ++++++++++++++++++++++++++++++++++++++++--
 gtk/roaring/roaring.c          |  4 ----
 modules/media/gtkffmediafile.c |  2 +-
 3 files changed, 42 insertions(+), 7 deletions(-)
---
diff --git a/gtk/gtkboxlayout.c b/gtk/gtkboxlayout.c
index e79c5e202a..5d1b63169d 100644
--- a/gtk/gtkboxlayout.c
+++ b/gtk/gtkboxlayout.c
@@ -288,6 +288,12 @@ gtk_box_layout_compute_opposite_size (GtkBoxLayout *self,
   *natural = largest_nat;
 }
 
+/* if widgets haven't reached their min opposite size at this
+ * huge value, things went massively wrong and we need to bail to not
+ * cause an infinite loop.
+ */
+#define MAX_ALLOWED_SIZE (1 << 20)
+
 static int
 distribute_remaining_size (GtkRequestedSize *sizes,
                            gsize             n_sizes,
@@ -321,7 +327,40 @@ distribute_remaining_size (GtkRequestedSize *sizes,
     {
       int test;
 
-      if (max == G_MAXINT)
+      if (min > MAX_ALLOWED_SIZE)
+        {
+          /* sanity check! */
+          for (i = 0; i < n_sizes; i++)
+            {
+              int check_min, check_nat;
+              gtk_widget_measure (sizes[i].data,
+                                  orientation,
+                                  MAX_ALLOWED_SIZE,
+                                  &sizes[i].minimum_size, &sizes[i].natural_size,
+                                  NULL, NULL);
+              gtk_widget_measure (sizes[i].data,
+                                  orientation,
+                                  -1,
+                                  &check_min, &check_nat,
+                                  NULL, NULL);
+              if (check_min < sizes[i].minimum_size)
+                {
+                  g_critical ("%s %p reports a minimum %s of %u, but minimum %s for %s of %u is %u. Expect 
overlapping widgets.",
+                              G_OBJECT_TYPE_NAME (sizes[i].data), sizes[i].data,
+                              orientation == GTK_ORIENTATION_HORIZONTAL ? "width" : "height",
+                              check_min,
+                              orientation == GTK_ORIENTATION_HORIZONTAL ? "width" : "height",
+                              orientation == GTK_ORIENTATION_HORIZONTAL ? "height" : "width",
+                              MAX_ALLOWED_SIZE, sizes[i].minimum_size);
+                  sizes[i].minimum_size = check_min;
+                  sizes[i].natural_size = check_nat;
+                }
+              total_size += sizes[i].minimum_size;
+            }
+          return MAX (0, available - total_size);
+        }
+
+      if (max == MAX_ALLOWED_SIZE)
         test = min * 2;
       else
         test = (min + max) / 2;
@@ -465,7 +504,7 @@ gtk_box_layout_compute_opposite_size_for_size (GtkBoxLayout *self,
                                              self->orientation,
                                              available,
                                              min_size,
-                                             G_MAXINT);
+                                             MAX_ALLOWED_SIZE);
 
       /* Bring children up to size first */
       available = gtk_distribute_natural_allocation (available, nvis_children, sizes);
diff --git a/gtk/roaring/roaring.c b/gtk/roaring/roaring.c
index 84a89e3fea..17eec65ca8 100644
--- a/gtk/roaring/roaring.c
+++ b/gtk/roaring/roaring.c
@@ -2979,7 +2979,6 @@ int array_container_shrink_to_fit(array_container_t *src) {
       uint16_t *oldarray = src->array;
       src->array =
         (uint16_t *)realloc(oldarray, src->capacity * sizeof(uint16_t));
-      if (src->array == NULL) free(oldarray);  // should never happen?
     }
     return savings;
 }
@@ -3016,7 +3015,6 @@ void array_container_grow(array_container_t *container, int32_t min,
     if (preserve) {
         container->array =
             (uint16_t *)realloc(array, new_capacity * sizeof(uint16_t));
-        if (container->array == NULL) free(array);
     } else {
         // Jon Strabala reports that some tools complain otherwise
         if (array != NULL) {
@@ -6691,7 +6689,6 @@ int run_container_shrink_to_fit(run_container_t *src) {
     src->capacity = src->n_runs;
     rle16_t *oldruns = src->runs;
     src->runs = (rle16_t *)realloc(oldruns, src->capacity * sizeof(rle16_t));
-    if (src->runs == NULL) free(oldruns);  // should never happen?
     return savings;
 }
 /* Create a new run container. Return NULL in case of failure. */
@@ -6731,7 +6728,6 @@ void run_container_grow(run_container_t *run, int32_t min, bool copy) {
         rle16_t *oldruns = run->runs;
         run->runs =
             (rle16_t *)realloc(oldruns, run->capacity * sizeof(rle16_t));
-        if (run->runs == NULL) free(oldruns);
     } else {
         // Jon Strabala reports that some tools complain otherwise
         if (run->runs != NULL) {
diff --git a/modules/media/gtkffmediafile.c b/modules/media/gtkffmediafile.c
index ff5225e845..819d14d2c1 100644
--- a/modules/media/gtkffmediafile.c
+++ b/modules/media/gtkffmediafile.c
@@ -483,7 +483,7 @@ gtk_ff_media_file_open (GtkMediaFile *file)
 {
   GtkFfMediaFile *video = GTK_FF_MEDIA_FILE (file);
   AVStream *stream;
-  AVCodec *codec;
+  const AVCodec *codec;
   int errnum;
 
   video->format_ctx = avformat_alloc_context ();


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]