diff options
| author | Benjamin Otte <otte@redhat.com> | 2020-07-02 20:50:14 +0200 |
|---|---|---|
| committer | Benjamin Otte <otte@redhat.com> | 2020-07-07 02:23:09 +0200 |
| commit | cbf9375f97c9d64f8753bc7f337bd9cf92f1efd8 (patch) | |
| tree | fd0657c345fd6426b618bb782ba46cddb96ec870 | |
| parent | 5297eb36b9744b7827f56d708c31d9ac9ccf8d0e (diff) | |
| download | gtk+-cbf9375f97c9d64f8753bc7f337bd9cf92f1efd8.tar.gz | |
main: Use a GtkVector
| -rw-r--r-- | gtk/gtkmain.c | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c index e1dd5bd6fc..83bda68fa2 100644 --- a/gtk/gtkmain.c +++ b/gtk/gtkmain.c @@ -95,7 +95,6 @@ #include "gdk/gdk-private.h" #include "gsk/gskprivate.h" #include "gsk/gskrendernodeprivate.h" -#include "gtkarrayimplprivate.h" #include "gtknative.h" #include <locale.h> @@ -138,6 +137,13 @@ #include "a11y/gtkaccessibility.h" #include "inspector/window.h" +#define GTK_VECTOR_ELEMENT_TYPE GtkWidget * +#define GTK_VECTOR_TYPE_NAME GtkWidgetStack +#define GTK_VECTOR_NAME gtk_widget_stack +#define GTK_VECTOR_FREE_FUNC g_object_unref +#define GTK_VECTOR_PREALLOC 16 +#include "gtkvectorimpl.c" + static GtkWindowGroup *gtk_main_get_window_group (GtkWidget *widget); static gint pre_initialized = FALSE; @@ -1321,8 +1327,7 @@ gtk_synthesize_crossing_events (GtkRoot *toplevel, double x, y; GtkWidget *prev; gboolean seen_ancestor; - GtkArray target_array; - GtkWidget *stack_targets[16]; + GtkWidgetStack target_array; int i; if (old_target == new_target) @@ -1376,19 +1381,19 @@ gtk_synthesize_crossing_events (GtkRoot *toplevel, widget = _gtk_widget_get_parent (widget); } - gtk_array_init (&target_array, (void**)stack_targets, 16); + gtk_widget_stack_init (&target_array); for (widget = new_target; widget; widget = _gtk_widget_get_parent (widget)) - gtk_array_add (&target_array, widget); + gtk_widget_stack_append (&target_array, g_object_ref (widget)); crossing.direction = GTK_CROSSING_IN; seen_ancestor = FALSE; - for (i = (int)target_array.len - 1; i >= 0; i--) + for (i = gtk_widget_stack_get_size (&target_array) - 1; i >= 0; i--) { - widget = gtk_array_index (&target_array, i); + widget = gtk_widget_stack_get (&target_array, i); - if (i < (int)target_array.len - 1) - crossing.new_descendent = gtk_array_index (&target_array, i + 1); + if (i < gtk_widget_stack_get_size (&target_array) - 1) + crossing.new_descendent = gtk_widget_stack_get (&target_array, i + 1); else crossing.new_descendent = NULL; @@ -1417,7 +1422,7 @@ gtk_synthesize_crossing_events (GtkRoot *toplevel, gtk_widget_set_state_flags (widget, GTK_STATE_FLAG_PRELIGHT, FALSE); } - gtk_array_free (&target_array, NULL); + gtk_widget_stack_clear (&target_array); } static GtkWidget * @@ -1994,13 +1999,12 @@ gtk_propagate_event_internal (GtkWidget *widget, { gint handled_event = FALSE; GtkWidget *target = widget; - GtkArray widget_array; - GtkWidget *stack_widgets[16]; + GtkWidgetStack widget_array; int i; /* First, propagate event down */ - gtk_array_init (&widget_array, (void**)stack_widgets, 16); - gtk_array_add (&widget_array, g_object_ref (widget)); + gtk_widget_stack_init (&widget_array); + gtk_widget_stack_append (&widget_array, g_object_ref (widget)); for (;;) { @@ -2008,16 +2012,16 @@ gtk_propagate_event_internal (GtkWidget *widget, if (!widget) break; - gtk_array_add (&widget_array, g_object_ref (widget)); + gtk_widget_stack_append (&widget_array, g_object_ref (widget)); if (widget == topmost) break; } - i = widget_array.len - 1; + i = gtk_widget_stack_get_size (&widget_array) - 1; for (;;) { - widget = gtk_array_index (&widget_array, i); + widget = gtk_widget_stack_get (&widget_array, i); if (!_gtk_widget_is_sensitive (widget)) { @@ -2050,9 +2054,9 @@ gtk_propagate_event_internal (GtkWidget *widget, * parents can see the button and motion * events of the children. */ - for (i = 0; i < widget_array.len; i++) + for (i = 0; i < gtk_widget_stack_get_size (&widget_array); i++) { - widget = gtk_array_index (&widget_array, i); + widget = gtk_widget_stack_get (&widget_array, i); /* Scroll events are special cased here because it * feels wrong when scrolling a GtkViewport, say, @@ -2071,7 +2075,7 @@ gtk_propagate_event_internal (GtkWidget *widget, } } - gtk_array_free (&widget_array, g_object_unref); + gtk_widget_stack_clear (&widget_array); return handled_event; } |
