[balsa] Various: Connect to the "key-pressed" signal



commit d725a787ce00aaaa65e9c2476ed64e3a57ad4765
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Mon Jun 1 15:51:55 2020 -0400

    Various: Connect to the "key-pressed" signal
    
    Connect to the "key-pressed" signal of a GtkEventControllerKey instead
    of the "key-press-event" widget signal.
    
    * src/balsa-message.c (bm_header_tl_buttons), (balsa_message_init):
    * src/balsa-mime-widget-message.c (bm_header_widget_new):
    * src/balsa-mime-widget-text.c (balsa_mime_widget_new_text),
      (bm_widget_new_html):
    * src/balsa-mime-widget-callbacks.c
      (balsa_mime_widget_key_pressed): rename and new signature;
    * src/balsa-mime-widget-callbacks.h: ditto.

 ChangeLog                         | 14 ++++++++++++++
 src/balsa-message.c               | 16 ++++++++++++----
 src/balsa-mime-widget-callbacks.c | 18 +++++++++++-------
 src/balsa-mime-widget-callbacks.h |  7 +++++--
 src/balsa-mime-widget-message.c   |  7 +++++--
 src/balsa-mime-widget-text.c      | 15 +++++++++------
 6 files changed, 56 insertions(+), 21 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index de04026a6..759ed47ff 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2020-06-01  Peter Bloomfield  <pbloomfield bellsouth net>
+
+       Various: Connect to the "key-pressed" signal of a
+       GtkEventControllerKey instead of the "key-press-event" widget
+       signal.
+
+       * src/balsa-message.c (bm_header_tl_buttons), (balsa_message_init):
+       * src/balsa-mime-widget-message.c (bm_header_widget_new):
+       * src/balsa-mime-widget-text.c (balsa_mime_widget_new_text),
+         (bm_widget_new_html):
+       * src/balsa-mime-widget-callbacks.c
+         (balsa_mime_widget_key_pressed): rename and new signature;
+       * src/balsa-mime-widget-callbacks.h: ditto.
+
 2020-06-01  Peter Bloomfield  <pbloomfield bellsouth net>
 
        balsa-mblist: Connect to the "pressed" signal of a
diff --git a/src/balsa-message.c b/src/balsa-message.c
index d418c379b..82c1ae49f 100644
--- a/src/balsa-message.c
+++ b/src/balsa-message.c
@@ -252,6 +252,7 @@ bm_header_tl_buttons(BalsaMessage * balsa_message)
 {
     GPtrArray *array;
     GtkWidget *button;
+    GtkEventController *key_controller;
 
     array = g_ptr_array_new();
 
@@ -269,8 +270,11 @@ bm_header_tl_buttons(BalsaMessage * balsa_message)
     gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
     g_signal_connect(button, "clicked",
                     G_CALLBACK(balsa_headers_attachments_popup), balsa_message);
-    g_signal_connect(button, "key_press_event",
-                    G_CALLBACK(balsa_mime_widget_key_press_event), balsa_message);
+
+    key_controller = gtk_event_controller_key_new(button);
+    g_signal_connect(key_controller, "key-pressed",
+                    G_CALLBACK(balsa_mime_widget_key_pressed), balsa_message);
+
     g_ptr_array_add(array, button);
 
     g_ptr_array_add(array, NULL);
@@ -642,6 +646,7 @@ balsa_message_init(BalsaMessage * balsa_message)
     GtkTreeStore *model;
     GtkCellRenderer *renderer;
     GtkTreeSelection *selection;
+    GtkEventController *key_controller;
 
     balsa_message->switcher = gtk_stack_switcher_new();
     gtk_box_pack_start(GTK_BOX(balsa_message), balsa_message->switcher, FALSE, FALSE, 0);
@@ -662,8 +667,11 @@ balsa_message_init(BalsaMessage * balsa_message)
     gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
                                    GTK_POLICY_AUTOMATIC,
                                    GTK_POLICY_AUTOMATIC);
-    g_signal_connect(scroll, "key_press_event",
-                    G_CALLBACK(balsa_mime_widget_key_press_event), balsa_message);
+
+    key_controller = gtk_event_controller_key_new(scroll);
+    g_signal_connect(key_controller, "key-pressed",
+                    G_CALLBACK(balsa_mime_widget_key_pressed), balsa_message);
+
     gtk_box_pack_start(GTK_BOX(vbox), scroll, TRUE, TRUE, 0);
 
     /* Widget to hold headers */
diff --git a/src/balsa-mime-widget-callbacks.c b/src/balsa-mime-widget-callbacks.c
index f67699706..0bc2c1aec 100644
--- a/src/balsa-mime-widget-callbacks.c
+++ b/src/balsa-mime-widget-callbacks.c
@@ -193,10 +193,14 @@ scroll_change(GtkAdjustment * adj, gint diff, BalsaMessage * bm)
     gtk_adjustment_set_value(adj, MIN(value, upper));
 }
 
-gint
-balsa_mime_widget_key_press_event(GtkWidget * widget, GdkEventKey * event,
-                                 BalsaMessage * bm)
+gboolean
+balsa_mime_widget_key_pressed(GtkEventControllerKey *controller,
+                              guint                  keyval,
+                              guint                  keycode,
+                              GdkModifierType        state,
+                              gpointer               user_data)
 {
+    BalsaMessage *bm = user_data;
     GtkAdjustment *adj;
     int page_adjust;
 
@@ -207,7 +211,7 @@ balsa_mime_widget_key_press_event(GtkWidget * widget, GdkEventKey * event,
         (gtk_adjustment_get_page_size(adj) * balsa_app.pgdown_percent) /
         100 : gtk_adjustment_get_page_increment(adj);
 
-    switch (event->keyval) {
+    switch (keyval) {
     case GDK_KEY_Up:
         scroll_change(adj, -gtk_adjustment_get_step_increment(adj), NULL);
         break;
@@ -221,19 +225,19 @@ balsa_mime_widget_key_press_event(GtkWidget * widget, GdkEventKey * event,
         scroll_change(adj, page_adjust, NULL);
         break;
     case GDK_KEY_Home:
-        if (event->state & GDK_CONTROL_MASK)
+        if (state & GDK_CONTROL_MASK)
             scroll_change(adj, -gtk_adjustment_get_value(adj), NULL);
         else
             return FALSE;
         break;
     case GDK_KEY_End:
-        if (event->state & GDK_CONTROL_MASK)
+        if (state & GDK_CONTROL_MASK)
             scroll_change(adj, gtk_adjustment_get_upper(adj), NULL);
         else
             return FALSE;
         break;
     case GDK_KEY_F10:
-        if (event->state & GDK_SHIFT_MASK) {
+        if (state & GDK_SHIFT_MASK) {
            GtkWidget *current_widget = balsa_message_current_part_widget(bm);
 
            if (current_widget) {
diff --git a/src/balsa-mime-widget-callbacks.h b/src/balsa-mime-widget-callbacks.h
index 5e0a82454..db97ac619 100644
--- a/src/balsa-mime-widget-callbacks.h
+++ b/src/balsa-mime-widget-callbacks.h
@@ -30,8 +30,11 @@ 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);
-gint balsa_mime_widget_key_press_event(GtkWidget * widget, GdkEventKey * event,
-                                      BalsaMessage * bm);
+gboolean balsa_mime_widget_key_pressed(GtkEventControllerKey *controller,
+                                       guint                  keyval,
+                                       guint                  keycode,
+                                       GdkModifierType        state,
+                                       gpointer               user_data);
 gint balsa_mime_widget_limit_focus(GtkWidget * widget, GdkEventFocus * event, BalsaMessage * bm);
 gint balsa_mime_widget_unlimit_focus(GtkWidget * widget, GdkEventFocus * event, BalsaMessage * bm);
 
diff --git a/src/balsa-mime-widget-message.c b/src/balsa-mime-widget-message.c
index f4162e4c9..bfc8c2fc4 100644
--- a/src/balsa-mime-widget-message.c
+++ b/src/balsa-mime-widget-message.c
@@ -481,6 +481,7 @@ bm_header_widget_new(BalsaMessage * bm, GtkWidget * const * buttons)
 #endif                          /* GTK_INFO_BAR_WRAPPING_IS_BROKEN */
     GtkWidget *action_area;
     GtkWidget *widget;
+    GtkEventController *key_controller;
 
     grid = gtk_grid_new();
     gtk_grid_set_column_spacing(GTK_GRID(grid), 12);
@@ -490,8 +491,10 @@ bm_header_widget_new(BalsaMessage * bm, GtkWidget * const * buttons)
                     G_CALLBACK(balsa_mime_widget_limit_focus), bm);
     g_signal_connect(grid, "focus_out_event",
                     G_CALLBACK(balsa_mime_widget_unlimit_focus), bm);
-    g_signal_connect(grid, "key_press_event",
-                    G_CALLBACK(balsa_mime_widget_key_press_event), bm);
+
+    key_controller = gtk_event_controller_key_new(grid);
+    g_signal_connect(key_controller, "key-pressed",
+                    G_CALLBACK(balsa_mime_widget_key_pressed), bm);
 
 #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 71a616538..793f77e46 100644
--- a/src/balsa-mime-widget-text.c
+++ b/src/balsa-mime-widget-text.c
@@ -187,6 +187,7 @@ balsa_mime_widget_new_text(BalsaMessage * bm, LibBalsaMessageBody * mime_body,
     gboolean is_text_plain;
     GtkWidget *widget;
     GtkTextView *text_view;
+    GtkEventController *key_controller;
 
     g_return_val_if_fail(mime_body != NULL, NULL);
     g_return_val_if_fail(content_type != NULL, NULL);
@@ -258,9 +259,10 @@ balsa_mime_widget_new_text(BalsaMessage * bm, LibBalsaMessageBody * mime_body,
                         is_text_plain);
     g_free(ptr);
 
-    g_signal_connect(widget, "key_press_event",
-                     G_CALLBACK(balsa_mime_widget_key_press_event),
-                    (gpointer) bm);
+    key_controller = gtk_event_controller_key_new(libbalsa_html_get_view_widget(widget));
+    g_signal_connect(key_controller, "key-pressed",
+                    G_CALLBACK(balsa_mime_widget_key_pressed), bm);
+
     g_signal_connect(widget, "populate-popup",
                     G_CALLBACK(text_view_populate_popup), mwt);
     g_signal_connect_after(widget, "realize",
@@ -1157,6 +1159,7 @@ bm_widget_new_html(BalsaMessage * bm, LibBalsaMessageBody * mime_body)
     BalsaMimeWidget *mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
     GtkWidget *widget;
     GtkWidget *popup_menu;
+    GtkEventController *key_controller;
 
     widget =
         libbalsa_html_new(mime_body,
@@ -1166,9 +1169,9 @@ bm_widget_new_html(BalsaMessage * bm, LibBalsaMessageBody * mime_body)
 
     g_object_set_data(G_OBJECT(widget), "mime-body", mime_body);
 
-    g_signal_connect(libbalsa_html_get_view_widget(widget),
-                     "key_press_event",
-                     G_CALLBACK(balsa_mime_widget_key_press_event), bm);
+    key_controller = gtk_event_controller_key_new(libbalsa_html_get_view_widget(widget));
+    g_signal_connect(key_controller, "key-pressed",
+                    G_CALLBACK(balsa_mime_widget_key_pressed), bm);
 
     if ((popup_menu = libbalsa_html_popup_menu_widget(widget)) != NULL) {
         g_object_set_data(G_OBJECT(popup_menu), "balsa-message", bm);


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