From 0f4a6bfbf8795b1821266eced0f38059283980ac Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 12 Oct 2018 17:30:59 +0200 Subject: gtkeventcontrollerlegacy: Make public And move ::event into it, dropping the GtkWidget::event signal. --- gtk/gtk.h | 1 + gtk/gtkeventcontrollerlegacy.c | 52 +++++++++++++++++++++++++++++++++-- gtk/gtkeventcontrollerlegacy.h | 49 +++++++++++++++++++++++++++++++++ gtk/gtkeventcontrollerlegacyprivate.h | 51 ---------------------------------- gtk/gtkwidget.c | 40 --------------------------- gtk/gtkwidgetprivate.h | 5 ---- gtk/meson.build | 3 +- 7 files changed, 100 insertions(+), 101 deletions(-) create mode 100644 gtk/gtkeventcontrollerlegacy.h delete mode 100644 gtk/gtkeventcontrollerlegacyprivate.h diff --git a/gtk/gtk.h b/gtk/gtk.h index 823c079e6e..cf89eca9ab 100644 --- a/gtk/gtk.h +++ b/gtk/gtk.h @@ -94,6 +94,7 @@ #include #include #include +#include #include #include #include diff --git a/gtk/gtkeventcontrollerlegacy.c b/gtk/gtkeventcontrollerlegacy.c index ebe852249b..33b38203f5 100644 --- a/gtk/gtkeventcontrollerlegacy.c +++ b/gtk/gtkeventcontrollerlegacy.c @@ -18,7 +18,28 @@ */ #include "config.h" -#include "gtkeventcontrollerlegacyprivate.h" +#include "gtkeventcontrollerlegacy.h" +#include "gtkeventcontrollerprivate.h" +#include "gtkmarshalers.h" +#include "gtkintl.h" +#include "gtkprivate.h" + +struct _GtkEventControllerLegacy +{ + GtkEventController parent_instance; +}; + +struct _GtkEventControllerLegacyClass +{ + GtkEventControllerClass parent_class; +}; + +enum { + EVENT, + N_SIGNALS +}; + +static guint signals[N_SIGNALS] = { 0, }; G_DEFINE_TYPE (GtkEventControllerLegacy, gtk_event_controller_legacy, GTK_TYPE_EVENT_CONTROLLER) @@ -27,9 +48,11 @@ static gboolean gtk_event_controller_legacy_handle_event (GtkEventController *controller, const GdkEvent *event) { - GtkWidget *widget = gtk_event_controller_get_widget (controller); + gboolean handled; - return gtk_widget_emit_event_signals (widget, event); + g_signal_emit (controller, signals[EVENT], 0, event, &handled); + + return handled; } static void @@ -38,6 +61,29 @@ gtk_event_controller_legacy_class_init (GtkEventControllerLegacyClass *klass) GtkEventControllerClass *controller_class = GTK_EVENT_CONTROLLER_CLASS (klass); controller_class->handle_event = gtk_event_controller_legacy_handle_event; + + /** + * GtkEventController::event: + * @controller: the object which received the signal. + * @event: the #GdkEvent which triggered this signal + * + * The GTK+ main loop will emit this signal for each GDK event delivered + * to @controller. + * + * Returns: %TRUE to stop other handlers from being invoked for the event + * and to cancel the emission of the second specific ::event signal. + * %FALSE to propagate the event further. + */ + signals[EVENT] = + g_signal_new (I_("event"), + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, _gtk_boolean_handled_accumulator, NULL, + _gtk_marshal_BOOLEAN__OBJECT, + G_TYPE_BOOLEAN, 1, + GDK_TYPE_EVENT); + g_signal_set_va_marshaller (signals[EVENT], G_TYPE_FROM_CLASS (klass), + _gtk_marshal_BOOLEAN__OBJECTv); } static void diff --git a/gtk/gtkeventcontrollerlegacy.h b/gtk/gtkeventcontrollerlegacy.h new file mode 100644 index 0000000000..748bebb59a --- /dev/null +++ b/gtk/gtkeventcontrollerlegacy.h @@ -0,0 +1,49 @@ +/* GTK - The GIMP Toolkit + * Copyright (C) 2017, Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + * + * Author(s): Carlos Garnacho + */ + +#ifndef __GTK_EVENT_CONTROLLER_LEGACY_H__ +#define __GTK_EVENT_CONTROLLER_LEGACY_H__ + +#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) +#error "Only can be included directly." +#endif + +#include + +G_BEGIN_DECLS + +#define GTK_TYPE_EVENT_CONTROLLER_LEGACY (gtk_event_controller_legacy_get_type ()) +#define GTK_EVENT_CONTROLLER_LEGACY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GTK_TYPE_EVENT_CONTROLLER_LEGACY, GtkEventControllerLegacy)) +#define GTK_EVENT_CONTROLLER_LEGACY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GTK_TYPE_EVENT_CONTROLLER_LEGACY, GtkEventControllerLegacyClass)) +#define GTK_IS_EVENT_CONTROLLER_LEGACY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GTK_TYPE_EVENT_CONTROLLER_LEGACY)) +#define GTK_IS_EVENT_CONTROLLER_LEGACY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GTK_TYPE_EVENT_CONTROLLER_LEGACY)) +#define GTK_EVENT_CONTROLLER_LEGACY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GTK_TYPE_EVENT_CONTROLLER_LEGACY, GtkEventControllerLegacyClass)) + +typedef struct _GtkEventControllerLegacy GtkEventControllerLegacy; +typedef struct _GtkEventControllerLegacyClass GtkEventControllerLegacyClass; + +GDK_AVAILABLE_IN_ALL +GType gtk_event_controller_legacy_get_type (void) G_GNUC_CONST; + +GDK_AVAILABLE_IN_ALL +GtkEventController *gtk_event_controller_legacy_new (void); + +G_END_DECLS + +#endif /* __GTK_EVENT_CONTROLLER_LEGACY_H__ */ diff --git a/gtk/gtkeventcontrollerlegacyprivate.h b/gtk/gtkeventcontrollerlegacyprivate.h deleted file mode 100644 index 61059a0f5e..0000000000 --- a/gtk/gtkeventcontrollerlegacyprivate.h +++ /dev/null @@ -1,51 +0,0 @@ -/* GTK - The GIMP Toolkit - * Copyright (C) 2017, Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - * - * Author(s): Carlos Garnacho - */ - -#ifndef __GTK_EVENT_CONTROLLER_LEGACY_H__ -#define __GTK_EVENT_CONTROLLER_LEGACY_H__ - -#include "gtkeventcontrollerprivate.h" -#include "gtkwidgetprivate.h" - -G_BEGIN_DECLS - -#define GTK_TYPE_EVENT_CONTROLLER_LEGACY (gtk_event_controller_legacy_get_type ()) -#define GTK_EVENT_CONTROLLER_LEGACY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GTK_TYPE_EVENT_CONTROLLER_LEGACY, GtkEventControllerLegacy)) -#define GTK_EVENT_CONTROLLER_LEGACY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GTK_TYPE_EVENT_CONTROLLER_LEGACY, GtkEventControllerLegacyClass)) -#define GTK_IS_EVENT_CONTROLLER_LEGACY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GTK_TYPE_EVENT_CONTROLLER_LEGACY)) -#define GTK_IS_EVENT_CONTROLLER_LEGACY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GTK_TYPE_EVENT_CONTROLLER_LEGACY)) -#define GTK_EVENT_CONTROLLER_LEGACY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GTK_TYPE_EVENT_CONTROLLER_LEGACY, GtkEventControllerLegacyClass)) - -typedef struct _GtkEventControllerLegacy GtkEventControllerLegacy; -typedef struct _GtkEventControllerLegacyClass GtkEventControllerLegacyClass; - -struct _GtkEventControllerLegacy -{ - GtkEventController parent_instance; -}; - -struct _GtkEventControllerLegacyClass -{ - GtkEventControllerClass parent_class; -}; - -GType gtk_event_controller_legacy_get_type (void) G_GNUC_CONST; -GtkEventController *gtk_event_controller_legacy_new (void); - -#endif /* __GTK_EVENT_CONTROLLER_LEGACY_H__ */ diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 3044231eab..a61de0dd99 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -1689,30 +1689,6 @@ gtk_widget_class_init (GtkWidgetClass *klass) G_TYPE_BOOLEAN, 1, GTK_TYPE_DIRECTION_TYPE); - /** - * GtkWidget::event: - * @widget: the object which received the signal. - * @event: the #GdkEvent which triggered this signal - * - * The GTK+ main loop will emit this signal for each GDK event delivered - * to a widget. - * - * Returns: %TRUE to stop other handlers from being invoked for the event - * and to cancel the emission of the second specific ::event signal. - * %FALSE to propagate the event further. - */ - widget_signals[EVENT] = - g_signal_new (I_("event"), - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST | G_SIGNAL_DEPRECATED, - G_STRUCT_OFFSET (GtkWidgetClass, event), - _gtk_boolean_handled_accumulator, NULL, - _gtk_marshal_BOOLEAN__OBJECT, - G_TYPE_BOOLEAN, 1, - GDK_TYPE_EVENT); - g_signal_set_va_marshaller (widget_signals[EVENT], G_TYPE_FROM_CLASS (klass), - _gtk_marshal_BOOLEAN__OBJECTv); - /** * GtkWidget::drag-leave: * @widget: the object which received the signal. @@ -5306,22 +5282,6 @@ gtk_widget_event_internal (GtkWidget *widget, return return_val; } -gboolean -gtk_widget_emit_event_signals (GtkWidget *widget, - const GdkEvent *event) -{ - gboolean return_val = FALSE, handled; - - g_object_ref (widget); - - g_signal_emit (widget, widget_signals[EVENT], 0, event, &handled); - return_val |= handled | !WIDGET_REALIZED_FOR_EVENT (widget, event); - - g_object_unref (widget); - - return return_val; -} - /** * gtk_widget_activate: * @widget: a #GtkWidget that’s activatable diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h index 0cadb237fb..f658811358 100644 --- a/gtk/gtkwidgetprivate.h +++ b/gtk/gtkwidgetprivate.h @@ -324,11 +324,6 @@ void gtk_widget_set_pass_through (GtkWidget *widget, gboolean pass_through); gboolean gtk_widget_get_pass_through (GtkWidget *widget); -gboolean gtk_widget_emit_event_signals (GtkWidget *widget, - const GdkEvent *event); - -void gtk_widget_init_legacy_controller (GtkWidget *widget); - void gtk_widget_get_origin_relative_to_parent (GtkWidget *widget, int *origin_x, int *origin_y); diff --git a/gtk/meson.build b/gtk/meson.build index 96a0c4283f..8559ed0f7c 100644 --- a/gtk/meson.build +++ b/gtk/meson.build @@ -101,7 +101,6 @@ gtk_private_sources = files([ 'gtkcssvalue.c', 'gtkcsswidgetnode.c', 'gtkcsswin32sizevalue.c', - 'gtkeventcontrollerlegacy.c', 'gtkfilechooserembed.c', 'gtkfilechooserentry.c', 'gtkfilechoosererrorstack.c', @@ -399,7 +398,6 @@ gtk_public_sources = files([ gtk_private_type_headers = files([ 'gtkcsstypesprivate.h', 'gtktexthandleprivate.h', - 'gtkeventcontrollerlegacyprivate.h', ]) gtk_public_headers = files([ @@ -471,6 +469,7 @@ gtk_public_headers = files([ 'gtkeventcontrollerkey.h', 'gtkeventcontrollerscroll.h', 'gtkeventcontrollermotion.h', + 'gtkeventcontrollerlegacy.h', 'gtkexpander.h', 'gtkfilechooser.h', 'gtkfilechooserbutton.h', -- cgit v1.2.1 From bb0e964f56e09eb50daff056b47c855fb252e37b Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 12 Oct 2018 17:35:44 +0200 Subject: testsuite: Fix gestures test Was broken by the removal of the default GtkEventControllerLegacy. --- testsuite/gtk/gestures.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/testsuite/gtk/gestures.c b/testsuite/gtk/gestures.c index 42aac2d65f..2115608983 100644 --- a/testsuite/gtk/gestures.c +++ b/testsuite/gtk/gestures.c @@ -198,16 +198,20 @@ state_nick (GtkEventSequenceState state) } typedef struct { + GtkEventController *controller; GString *str; gboolean exit; } LegacyData; static gboolean -legacy_cb (GtkWidget *w, GdkEvent *button, gpointer data) +legacy_cb (GtkEventControllerLegacy *c, GdkEvent *button, gpointer data) { if (gdk_event_get_event_type (button) == GDK_BUTTON_PRESS) { LegacyData *ld = data; + GtkWidget *w; + + w = gtk_event_controller_get_widget (ld->controller); if (ld->str->len > 0) g_string_append (ld->str, ", "); @@ -377,9 +381,12 @@ add_legacy (GtkWidget *w, GString *str, gboolean exit) LegacyData *data; data = g_new (LegacyData, 1); + data->controller = gtk_event_controller_legacy_new (); data->str = str; data->exit = exit; - g_signal_connect (w, "event", G_CALLBACK (legacy_cb), data); + + gtk_widget_add_controller (w, data->controller); + g_signal_connect (data->controller, "event", G_CALLBACK (legacy_cb), data); } static void -- cgit v1.2.1 From 55b32c8a8ff69fe211c364d4b6ffb016c43cde49 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 12 Oct 2018 19:45:00 +0200 Subject: gtkwidget: Drop obsolete code This path is not being hit anymore, gtkmain.c does handle those events itself. --- gtk/gtkwidget.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index a61de0dd99..b496e6954c 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -5242,18 +5242,6 @@ gtk_widget_event_internal (GtkWidget *widget, if (!event_surface_is_still_viewable (event)) return TRUE; - /* Non input events get handled right away */ - switch ((guint) event->any.type) - { - case GDK_NOTHING: - case GDK_DELETE: - case GDK_DESTROY: - case GDK_CONFIGURE: - return gtk_widget_emit_event_signals (widget, event); - default: - break; - } - event_copy = gdk_event_copy (event); translate_event_coordinates (event_copy, widget); -- cgit v1.2.1 From 65fbd0af4ee0e301c11a3bef6766b44ee5fa2d86 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 12 Oct 2018 19:45:30 +0200 Subject: tests: Remove ::event handler in testwindowsize We just want widget size here, not windowing configuration events. --- tests/testwindowsize.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/tests/testwindowsize.c b/tests/testwindowsize.c index 6e62dd0a60..e938072c33 100644 --- a/tests/testwindowsize.c +++ b/tests/testwindowsize.c @@ -8,21 +8,14 @@ static GtkWidget *default_width_spin; static GtkWidget *default_height_spin; static GtkWidget *resizable_check; -static gboolean -configure_event_cb (GtkWidget *window, GdkEvent *event, GtkLabel *label) +static void +size_changed_cb (GdkSurface *surface, int width, int height, GtkLabel *label) { - if (gdk_event_get_event_type (event) == GDK_CONFIGURE) - { - gchar *str; - gint width, height; - - gtk_window_get_size (GTK_WINDOW (window), &width, &height); - str = g_strdup_printf ("%d x %d", width, height); - gtk_label_set_label (label, str); - g_free (str); - } - - return GDK_EVENT_PROPAGATE; + gchar *str; + + str = g_strdup_printf ("%d x %d", width, height); + gtk_label_set_label (label, str); + g_free (str); } static void @@ -71,8 +64,9 @@ show_dialog (void) //gtk_widget_show (label); gtk_dialog_add_action_widget (GTK_DIALOG (dialog), label, GTK_RESPONSE_HELP); - g_signal_connect (dialog, "event", - G_CALLBACK (configure_event_cb), label); + gtk_widget_realize (dialog); + g_signal_connect (gtk_widget_get_surface (dialog), "size-changed", + G_CALLBACK (size_changed_cb), label); gtk_dialog_run (GTK_DIALOG (dialog)); -- cgit v1.2.1 From 3c73f70daef6d25c33f90d58dfee5e4090913a45 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 12 Oct 2018 19:52:58 +0200 Subject: tests: Use GtkEventControllerMotion in testpopup Track motion through it, instead of a GtkWidget::event handler. --- tests/testpopup.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/tests/testpopup.c b/tests/testpopup.c index 504c67d1ce..085d08ca2f 100644 --- a/tests/testpopup.c +++ b/tests/testpopup.c @@ -12,29 +12,28 @@ draw_popup (GtkDrawingArea *da, } static gboolean -place_popup (GtkWidget *parent, - GdkEvent *event, - GtkWidget *popup) +place_popup (GtkEventControllerMotion *motion, + gdouble x, + gdouble y, + GtkWidget *popup) { - gint width, height; - gdouble x, y; - - if (gdk_event_get_event_type (event) == GDK_MOTION_NOTIFY) - { - gtk_window_get_size (GTK_WINDOW (popup), &width, &height); - gdk_event_get_root_coords (event, &x, &y); - gtk_window_move (GTK_WINDOW (popup), - (int) x - width / 2, - (int) y - height / 2); - } - - return GDK_EVENT_PROPAGATE; + gint width, height, win_x, win_y; + GtkWidget *widget; + + widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (motion)); + + gtk_window_get_size (GTK_WINDOW (popup), &width, &height); + gtk_window_get_position (GTK_WINDOW (widget), &win_x, &win_y); + gtk_window_move (GTK_WINDOW (popup), + (int) win_x + x - width / 2, + (int) win_y + y - height / 2); } static gboolean on_map (GtkWidget *parent) { GtkWidget *popup, *da; + GtkEventController *motion; popup = gtk_window_new (GTK_WINDOW_POPUP); da = gtk_drawing_area_new (); @@ -43,7 +42,10 @@ on_map (GtkWidget *parent) gtk_widget_set_size_request (GTK_WIDGET (popup), 20, 20); gtk_window_set_transient_for (GTK_WINDOW (popup), GTK_WINDOW (parent)); - g_signal_connect (parent, "event", G_CALLBACK (place_popup), popup); + + motion = gtk_event_controller_motion_new (); + gtk_widget_add_controller (parent, motion); + g_signal_connect (motion, "motion", G_CALLBACK (place_popup), popup); gtk_widget_show (popup); -- cgit v1.2.1 From 21d0e30903ec6035377692e4a557b32e09e99fc2 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Mon, 15 Oct 2018 17:29:32 +0200 Subject: testsuite: Fix gestures tests for the legacy controller Let it create one with the right propagation phase, so the event propagation chain stays the same. --- testsuite/gtk/gestures.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/testsuite/gtk/gestures.c b/testsuite/gtk/gestures.c index 2115608983..5591f1ad48 100644 --- a/testsuite/gtk/gestures.c +++ b/testsuite/gtk/gestures.c @@ -385,6 +385,7 @@ add_legacy (GtkWidget *w, GString *str, gboolean exit) data->str = str; data->exit = exit; + gtk_event_controller_set_propagation_phase (data->controller, GTK_PHASE_BUBBLE); gtk_widget_add_controller (w, data->controller); g_signal_connect (data->controller, "event", G_CALLBACK (legacy_cb), data); } @@ -464,6 +465,10 @@ test_mixed (void) str = g_string_new (""); + add_legacy (A, str, GDK_EVENT_PROPAGATE); + add_legacy (B, str, GDK_EVENT_PROPAGATE); + add_legacy (C, str, GDK_EVENT_PROPAGATE); + add_gesture (A, "a1", GTK_PHASE_CAPTURE, str, GTK_EVENT_SEQUENCE_NONE); add_gesture (B, "b1", GTK_PHASE_CAPTURE, str, GTK_EVENT_SEQUENCE_NONE); add_gesture (C, "c1", GTK_PHASE_CAPTURE, str, GTK_EVENT_SEQUENCE_NONE); @@ -474,10 +479,6 @@ test_mixed (void) add_gesture (B, "b3", GTK_PHASE_BUBBLE, str, GTK_EVENT_SEQUENCE_NONE); add_gesture (C, "c3", GTK_PHASE_BUBBLE, str, GTK_EVENT_SEQUENCE_NONE); - add_legacy (A, str, GDK_EVENT_PROPAGATE); - add_legacy (B, str, GDK_EVENT_PROPAGATE); - add_legacy (C, str, GDK_EVENT_PROPAGATE); - gtk_widget_get_allocation (A, &allocation); point_update (&mouse_state, A, allocation.width / 2, allocation.height / 2); @@ -523,6 +524,10 @@ test_early_exit (void) str = g_string_new (""); + add_legacy (A, str, GDK_EVENT_PROPAGATE); + add_legacy (B, str, GDK_EVENT_STOP); + add_legacy (C, str, GDK_EVENT_PROPAGATE); + add_gesture (A, "a1", GTK_PHASE_CAPTURE, str, GTK_EVENT_SEQUENCE_NONE); add_gesture (B, "b1", GTK_PHASE_CAPTURE, str, GTK_EVENT_SEQUENCE_NONE); add_gesture (C, "c1", GTK_PHASE_CAPTURE, str, GTK_EVENT_SEQUENCE_NONE); @@ -531,10 +536,6 @@ test_early_exit (void) add_gesture (B, "b3", GTK_PHASE_BUBBLE, str, GTK_EVENT_SEQUENCE_NONE); add_gesture (C, "c3", GTK_PHASE_BUBBLE, str, GTK_EVENT_SEQUENCE_NONE); - add_legacy (A, str, GDK_EVENT_PROPAGATE); - add_legacy (B, str, GDK_EVENT_STOP); - add_legacy (C, str, GDK_EVENT_PROPAGATE); - gtk_widget_get_allocation (A, &allocation); point_update (&mouse_state, A, allocation.width / 2, allocation.height / 2); -- cgit v1.2.1 From dd6aa7b870ad448b1d427f7c17be78bd91e154a3 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Mon, 15 Oct 2018 17:30:15 +0200 Subject: tests: Drop ::event handler in testgtk We can use ::size-allocate for it, as window positions in root coordinates are neither supported nor crucial here. --- tests/testgtk.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/tests/testgtk.c b/tests/testgtk.c index 4bcf775b55..503f165a27 100644 --- a/tests/testgtk.c +++ b/tests/testgtk.c @@ -5695,27 +5695,26 @@ create_surface_states (GtkWidget *widget) * Window sizing */ -static gint -configure_event_callback (GtkWidget *widget, - GdkEvent *event, - gpointer data) +static void +size_allocate_callback (GtkWidget *widget, + GtkAllocation *allocation, + int baseline, + gpointer data) { GtkWidget *label = data; gchar *msg; gint x, y; - + gtk_window_get_position (GTK_WINDOW (widget), &x, &y); - - msg = g_strdup_printf ("event: %d,%d %d x %d\n" + + msg = g_strdup_printf ("size: %d x %d\n" "position: %d, %d", - 0, 0, 0, 0, // FIXME + allocation->width, allocation->height, x, y); - + gtk_label_set_text (GTK_LABEL (label), msg); g_free (msg); - - return FALSE; } static void @@ -5867,10 +5866,10 @@ window_controls (GtkWidget *window) gtk_container_add (GTK_CONTAINER (control_window), vbox); - label = gtk_label_new (""); + label = gtk_label_new (""); gtk_box_pack_start (GTK_BOX (vbox), label); - g_signal_connect (window, "event", G_CALLBACK (configure_event_callback), label); + g_signal_connect_after (window, "size-allocate", G_CALLBACK (size_allocate_callback), label); adjustment = gtk_adjustment_new (10.0, -2000.0, 2000.0, 1.0, 5.0, 0.0); spin = gtk_spin_button_new (adjustment, 0, 0); -- cgit v1.2.1 From f3674688bffb55eca1d365961bb0301d24068433 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Mon, 15 Oct 2018 17:31:48 +0200 Subject: tests: Drop "saved positions" test in testgtk This test solely relies on configure events, which aren't supported anymore. --- tests/testgtk.c | 133 -------------------------------------------------------- 1 file changed, 133 deletions(-) diff --git a/tests/testgtk.c b/tests/testgtk.c index 503f165a27..c975459fc7 100644 --- a/tests/testgtk.c +++ b/tests/testgtk.c @@ -1324,138 +1324,6 @@ create_rotated_text (GtkWidget *widget) } -/* - * Saved Position - */ -gint upositionx = 0; -gint upositiony = 0; - -static gboolean -configure_event (GtkWidget *window) -{ - GtkLabel *lx; - GtkLabel *ly; - gchar buffer[64]; - - lx = g_object_get_data (G_OBJECT (window), "x"); - ly = g_object_get_data (G_OBJECT (window), "y"); - - gdk_surface_get_root_origin (gtk_widget_get_surface (window), - &upositionx, &upositiony); - sprintf (buffer, "%d", upositionx); - gtk_label_set_text (lx, buffer); - sprintf (buffer, "%d", upositiony); - gtk_label_set_text (ly, buffer); - - return FALSE; -} - -static void -uposition_stop_configure (GtkToggleButton *toggle, - GObject *window) -{ - if (gtk_toggle_button_get_active (toggle)) - g_signal_handlers_block_by_func (window, G_CALLBACK (configure_event), NULL); - else - g_signal_handlers_unblock_by_func (window, G_CALLBACK (configure_event), NULL); -} - -static void -create_saved_position (GtkWidget *widget) -{ - static GtkWidget *window = NULL; - - if (!window) - { - GtkWidget *hbox; - GtkWidget *main_vbox; - GtkWidget *vbox; - GtkWidget *x_label; - GtkWidget *y_label; - GtkWidget *button; - GtkWidget *label; - GtkWidget *any; - - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (window), "Saved Position"); - g_signal_connect (window, "event", G_CALLBACK (configure_event), NULL); - - gtk_window_move (GTK_WINDOW (window), upositionx, upositiony); - - gtk_window_set_display (GTK_WINDOW (window), - gtk_widget_get_display (widget)); - - - g_signal_connect (window, "destroy", - G_CALLBACK (gtk_widget_destroyed), - &window); - - main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5); - gtk_container_add (GTK_CONTAINER (window), main_vbox); - - button = g_object_new (GTK_TYPE_TOGGLE_BUTTON, - "label", "Stop Events", - "active", FALSE, - "visible", TRUE, - NULL); - g_signal_connect (button, "clicked", G_CALLBACK (uposition_stop_configure), window); - - vbox = - g_object_new (GTK_TYPE_BOX, - "orientation", GTK_ORIENTATION_VERTICAL, - "homogeneous", FALSE, - "spacing", 5, - NULL); - gtk_container_add (GTK_CONTAINER (main_vbox), vbox); - gtk_container_add (GTK_CONTAINER (vbox), button); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_box_pack_start (GTK_BOX (vbox), hbox); - - label = gtk_label_new ("X Origin : "); - gtk_widget_set_halign (label, GTK_ALIGN_START); - gtk_widget_set_valign (label, GTK_ALIGN_CENTER); - gtk_box_pack_start (GTK_BOX (hbox), label); - - x_label = gtk_label_new (""); - gtk_box_pack_start (GTK_BOX (hbox), x_label); - g_object_set_data (G_OBJECT (window), "x", x_label); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_box_pack_start (GTK_BOX (vbox), hbox); - - label = gtk_label_new ("Y Origin : "); - gtk_widget_set_halign (label, GTK_ALIGN_START); - gtk_widget_set_valign (label, GTK_ALIGN_CENTER); - gtk_box_pack_start (GTK_BOX (hbox), label); - - y_label = gtk_label_new (""); - gtk_box_pack_start (GTK_BOX (hbox), y_label); - g_object_set_data (G_OBJECT (window), "y", y_label); - - any = - g_object_new (gtk_separator_get_type (), - "GtkWidget::visible", TRUE, - NULL); - gtk_box_pack_start (GTK_BOX (main_vbox), any); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_box_pack_start (GTK_BOX (main_vbox), hbox); - - button = gtk_button_new_with_label ("Close"); - g_signal_connect_swapped (button, "clicked", - G_CALLBACK (gtk_widget_destroy), - window); - gtk_box_pack_start (GTK_BOX (hbox), button); - gtk_widget_set_can_default (button, TRUE); - gtk_widget_grab_default (button); - - gtk_widget_show (window); - } - else - gtk_widget_destroy (window); -} - /* * GtkPixmap */ @@ -7033,7 +6901,6 @@ struct { { "radio buttons", create_radio_buttons }, { "range controls", create_range_controls }, { "rotated text", create_rotated_text }, - { "saved position", create_saved_position }, { "scrolled windows", create_scrolled_windows }, { "size groups", create_size_groups }, { "spinbutton", create_spins }, -- cgit v1.2.1