[balsa/wip/gtk4: 289/351] balsa-message et al: Use GtkEventControllerKey



commit 88092a6b40a496bc667b2030c01042a54c8b7ad0
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Wed Apr 25 16:33:16 2018 -0400

    balsa-message et al: Use GtkEventControllerKey
    
    …to catch key presses, instead of connecting to
    GtkWidget::key-press-event, which will go away some day.

 src/balsa-message.c               |   10 ++++++++--
 src/balsa-message.h               |    4 ++++
 src/balsa-mime-widget-callbacks.c |   18 +++++++-----------
 src/balsa-mime-widget-callbacks.h |    8 ++++++--
 src/balsa-mime-widget-message.c   |    3 ++-
 src/balsa-mime-widget-text.c      |    6 +++---
 6 files changed, 30 insertions(+), 19 deletions(-)
---
diff --git a/src/balsa-message.c b/src/balsa-message.c
index fee0359..7effa27 100644
--- a/src/balsa-message.c
+++ b/src/balsa-message.c
@@ -300,7 +300,8 @@ 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);
-    g_signal_connect(button, "key_press_event",
+    bm->button_key_controller = gtk_event_controller_key_new(button);
+    g_signal_connect(bm->button_key_controller, "key-pressed",
                     G_CALLBACK(balsa_mime_widget_key_press_event), bm);
     g_object_set_data(G_OBJECT(bm), BALSA_MESSAGE_ATTACH_BTN, button);
     g_ptr_array_add(array, button);
@@ -692,7 +693,8 @@ balsa_message_init(BalsaMessage * bm)
     gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
                                    GTK_POLICY_AUTOMATIC,
                                    GTK_POLICY_AUTOMATIC);
-    g_signal_connect(scroll, "key_press_event",
+    bm->scroll_key_controller = gtk_event_controller_key_new(scroll);
+    g_signal_connect(bm->scroll_key_controller, "key-pressed",
                     G_CALLBACK(balsa_mime_widget_key_press_event), bm);
     gtk_widget_set_vexpand(scroll, TRUE);
     gtk_box_pack_start(GTK_BOX(vbox), scroll);
@@ -808,6 +810,10 @@ balsa_message_destroy(GObject * object)
     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->text_key_controller);
 
 #ifdef HAVE_HTML_WIDGET
     g_clear_object(&bm->html_find_info);
diff --git a/src/balsa-message.h b/src/balsa-message.h
index 6db56e0..622b6cc 100644
--- a/src/balsa-message.h
+++ b/src/balsa-message.h
@@ -101,6 +101,10 @@ struct _BalsaMessage {
 #endif                         /* HAVE_HTML_WIDGET */
 
         GtkGesture *gesture;
+        GtkEventController *scroll_key_controller;
+        GtkEventController *button_key_controller;
+        GtkEventController *header_key_controller;
+        GtkEventController *text_key_controller;
 };
 
 struct _BalsaMessageClass {
diff --git a/src/balsa-mime-widget-callbacks.c b/src/balsa-mime-widget-callbacks.c
index 39d8ccd..6018fe4 100644
--- a/src/balsa-mime-widget-callbacks.c
+++ b/src/balsa-mime-widget-callbacks.c
@@ -194,21 +194,17 @@ scroll_change(GtkAdjustment * adj, gint diff, BalsaMessage * bm)
 }
 
 gboolean
-balsa_mime_widget_key_press_event(GtkWidget * widget, GdkEvent * event,
-                                 BalsaMessage * bm)
+balsa_mime_widget_key_press_event(GtkEventControllerKey *key_controller,
+                                  guint                  keyval,
+                                  guint                  keycode,
+                                  GdkModifierType        state,
+                                  gpointer               user_data)
 {
+    BalsaMessage *bm = user_data;
     GtkAdjustment *adj;
     int page_adjust;
-    guint keyval;
-    GdkModifierType state;
 
-    if (!gdk_event_get_keyval(event, &keyval) ||
-        !gdk_event_get_state(event, &state)) {
-        return FALSE;
-    }
-
-    adj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW
-                                              (bm->scroll));
+    adj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(bm->scroll));
 
     page_adjust = balsa_app.pgdownmod ?
         (gtk_adjustment_get_page_size(adj) * balsa_app.pgdown_percent) /
diff --git a/src/balsa-mime-widget-callbacks.h b/src/balsa-mime-widget-callbacks.h
index 134f585..dfa7a64 100644
--- a/src/balsa-mime-widget-callbacks.h
+++ b/src/balsa-mime-widget-callbacks.h
@@ -30,8 +30,12 @@ G_BEGIN_DECLS
 void balsa_mime_widget_ctx_menu_cb(GtkWidget * menu_item, LibBalsaMessageBody * mime_body);
 void balsa_mime_widget_ctx_menu_save(GtkWidget * parent_widget,
                                      LibBalsaMessageBody * mime_body);
-gboolean balsa_mime_widget_key_press_event(GtkWidget * widget, GdkEvent * event,
-                                           BalsaMessage * bm);
+gboolean balsa_mime_widget_key_press_event(GtkEventControllerKey *key_controller,
+                                           guint                  keyval,
+                                           guint                  keycode,
+                                           GdkModifierType        state,
+                                           gpointer               user_data);
+
 void balsa_mime_widget_check_focus(GtkWidget    * widget,
                                    GParamSpec   * pspec,
                                    BalsaMessage * bm);
diff --git a/src/balsa-mime-widget-message.c b/src/balsa-mime-widget-message.c
index f1256b0..9aa03fe 100644
--- a/src/balsa-mime-widget-message.c
+++ b/src/balsa-mime-widget-message.c
@@ -487,7 +487,8 @@ bm_header_widget_new(BalsaMessage * bm, GtkWidget * const * buttons)
 
     g_signal_connect(grid, "notify::has-focus",
                     G_CALLBACK(balsa_mime_widget_check_focus), bm);
-    g_signal_connect(grid, "key_press_event",
+    bm->header_key_controller = gtk_event_controller_key_new(grid);
+    g_signal_connect(bm->header_key_controller, "key-pressed",
                     G_CALLBACK(balsa_mime_widget_key_press_event), bm);
 
 #ifdef GTK_INFO_BAR_WRAPPING_IS_BROKEN
diff --git a/src/balsa-mime-widget-text.c b/src/balsa-mime-widget-text.c
index 3386243..a1bafcf 100644
--- a/src/balsa-mime-widget-text.c
+++ b/src/balsa-mime-widget-text.c
@@ -305,9 +305,9 @@ balsa_mime_widget_new_text(BalsaMessage * bm, LibBalsaMessageBody * mime_body,
               )
        libbalsa_wrap_string(ptr, balsa_app.browse_wrap_length);
 
-    g_signal_connect(G_OBJECT(widget), "key_press_event",
-                    G_CALLBACK(balsa_mime_widget_key_press_event),
-                    (gpointer) bm);
+    bm->text_key_controller = gtk_event_controller_key_new(widget);
+    g_signal_connect(bm->text_key_controller, "key-pressed",
+                    G_CALLBACK(balsa_mime_widget_key_press_event), bm);
 
     mwt->mime_body = mime_body;
     g_signal_connect(G_OBJECT(widget), "populate-popup",


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