[Libreoffice-commits] core.git: vcl/unx

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Tue Jun 1 07:44:00 UTC 2021


 vcl/unx/gtk3/gtkinst.cxx |   44 ++++++++++++++++++++++++++++++++------------
 1 file changed, 32 insertions(+), 12 deletions(-)

New commits:
commit 8cd23766ac55470664e3e08d549a5591c9d34789
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon May 31 20:11:31 2021 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue Jun 1 09:43:14 2021 +0200

    gtk4: restore focus handlers for ComboBox Entry
    
    Change-Id: I0a53a22efa3329cf248eae8784352b955e8cf0d4
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116498
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index 7e3ee02cbe23..eba28dd66b7c 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -16533,6 +16533,7 @@ private:
     GtkEventController* m_pKeyController;
     GtkEventController* m_pEntryKeyController;
     GtkEventController* m_pMenuKeyController;
+    GtkEventController* m_pEntryFocusController;
 //    std::unique_ptr<CustomRenderMenuButtonHelper> m_xCustomMenuButtonHelper;
     std::unique_ptr<vcl::Font> m_xFont;
     std::unique_ptr<comphelper::string::NaturalStringSorter> m_xSorter;
@@ -16557,8 +16558,8 @@ private:
     gulong m_nKeyPressEventSignalId;
     gulong m_nEntryInsertTextSignalId;
     gulong m_nEntryActivateSignalId;
-//    gulong m_nEntryFocusInSignalId;
-//    gulong m_nEntryFocusOutSignalId;
+    gulong m_nEntryFocusInSignalId;
+    gulong m_nEntryFocusOutSignalId;
     gulong m_nEntryKeyPressEventSignalId;
     guint m_nAutoCompleteIdleId;
 //    gint m_nNonCustomLineHeight;
@@ -16794,24 +16795,40 @@ private:
         }
     }
 
+#if GTK_CHECK_VERSION(4, 0, 0)
+    static void signalEntryFocusIn(GtkEventControllerFocus*, gpointer widget)
+    {
+        GtkInstanceComboBox* pThis = static_cast<GtkInstanceComboBox*>(widget);
+        pThis->signal_entry_focus_in();
+    }
+#else
     static gboolean signalEntryFocusIn(GtkWidget*, GdkEvent*, gpointer widget)
     {
         GtkInstanceComboBox* pThis = static_cast<GtkInstanceComboBox*>(widget);
         pThis->signal_entry_focus_in();
         return false;
     }
+#endif
 
     void signal_entry_focus_in()
     {
         signal_focus_in();
     }
 
+#if GTK_CHECK_VERSION(4, 0, 0)
+    static void signalEntryFocusOut(GtkEventControllerFocus*, gpointer widget)
+    {
+        GtkInstanceComboBox* pThis = static_cast<GtkInstanceComboBox*>(widget);
+        pThis->signal_entry_focus_out();
+    }
+#else
     static gboolean signalEntryFocusOut(GtkWidget*, GdkEvent*, gpointer widget)
     {
         GtkInstanceComboBox* pThis = static_cast<GtkInstanceComboBox*>(widget);
         pThis->signal_entry_focus_out();
         return false;
     }
+#endif
 
     void signal_entry_focus_out()
     {
@@ -17604,8 +17621,10 @@ public:
             m_bAutoComplete = true;
             m_nEntryInsertTextSignalId = g_signal_connect(m_pEditable, "insert-text", G_CALLBACK(signalEntryInsertText), this);
             m_nEntryActivateSignalId = g_signal_connect(m_pEntry, "activate", G_CALLBACK(signalEntryActivate), this);
-//            m_nEntryFocusInSignalId = g_signal_connect(m_pEntry, "focus-in-event", G_CALLBACK(signalEntryFocusIn), this);
-//            m_nEntryFocusOutSignalId = g_signal_connect(m_pEntry, "focus-out-event", G_CALLBACK(signalEntryFocusOut), this);
+            m_pEntryFocusController = GTK_EVENT_CONTROLLER(gtk_event_controller_focus_new());
+            m_nEntryFocusInSignalId = g_signal_connect(m_pEntry, "enter", G_CALLBACK(signalEntryFocusIn), this);
+            m_nEntryFocusOutSignalId = g_signal_connect(m_pEntry, "leave", G_CALLBACK(signalEntryFocusOut), this);
+            gtk_widget_add_controller(m_pEntry, m_pEntryFocusController);
             m_pEntryKeyController = GTK_EVENT_CONTROLLER(gtk_event_controller_key_new());
             m_nEntryKeyPressEventSignalId = g_signal_connect(m_pEntryKeyController, "key-pressed", G_CALLBACK(signalEntryKeyPress), this);
             gtk_widget_add_controller(m_pEntry, m_pEntryKeyController);
@@ -17616,8 +17635,9 @@ public:
         {
             m_nEntryInsertTextSignalId = 0;
             m_nEntryActivateSignalId = 0;
-//            m_nEntryFocusInSignalId = 0;
-//            m_nEntryFocusOutSignalId = 0;
+            m_pEntryFocusController = nullptr;
+            m_nEntryFocusInSignalId = 0;
+            m_nEntryFocusOutSignalId = 0;
             m_pEntryKeyController = nullptr;
             m_nEntryKeyPressEventSignalId = 0;
             m_pKeyController = GTK_EVENT_CONTROLLER(gtk_event_controller_key_new());
@@ -17953,8 +17973,8 @@ public:
         {
             g_signal_handler_block(m_pEditable, m_nEntryInsertTextSignalId);
             g_signal_handler_block(m_pEntry, m_nEntryActivateSignalId);
-//            g_signal_handler_block(m_pEntry, m_nEntryFocusInSignalId);
-//            g_signal_handler_block(m_pEntry, m_nEntryFocusOutSignalId);
+            g_signal_handler_block(m_pEntryFocusController, m_nEntryFocusInSignalId);
+            g_signal_handler_block(m_pEntryFocusController, m_nEntryFocusOutSignalId);
             g_signal_handler_block(m_pEntryKeyController, m_nEntryKeyPressEventSignalId);
         }
         else
@@ -17983,8 +18003,8 @@ public:
         if (m_pEditable)
         {
             g_signal_handler_unblock(m_pEntry, m_nEntryActivateSignalId);
-//            g_signal_handler_unblock(m_pEntry, m_nEntryFocusInSignalId);
-//            g_signal_handler_unblock(m_pEntry, m_nEntryFocusOutSignalId);
+            g_signal_handler_unblock(m_pEntryFocusController, m_nEntryFocusInSignalId);
+            g_signal_handler_unblock(m_pEntryFocusController, m_nEntryFocusOutSignalId);
             g_signal_handler_unblock(m_pEntryKeyController, m_nEntryKeyPressEventSignalId);
             g_signal_handler_unblock(m_pEditable, m_nEntryInsertTextSignalId);
         }
@@ -18219,8 +18239,8 @@ public:
         {
             g_signal_handler_disconnect(m_pEditable, m_nEntryInsertTextSignalId);
             g_signal_handler_disconnect(m_pEntry, m_nEntryActivateSignalId);
-//            g_signal_handler_disconnect(m_pEntry, m_nEntryFocusInSignalId);
-//            g_signal_handler_disconnect(m_pEntry, m_nEntryFocusOutSignalId);
+            g_signal_handler_disconnect(m_pEntryFocusController, m_nEntryFocusInSignalId);
+            g_signal_handler_disconnect(m_pEntryFocusController, m_nEntryFocusOutSignalId);
             g_signal_handler_disconnect(m_pEntryKeyController, m_nEntryKeyPressEventSignalId);
         }
         else


More information about the Libreoffice-commits mailing list