From: Benjamin Otte Date: Sat, 10 Mar 2018 17:45:23 +0000 (+0100) Subject: eventcontrollermotion: Port to new API model X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~22^2~349^2~4 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=4f3058f1957134151078dce12eb677df9e61f97d;p=gtk4.git eventcontrollermotion: Port to new API model --- diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index 51863a4573..84c8f61e4e 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -213,7 +213,6 @@ struct _GtkEntryPrivate GtkWidget *magnifier; GtkGesture *drag_gesture; - GtkEventController *motion_controller; GtkEventController *key_controller; GtkWidget *progress_widget; @@ -2517,6 +2516,7 @@ gtk_entry_init (GtkEntry *entry) GtkEntryPrivate *priv = gtk_entry_get_instance_private (entry); GtkCssNode *widget_node; GtkGesture *gesture; + GtkEventController *controller; gint i; gtk_widget_set_can_focus (GTK_WIDGET (entry), TRUE); @@ -2573,9 +2573,10 @@ gtk_entry_init (GtkEntry *entry) gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (gesture), TRUE); gtk_widget_add_controller (GTK_WIDGET (entry), GTK_EVENT_CONTROLLER (gesture)); - priv->motion_controller = gtk_event_controller_motion_new (GTK_WIDGET (entry)); - g_signal_connect (priv->motion_controller, "motion", + controller = gtk_event_controller_motion_new (); + g_signal_connect (controller, "motion", G_CALLBACK (entry_motion_cb), entry); + gtk_widget_add_controller (GTK_WIDGET (entry), controller); priv->key_controller = gtk_event_controller_key_new (GTK_WIDGET (entry)); g_signal_connect (priv->key_controller, "key-pressed", @@ -2797,8 +2798,6 @@ gtk_entry_finalize (GObject *object) g_free (priv->placeholder_text); g_free (priv->im_module); - g_clear_object (&priv->motion_controller); - if (priv->tabs) pango_tab_array_free (priv->tabs); diff --git a/gtk/gtkeventcontrollermotion.c b/gtk/gtkeventcontrollermotion.c index bc48d9c96e..3c85301f57 100644 --- a/gtk/gtkeventcontrollermotion.c +++ b/gtk/gtkeventcontrollermotion.c @@ -149,19 +149,14 @@ gtk_event_controller_motion_init (GtkEventControllerMotion *motion) /** * gtk_event_controller_motion_new: - * @widget: a #GtkWidget * - * Creates a new event controller that will handle motion events - * for the given @widget. + * Creates a new event controller that will handle motion events. * * Returns: a new #GtkEventControllerMotion **/ GtkEventController * -gtk_event_controller_motion_new (GtkWidget *widget) +gtk_event_controller_motion_new (void) { - g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); - return g_object_new (GTK_TYPE_EVENT_CONTROLLER_MOTION, - "widget", widget, NULL); } diff --git a/gtk/gtkeventcontrollermotion.h b/gtk/gtkeventcontrollermotion.h index ad2808df59..9377a7ba12 100644 --- a/gtk/gtkeventcontrollermotion.h +++ b/gtk/gtkeventcontrollermotion.h @@ -43,7 +43,7 @@ GDK_AVAILABLE_IN_ALL GType gtk_event_controller_motion_get_type (void) G_GNUC_CONST; GDK_AVAILABLE_IN_ALL -GtkEventController *gtk_event_controller_motion_new (GtkWidget *widget); +GtkEventController *gtk_event_controller_motion_new (void); G_END_DECLS diff --git a/gtk/gtkiconview.c b/gtk/gtkiconview.c index 45e4088d14..48da13353e 100644 --- a/gtk/gtkiconview.c +++ b/gtk/gtkiconview.c @@ -918,6 +918,7 @@ gtk_icon_view_cell_layout_init (GtkCellLayoutIface *iface) static void gtk_icon_view_init (GtkIconView *icon_view) { + GtkEventController *controller; GtkGesture *gesture; icon_view->priv = gtk_icon_view_get_instance_private (icon_view); @@ -966,11 +967,12 @@ gtk_icon_view_init (GtkIconView *icon_view) icon_view); gtk_widget_add_controller (GTK_WIDGET (icon_view), GTK_EVENT_CONTROLLER (gesture)); - icon_view->priv->motion_controller = gtk_event_controller_motion_new (GTK_WIDGET (icon_view)); - g_signal_connect (icon_view->priv->motion_controller, "leave", G_CALLBACK (gtk_icon_view_leave), + controller = gtk_event_controller_motion_new (); + g_signal_connect (controller, "leave", G_CALLBACK (gtk_icon_view_leave), icon_view); - g_signal_connect (icon_view->priv->motion_controller, "motion", G_CALLBACK (gtk_icon_view_motion), + g_signal_connect (controller, "motion", G_CALLBACK (gtk_icon_view_motion), icon_view); + gtk_widget_add_controller (GTK_WIDGET (icon_view), controller); icon_view->priv->key_controller = gtk_event_controller_key_new (GTK_WIDGET (icon_view)); g_signal_connect (icon_view->priv->key_controller, "key-pressed", G_CALLBACK (gtk_icon_view_key_pressed), @@ -1023,7 +1025,6 @@ gtk_icon_view_dispose (GObject *object) priv->cell_area = NULL; } - g_clear_object (&priv->motion_controller); g_clear_object (&priv->key_controller); G_OBJECT_CLASS (gtk_icon_view_parent_class)->dispose (object); diff --git a/gtk/gtkiconviewprivate.h b/gtk/gtkiconviewprivate.h index 737c23bf1d..69a67fe8e3 100644 --- a/gtk/gtkiconviewprivate.h +++ b/gtk/gtkiconviewprivate.h @@ -60,7 +60,6 @@ struct _GtkIconViewPrivate GList *items; - GtkEventController *motion_controller; GtkEventController *key_controller; GtkAdjustment *hadjustment; diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index 5cce92f33b..a3ebbe0af5 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -3177,7 +3177,6 @@ gtk_label_finalize (GObject *object) if (priv->select_info) { - g_object_unref (priv->select_info->motion_controller); g_object_unref (priv->select_info->provider); } @@ -5032,11 +5031,12 @@ gtk_label_ensure_select_info (GtkLabel *label) gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (priv->select_info->multipress_gesture), TRUE); gtk_widget_add_controller (GTK_WIDGET (label), GTK_EVENT_CONTROLLER (priv->select_info->multipress_gesture)); - priv->select_info->motion_controller = gtk_event_controller_motion_new (GTK_WIDGET (label)); + priv->select_info->motion_controller = gtk_event_controller_motion_new (); g_signal_connect (priv->select_info->motion_controller, "motion", G_CALLBACK (gtk_label_motion), label); g_signal_connect (priv->select_info->motion_controller, "leave", G_CALLBACK (gtk_label_leave), label); + gtk_widget_add_controller (GTK_WIDGET (label), priv->select_info->motion_controller); priv->select_info->provider = g_object_new (GTK_TYPE_LABEL_CONTENT, NULL); GTK_LABEL_CONTENT (priv->select_info->provider)->label = label; @@ -5055,7 +5055,7 @@ gtk_label_clear_select_info (GtkLabel *label) { gtk_widget_remove_controller (GTK_WIDGET (label), GTK_EVENT_CONTROLLER (priv->select_info->drag_gesture)); gtk_widget_remove_controller (GTK_WIDGET (label), GTK_EVENT_CONTROLLER (priv->select_info->multipress_gesture)); - g_object_unref (priv->select_info->motion_controller); + gtk_widget_remove_controller (GTK_WIDGET (label), priv->select_info->motion_controller); GTK_LABEL_CONTENT (priv->select_info->provider)->label = NULL; g_object_unref (priv->select_info->provider); diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c index 092897f288..602005957e 100644 --- a/gtk/gtkmenu.c +++ b/gtk/gtkmenu.c @@ -1144,11 +1144,11 @@ gtk_menu_init (GtkMenu *menu) G_CALLBACK (gtk_menu_scroll_controller_scroll), menu); gtk_widget_add_controller (GTK_WIDGET (menu), controller); - priv->motion_controller = - gtk_event_controller_motion_new (GTK_WIDGET (menu)); - g_signal_connect (priv->motion_controller, "enter", G_CALLBACK (gtk_menu_enter), menu); - g_signal_connect (priv->motion_controller, "motion", G_CALLBACK (gtk_menu_motion), menu); - g_signal_connect (priv->motion_controller, "leave", G_CALLBACK (gtk_menu_leave), menu); + controller = gtk_event_controller_motion_new (); + g_signal_connect (controller, "enter", G_CALLBACK (gtk_menu_enter), menu); + g_signal_connect (controller, "motion", G_CALLBACK (gtk_menu_motion), menu); + g_signal_connect (controller, "leave", G_CALLBACK (gtk_menu_leave), menu); + gtk_widget_add_controller (GTK_WIDGET (menu), controller); priv->key_controller = gtk_event_controller_key_new (GTK_WIDGET (menu)); @@ -1225,7 +1225,6 @@ gtk_menu_finalize (GObject *object) gtk_widget_unparent (priv->top_arrow_widget); gtk_widget_unparent (priv->bottom_arrow_widget); - g_clear_object (&priv->motion_controller); g_clear_object (&priv->key_controller); G_OBJECT_CLASS (gtk_menu_parent_class)->finalize (object); diff --git a/gtk/gtkmenuitem.c b/gtk/gtkmenuitem.c index 392de1e748..6fdddbdeee 100644 --- a/gtk/gtkmenuitem.c +++ b/gtk/gtkmenuitem.c @@ -661,6 +661,7 @@ gtk_menu_item_class_init (GtkMenuItemClass *klass) static void gtk_menu_item_init (GtkMenuItem *menu_item) { + GtkEventController *controller; GtkMenuItemPrivate *priv; priv = gtk_menu_item_get_instance_private (menu_item); @@ -680,9 +681,10 @@ gtk_menu_item_init (GtkMenuItem *menu_item) priv->submenu_placement = GTK_TOP_BOTTOM; priv->timer = 0; - priv->motion_controller = gtk_event_controller_motion_new (GTK_WIDGET (menu_item)); - g_signal_connect (priv->motion_controller, "enter", G_CALLBACK (gtk_menu_item_enter), menu_item); - g_signal_connect (priv->motion_controller, "leave", G_CALLBACK (gtk_menu_item_leave), menu_item); + controller = gtk_event_controller_motion_new (); + g_signal_connect (controller, "enter", G_CALLBACK (gtk_menu_item_enter), menu_item); + g_signal_connect (controller, "leave", G_CALLBACK (gtk_menu_item_leave), menu_item); + gtk_widget_add_controller (GTK_WIDGET (menu_item), controller); } /** diff --git a/gtk/gtkmenuprivate.h b/gtk/gtkmenuprivate.h index 96245129c2..e1621357a3 100644 --- a/gtk/gtkmenuprivate.h +++ b/gtk/gtkmenuprivate.h @@ -75,7 +75,6 @@ struct _GtkMenuPrivate GtkWidget *top_arrow_widget; GtkWidget *bottom_arrow_widget; - GtkEventController *motion_controller; GtkEventController *key_controller; gint scroll_offset; diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c index 3ad8d16961..a3a7f01c04 100644 --- a/gtk/gtknotebook.c +++ b/gtk/gtknotebook.c @@ -207,8 +207,6 @@ struct _GtkNotebookPrivate guint switch_tab_timer; GList *switch_tab; - GtkEventController *motion_controller; - guint32 timer; guint child_has_focus : 1; @@ -1041,6 +1039,7 @@ gtk_notebook_init (GtkNotebook *notebook) { GtkNotebookPrivate *priv; GdkContentFormats *targets; + GtkEventController *controller; GtkGesture *gesture; gtk_widget_set_can_focus (GTK_WIDGET (notebook), TRUE); @@ -1118,8 +1117,9 @@ gtk_notebook_init (GtkNotebook *notebook) g_signal_connect (gesture, "released", G_CALLBACK (gtk_notebook_gesture_released), notebook); gtk_widget_add_controller (GTK_WIDGET (notebook), GTK_EVENT_CONTROLLER (gesture)); - priv->motion_controller = gtk_event_controller_motion_new (GTK_WIDGET (notebook)); - g_signal_connect (priv->motion_controller, "motion", G_CALLBACK (gtk_notebook_motion), notebook); + controller = gtk_event_controller_motion_new (); + g_signal_connect (controller, "motion", G_CALLBACK (gtk_notebook_motion), notebook); + gtk_widget_add_controller (GTK_WIDGET (notebook), controller); gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (notebook)), GTK_STYLE_CLASS_FRAME); @@ -1609,7 +1609,6 @@ gtk_notebook_finalize (GObject *object) GtkNotebook *notebook = GTK_NOTEBOOK (object); GtkNotebookPrivate *priv = notebook->priv; - g_clear_object (&priv->motion_controller); gtk_widget_unparent (priv->box); G_OBJECT_CLASS (gtk_notebook_parent_class)->finalize (object); diff --git a/gtk/gtkpaned.c b/gtk/gtkpaned.c index d53c9e6497..004d222c29 100644 --- a/gtk/gtkpaned.c +++ b/gtk/gtkpaned.c @@ -145,7 +145,6 @@ struct _GtkPanedPrivate GtkGesture *pan_gesture; /* Used for touch */ GtkGesture *drag_gesture; /* Used for mice */ - GtkEventController *motion_controller; gint child1_size; gint drag_pos; @@ -993,8 +992,6 @@ gtk_paned_finalize (GObject *object) gtk_paned_set_saved_focus (paned, NULL); gtk_paned_set_first_paned (paned, NULL); - g_clear_object (&priv->motion_controller); - gtk_widget_unparent (priv->handle_widget); G_OBJECT_CLASS (gtk_paned_parent_class)->finalize (object); @@ -1453,6 +1450,7 @@ static void gtk_paned_init (GtkPaned *paned) { GtkPanedPrivate *priv = gtk_paned_get_instance_private (paned); + GtkEventController *controller; GtkGesture *gesture; gtk_widget_set_has_surface (GTK_WIDGET (paned), FALSE); @@ -1496,8 +1494,9 @@ gtk_paned_init (GtkPaned *paned) gtk_widget_add_controller (GTK_WIDGET (paned), GTK_EVENT_CONTROLLER (gesture)); priv->drag_gesture = gesture; - priv->motion_controller = gtk_event_controller_motion_new (GTK_WIDGET (paned)); - g_signal_connect (priv->motion_controller, "motion", G_CALLBACK (gtk_paned_motion), paned); + controller = gtk_event_controller_motion_new (); + g_signal_connect (controller, "motion", G_CALLBACK (gtk_paned_motion), paned); + gtk_widget_add_controller (GTK_WIDGET (paned), controller); priv->handle_widget = gtk_gizmo_new ("separator", NULL, diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c index 2e862e5d67..825cd51f44 100644 --- a/gtk/gtkscrolledwindow.c +++ b/gtk/gtkscrolledwindow.c @@ -259,8 +259,6 @@ struct _GtkScrolledWindowPrivate GtkGesture *drag_gesture; GtkGesture *pan_gesture; - GtkEventController *motion_controller; - gdouble drag_start_x; gdouble drag_start_y; @@ -1989,9 +1987,10 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window) G_CALLBACK (scroll_controller_decelerate), scrolled_window); gtk_widget_add_controller (widget, controller); - priv->motion_controller = gtk_event_controller_motion_new (widget); - g_signal_connect (priv->motion_controller, "leave", + controller = gtk_event_controller_motion_new (); + g_signal_connect (controller, "leave", G_CALLBACK (motion_controller_leave), scrolled_window); + gtk_widget_add_controller (widget, controller); } /** diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index 49b47a38e6..6644ad21c9 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -225,7 +225,6 @@ struct _GtkTextViewPrivate GtkTextPendingScroll *pending_scroll; GtkGesture *drag_gesture; - GtkEventController *motion_controller; GtkEventController *key_controller; GtkCssNode *selection_node; @@ -1616,6 +1615,7 @@ gtk_text_view_init (GtkTextView *text_view) GdkContentFormats *target_list; GtkTextViewPrivate *priv; GtkStyleContext *context; + GtkEventController *controller; GtkGesture *gesture; text_view->priv = gtk_text_view_get_instance_private (text_view); @@ -1687,8 +1687,9 @@ gtk_text_view_init (GtkTextView *text_view) widget); gtk_widget_add_controller (widget, GTK_EVENT_CONTROLLER (priv->drag_gesture)); - priv->motion_controller = gtk_event_controller_motion_new (widget); - g_signal_connect (priv->motion_controller, "motion", G_CALLBACK (gtk_text_view_motion), widget); + controller = gtk_event_controller_motion_new (); + g_signal_connect (controller, "motion", G_CALLBACK (gtk_text_view_motion), widget); + gtk_widget_add_controller (widget, controller); priv->key_controller = gtk_event_controller_key_new (widget); g_signal_connect (priv->key_controller, "key-pressed", @@ -3601,7 +3602,6 @@ gtk_text_view_finalize (GObject *object) cancel_pending_scroll (text_view); - g_object_unref (priv->motion_controller); g_object_unref (priv->key_controller); if (priv->tabs) diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 3700fadbfd..083c6ce33a 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -461,7 +461,6 @@ struct _GtkTreeViewPrivate GtkGesture *multipress_gesture; GtkGesture *drag_gesture; /* Rubberbanding, row DnD */ GtkGesture *column_drag_gesture; /* Column reordering, resizing */ - GtkEventController *motion_controller; /* Tooltip support */ gint tooltip_column; @@ -1648,6 +1647,7 @@ gtk_tree_view_init (GtkTreeView *tree_view) GtkTreeViewPrivate *priv; GtkCssNode *widget_node; GtkGesture *gesture; + GtkEventController *controller; priv = tree_view->priv = gtk_tree_view_get_instance_private (tree_view); @@ -1750,13 +1750,14 @@ gtk_tree_view_init (GtkTreeView *tree_view) GTK_PHASE_CAPTURE); gtk_widget_add_controller (GTK_WIDGET (tree_view), GTK_EVENT_CONTROLLER (priv->column_drag_gesture)); - priv->motion_controller = gtk_event_controller_motion_new (GTK_WIDGET (tree_view)); - g_signal_connect (priv->motion_controller, "enter", + controller = gtk_event_controller_motion_new (); + g_signal_connect (controller, "enter", G_CALLBACK (gtk_tree_view_motion_controller_enter), tree_view); - g_signal_connect (priv->motion_controller, "leave", + g_signal_connect (controller, "leave", G_CALLBACK (gtk_tree_view_motion_controller_leave), tree_view); - g_signal_connect (priv->motion_controller, "motion", + g_signal_connect (controller, "motion", G_CALLBACK (gtk_tree_view_motion_controller_motion), tree_view); + gtk_widget_add_controller (GTK_WIDGET (tree_view), controller); } @@ -2140,8 +2141,6 @@ gtk_tree_view_destroy (GtkWidget *widget) tree_view->priv->vadjustment = NULL; } - g_clear_object (&tree_view->priv->motion_controller); - GTK_WIDGET_CLASS (gtk_tree_view_parent_class)->destroy (widget); } diff --git a/gtk/gtkvideo.c b/gtk/gtkvideo.c index 6a351bce1e..8b12bf1f15 100644 --- a/gtk/gtkvideo.c +++ b/gtk/gtkvideo.c @@ -43,8 +43,6 @@ struct _GtkVideo GFile *file; GtkMediaStream *media_stream; - GtkEventController *motion_controller; - GtkWidget *box; GtkWidget *video_image; GtkWidget *overlay_icon; @@ -71,6 +69,32 @@ G_DEFINE_TYPE (GtkVideo, gtk_video, GTK_TYPE_WIDGET) static GParamSpec *properties[N_PROPS] = { NULL, }; +static gboolean +gtk_video_hide_controls (gpointer data) +{ + GtkVideo *self = data; + + gtk_revealer_set_reveal_child (GTK_REVEALER (self->controls_revealer), FALSE); + + self->controls_hide_source = 0; + + return G_SOURCE_REMOVE; +} + +static void +gtk_video_motion (GtkEventControllerMotion *motion, + double x, + double y, + GtkVideo *self) +{ + gtk_revealer_set_reveal_child (GTK_REVEALER (self->controls_revealer), TRUE); + if (self->controls_hide_source) + g_source_remove (self->controls_hide_source); + self->controls_hide_source = g_timeout_add (5 * 1000, + gtk_video_hide_controls, + self); +} + static void gtk_video_measure (GtkWidget *widget, GtkOrientation orientation, @@ -159,7 +183,6 @@ gtk_video_dispose (GObject *object) gtk_video_set_media_stream (self, NULL); - g_clear_object (&self->motion_controller); g_clear_pointer (&self->box, gtk_widget_unparent); G_OBJECT_CLASS (gtk_video_parent_class)->dispose (object); @@ -302,44 +325,16 @@ gtk_video_class_init (GtkVideoClass *klass) gtk_widget_class_bind_template_child (widget_class, GtkVideo, overlay_icon); gtk_widget_class_bind_template_child (widget_class, GtkVideo, controls); gtk_widget_class_bind_template_child (widget_class, GtkVideo, controls_revealer); + gtk_widget_class_bind_template_callback (widget_class, gtk_video_motion); gtk_widget_class_set_css_name (widget_class, I_("video")); } -static gboolean -gtk_video_hide_controls (gpointer data) -{ - GtkVideo *self = data; - - gtk_revealer_set_reveal_child (GTK_REVEALER (self->controls_revealer), FALSE); - - self->controls_hide_source = 0; - - return G_SOURCE_REMOVE; -} - -static void -gtk_video_motion (GtkEventControllerMotion *motion, - double x, - double y, - GtkVideo *self) -{ - gtk_revealer_set_reveal_child (GTK_REVEALER (self->controls_revealer), TRUE); - if (self->controls_hide_source) - g_source_remove (self->controls_hide_source); - self->controls_hide_source = g_timeout_add (5 * 1000, - gtk_video_hide_controls, - self); -} - static void gtk_video_init (GtkVideo *self) { gtk_widget_init_template (GTK_WIDGET (self)); gtk_widget_set_has_surface (GTK_WIDGET (self), FALSE); - - self->motion_controller = gtk_event_controller_motion_new (GTK_WIDGET (self)); - g_signal_connect (self->motion_controller, "motion", G_CALLBACK (gtk_video_motion), self); } /** diff --git a/gtk/ui/gtkvideo.ui b/gtk/ui/gtkvideo.ui index 8acd989bc2..537fb6973f 100644 --- a/gtk/ui/gtkvideo.ui +++ b/gtk/ui/gtkvideo.ui @@ -43,5 +43,10 @@ + + + + + diff --git a/tests/testoverlay.c b/tests/testoverlay.c index 381ad9117c..b8455a5a2e 100644 --- a/tests/testoverlay.c +++ b/tests/testoverlay.c @@ -375,9 +375,9 @@ test_chase (void) gtk_overlay_add_overlay (GTK_OVERLAY (overlay), child); g_object_set (child, "margin", 4, NULL); - controller = gtk_event_controller_motion_new (child); - g_object_set_data_full (G_OBJECT (child), "motion", controller, g_object_unref); + controller = gtk_event_controller_motion_new (); g_signal_connect (controller, "enter", G_CALLBACK (on_enter), overlay); + gtk_widget_add_controller (child, controller); return win; }