This is an automated email from the ASF dual-hosted git repository.

jimjag pushed a commit to branch AOO50X
in repository https://gitbox.apache.org/repos/asf/openoffice.git

commit 4a3f001258b453021f8c85ca2b08fcb05159ff68
Author: Pedro Giffuni <[email protected]>
AuthorDate: Sun Sep 20 11:33:43 2026 -0500

    vcl: GTK2 native widget rendering cleanup
    
    Reduce GTK2 implementation-detail dependencies in native widget rendering.
    
    - Replace direct GTK_WIDGET_SET_FLAGS / UNSET_FLAGS flag twiddling with
      public GTK2 APIs (gtk_widget_set_can_focus, gtk_widget_set_can_default,
      gtk_widget_set_sensitive) in GtkSalFrame::Init, NWSetWidgetState, and
      toolbar/toggle button rendering. GTK 2.18+ is the minimum required 
version.
    - Remove redundant sensitivity flag manipulation in toolbar, grip,
      menubar, and popup menu rendering.
    - Consolidate repetitive widget style realization and default flag capture
      into NWInitWidget().
    - Use sal_IntPtr for gWidgetDefaultFlags hash_map key for 64-bit 
portability.
    - Clean up gWidgetDefaultFlags and gWidgetData in GtkData::deInitNWF().
    
    No functional change intended.
    
    (cherry picked from commit 72dd4668a72a87a341b93e67bdad785ccd040e26)
---
 main/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx | 75 +++++++++------------------
 main/vcl/unx/gtk/window/gtkframe.cxx          |  5 +-
 2 files changed, 27 insertions(+), 53 deletions(-)

diff --git a/main/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx 
b/main/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
index bf73af90dd..bbd90a254b 100644
--- a/main/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
+++ b/main/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
@@ -144,7 +144,7 @@ struct NWFWidgetData
 // Keep a hash table of Widgets->default flags so that we can
 // easily and quickly reset each to a default state before using
 // them
-static std::hash_map<long, guint>      gWidgetDefaultFlags;
+static std::hash_map<sal_IntPtr, guint>        gWidgetDefaultFlags;
 static std::vector<NWFWidgetData>   gWidgetData;
 
 static const GtkBorder aDefDefBorder           = { 1, 1, 1, 1 };
@@ -463,6 +463,8 @@ void GtkData::deInitNWF( void )
         delete gWidgetData[i].gNWPixmapCacheList;
         gWidgetData[i].gNWPixmapCacheList = NULL;
     }
+    gWidgetDefaultFlags.clear();
+    gWidgetData.clear();
 }
 
 
@@ -2495,10 +2497,6 @@ sal_Bool GtkSalGraphics::NWPaintGTKToolbar(
     {
            NWSetWidgetState( gWidgetData[m_nScreen].gToolbarWidget, nState, 
stateType );
 
-        GTK_WIDGET_UNSET_FLAGS( gWidgetData[m_nScreen].gToolbarWidget, 
GTK_SENSITIVE );
-        if ( nState & CTRL_STATE_ENABLED )
-            GTK_WIDGET_SET_FLAGS( gWidgetData[m_nScreen].gToolbarWidget, 
GTK_SENSITIVE );
-
         if( nPart == PART_DRAW_BACKGROUND_HORZ )
             gtk_toolbar_set_orientation( 
GTK_TOOLBAR(gWidgetData[m_nScreen].gToolbarWidget), GTK_ORIENTATION_HORIZONTAL 
);
         else
@@ -2509,10 +2507,6 @@ sal_Bool GtkSalGraphics::NWPaintGTKToolbar(
     {
            NWSetWidgetState( gWidgetData[m_nScreen].gHandleBoxWidget, nState, 
stateType );
 
-        GTK_WIDGET_UNSET_FLAGS( gWidgetData[m_nScreen].gHandleBoxWidget, 
GTK_SENSITIVE );
-        if ( nState & CTRL_STATE_ENABLED )
-            GTK_WIDGET_SET_FLAGS( gWidgetData[m_nScreen].gHandleBoxWidget, 
GTK_SENSITIVE );
-
         gtk_handle_box_set_shadow_type( 
GTK_HANDLE_BOX(gWidgetData[m_nScreen].gHandleBoxWidget), shadowType );
 
         // evaluate grip rect
@@ -2659,10 +2653,6 @@ sal_Bool GtkSalGraphics::NWPaintGTKMenubar(
         {
             NWSetWidgetState( gWidgetData[m_nScreen].gMenubarWidget, nState, 
stateType );
 
-            GTK_WIDGET_UNSET_FLAGS( gWidgetData[m_nScreen].gMenubarWidget, 
GTK_SENSITIVE );
-            if ( nState & CTRL_STATE_ENABLED )
-                GTK_WIDGET_SET_FLAGS( gWidgetData[m_nScreen].gMenubarWidget, 
GTK_SENSITIVE );
-
             // #118704# for translucent menubar styles paint background first
             gtk_paint_flat_box( gWidgetData[m_nScreen].gMenubarWidget->style,
                                 gdkDrawable,
@@ -2737,10 +2727,6 @@ sal_Bool GtkSalGraphics::NWPaintGTKPopupMenu(
 
     NWSetWidgetState( gWidgetData[m_nScreen].gMenuWidget, nState, stateType );
 
-    GTK_WIDGET_UNSET_FLAGS( gWidgetData[m_nScreen].gMenuWidget, GTK_SENSITIVE 
);
-    if ( nState & CTRL_STATE_ENABLED )
-        GTK_WIDGET_SET_FLAGS( gWidgetData[m_nScreen].gMenuWidget, 
GTK_SENSITIVE );
-
     for( clipList::const_iterator it = rClipList.begin(); it != 
rClipList.end(); ++it )
     {
         clipRect.x = it->Left();
@@ -3739,7 +3725,7 @@ static void NWSetWidgetState( GtkWidget* widget, 
ControlState nState, GtkStateTy
        GTK_WIDGET_UNSET_FLAGS( widget, GTK_HAS_DEFAULT );
        GTK_WIDGET_UNSET_FLAGS( widget, GTK_HAS_FOCUS );
        GTK_WIDGET_UNSET_FLAGS( widget, GTK_SENSITIVE );
-       GTK_WIDGET_SET_FLAGS( widget, gWidgetDefaultFlags[(long)widget] );
+       GTK_WIDGET_SET_FLAGS( widget, gWidgetDefaultFlags[(sal_IntPtr)widget] );
 
        if ( nState & CTRL_STATE_DEFAULT )
                GTK_WIDGET_SET_FLAGS( widget, GTK_HAS_DEFAULT );
@@ -3756,6 +3742,15 @@ static void NWSetWidgetState( GtkWidget* widget, 
ControlState nState, GtkStateTy
 
 //-------------------------------------
 
+static void NWInitWidget( GtkWidget* widget )
+{
+       gtk_widget_realize( widget );
+       gtk_widget_ensure_style( widget );
+
+       // Store widget's default flags
+       gWidgetDefaultFlags[ (sal_IntPtr)widget ] = GTK_WIDGET_FLAGS( widget );
+}
+
 static void NWAddWidgetToCacheWindow( GtkWidget* widget, int nScreen )
 {
     NWFWidgetData& rData = gWidgetData[nScreen];
@@ -3776,11 +3771,7 @@ static void NWAddWidgetToCacheWindow( GtkWidget* widget, 
int nScreen )
        }
 
        gtk_container_add( GTK_CONTAINER(rData.gDumbContainer), widget );
-       gtk_widget_realize( widget );
-       gtk_widget_ensure_style( widget );
-
-       // Store widget's default flags
-       gWidgetDefaultFlags[ (long)widget ] = GTK_WIDGET_FLAGS( widget );
+       NWInitWidget( widget );
 }
 
 //-------------------------------------
@@ -3952,13 +3943,13 @@ static void NWEnsureGTKToolbar( int nScreen )
                               (char *)NULL);
 
         gtk_button_set_relief( 
GTK_BUTTON(gWidgetData[nScreen].gToolbarButtonWidget), aRelief );
-        GTK_WIDGET_UNSET_FLAGS( gWidgetData[nScreen].gToolbarButtonWidget, 
GTK_CAN_FOCUS );
-        GTK_WIDGET_UNSET_FLAGS( gWidgetData[nScreen].gToolbarButtonWidget, 
GTK_CAN_DEFAULT );
+        gtk_widget_set_can_focus( gWidgetData[nScreen].gToolbarButtonWidget, 
FALSE );
+        gtk_widget_set_can_default( gWidgetData[nScreen].gToolbarButtonWidget, 
FALSE );
         NWAddWidgetToCacheWindow( gWidgetData[nScreen].gToolbarButtonWidget, 
nScreen );
 
         gtk_button_set_relief( 
GTK_BUTTON(gWidgetData[nScreen].gToolbarToggleWidget), aRelief );
-        GTK_WIDGET_UNSET_FLAGS( gWidgetData[nScreen].gToolbarToggleWidget, 
GTK_CAN_FOCUS );
-        GTK_WIDGET_UNSET_FLAGS( gWidgetData[nScreen].gToolbarToggleWidget, 
GTK_CAN_DEFAULT );
+        gtk_widget_set_can_focus( gWidgetData[nScreen].gToolbarToggleWidget, 
FALSE );
+        gtk_widget_set_can_default( gWidgetData[nScreen].gToolbarToggleWidget, 
FALSE );
         NWAddWidgetToCacheWindow( gWidgetData[nScreen].gToolbarToggleWidget, 
nScreen );
     }
     if( ! gWidgetData[nScreen].gHandleBoxWidget )
@@ -3982,10 +3973,7 @@ static void NWEnsureGTKMenubar( int nScreen )
         gtk_widget_show( gWidgetData[nScreen].gMenubarWidget );
 
         // do what NWAddWidgetToCacheWindow does except adding to def container
-        gtk_widget_realize( gWidgetData[nScreen].gMenuItemMenubarWidget );
-        gtk_widget_ensure_style( gWidgetData[nScreen].gMenuItemMenubarWidget );
-
-        gWidgetDefaultFlags[ (long)gWidgetData[nScreen].gMenuItemMenubarWidget 
] = GTK_WIDGET_FLAGS( gWidgetData[nScreen].gMenuItemMenubarWidget );
+        NWInitWidget( gWidgetData[nScreen].gMenuItemMenubarWidget );
     }
 }
 
@@ -4005,26 +3993,11 @@ static void NWEnsureGTKMenu( int nScreen )
         gtk_menu_shell_append( GTK_MENU_SHELL( 
gWidgetData[nScreen].gMenuWidget ), gWidgetData[nScreen].gImageMenuItem );
 
         // do what NWAddWidgetToCacheWindow does except adding to def container
-        gtk_widget_realize( gWidgetData[nScreen].gMenuWidget );
-        gtk_widget_ensure_style( gWidgetData[nScreen].gMenuWidget );
-
-        gtk_widget_realize( gWidgetData[nScreen].gMenuItemMenuWidget );
-        gtk_widget_ensure_style( gWidgetData[nScreen].gMenuItemMenuWidget );
-
-        gtk_widget_realize( gWidgetData[nScreen].gMenuItemCheckMenuWidget );
-        gtk_widget_ensure_style( gWidgetData[nScreen].gMenuItemCheckMenuWidget 
);
-
-        gtk_widget_realize( gWidgetData[nScreen].gMenuItemRadioMenuWidget );
-        gtk_widget_ensure_style( gWidgetData[nScreen].gMenuItemRadioMenuWidget 
);
-
-        gtk_widget_realize( gWidgetData[nScreen].gImageMenuItem );
-        gtk_widget_ensure_style( gWidgetData[nScreen].gImageMenuItem );
-
-        gWidgetDefaultFlags[ (long)gWidgetData[nScreen].gMenuWidget ] = 
GTK_WIDGET_FLAGS( gWidgetData[nScreen].gMenuWidget );
-        gWidgetDefaultFlags[ (long)gWidgetData[nScreen].gMenuItemMenuWidget ] 
= GTK_WIDGET_FLAGS( gWidgetData[nScreen].gMenuItemMenuWidget );
-        gWidgetDefaultFlags[ 
(long)gWidgetData[nScreen].gMenuItemCheckMenuWidget ] = GTK_WIDGET_FLAGS( 
gWidgetData[nScreen].gMenuItemCheckMenuWidget );
-        gWidgetDefaultFlags[ 
(long)gWidgetData[nScreen].gMenuItemRadioMenuWidget ] = GTK_WIDGET_FLAGS( 
gWidgetData[nScreen].gMenuItemRadioMenuWidget );
-        gWidgetDefaultFlags[ (long)gWidgetData[nScreen].gImageMenuItem ] = 
GTK_WIDGET_FLAGS( gWidgetData[nScreen].gImageMenuItem );
+        NWInitWidget( gWidgetData[nScreen].gMenuWidget );
+        NWInitWidget( gWidgetData[nScreen].gMenuItemMenuWidget );
+        NWInitWidget( gWidgetData[nScreen].gMenuItemCheckMenuWidget );
+        NWInitWidget( gWidgetData[nScreen].gMenuItemRadioMenuWidget );
+        NWInitWidget( gWidgetData[nScreen].gImageMenuItem );
     }
 }
 
diff --git a/main/vcl/unx/gtk/window/gtkframe.cxx 
b/main/vcl/unx/gtk/window/gtkframe.cxx
index e622639eab..67cb16d5f3 100644
--- a/main/vcl/unx/gtk/window/gtkframe.cxx
+++ b/main/vcl/unx/gtk/window/gtkframe.cxx
@@ -934,8 +934,9 @@ void GtkSalFrame::Init( SystemParentData* pSysData )
     {
         m_pWindow = gtk_plug_new( pSysData->aWindow );
         m_bWindowIsGtkPlug = true;
-        GTK_WIDGET_SET_FLAGS( m_pWindow, GTK_CAN_FOCUS | GTK_SENSITIVE | 
GTK_CAN_DEFAULT );
-        gtk_widget_set_sensitive( m_pWindow, true );
+        gtk_widget_set_can_focus( m_pWindow, TRUE );
+        gtk_widget_set_can_default( m_pWindow, TRUE );
+        gtk_widget_set_sensitive( m_pWindow, TRUE );
     }
     else
     {

Reply via email to