[balsa/wip/gtk4: 125/351] Various events have been removed



commit 3bb4f730232523562d8425a7e9df5820ffb36b94
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Thu Jan 18 08:44:37 2018 -0500

    Various events have been removed
    
    The "focus-in-event", "focus-out-event", and "delete-event" signals have
    been removed. For focus changes we connect to "notify::has-focus";
    GtkWidget::delete-event is replaced by GtkWindow::close-request.

 libbalsa/address-view.c           |   81 +++++++++++++++++++++---------------
 libbalsa/macosx-helpers.c         |   19 +++++----
 src/ab-main.c                     |    7 ---
 src/balsa-message.c               |   22 +++-------
 src/balsa-mime-widget-callbacks.c |   43 +++++++++----------
 src/balsa-mime-widget-callbacks.h |    5 +-
 src/balsa-mime-widget-message.c   |    6 +--
 src/balsa-mime-widget.c           |    8 +---
 src/main-window.c                 |   38 ++++++++---------
 src/sendmsg-window.c              |   20 +++++-----
 10 files changed, 118 insertions(+), 131 deletions(-)
---
diff --git a/libbalsa/address-view.c b/libbalsa/address-view.c
index 864c529..cc930ec 100644
--- a/libbalsa/address-view.c
+++ b/libbalsa/address-view.c
@@ -742,43 +742,56 @@ lbav_editing_done(GtkCellEditable * cell_editable,
 
 
 /*
- * Focus Out callback
+ * notify::has-focus callback
  * If only one completion matches, fill it into the entry
  */
-static gboolean
-lbav_focus_out_cb(GtkEntry * entry, GdkEventFocus * event,
-                  LibBalsaAddressView * address_view)
+static void
+lbav_notify_has_focus_cb(GtkEntry            *entry,
+                         GParamSpec          *pspec,
+                         LibBalsaAddressView *address_view)
 {
-    const gchar *the_entry = gtk_entry_get_text(entry);
-
-    if (the_entry && *the_entry) {
-        GList *match;
-
-        match = lbav_get_matching_addresses(address_view,
-                                            the_entry,
-                                            LIBBALSA_ADDRESS_VIEW_MATCH_ALL);
-
-        if (match) {
-            if (!match->next) {
-                gchar *the_addr =
-                    internet_address_to_string((InternetAddress *) match->
-                                               data, FALSE);
-
-                g_signal_handlers_block_by_func(entry,
-                                                lbav_entry_changed_cb,
-                                                address_view);
-                gtk_entry_set_text(entry, the_addr);
-                g_signal_handlers_unblock_by_func(entry,
-                                                  lbav_entry_changed_cb,
-                                                  address_view);
-                gtk_cell_editable_editing_done(GTK_CELL_EDITABLE(entry));
-                g_free(the_addr);
-            }
-            g_list_free_full(match, g_object_unref);
-        }
+    const gchar *the_entry;
+    GList *match;
+
+    if (gtk_widget_has_focus(GTK_WIDGET(entry))) {
+        /* Not a focus-out event */
+        return;
     }
 
-    return FALSE;
+    the_entry = gtk_entry_get_text(entry);
+
+    if (the_entry == NULL || the_entry[0] == '\0') {
+        /* No text to match */
+        return;
+    }
+
+    match = lbav_get_matching_addresses(address_view, the_entry,
+                                        LIBBALSA_ADDRESS_VIEW_MATCH_ALL);
+
+    if (match == NULL) {
+        /* No matching addresses */
+        return;
+    }
+
+    if (match->next == NULL) {
+        /* Only one match */
+        gchar *the_addr;
+
+        g_signal_handlers_block_by_func(entry,
+                                        lbav_entry_changed_cb,
+                                        address_view);
+
+        the_addr = internet_address_to_string(match->data, FALSE);
+        gtk_entry_set_text(entry, the_addr);
+        g_free(the_addr);
+
+        g_signal_handlers_unblock_by_func(entry,
+                                          lbav_entry_changed_cb,
+                                          address_view);
+        gtk_cell_editable_editing_done(GTK_CELL_EDITABLE(entry));
+    }
+
+    g_list_free_full(match, g_object_unref);
 }
 
 
@@ -820,8 +833,8 @@ lbav_row_editing_cb(GtkCellRenderer * renderer,
                      G_CALLBACK(lbav_insert_text_cb), address_view);
     g_signal_connect(editable, "editing-done",
                      G_CALLBACK(lbav_editing_done), address_view);
-    g_signal_connect_after(GTK_ENTRY(editable), "focus-out-event",
-                          G_CALLBACK(lbav_focus_out_cb), address_view);
+    g_signal_connect_after(editable, "notify::has-focus",
+                          G_CALLBACK(lbav_notify_has_focus_cb), address_view);
     gtk_entry_set_completion(GTK_ENTRY(editable), completion);
     g_object_unref(completion);
 
diff --git a/libbalsa/macosx-helpers.c b/libbalsa/macosx-helpers.c
index 8faa662..15cec6b 100644
--- a/libbalsa/macosx-helpers.c
+++ b/libbalsa/macosx-helpers.c
@@ -37,7 +37,7 @@ void
 libbalsa_macosx_menu(GtkWidget *window, GtkMenuShell *menubar)
 {
     g_object_set_data(G_OBJECT(window), "osx-menubar", menubar);
-    g_signal_connect(G_OBJECT(window), "focus-in-event",
+    g_signal_connect(window, "notify::has-focus",
                     G_CALLBACK(update_osx_menubar), window);
 }
 
@@ -46,26 +46,27 @@ void
 libbalsa_macosx_menu_for_parent(GtkWidget *window, GtkWindow *parent)
 {
     if(parent)
-       g_signal_connect(G_OBJECT(window), "focus-in-event",
+       g_signal_connect(window, "notify::has-focus",
                         G_CALLBACK(update_osx_menubar), parent);
     else
        g_message("called %s for widget %p with NULL parent", __func__, window);
 }
 
 
-/* window "focus-in-event" callback for a window
+/* window "notify::has-focus" callback for a window
  * get the "osx-menubar" from the user data object, and set it as OS X main menu
  */
-static gboolean
-update_osx_menubar(GtkWidget *widget,  GdkEventFocus *event, GtkWindow *window)
+static void
+update_osx_menubar(GtkWidget *widget, GParamSpec *pspec, GtkWindow *window)
 {
     GtkMenuShell *menubar;
-    
-    g_return_val_if_fail(window != NULL, FALSE);
+
+    g_return_if_fail(window != NULL);
+    if (!gtk_widget_has_focus(widget))
+        return;
     menubar = GTK_MENU_SHELL(g_object_get_data(G_OBJECT(window), "osx-menubar"));
-    g_return_val_if_fail(menubar != NULL, FALSE);
+    g_return_if_fail(menubar != NULL);
     ige_mac_menu_set_menu_bar(menubar);
-    return FALSE;
 }
 
 #endif  /* HAVE_MACOSX_DESKTOP */
diff --git a/src/ab-main.c b/src/ab-main.c
index 63b517a..ea4441c 100644
--- a/src/ab-main.c
+++ b/src/ab-main.c
@@ -992,11 +992,6 @@ bab_window_new(GtkApplication * application)
     return wnd;
 }
 
-static gboolean
-bab_delete_ok(void)
-{
-    return FALSE;
-}
 /* -------------------------- main --------------------------------- */
 static void
 ab_warning(const char *fmt, ...)
@@ -1112,8 +1107,6 @@ main(int argc, char *argv[])
 
     g_signal_connect(G_OBJECT(ab_window), "destroy",
                      G_CALLBACK(bab_cleanup), NULL);
-    g_signal_connect(G_OBJECT(ab_window), "delete-event",
-                     G_CALLBACK(bab_delete_ok), NULL);
     bab_set_intial_address_book(ab, ab_window);
 
     /* session management */
diff --git a/src/balsa-message.c b/src/balsa-message.c
index 33a9901..0b5c02c 100644
--- a/src/balsa-message.c
+++ b/src/balsa-message.c
@@ -282,11 +282,8 @@ bm_header_tl_buttons(BalsaMessage * bm)
     button = gtk_button_new_from_icon_name(balsa_icon_id(BALSA_PIXMAP_GPG_RECHECK));
     gtk_widget_set_tooltip_text(button,
                                _("Check cryptographic signature"));
-    g_signal_connect(G_OBJECT(button), "focus_in_event",
-                    G_CALLBACK(balsa_mime_widget_limit_focus),
-                    (gpointer) bm);
-    g_signal_connect(G_OBJECT(button), "focus_out_event",
-                    G_CALLBACK(balsa_mime_widget_unlimit_focus),
+    g_signal_connect(G_OBJECT(button), "notify::has-focus",
+                    G_CALLBACK(balsa_mime_widget_check_focus),
                     (gpointer) bm);
     gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
     g_signal_connect(button, "clicked",
@@ -297,11 +294,8 @@ bm_header_tl_buttons(BalsaMessage * bm)
     button = gtk_button_new_from_icon_name(balsa_icon_id(BALSA_PIXMAP_ATTACHMENT));
     gtk_widget_set_tooltip_text(button,
                                _("Select message part to display"));
-    g_signal_connect(G_OBJECT(button), "focus_in_event",
-                    G_CALLBACK(balsa_mime_widget_limit_focus),
-                    (gpointer) bm);
-    g_signal_connect(G_OBJECT(button), "focus_out_event",
-                    G_CALLBACK(balsa_mime_widget_unlimit_focus),
+    g_signal_connect(G_OBJECT(button), "notify::has-focus",
+                    G_CALLBACK(balsa_mime_widget_check_focus),
                     (gpointer) bm);
     gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
     g_signal_connect(button, "clicked",
@@ -716,12 +710,8 @@ balsa_message_init(BalsaMessage * bm)
     g_free(buttons);
 
     /* Widget to hold message */
-    g_signal_connect(G_OBJECT(bm->bm_widget->widget), "focus_in_event",
-                     G_CALLBACK(balsa_mime_widget_limit_focus),
-                     (gpointer) bm);
-    g_signal_connect(G_OBJECT(bm->bm_widget->widget), "focus_out_event",
-                     G_CALLBACK(balsa_mime_widget_unlimit_focus),
-                    (gpointer) bm);
+    g_signal_connect(bm->bm_widget->widget, "notify::has-focus",
+                     G_CALLBACK(balsa_mime_widget_check_focus), bm);
     gtk_container_add(GTK_CONTAINER(bm->scroll), bm->bm_widget->widget);
 
     /* structure view */
diff --git a/src/balsa-mime-widget-callbacks.c b/src/balsa-mime-widget-callbacks.c
index 0500b94..513f29a 100644
--- a/src/balsa-mime-widget-callbacks.c
+++ b/src/balsa-mime-widget-callbacks.c
@@ -265,32 +265,29 @@ balsa_mime_widget_key_press_event(GtkWidget * widget, GdkEvent * event,
 }
 
 
-gint
-balsa_mime_widget_limit_focus(GtkWidget * widget, GdkEventFocus * event, BalsaMessage * bm)
+void
+balsa_mime_widget_check_focus(GtkWidget * widget, GParamSpec * pspec, BalsaMessage * bm)
 {
-    /* Disable can_focus on other message parts so that TAB does not
-     * attempt to move the focus on them. */
-    GList *list = g_list_append(NULL, widget);
-
-    gtk_container_set_focus_chain(GTK_CONTAINER(bm->bm_widget->container), list);
-    g_list_free(list);
-    if (bm->focus_state == BALSA_MESSAGE_FOCUS_STATE_NO)
-        bm->focus_state = BALSA_MESSAGE_FOCUS_STATE_YES;
-    return FALSE;
-}
+    if (gtk_widget_has_focus(widget)) {
+        /* Disable can_focus on other message parts so that TAB does not
+         * attempt to move the focus on them. */
+        GList *list;
 
+        list = g_list_append(NULL, widget);
+        gtk_container_set_focus_chain(GTK_CONTAINER(bm->bm_widget->container), list);
+        g_list_free(list);
 
-gint
-balsa_mime_widget_unlimit_focus(GtkWidget * widget, GdkEventFocus * event, BalsaMessage * bm)
-{
-    gtk_container_unset_focus_chain(GTK_CONTAINER(bm->bm_widget->container));
-    if (bm->message) {
-        BalsaMessageFocusState focus_state = bm->focus_state;
-        if (focus_state == BALSA_MESSAGE_FOCUS_STATE_HOLD) {
-            balsa_message_grab_focus(bm);
+        if (bm->focus_state == BALSA_MESSAGE_FOCUS_STATE_NO)
             bm->focus_state = BALSA_MESSAGE_FOCUS_STATE_YES;
-        } else
-            bm->focus_state = BALSA_MESSAGE_FOCUS_STATE_NO;
+    } else {
+        gtk_container_unset_focus_chain(GTK_CONTAINER(bm->bm_widget->container));
+
+        if (bm->message != NULL) {
+            if (bm->focus_state == BALSA_MESSAGE_FOCUS_STATE_HOLD) {
+                balsa_message_grab_focus(bm);
+                bm->focus_state = BALSA_MESSAGE_FOCUS_STATE_YES;
+            } else
+                bm->focus_state = BALSA_MESSAGE_FOCUS_STATE_NO;
+        }
     }
-    return FALSE;
 }
diff --git a/src/balsa-mime-widget-callbacks.h b/src/balsa-mime-widget-callbacks.h
index a54ab5a..134f585 100644
--- a/src/balsa-mime-widget-callbacks.h
+++ b/src/balsa-mime-widget-callbacks.h
@@ -32,8 +32,9 @@ 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);
-gint balsa_mime_widget_limit_focus(GtkWidget * widget, GdkEventFocus * event, BalsaMessage * bm);
-gint balsa_mime_widget_unlimit_focus(GtkWidget * widget, GdkEventFocus * event, BalsaMessage * bm);
+void balsa_mime_widget_check_focus(GtkWidget    * widget,
+                                   GParamSpec   * pspec,
+                                   BalsaMessage * bm);
 
 
 G_END_DECLS
diff --git a/src/balsa-mime-widget-message.c b/src/balsa-mime-widget-message.c
index 42df289..b7f1004 100644
--- a/src/balsa-mime-widget-message.c
+++ b/src/balsa-mime-widget-message.c
@@ -466,10 +466,8 @@ bm_header_widget_new(BalsaMessage * bm, GtkWidget * const * buttons)
     gtk_grid_set_column_spacing(GTK_GRID(grid), 12);
     gtk_widget_show(grid);
 
-    g_signal_connect(grid, "focus_in_event",
-                    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, "notify::has-focus",
+                    G_CALLBACK(balsa_mime_widget_check_focus), bm);
     g_signal_connect(grid, "key_press_event",
                     G_CALLBACK(balsa_mime_widget_key_press_event), bm);
 
diff --git a/src/balsa-mime-widget.c b/src/balsa-mime-widget.c
index 07062d0..4762ac6 100644
--- a/src/balsa-mime-widget.c
+++ b/src/balsa-mime-widget.c
@@ -144,12 +144,8 @@ balsa_mime_widget_new(BalsaMessage * bm, LibBalsaMessageBody * mime_body, gpoint
 
     if (mw) {
        if (mw->widget) {
-           g_signal_connect(G_OBJECT(mw->widget), "focus_in_event",
-                            G_CALLBACK(balsa_mime_widget_limit_focus),
-                            (gpointer) bm);
-           g_signal_connect(G_OBJECT(mw->widget), "focus_out_event",
-                            G_CALLBACK(balsa_mime_widget_unlimit_focus),
-                            (gpointer) bm);
+           g_signal_connect(mw->widget, "notify::has-focus",
+                            G_CALLBACK(balsa_mime_widget_check_focus), bm);
 #ifdef HAVE_GPGME
            if (mime_body->sig_info &&
                g_ascii_strcasecmp("application/pgp-signature", content_type) &&
diff --git a/src/main-window.c b/src/main-window.c
index c01f3ee..a7e06a9 100644
--- a/src/main-window.c
+++ b/src/main-window.c
@@ -266,7 +266,7 @@ balsa_window_init(BalsaWindow * window)
 }
 
 static gboolean
-bw_delete_cb(GtkWidget* main_window)
+bw_close_request_cb(GtkWidget * main_window)
 {
     /* we cannot leave main window disabled because compose windows
      * (for example) could refuse to get deleted and we would be left
@@ -318,20 +318,20 @@ bw_pass_to_filter(BalsaWindow *bw, GdkEventKey *event, gpointer data)
     g_signal_emit_by_name(bw->sos_entry, "key_press_event", event, &res, data);
     return res;
 }
-static gboolean
-bw_enable_filter(GtkWidget *widget, GdkEventFocus *event, gpointer data)
-{
-    g_signal_connect(G_OBJECT(data), "key_press_event",
-                     G_CALLBACK(bw_pass_to_filter), NULL);
-    return FALSE;
-}
-static gboolean
-bw_disable_filter(GtkWidget *widget, GdkEventFocus *event, gpointer data)
+
+static void
+bw_check_filter(GtkWidget *widget, GParamSpec *pspec, gpointer data)
 {
-    g_signal_handlers_disconnect_by_func(G_OBJECT(data),
-                                         G_CALLBACK(bw_pass_to_filter),
-                                         NULL);
-    return FALSE;
+    BalsaWindow *window = data;
+
+    if (gtk_widget_has_focus(widget)) {
+        g_signal_connect(window, "key_press_event",
+                         G_CALLBACK(bw_pass_to_filter), NULL);
+    } else {
+        g_signal_handlers_disconnect_by_func(window,
+                                             G_CALLBACK(bw_pass_to_filter),
+                                             NULL);
+    }
 }
 
 static void
@@ -481,10 +481,8 @@ bw_create_index_widget(BalsaWindow *bw)
     bw->sos_entry = gtk_entry_new();
     /* gtk_label_set_mnemonic_widget(GTK_LABEL(bw->filter_choice),
        bw->sos_entry); */
-    g_signal_connect(G_OBJECT(bw->sos_entry), "focus_in_event",
-                     G_CALLBACK(bw_enable_filter), bw);
-    g_signal_connect(G_OBJECT(bw->sos_entry), "focus_out_event",
-                     G_CALLBACK(bw_disable_filter), bw);
+    g_signal_connect(G_OBJECT(bw->sos_entry), "notify::has-focus",
+                     G_CALLBACK(bw_check_filter), bw);
     gtk_widget_set_hexpand(bw->sos_entry, TRUE);
     gtk_box_pack_start(GTK_BOX(bw->sos_bar), bw->sos_entry);
     gtk_widget_show(bw->sos_entry);
@@ -2378,8 +2376,8 @@ balsa_window_new()
                      G_CALLBACK(bw_size_allocate_cb), NULL);
     g_signal_connect(window, "destroy",
                      G_CALLBACK (gtk_main_quit), NULL);
-    g_signal_connect(window, "delete-event",
-                     G_CALLBACK(bw_delete_cb), NULL);
+    g_signal_connect(window, "close-request",
+                     G_CALLBACK(bw_close_request_cb), NULL);
 
     /* Cancel new-mail notification when we get the focus. */
     g_signal_connect(window, "notify::is-active",
diff --git a/src/sendmsg-window.c b/src/sendmsg-window.c
index fe63b9f..d2bc05f 100644
--- a/src/sendmsg-window.c
+++ b/src/sendmsg-window.c
@@ -488,8 +488,8 @@ sw_delete_draft(BalsaSendmsg * bsmsg)
                                       LIBBALSA_MESSAGE_FLAG_DELETED, 0);
 }
 
-static gint
-delete_handler(BalsaSendmsg * bsmsg)
+static gboolean
+close_handler(BalsaSendmsg * bsmsg)
 {
     InternetAddressList *list;
     InternetAddress *ia;
@@ -548,12 +548,12 @@ delete_handler(BalsaSendmsg * bsmsg)
     return FALSE;
 }
 
-static gint
-delete_event_cb(GtkWidget * widget, GdkEvent * e, gpointer data)
+static gboolean
+close_request_cb(GtkWidget * widget, gpointer data)
 {
     BalsaSendmsg *bsmsg = data;
 
-    return delete_handler(bsmsg);
+    return close_handler(bsmsg);
 }
 
 static void
@@ -566,7 +566,7 @@ sw_close_activated(GSimpleAction * action,
     BALSA_DEBUG_MSG("close_window_cb: start\n");
     g_object_set_data(G_OBJECT(bsmsg->window), "destroying",
                       GINT_TO_POINTER(TRUE));
-    if(!delete_handler(bsmsg))
+    if(!close_handler(bsmsg))
        gtk_widget_destroy(bsmsg->window);
     BALSA_DEBUG_MSG("close_window_cb: end\n");
 }
@@ -6623,8 +6623,8 @@ sendmsg_window_new()
 
     bsmsg->draft_message = NULL;
     bsmsg->parent_message = NULL;
-    g_signal_connect(G_OBJECT(window), "delete-event",
-                    G_CALLBACK(delete_event_cb), bsmsg);
+    g_signal_connect(window, "close-request",
+                    G_CALLBACK(close_request_cb), bsmsg);
     g_signal_connect(G_OBJECT(window), "destroy",
                     G_CALLBACK(destroy_event_cb), bsmsg);
     g_signal_connect(G_OBJECT(window), "size_allocate",
@@ -6730,8 +6730,8 @@ sendmsg_window_new()
     bsmsg->update_config = TRUE;
 
     bsmsg->delete_sig_id =
-       g_signal_connect(G_OBJECT(balsa_app.main_window), "delete-event",
-                        G_CALLBACK(delete_event_cb), bsmsg);
+       g_signal_connect(G_OBJECT(balsa_app.main_window), "close-request",
+                        G_CALLBACK(close_request_cb), bsmsg);
 
     setup_headers_from_identity(bsmsg, bsmsg->ident);
 


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