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 {
