[balsa/wip/gtk4: 316/351] Port to new GtkGesture/GtkEventController API



commit 3c72609637577037fbf80be317402554d22b2c1f
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Tue May 1 12:23:57 2018 -0400

    Port to new GtkGesture/GtkEventController API
    
    We no longer need to unref them.

 libbalsa/address-view.c         |   11 +++++----
 src/ab-main.c                   |   11 ++++-----
 src/balsa-index.c               |   12 ++++++----
 src/balsa-index.h               |    2 -
 src/balsa-mblist.c              |   20 ++++-------------
 src/balsa-mblist.h              |    2 -
 src/balsa-message.c             |   38 ++++++++++++++++++++++-------------
 src/balsa-message.h             |    4 ---
 src/balsa-mime-widget-image.c   |   15 +++++++------
 src/balsa-mime-widget-message.c |    7 ++++-
 src/balsa-mime-widget-text.c    |   42 +++++++++++++-------------------------
 src/sendmsg-window.c            |    5 +--
 src/sendmsg-window.h            |    2 -
 13 files changed, 77 insertions(+), 94 deletions(-)
---
diff --git a/libbalsa/address-view.c b/libbalsa/address-view.c
index f09b0b3..ae6ef61 100644
--- a/libbalsa/address-view.c
+++ b/libbalsa/address-view.c
@@ -53,8 +53,6 @@ struct _LibBalsaAddressView {
 
     gchar *domain;
 
-    GtkEventController *key_controller;
-
     /*
      * Ephemera
      */
@@ -87,7 +85,6 @@ libbalsa_address_view_finalize(GObject * object)
     LibBalsaAddressView *address_view = LIBBALSA_ADDRESS_VIEW(object);
 
     g_free(address_view->domain);
-    g_object_unref(address_view->key_controller);
 
     G_OBJECT_CLASS(libbalsa_address_view_parent_class)->finalize(object);
 }
@@ -501,6 +498,7 @@ lbav_insert_row(LibBalsaAddressView * address_view, gint row,
     GtkWidget *entry;
     GtkEntryCompletion *completion;
     GtkListStore *store;
+    GtkEventController *controller;
 
     gtk_grid_insert_row(grid, row);
 
@@ -557,9 +555,12 @@ lbav_insert_row(LibBalsaAddressView * address_view, gint row,
                      G_CALLBACK(lbav_entry_activated), address_view);
     g_signal_connect(entry, "changed",
                      G_CALLBACK(lbav_entry_changed_cb), address_view);
-    address_view->key_controller = gtk_event_controller_key_new(entry);
-    g_signal_connect(address_view->key_controller, "key-pressed",
+
+    controller = gtk_event_controller_key_new();
+    g_signal_connect(controller, "key-pressed",
                      G_CALLBACK(lbav_key_pressed_cb), address_view);
+    gtk_widget_add_controller(entry, controller);
+
     g_signal_connect(entry, "insert-text",
                      G_CALLBACK(lbav_insert_text_cb), address_view);
     g_signal_connect_after(entry, "notify::has-focus",
diff --git a/src/ab-main.c b/src/ab-main.c
index 0e53cce..e9ef165 100644
--- a/src/ab-main.c
+++ b/src/ab-main.c
@@ -68,16 +68,12 @@ struct ABMainWindow {
     LibBalsaAddress *displayed_address;
 
     GMenu *file_menu;
-
-    GtkEventController *key_controller;
 } contacts_app;
 
 
 static void
 bab_cleanup(void)
 {
-    g_object_unref(contacts_app.key_controller);
-
     gtk_main_quit();
 }
 
@@ -956,6 +952,7 @@ bab_window_new(GtkApplication * application)
     GtkWidget *scroll;
     GtkWidget *browse_widget;
     GtkWidget *edit_widget;
+    GtkEventController *controller;
 
     contacts_app.window =
         GTK_WINDOW(wnd = gtk_application_window_new(application));
@@ -1003,9 +1000,11 @@ bab_window_new(GtkApplication * application)
     g_signal_connect(G_OBJECT(find_entry), "changed",
                     G_CALLBACK(balsa_ab_window_find), ab);
     */
-    contacts_app.key_controller = gtk_event_controller_key_new(wnd);
-    g_signal_connect(contacts_app.key_controller, "key-pressed",
+    controller = gtk_event_controller_key_new();
+    g_signal_connect(controller, "key-pressed",
                     G_CALLBACK(ew_key_pressed), &contacts_app);
+    gtk_widget_add_controller(wnd, controller);
+
     gtk_window_set_default_size(GTK_WINDOW(wnd), 500, 400);
 
     gtk_widget_show(wnd);
diff --git a/src/balsa-index.c b/src/balsa-index.c
index c317d46..558b1b6 100644
--- a/src/balsa-index.c
+++ b/src/balsa-index.c
@@ -210,7 +210,6 @@ bndx_destroy(GObject * obj)
     g_clear_pointer(&index->filter_string, g_free);
 
     g_clear_object(&index->popup_menu);
-    g_clear_object(&index->gesture);
 
     G_OBJECT_CLASS(balsa_index_parent_class)->dispose(obj);
 }
@@ -259,12 +258,14 @@ bndx_string_width(const gchar * text)
 static void
 balsa_index_init(BalsaIndex * index)
 {
+    GtkWidget *widget = GTK_WIDGET(index);
     GtkTreeView *tree_view = GTK_TREE_VIEW(index);
     GtkTreeSelection *selection = gtk_tree_view_get_selection(tree_view);
     GtkCellRenderer *renderer;
     GtkTreeViewColumn *column;
     GdkContentFormats *formats;
     GtkGesture *gesture;
+    GtkEventController *controller;
 
 #if defined(TREE_VIEW_FIXED_HEIGHT)
     gtk_tree_view_set_fixed_height_mode(tree_view, TRUE);
@@ -393,14 +394,15 @@ balsa_index_init(BalsaIndex * index)
 
     /* we want to handle button presses to pop up context menus if
      * necessary */
-    index->gesture = gesture = gtk_gesture_multi_press_new(GTK_WIDGET(index));
+    gesture = gtk_gesture_multi_press_new();
     gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture), 0);
     g_signal_connect(gesture, "pressed",
                     G_CALLBACK(bndx_gesture_pressed_cb), NULL);
     /* We need to claim the event sequence before GtkTreeView gets it,
      * so we jump in at the capture phase: */
-    gtk_event_controller_set_propagation_phase(GTK_EVENT_CONTROLLER(gesture),
-                                               GTK_PHASE_CAPTURE);
+    controller = GTK_EVENT_CONTROLLER(gesture);
+    gtk_event_controller_set_propagation_phase(controller, GTK_PHASE_CAPTURE);
+    gtk_widget_add_controller(widget, controller);
 
     g_signal_connect(tree_view, "row-activated",
                     G_CALLBACK(bndx_row_activated), NULL);
@@ -433,7 +435,7 @@ balsa_index_init(BalsaIndex * index)
                      G_CALLBACK(bndx_drag_cb), NULL);
 
     balsa_index_set_column_widths(index);
-    gtk_widget_show (GTK_WIDGET(index));
+    gtk_widget_show(widget);
 }
 
 /*
diff --git a/src/balsa-index.h b/src/balsa-index.h
index c065621..20fc53b 100644
--- a/src/balsa-index.h
+++ b/src/balsa-index.h
@@ -70,8 +70,6 @@ struct _BalsaIndex {
 
     LibBalsaMailboxSearchIter *search_iter;
     BalsaIndexWidthPreference width_preference;
-
-    GtkGesture *gesture;
 };
 
 /* tree model columns */
diff --git a/src/balsa-mblist.c b/src/balsa-mblist.c
index e22a64e..c540e3b 100644
--- a/src/balsa-mblist.c
+++ b/src/balsa-mblist.c
@@ -138,16 +138,6 @@ static void bmbl_expand_to_row(BalsaMBList * mblist, GtkTreePath * path);
 G_DEFINE_TYPE(BalsaMBList, balsa_mblist, GTK_TYPE_TREE_VIEW)
 
 static void
-bmbl_dispose(GObject * object)
-{
-    BalsaMBList *mblist = (BalsaMBList *) object;
-
-    g_clear_object(&mblist->gesture);
-
-    G_OBJECT_CLASS(balsa_mblist_parent_class)->dispose(object);
-}
-
-static void
 balsa_mblist_class_init(BalsaMBListClass * klass)
 {
     GObjectClass *object_class;
@@ -169,7 +159,6 @@ balsa_mblist_class_init(BalsaMBListClass * klass)
     /* GObject signals */
     object_class->set_property = bmbl_set_property;
     object_class->get_property = bmbl_get_property;
-    object_class->dispose      = bmbl_dispose;
 
     /* GtkWidget signals */
     widget_class->drag_motion = bmbl_drag_motion;
@@ -1152,12 +1141,13 @@ balsa_mblist_default_signal_bindings(BalsaMBList * mblist)
     GtkGesture *gesture;
     GdkContentFormats *formats;
 
-    mblist->gesture= gesture = gtk_gesture_multi_press_new(GTK_WIDGET(mblist));
+    gesture = gtk_gesture_multi_press_new();
     gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture), 0);
     g_signal_connect(gesture, "pressed",
                      G_CALLBACK(bmbl_gesture_pressed_cb), NULL);
+    gtk_widget_add_controller(GTK_WIDGET(mblist), GTK_EVENT_CONTROLLER(gesture));
 
-    g_signal_connect_after(G_OBJECT(mblist), "size-allocate",
+    g_signal_connect_after(mblist, "size-allocate",
                            G_CALLBACK(bmbl_column_resize), NULL);
 
     formats = gdk_content_formats_new(bmbl_drop_types, G_N_ELEMENTS(bmbl_drop_types));
@@ -1168,10 +1158,10 @@ balsa_mblist_default_signal_bindings(BalsaMBList * mblist)
                                          GDK_ACTION_MOVE);
     gdk_content_formats_unref(formats);
 
-    g_signal_connect(G_OBJECT(mblist), "drag-data-received",
+    g_signal_connect(mblist, "drag-data-received",
                      G_CALLBACK(bmbl_drag_cb), NULL);
 
-    g_signal_connect(G_OBJECT(mblist), "row-activated",
+    g_signal_connect(mblist, "row-activated",
                      G_CALLBACK(bmbl_row_activated_cb), NULL);
 }
 
diff --git a/src/balsa-mblist.h b/src/balsa-mblist.h
index 9644875..93f7b84 100644
--- a/src/balsa-mblist.h
+++ b/src/balsa-mblist.h
@@ -42,8 +42,6 @@ struct _BalsaMBList {
     /* to set sort order in an idle callback */
     gint sort_column_id;
     guint sort_idle_id;
-
-    GtkGesture *gesture;
 };
 
 GtkWidget    *balsa_mblist_new(void);
diff --git a/src/balsa-message.c b/src/balsa-message.c
index 0514551..c36d879 100644
--- a/src/balsa-message.c
+++ b/src/balsa-message.c
@@ -206,6 +206,7 @@ bm_header_tl_buttons(BalsaMessage * bm)
 {
     GPtrArray *array;
     GtkWidget *button;
+    GtkEventController *controller;
 
     array = g_ptr_array_new();
 
@@ -231,9 +232,12 @@ bm_header_tl_buttons(BalsaMessage * bm)
     gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
     g_signal_connect(button, "clicked",
                     G_CALLBACK(balsa_headers_attachments_popup), bm);
-    bm->button_key_controller = gtk_event_controller_key_new(button);
-    g_signal_connect(bm->button_key_controller, "key-pressed",
+
+    controller = gtk_event_controller_key_new();
+    g_signal_connect(controller, "key-pressed",
                     G_CALLBACK(balsa_mime_widget_key_press_event), bm);
+    gtk_widget_add_controller(button, controller);
+
     g_object_set_data(G_OBJECT(bm), BALSA_MESSAGE_ATTACH_BTN, button);
     g_ptr_array_add(array, button);
 
@@ -629,6 +633,7 @@ balsa_message_init(BalsaMessage * bm)
     GtkCellRenderer *renderer;
     GtkTreeSelection *selection;
     GtkWidget *widget;
+    GtkEventController *controller;
 
     bm->switcher = gtk_stack_switcher_new();
     gtk_box_pack_start(GTK_BOX(bm), bm->switcher);
@@ -650,9 +655,12 @@ balsa_message_init(BalsaMessage * bm)
     gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
                                    GTK_POLICY_AUTOMATIC,
                                    GTK_POLICY_AUTOMATIC);
-    bm->scroll_key_controller = gtk_event_controller_key_new(scroll);
-    g_signal_connect(bm->scroll_key_controller, "key-pressed",
+
+    controller = gtk_event_controller_key_new();
+    g_signal_connect(controller, "key-pressed",
                     G_CALLBACK(balsa_mime_widget_key_press_event), bm);
+    gtk_widget_add_controller(scroll, controller);
+
     gtk_widget_set_vexpand(scroll, TRUE);
     gtk_box_pack_start(GTK_BOX(vbox), scroll);
 
@@ -684,10 +692,12 @@ balsa_message_init(BalsaMessage * bm)
     g_signal_connect(bm->treeview, "row-activated",
                      G_CALLBACK(tree_activate_row_cb), bm);
 
-    bm->gesture = gesture = gtk_gesture_multi_press_new(GTK_WIDGET(bm->treeview));
+    gesture = gtk_gesture_multi_press_new();
     gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture), 0);
     g_signal_connect(gesture, "pressed",
                      G_CALLBACK(bm_gesture_pressed_cb), NULL);
+    gtk_widget_add_controller(GTK_WIDGET(bm->treeview),
+                              GTK_EVENT_CONTROLLER(gesture));
 
     g_signal_connect(bm->treeview, "popup-menu",
                      G_CALLBACK(tree_menu_popup_key_cb), bm);
@@ -766,11 +776,6 @@ balsa_message_destroy(GObject * object)
     g_clear_object(&bm->save_all_popup);
     g_clear_object(&bm->parts_popup);
     g_clear_object(&bm->bm_widget);
-    g_clear_object(&bm->gesture);
-    g_clear_object(&bm->scroll_key_controller);
-    g_clear_object(&bm->button_key_controller);
-    g_clear_object(&bm->header_key_controller);
-    g_clear_object(&bm->find_key_controller);
 
 #ifdef HAVE_HTML_WIDGET
     g_clear_object(&bm->html_find_info);
@@ -944,18 +949,23 @@ bm_gesture_pressed_cb(GtkGestureMultiPress *multi_press,
                       gpointer              user_data)
 {
     GtkGesture *gesture;
+    GdkEventSequence *sequence;
     const GdkEvent *event;
+    GtkEventController *controller;
     GtkTreeView *tree_view;
     BalsaMessage * bm = (BalsaMessage *) user_data;
     GtkTreePath *path;
 
     gesture = GTK_GESTURE(multi_press);
-    event = gtk_gesture_get_last_event(gesture, gtk_gesture_get_last_updated_sequence(gesture));
+    sequence = gtk_gesture_get_last_updated_sequence(gesture);
+    event = gtk_gesture_get_last_event(gesture, sequence);
+
     g_return_if_fail(event != NULL);
     if (!gdk_event_triggers_context_menu(event))
         return;
 
-    tree_view = GTK_TREE_VIEW(gtk_event_controller_get_widget(GTK_EVENT_CONTROLLER(gesture)));
+    controller = GTK_EVENT_CONTROLLER(gesture);
+    tree_view = GTK_TREE_VIEW(gtk_event_controller_get_widget(controller));
 
     /* If the part which received the click is already selected, don't change
      * the selection and check if more than one part is selected. Pop up the
@@ -3220,8 +3230,8 @@ balsa_message_find_in_message(BalsaMessage * bm)
             libbalsa_window_block_accels((GtkApplicationWindow *) toplevel, TRUE);
 
         if (bm->find_key_controller == NULL) {
-            bm->find_key_controller =
-                gtk_event_controller_key_new(gtk_widget_get_toplevel(GTK_WIDGET(bm)));
+            bm->find_key_controller = gtk_event_controller_key_new();
+            gtk_widget_add_controller(toplevel, bm->find_key_controller);
         }
         if (bm->key_pressed_id == 0) {
             bm->key_pressed_id =
diff --git a/src/balsa-message.h b/src/balsa-message.h
index ff3bbb4..c6d3ef3 100644
--- a/src/balsa-message.h
+++ b/src/balsa-message.h
@@ -100,10 +100,6 @@ struct _BalsaMessage {
     gpointer html_find_info;
 #endif                          /* HAVE_HTML_WIDGET */
 
-    GtkGesture *gesture;
-    GtkEventController *scroll_key_controller;
-    GtkEventController *button_key_controller;
-    GtkEventController *header_key_controller;
     GtkEventController *find_key_controller;
     gulong key_pressed_id;
 };
diff --git a/src/balsa-mime-widget-image.c b/src/balsa-mime-widget-image.c
index df46f2c..3d28e40 100644
--- a/src/balsa-mime-widget-image.c
+++ b/src/balsa-mime-widget-image.c
@@ -36,7 +36,6 @@ struct _BalsaMimeWidgetImage {
 
     guint img_check_size_id;
     GdkPixbuf *pixbuf;
-    GtkGesture *gesture;
 };
 
 G_DEFINE_TYPE(BalsaMimeWidgetImage,
@@ -48,7 +47,6 @@ balsa_mime_widget_image_init(BalsaMimeWidgetImage * mwi)
 {
     mwi->img_check_size_id = 0;
     mwi->pixbuf = NULL;
-    mwi->gesture = NULL;
 }
 
 static void
@@ -58,7 +56,6 @@ balsa_mime_widget_image_dispose(GObject * object)
 
     libbalsa_clear_source_id(&mwi->img_check_size_id);
     g_clear_object(&mwi->pixbuf);
-    g_clear_object(&mwi->gesture);
 
     G_OBJECT_CLASS(balsa_mime_widget_image_parent_class)->dispose(object);
 }
@@ -83,10 +80,12 @@ balsa_mime_widget_image_gesture_pressed_cb(GtkGestureMultiPress *multi_press,
 {
     GtkMenu *menu = user_data;
     GtkGesture *gesture;
+    GdkEventSequence *sequence;
     const GdkEvent *event;
 
     gesture = GTK_GESTURE(multi_press);
-    event = gtk_gesture_get_last_event(gesture, gtk_gesture_get_last_updated_sequence(gesture));
+    sequence = gtk_gesture_get_last_updated_sequence(gesture);
+    event = gtk_gesture_get_last_event(gesture, sequence);
     g_return_if_fail(event != NULL);
 
     if (gdk_event_triggers_context_menu(event)) {
@@ -177,6 +176,7 @@ balsa_mime_widget_new_image(BalsaMessage * bm,
     GtkWidget *image;
     GError * load_err = NULL;
     BalsaMimeWidgetImage *mwi;
+    GtkGesture *gesture;
     BalsaMimeWidget *mw;
 
     g_return_val_if_fail(mime_body != NULL, NULL);
@@ -200,10 +200,11 @@ balsa_mime_widget_new_image(BalsaMessage * bm,
     g_signal_connect_swapped(image, "size-allocate",
                              G_CALLBACK(img_size_allocate_cb), mwi);
 
-    mwi->gesture = gtk_gesture_multi_press_new(GTK_WIDGET(image));
-    gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(mwi->gesture), 0);
-    g_signal_connect(mwi->gesture, "pressed",
+    gesture = gtk_gesture_multi_press_new();
+    gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture), 0);
+    g_signal_connect(gesture, "pressed",
                      G_CALLBACK(balsa_mime_widget_image_gesture_pressed_cb), data);
+    gtk_widget_add_controller(image, GTK_EVENT_CONTROLLER(gesture));
 
     mw = (BalsaMimeWidget *) mwi;
     balsa_mime_widget_set_widget(mw, image);
diff --git a/src/balsa-mime-widget-message.c b/src/balsa-mime-widget-message.c
index 9aa03fe..2e9d93a 100644
--- a/src/balsa-mime-widget-message.c
+++ b/src/balsa-mime-widget-message.c
@@ -472,6 +472,7 @@ static GtkWidget *
 bm_header_widget_new(BalsaMessage * bm, GtkWidget * const * buttons)
 {
     GtkWidget *grid;
+    GtkEventController *controller;
 #ifdef GTK_INFO_BAR_WRAPPING_IS_BROKEN
     GtkWidget *hbox;
 #else                           /* GTK_INFO_BAR_WRAPPING_IS_BROKEN */
@@ -487,9 +488,11 @@ bm_header_widget_new(BalsaMessage * bm, GtkWidget * const * buttons)
 
     g_signal_connect(grid, "notify::has-focus",
                     G_CALLBACK(balsa_mime_widget_check_focus), bm);
-    bm->header_key_controller = gtk_event_controller_key_new(grid);
-    g_signal_connect(bm->header_key_controller, "key-pressed",
+
+    controller = gtk_event_controller_key_new();
+    g_signal_connect(controller, "key-pressed",
                     G_CALLBACK(balsa_mime_widget_key_press_event), bm);
+    gtk_widget_add_controller(grid, controller);
 
 #ifdef GTK_INFO_BAR_WRAPPING_IS_BROKEN
     hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
diff --git a/src/balsa-mime-widget-text.c b/src/balsa-mime-widget-text.c
index 46a70ba..f4a5664 100644
--- a/src/balsa-mime-widget-text.c
+++ b/src/balsa-mime-widget-text.c
@@ -145,9 +145,6 @@ struct _BalsaMimeWidgetText {
     GList               *url_list;
     message_url_t       *current_url;
     LibBalsaMessageBody *mime_body;
-    GtkGesture          *gesture;
-    GtkEventController  *motion_controller;
-    GtkEventController  *key_controller;
     GList               *cite_bar_list;
     gint                 cite_bar_dimension;
     gint                 phrase_hl;
@@ -156,19 +153,6 @@ struct _BalsaMimeWidgetText {
 G_DEFINE_TYPE(BalsaMimeWidgetText, balsa_mime_widget_text, BALSA_TYPE_MIME_WIDGET)
 
 static void
-balsa_mime_widget_text_dispose(GObject * object) {
-    BalsaMimeWidgetText *mwt;
-
-    mwt = BALSA_MIME_WIDGET_TEXT(object);
-
-    g_clear_object(&mwt->gesture);
-    g_clear_object(&mwt->motion_controller);
-    g_clear_object(&mwt->key_controller);
-
-    G_OBJECT_CLASS(balsa_mime_widget_text_parent_class)->dispose(object);
-}
-
-static void
 balsa_mime_widget_text_finalize(GObject * object) {
     BalsaMimeWidgetText *mwt;
 
@@ -184,7 +168,6 @@ balsa_mime_widget_text_class_init(BalsaMimeWidgetTextClass * klass)
 {
     GObjectClass *object_class = (GObjectClass *) klass;
 
-    object_class->dispose  = balsa_mime_widget_text_dispose;
     object_class->finalize = balsa_mime_widget_text_finalize;
 }
 
@@ -238,7 +221,7 @@ balsa_mime_widget_new_text(BalsaMessage * bm, LibBalsaMessageBody * mime_body,
     GError *err = NULL;
     gboolean is_text_plain;
     GtkWidget *widget;
-
+    GtkEventController *controller;
 
     g_return_val_if_fail(mime_body != NULL, NULL);
     g_return_val_if_fail(content_type != NULL, NULL);
@@ -303,9 +286,10 @@ balsa_mime_widget_new_text(BalsaMessage * bm, LibBalsaMessageBody * mime_body,
               )
        libbalsa_wrap_string(ptr, balsa_app.browse_wrap_length);
 
-    mwt->key_controller = gtk_event_controller_key_new(widget);
-    g_signal_connect(mwt->key_controller, "key-pressed",
+    controller = gtk_event_controller_key_new();
+    g_signal_connect(controller, "key-pressed",
                     G_CALLBACK(balsa_mime_widget_key_press_event), bm);
+    gtk_widget_add_controller(widget, controller);
 
     mwt->mime_body = mime_body;
     g_signal_connect(G_OBJECT(widget), "populate-popup",
@@ -321,17 +305,21 @@ balsa_mime_widget_new_text(BalsaMessage * bm, LibBalsaMessageBody * mime_body,
     g_signal_connect_after(G_OBJECT(widget), "realize",
                           G_CALLBACK(fix_text_widget), mwt->url_list);
     if (mwt->url_list != NULL) {
-        mwt->gesture = gtk_gesture_multi_press_new(widget);
-        g_signal_connect(mwt->gesture, "pressed",
+        GtkGesture *gesture;
+
+        gesture = gtk_gesture_multi_press_new();
+        g_signal_connect(gesture, "pressed",
                          G_CALLBACK(store_button_coords), NULL);
-       g_signal_connect(mwt->gesture, "released",
-                        G_CALLBACK(check_call_url), mwt);
+        g_signal_connect(gesture, "released",
+                G_CALLBACK(check_call_url), mwt);
+        gtk_widget_add_controller(widget, GTK_EVENT_CONTROLLER(gesture));
 
-        mwt->motion_controller = gtk_event_controller_motion_new(widget);
-        g_signal_connect(mwt->motion_controller, "motion",
+        controller = gtk_event_controller_motion_new();
+        g_signal_connect(controller, "motion",
                          G_CALLBACK(mwt_controller_motion_cb), mwt);
-        g_signal_connect(mwt->motion_controller, "leave",
+        g_signal_connect(controller, "leave",
                          G_CALLBACK(mwt_controller_leave_cb), mwt);
+        gtk_widget_add_controller(widget, controller);
     }
 
     if (is_text_plain) {
diff --git a/src/sendmsg-window.c b/src/sendmsg-window.c
index 3a9d28a..b7dbce7 100644
--- a/src/sendmsg-window.c
+++ b/src/sendmsg-window.c
@@ -656,7 +656,6 @@ balsa_sendmsg_destroy_handler(BalsaSendmsg * bsmsg)
                                           bsmsg->ident);
 
     g_free(bsmsg->spell_check_lang);
-    g_clear_object(&bsmsg->gesture);
 
     quit_on_close = bsmsg->quit_on_close;
     g_free(bsmsg);
@@ -2720,10 +2719,11 @@ sw_attachment_list(BalsaSendmsg *bsmsg)
     gtk_tree_selection_set_mode(gtk_tree_view_get_selection(view),
                                GTK_SELECTION_SINGLE);
 
-    bsmsg->gesture = gesture = gtk_gesture_multi_press_new(tree_view);
+    gesture = gtk_gesture_multi_press_new();
     gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture), 0);
     g_signal_connect(gesture, "pressed",
                      G_CALLBACK(sw_gesture_pressed_cb), NULL);
+    gtk_widget_add_controller(tree_view, GTK_EVENT_CONTROLLER(gesture));
 
     g_signal_connect(view, "popup-menu",
                      G_CALLBACK(attachment_popup_cb), NULL);
@@ -6644,7 +6644,6 @@ sendmsg_window_new()
     bsmsg->update_config = FALSE;
     bsmsg->quit_on_close = FALSE;
     bsmsg->state = SENDMSG_STATE_CLEAN;
-    bsmsg->gesture = NULL;
 
     bsmsg->window = window =
         gtk_application_window_new(balsa_app.application);
diff --git a/src/sendmsg-window.h b/src/sendmsg-window.h
index 1de4074..e77aa4a 100644
--- a/src/sendmsg-window.h
+++ b/src/sendmsg-window.h
@@ -107,8 +107,6 @@ G_BEGIN_DECLS
 
         GtkWidget *paned;
         gboolean ready_to_send;
-
-        GtkGesture *gesture;
     };
 
     BalsaSendmsg *sendmsg_window_compose(void);


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