basctl/uiconfig/basicide/ui/colorscheme.ui |  110 ++++++++++++-----------------
 vcl/inc/qt5/QtInstanceRadioButton.hxx      |    3 
 vcl/qt5/QtInstanceBuilder.cxx              |    1 
 vcl/qt5/QtInstanceRadioButton.cxx          |    8 +-
 4 files changed, 60 insertions(+), 62 deletions(-)

New commits:
commit 85713bd7b3388267407898d0b95109f63d8d743d
Author:     Michael Weghorn <[email protected]>
AuthorDate: Thu Feb 19 15:16:48 2026 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Fri Feb 20 10:06:23 2026 +0100

    tdf#130857 qt weld: Support BasicIDE "Color Scheme" dialog
    
    This means that native Qt widgets are used for that dialog
    now when using the qt5 or qt6 VCL plugin and starting LO with
    environment variable SAL_VCL_QT_USE_WELDED_WIDGETS=1 set.
    
    The dialog can be triggered like this:
    
    * start Writer
    * "Tools" -> "Macros" -> "Edit Macros..."
    * "View" -> "Color Scheme..."
    
    Change-Id: I04df4443229fa762a987cffa42725f45403898f0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199730
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/vcl/qt5/QtInstanceBuilder.cxx b/vcl/qt5/QtInstanceBuilder.cxx
index 244d4389a27a..3940455dfaf2 100644
--- a/vcl/qt5/QtInstanceBuilder.cxx
+++ b/vcl/qt5/QtInstanceBuilder.cxx
@@ -134,6 +134,7 @@ constexpr auto SUPPORTED_UI_FILES = 
frozen::make_unordered_set<std::u16string_vi
     u"filter/ui/xmlfiltersettings.ui",
     u"filter/ui/xsltfilterdialog.ui",
     u"fps/ui/foldernamedialog.ui",
+    u"modules/BasicIDE/ui/colorscheme.ui",
     u"modules/BasicIDE/ui/exportdialog.ui",
     u"modules/BasicIDE/ui/gotolinedialog.ui",
     u"modules/BasicIDE/ui/newlibdialog.ui",
commit f6249013216f2d6ce71a6792b0713f9504247ec2
Author:     Michael Weghorn <[email protected]>
AuthorDate: Thu Feb 19 15:17:58 2026 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Fri Feb 20 10:06:16 2026 +0100

    tdf#130857 qt weld: Hold SolarMutex when calling RadioButton toggle hdl
    
    This e.g. avoids a corresponding assert from getting
    triggered in the BasicIDE "Color Scheme" dialog
    with upcoming commit
    
        Change-Id: I04df4443229fa762a987cffa42725f45403898f0
        Author: Michael Weghorn <[email protected]>
        Date:   Thu Feb 19 15:16:48 2026 +0100
    
            tdf#130857 qt weld: Support BasicIDE "Color Scheme" dialog
    
    in place when doing this:
    
    * start Writer
    * "Tools" -> "Macros" -> "Edit Macros..."
    * "View" -> "Color Scheme..."
    * enable the "Choose Color Scheme" radio button
    
    Backtrace of the assert otherwise:
    
        1 __pthread_kill_implementation pthread_kill.c 44 0x7f92ee8a13dc
        2 __pthread_kill_internal pthread_kill.c 89 0x7f92ee8a149f
        3 __GI_raise raise.c 26 0x7f92ee84a942
        4 __GI_abort abort.c 77 0x7f92ee8324ac
        5 __assert_fail_base assert.c 118 0x7f92ee832420
        6 ImplDbgTestSolarMutex dbggui.cxx 36 0x7f92e543239c
        7 DbgTestSolarMutex debug.cxx 54 0x7f92ecb253c4
        8 OutputDevice::InitFont font.cxx 646 0x7f92e50605ae
        9 OutputDevice::ImplLayout text.cxx 1141 0x7f92e50716e8
        10 OutputDevice::GetPartialTextArray text.cxx 795 0x7f92e50733e7
        11 OutputDevice::GetTextArray text.cxx 764 0x7f92e50724de
        12 OutputDevice::GetTextWidthDouble text.cxx 636 0x7f92e5072451
        13 OutputDevice::GetTextWidth text.cxx 628 0x7f92e50723e9
        14 TextEngine::SetFont texteng.cxx 196 0x7f92e4feddab
        15 basctl::EditorWindow::ChangeFontColor baside2b.cxx 1305 
0x7f92a61d6c99
        16 basctl::ModulWindowLayout::SyntaxColors::ApplyColorScheme 
baside2.cxx 1645 0x7f92a6211d78
        17 basctl::ModulWindowLayout::ApplyColorSchemeToCurrentWindow 
baside2.cxx 1596 0x7f92a6212fb4
        18 basctl::ColorSchemeDialog::OptionHdl ColorSchemeDialog.cxx 127 
0x7f92a6320901
        19 basctl::ColorSchemeDialog::LinkStubOptionHdl ColorSchemeDialog.cxx 
110 0x7f92a632063d
        20 Link<weld::Toggleable&, void>::Call link.hxx 105 0x7f92dc89cc41
        21 weld::Toggleable::signal_toggled weld.hxx 605 0x7f92dc89c788
        22 QtInstanceRadioButton::QtInstanceRadioButton(QRadioButton 
*)::$_0::operator()() const QtInstanceRadioButton.cxx 20 0x7f92dc90723f
        23 QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, 
QtPrivate::List<>, void, 
QtInstanceRadioButton::QtInstanceRadioButton(QRadioButton 
*)::$_0>::call(QtInstanceRadioButton::QtInstanceRadioButton(QRadioButton 
*)::$_0&, void * *)::{lambda()#1}::operator()() const qobjectdefs_impl.h 116 
0x7f92dc907218
        24 QtPrivate::FunctorCallBase::call_internal<void, 
QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, 
void, QtInstanceRadioButton::QtInstanceRadioButton(QRadioButton 
*)::$_0>::call(QtInstanceRadioButton::QtInstanceRadioButton(QRadioButton 
*)::$_0&, void * *)::{lambda()#1}>(void * *, 
QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, 
void, QtInstanceRadioButton::QtInstanceRadioButton(QRadioButton 
*)::$_0>::call(QtInstanceRadioButton::QtInstanceRadioButton(QRadioButton 
*)::$_0&, void * *)::{lambda()#1}&&) qobjectdefs_impl.h 65 0x7f92dc9071f9
        25 QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, 
QtPrivate::List<>, void, 
QtInstanceRadioButton::QtInstanceRadioButton(QRadioButton 
*)::$_0>::call(QtInstanceRadioButton::QtInstanceRadioButton(QRadioButton 
*)::$_0&, void * *) qobjectdefs_impl.h 115 0x7f92dc9071c2
        26 
QtPrivate::FunctorCallable<QtInstanceRadioButton::QtInstanceRadioButton(QRadioButton
 *)::$_0>::call<QtPrivate::List<>, 
void>(QtInstanceRadioButton::QtInstanceRadioButton(QRadioButton *)::$_0&, void 
*, void * *) qobjectdefs_impl.h 337 0x7f92dc907171
        27 
QtPrivate::QCallableObject<QtInstanceRadioButton::QtInstanceRadioButton(QRadioButton
 *)::$_0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, 
QObject *, void * *, bool *) qobjectdefs_impl.h 547 0x7f92dc907118
        28 QtPrivate::QSlotObjectBase::call qobjectdefs_impl.h 461 
0x7f92db6ec5f2
        [...]
    
    Change-Id: Ic1c7eaed6c7ee0e2658b29e64199493aac79d42e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199729
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/vcl/inc/qt5/QtInstanceRadioButton.hxx 
b/vcl/inc/qt5/QtInstanceRadioButton.hxx
index 334dd8a2c588..6373a9dfcdc1 100644
--- a/vcl/inc/qt5/QtInstanceRadioButton.hxx
+++ b/vcl/inc/qt5/QtInstanceRadioButton.hxx
@@ -31,6 +31,9 @@ public:
     virtual void set_label(const OUString& rText) override;
     virtual OUString get_label() const override;
     virtual void set_label_wrap(bool bWrap) override;
+
+private Q_SLOTS:
+    void handleToggled();
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/vcl/qt5/QtInstanceRadioButton.cxx 
b/vcl/qt5/QtInstanceRadioButton.cxx
index 8f9de312c6d4..f2e3878bab64 100644
--- a/vcl/qt5/QtInstanceRadioButton.cxx
+++ b/vcl/qt5/QtInstanceRadioButton.cxx
@@ -17,7 +17,7 @@ QtInstanceRadioButton::QtInstanceRadioButton(QRadioButton* 
pRadioButton)
     , m_pRadioButton(pRadioButton)
 {
     assert(m_pRadioButton);
-    connect(m_pRadioButton, &QRadioButton::toggled, this, [&] { 
signal_toggled(); });
+    connect(m_pRadioButton, &QRadioButton::toggled, this, 
&QtInstanceRadioButton::handleToggled);
 }
 
 void QtInstanceRadioButton::do_set_active(bool bActive)
@@ -55,4 +55,10 @@ void 
QtInstanceRadioButton::QtInstanceRadioButton::set_label_wrap(bool /*bWrap*/
     SAL_WARN("vcl.qt", "Qt doesn't support word wrap in radio buttons (see 
QTBUG-5370)");
 }
 
+void QtInstanceRadioButton::handleToggled()
+{
+    SolarMutexGuard g;
+    signal_toggled();
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
commit 7b2605df06a7a04f34a656614d1d6ee6a56a1b51
Author:     Michael Weghorn <[email protected]>
AuthorDate: Thu Feb 19 15:06:57 2026 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Fri Feb 20 10:06:09 2026 +0100

    tdf#130857 basctl: Stop using deprecated GtkAlignment
    
    GtkAlignment was deprecated in GTK 3.14 [1].
    
    Drop it. Instead, set the margins directly on the child
    widget.
    
    See also
    
        commit 3a4b929aeba8d5a9849d468c3d8dc314923c6104
        Author: Michael Weghorn <[email protected]>
        Date:   Tue Feb 17 12:45:56 2026 +0100
    
            tdf#130857 sw: Drop deprecated GtkAlignment in indexentry.ui
    
    for some more background.
    
    (`git show --ignore-space-change` can be used to see the
    "actual changes" more easily.)
    
    [1] https://docs.gtk.org/gtk3/class.Alignment.html
    
    Change-Id: I7aeb5230273287572e75268b97acb0a5c1baece2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199728
    Reviewed-by: Michael Weghorn <[email protected]>
    Tested-by: Jenkins

diff --git a/basctl/uiconfig/basicide/ui/colorscheme.ui 
b/basctl/uiconfig/basicide/ui/colorscheme.ui
index 57244abe9e69..f473468881b9 100644
--- a/basctl/uiconfig/basicide/ui/colorscheme.ui
+++ b/basctl/uiconfig/basicide/ui/colorscheme.ui
@@ -81,46 +81,40 @@
             <property name="label-xalign">0</property>
             <property name="shadow-type">none</property>
             <child>
-              <object class="GtkAlignment">
+              <object class="GtkBox">
                 <property name="visible">True</property>
                 <property name="can-focus">False</property>
-                <property name="left-padding">12</property>
+                <property name="margin-start">12</property>
+                <property name="orientation">vertical</property>
                 <child>
-                  <object class="GtkBox">
+                  <object class="GtkRadioButton" id="opt_appcolors">
+                    <property name="label" translatable="yes" 
context="colorscheme|opt_appcolors">Use Application Colors</property>
                     <property name="visible">True</property>
-                    <property name="can-focus">False</property>
-                    <property name="orientation">vertical</property>
-                    <child>
-                      <object class="GtkRadioButton" id="opt_appcolors">
-                        <property name="label" translatable="yes" 
context="colorscheme|opt_appcolors">Use Application Colors</property>
-                        <property name="visible">True</property>
-                        <property name="can-focus">True</property>
-                        <property name="receives-default">False</property>
-                        <property name="active">True</property>
-                        <property name="draw-indicator">True</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkRadioButton" id="opt_usescheme">
-                        <property name="label" translatable="yes" 
context="colorscheme|opt_usescheme">Choose Color Scheme</property>
-                        <property name="visible">True</property>
-                        <property name="can-focus">True</property>
-                        <property name="receives-default">False</property>
-                        <property name="draw-indicator">True</property>
-                        <property name="group">opt_appcolors</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">False</property>
+                    <property name="active">True</property>
+                    <property name="draw-indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkRadioButton" id="opt_usescheme">
+                    <property name="label" translatable="yes" 
context="colorscheme|opt_usescheme">Choose Color Scheme</property>
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">False</property>
+                    <property name="draw-indicator">True</property>
+                    <property name="group">opt_appcolors</property>
                   </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
                 </child>
               </object>
             </child>
@@ -149,40 +143,34 @@
             <property name="label-xalign">0</property>
             <property name="shadow-type">none</property>
             <child>
-              <object class="GtkAlignment">
+              <object class="GtkScrolledWindow">
                 <property name="visible">True</property>
-                <property name="can-focus">False</property>
-                <property name="left-padding">12</property>
+                <property name="can-focus">True</property>
+                <property name="margin-start">12</property>
+                <property name="hexpand">True</property>
+                <property name="vexpand">True</property>
+                <property name="shadow-type">in</property>
                 <child>
-                  <object class="GtkScrolledWindow">
+                  <object class="GtkTreeView" id="schemelist">
                     <property name="visible">True</property>
                     <property name="can-focus">True</property>
                     <property name="hexpand">True</property>
                     <property name="vexpand">True</property>
-                    <property name="shadow-type">in</property>
+                    <property name="model">liststore1</property>
+                    <property name="headers-visible">False</property>
+                    <property name="headers-clickable">False</property>
+                    <property name="search-column">0</property>
+                    <property name="show-expanders">False</property>
+                    <child internal-child="selection">
+                      <object class="GtkTreeSelection"/>
+                    </child>
                     <child>
-                      <object class="GtkTreeView" id="schemelist">
-                        <property name="visible">True</property>
-                        <property name="can-focus">True</property>
-                        <property name="hexpand">True</property>
-                        <property name="vexpand">True</property>
-                        <property name="model">liststore1</property>
-                        <property name="headers-visible">False</property>
-                        <property name="headers-clickable">False</property>
-                        <property name="search-column">0</property>
-                        <property name="show-expanders">False</property>
-                        <child internal-child="selection">
-                          <object class="GtkTreeSelection"/>
-                        </child>
+                      <object class="GtkTreeViewColumn">
                         <child>
-                          <object class="GtkTreeViewColumn">
-                            <child>
-                              <object class="GtkCellRendererText" 
id="rendertext"/>
-                              <attributes>
-                                <attribute name="text">0</attribute>
-                              </attributes>
-                            </child>
-                          </object>
+                          <object class="GtkCellRendererText" id="rendertext"/>
+                          <attributes>
+                            <attribute name="text">0</attribute>
+                          </attributes>
                         </child>
                       </object>
                     </child>

Reply via email to