From cf22d5b99b67890bb9242766ff132e9b1fc822bc Mon Sep 17 00:00:00 2001
From: Jeff Young <jeff@rokeby.ie>
Date: Sun, 20 Aug 2023 17:08:51 +0100
Subject: [PATCH] Preferences setting for force-show-fields-when-fp-selected.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/15215
---
 common/widgets/gal_options_panel.cpp          |   2 +-
 pcbnew/dialogs/panel_display_options.cpp      |   2 +
 pcbnew/dialogs/panel_display_options_base.cpp |  70 ++-
 pcbnew/dialogs/panel_display_options_base.fbp | 428 ++++++++++++++++--
 pcbnew/dialogs/panel_display_options_base.h   |  17 +-
 pcbnew/pcb_base_frame.cpp                     |  13 +-
 pcbnew/pcb_draw_panel_gal.cpp                 |   7 +-
 pcbnew/pcb_edit_frame.cpp                     |   6 -
 pcbnew/pcb_field.cpp                          |  10 +
 pcbnew/pcb_painter.cpp                        |   2 +
 pcbnew/pcb_painter.h                          |   1 +
 pcbnew/pcb_view.cpp                           |   4 +-
 pcbnew/pcbnew_settings.cpp                    |   3 +
 pcbnew/pcbnew_settings.h                      |   1 +
 14 files changed, 483 insertions(+), 83 deletions(-)

diff --git a/common/widgets/gal_options_panel.cpp b/common/widgets/gal_options_panel.cpp
index a5e3e0ceae..4e3e3e75e2 100644
--- a/common/widgets/gal_options_panel.cpp
+++ b/common/widgets/gal_options_panel.cpp
@@ -157,7 +157,7 @@ GAL_OPTIONS_PANEL::GAL_OPTIONS_PANEL( wxWindow* aParent, APP_SETTINGS_BASE* aApp
         l_gridMinSpacingUnits->Wrap( -1 );
         sGridSettingsGrid->Add( l_gridMinSpacingUnits, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT | wxTOP, 5 );
 
-        l_gridSnapOptions = new wxStaticText( this, wxID_ANY, _( "Snap to Grid:" ) );
+        l_gridSnapOptions = new wxStaticText( this, wxID_ANY, _( "Snap to grid:" ) );
         l_gridSnapOptions->Wrap( -1 );
         sGridSettingsGrid->Add( l_gridSnapOptions, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxTOP, 5 );
 
diff --git a/pcbnew/dialogs/panel_display_options.cpp b/pcbnew/dialogs/panel_display_options.cpp
index 9f19abaf82..e9225b6bb5 100644
--- a/pcbnew/dialogs/panel_display_options.cpp
+++ b/pcbnew/dialogs/panel_display_options.cpp
@@ -55,6 +55,7 @@ void PANEL_DISPLAY_OPTIONS::loadPCBSettings( PCBNEW_SETTINGS* aCfg )
     m_OptDisplayPadClearence->SetValue( aCfg->m_Display.m_PadClearance );
     m_OptDisplayPadNumber->SetValue( aCfg->m_ViewersDisplay.m_DisplayPadNumbers );
     m_ShowNetNamesOption->SetSelection( aCfg->m_Display.m_NetNames );
+    m_checkForceShowFieldsWhenFPSelected->SetValue( aCfg->m_Display.m_ForceShowFieldsWhenFPSelected );
     m_live3Drefresh->SetValue( aCfg->m_Display.m_Live3DRefresh );
     m_checkCrossProbeOnSelection->SetValue( aCfg->m_CrossProbing.on_selection );
     m_checkCrossProbeCenter->SetValue( aCfg->m_CrossProbing.center_on_items );
@@ -96,6 +97,7 @@ bool PANEL_DISPLAY_OPTIONS::TransferDataFromWindow()
         cfg->m_Display.m_PadClearance = m_OptDisplayPadClearence->GetValue();
         cfg->m_ViewersDisplay.m_DisplayPadNumbers = m_OptDisplayPadNumber->GetValue();
         cfg->m_Display.m_NetNames = m_ShowNetNamesOption->GetSelection();
+        cfg->m_Display.m_ForceShowFieldsWhenFPSelected = m_checkForceShowFieldsWhenFPSelected->GetValue();
         cfg->m_Display.m_Live3DRefresh = m_live3Drefresh->GetValue();
         cfg->m_CrossProbing.on_selection = m_checkCrossProbeOnSelection->GetValue();
         cfg->m_CrossProbing.center_on_items = m_checkCrossProbeCenter->GetValue();
diff --git a/pcbnew/dialogs/panel_display_options_base.cpp b/pcbnew/dialogs/panel_display_options_base.cpp
index 5317ea086b..e58f363d82 100644
--- a/pcbnew/dialogs/panel_display_options_base.cpp
+++ b/pcbnew/dialogs/panel_display_options_base.cpp
@@ -41,23 +41,27 @@ PANEL_DISPLAY_OPTIONS_BASE::PANEL_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWind
 	m_staticline1 = new wxStaticLine( pcbPage, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
 	bMargins->Add( m_staticline1, 0, wxEXPAND|wxBOTTOM, 5 );
 
-	wxBoxSizer* bSizer6;
-	bSizer6 = new wxBoxSizer( wxVERTICAL );
+	wxGridBagSizer* gbSizer1;
+	gbSizer1 = new wxGridBagSizer( 2, 0 );
+	gbSizer1->SetFlexibleDirection( wxBOTH );
+	gbSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
 
-	wxString m_ShowNetNamesOptionChoices[] = { _("Do not show"), _("Show on pads"), _("Show on tracks"), _("Show on pads and tracks") };
+	m_netNamesLabel = new wxStaticText( pcbPage, wxID_ANY, _("Net names:"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_netNamesLabel->Wrap( -1 );
+	gbSizer1->Add( m_netNamesLabel, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+	wxString m_ShowNetNamesOptionChoices[] = { _("Do not show"), _("Show on pads"), _("Show on tracks"), _("Show on pads & tracks") };
 	int m_ShowNetNamesOptionNChoices = sizeof( m_ShowNetNamesOptionChoices ) / sizeof( wxString );
-	m_ShowNetNamesOption = new wxRadioBox( pcbPage, wxID_ANY, _("Net Names"), wxDefaultPosition, wxDefaultSize, m_ShowNetNamesOptionNChoices, m_ShowNetNamesOptionChoices, 1, wxRA_SPECIFY_COLS );
+	m_ShowNetNamesOption = new wxChoice( pcbPage, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_ShowNetNamesOptionNChoices, m_ShowNetNamesOptionChoices, 0 );
 	m_ShowNetNamesOption->SetSelection( 0 );
-	m_ShowNetNamesOption->SetToolTip( _("Show or hide net names on pads and/or tracks.") );
-
-	bSizer6->Add( m_ShowNetNamesOption, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+	gbSizer1->Add( m_ShowNetNamesOption, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
 
 	m_OptDisplayPadNumber = new wxCheckBox( pcbPage, wxID_ANY, _("Show pad numbers"), wxDefaultPosition, wxDefaultSize, 0 );
 	m_OptDisplayPadNumber->SetValue(true);
-	bSizer6->Add( m_OptDisplayPadNumber, 0, wxALL, 6 );
+	gbSizer1->Add( m_OptDisplayPadNumber, wxGBPosition( 1, 0 ), wxGBSpan( 1, 2 ), wxALL, 5 );
 
 
-	bMargins->Add( bSizer6, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
+	bMargins->Add( gbSizer1, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
 
 
 	bMargins->Add( 0, 10, 0, wxEXPAND, 5 );
@@ -69,22 +73,46 @@ PANEL_DISPLAY_OPTIONS_BASE::PANEL_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWind
 	m_staticline2 = new wxStaticLine( pcbPage, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
 	bMargins->Add( m_staticline2, 0, wxEXPAND|wxBOTTOM, 5 );
 
-	wxBoxSizer* bSizer7;
-	bSizer7 = new wxBoxSizer( wxVERTICAL );
+	wxGridBagSizer* gbSizer2;
+	gbSizer2 = new wxGridBagSizer( 2, 0 );
+	gbSizer2->SetFlexibleDirection( wxBOTH );
+	gbSizer2->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
 
-	wxString m_OptDisplayTracksClearanceChoices[] = { _("Do not show"), _("Show when routing"), _("Show when routing w/ via clearance at end"), _("Show when routing and editing"), _("Show always") };
+	m_trackClearancesLabel = new wxStaticText( pcbPage, wxID_ANY, _("Tracks:"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_trackClearancesLabel->Wrap( -1 );
+	gbSizer2->Add( m_trackClearancesLabel, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+	wxString m_OptDisplayTracksClearanceChoices[] = { _("Do not show clearances"), _("Show when routing"), _("Show when routing w/ via clearance at end"), _("Show when routing and editing"), _("Show always") };
 	int m_OptDisplayTracksClearanceNChoices = sizeof( m_OptDisplayTracksClearanceChoices ) / sizeof( wxString );
-	m_OptDisplayTracksClearance = new wxRadioBox( pcbPage, ID_SHOW_CLEARANCE, _("Track && Via Clearances"), wxDefaultPosition, wxDefaultSize, m_OptDisplayTracksClearanceNChoices, m_OptDisplayTracksClearanceChoices, 1, wxRA_SPECIFY_COLS );
-	m_OptDisplayTracksClearance->SetSelection( 3 );
-	m_OptDisplayTracksClearance->SetToolTip( _("Show clearance outlines around tracks, and optionally the via clearance around the end of the track while routing.") );
-
-	bSizer7->Add( m_OptDisplayTracksClearance, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+	m_OptDisplayTracksClearance = new wxChoice( pcbPage, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_OptDisplayTracksClearanceNChoices, m_OptDisplayTracksClearanceChoices, 0 );
+	m_OptDisplayTracksClearance->SetSelection( 0 );
+	gbSizer2->Add( m_OptDisplayTracksClearance, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
 
 	m_OptDisplayPadClearence = new wxCheckBox( pcbPage, wxID_ANY, _("Show pad clearance"), wxDefaultPosition, wxDefaultSize, 0 );
-	bSizer7->Add( m_OptDisplayPadClearence, 0, wxALL, 6 );
+	gbSizer2->Add( m_OptDisplayPadClearence, wxGBPosition( 1, 0 ), wxGBSpan( 1, 2 ), wxALL, 5 );
 
 
-	bMargins->Add( bSizer7, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
+	bMargins->Add( gbSizer2, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+
+	bMargins->Add( 0, 10, 0, wxEXPAND, 5 );
+
+	m_staticText4 = new wxStaticText( pcbPage, wxID_ANY, _("Selection && Highlighting"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_staticText4->Wrap( -1 );
+	bMargins->Add( m_staticText4, 0, wxTOP|wxRIGHT|wxLEFT, 13 );
+
+	m_staticline4 = new wxStaticLine( pcbPage, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+	bMargins->Add( m_staticline4, 0, wxEXPAND|wxBOTTOM, 5 );
+
+	wxBoxSizer* bSizer9;
+	bSizer9 = new wxBoxSizer( wxVERTICAL );
+
+	m_checkForceShowFieldsWhenFPSelected = new wxCheckBox( pcbPage, wxID_ANY, _("Show all fields when parent footprint is selected"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_checkForceShowFieldsWhenFPSelected->SetValue(true);
+	bSizer9->Add( m_checkForceShowFieldsWhenFPSelected, 0, wxALL, 5 );
+
+
+	bMargins->Add( bSizer9, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
 
 
 	bMargins->Add( 0, 10, 0, wxEXPAND, 5 );
@@ -103,7 +131,7 @@ PANEL_DISPLAY_OPTIONS_BASE::PANEL_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWind
 	m_checkCrossProbeOnSelection->SetValue(true);
 	m_checkCrossProbeOnSelection->SetToolTip( _("Highlight footprints corresponding to selected symbols") );
 
-	bSizer8->Add( m_checkCrossProbeOnSelection, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+	bSizer8->Add( m_checkCrossProbeOnSelection, 0, wxALL, 5 );
 
 	m_checkCrossProbeCenter = new wxCheckBox( pcbPage, wxID_ANY, _("Center view on cross-probed items"), wxDefaultPosition, wxDefaultSize, 0 );
 	m_checkCrossProbeCenter->SetValue(true);
@@ -127,7 +155,7 @@ PANEL_DISPLAY_OPTIONS_BASE::PANEL_DISPLAY_OPTIONS_BASE( wxWindow* parent, wxWind
 	bSizer8->Add( m_live3Drefresh, 0, wxBOTTOM|wxLEFT|wxRIGHT, 5 );
 
 
-	bMargins->Add( bSizer8, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
+	bMargins->Add( bSizer8, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
 
 
 	pcbOptionsSizer->Add( bMargins, 1, wxEXPAND, 5 );
diff --git a/pcbnew/dialogs/panel_display_options_base.fbp b/pcbnew/dialogs/panel_display_options_base.fbp
index 50be1224a9..30b176f115 100644
--- a/pcbnew/dialogs/panel_display_options_base.fbp
+++ b/pcbnew/dialogs/panel_display_options_base.fbp
@@ -378,17 +378,26 @@
                                                     <object class="sizeritem" expanded="1">
                                                         <property name="border">5</property>
                                                         <property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>
-                                                        <property name="proportion">0</property>
-                                                        <object class="wxBoxSizer" expanded="1">
+                                                        <property name="proportion">1</property>
+                                                        <object class="wxGridBagSizer" expanded="1">
+                                                            <property name="empty_cell_size"></property>
+                                                            <property name="flexible_direction">wxBOTH</property>
+                                                            <property name="growablecols"></property>
+                                                            <property name="growablerows"></property>
+                                                            <property name="hgap">0</property>
                                                             <property name="minimum_size"></property>
-                                                            <property name="name">bSizer6</property>
-                                                            <property name="orient">wxVERTICAL</property>
+                                                            <property name="name">gbSizer1</property>
+                                                            <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
                                                             <property name="permission">none</property>
-                                                            <object class="sizeritem" expanded="0">
+                                                            <property name="vgap">2</property>
+                                                            <object class="gbsizeritem" expanded="1">
                                                                 <property name="border">5</property>
-                                                                <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
-                                                                <property name="proportion">0</property>
-                                                                <object class="wxRadioBox" expanded="0">
+                                                                <property name="colspan">1</property>
+                                                                <property name="column">0</property>
+                                                                <property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property>
+                                                                <property name="row">0</property>
+                                                                <property name="rowspan">1</property>
+                                                                <object class="wxStaticText" expanded="1">
                                                                     <property name="BottomDockable">1</property>
                                                                     <property name="LeftDockable">1</property>
                                                                     <property name="RightDockable">1</property>
@@ -402,7 +411,6 @@
                                                                     <property name="caption"></property>
                                                                     <property name="caption_visible">1</property>
                                                                     <property name="center_pane">0</property>
-                                                                    <property name="choices">&quot;Do not show&quot; &quot;Show on pads&quot; &quot;Show on tracks&quot; &quot;Show on pads and tracks&quot;</property>
                                                                     <property name="close_button">1</property>
                                                                     <property name="context_help"></property>
                                                                     <property name="context_menu">1</property>
@@ -417,8 +425,71 @@
                                                                     <property name="gripper">0</property>
                                                                     <property name="hidden">0</property>
                                                                     <property name="id">wxID_ANY</property>
-                                                                    <property name="label">Net Names</property>
-                                                                    <property name="majorDimension">1</property>
+                                                                    <property name="label">Net names:</property>
+                                                                    <property name="markup">0</property>
+                                                                    <property name="max_size"></property>
+                                                                    <property name="maximize_button">0</property>
+                                                                    <property name="maximum_size"></property>
+                                                                    <property name="min_size"></property>
+                                                                    <property name="minimize_button">0</property>
+                                                                    <property name="minimum_size"></property>
+                                                                    <property name="moveable">1</property>
+                                                                    <property name="name">m_netNamesLabel</property>
+                                                                    <property name="pane_border">1</property>
+                                                                    <property name="pane_position"></property>
+                                                                    <property name="pane_size"></property>
+                                                                    <property name="permission">protected</property>
+                                                                    <property name="pin_button">1</property>
+                                                                    <property name="pos"></property>
+                                                                    <property name="resize">Resizable</property>
+                                                                    <property name="show">1</property>
+                                                                    <property name="size"></property>
+                                                                    <property name="style"></property>
+                                                                    <property name="subclass">; ; forward_declare</property>
+                                                                    <property name="toolbar_pane">0</property>
+                                                                    <property name="tooltip"></property>
+                                                                    <property name="window_extra_style"></property>
+                                                                    <property name="window_name"></property>
+                                                                    <property name="window_style"></property>
+                                                                    <property name="wrap">-1</property>
+                                                                </object>
+                                                            </object>
+                                                            <object class="gbsizeritem" expanded="1">
+                                                                <property name="border">5</property>
+                                                                <property name="colspan">1</property>
+                                                                <property name="column">1</property>
+                                                                <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT</property>
+                                                                <property name="row">0</property>
+                                                                <property name="rowspan">1</property>
+                                                                <object class="wxChoice" expanded="1">
+                                                                    <property name="BottomDockable">1</property>
+                                                                    <property name="LeftDockable">1</property>
+                                                                    <property name="RightDockable">1</property>
+                                                                    <property name="TopDockable">1</property>
+                                                                    <property name="aui_layer"></property>
+                                                                    <property name="aui_name"></property>
+                                                                    <property name="aui_position"></property>
+                                                                    <property name="aui_row"></property>
+                                                                    <property name="best_size"></property>
+                                                                    <property name="bg"></property>
+                                                                    <property name="caption"></property>
+                                                                    <property name="caption_visible">1</property>
+                                                                    <property name="center_pane">0</property>
+                                                                    <property name="choices">&quot;Do not show&quot; &quot;Show on pads&quot; &quot;Show on tracks&quot; &quot;Show on pads &amp; tracks&quot;</property>
+                                                                    <property name="close_button">1</property>
+                                                                    <property name="context_help"></property>
+                                                                    <property name="context_menu">1</property>
+                                                                    <property name="default_pane">0</property>
+                                                                    <property name="dock">Dock</property>
+                                                                    <property name="dock_fixed">0</property>
+                                                                    <property name="docking">Left</property>
+                                                                    <property name="enabled">1</property>
+                                                                    <property name="fg"></property>
+                                                                    <property name="floatable">1</property>
+                                                                    <property name="font"></property>
+                                                                    <property name="gripper">0</property>
+                                                                    <property name="hidden">0</property>
+                                                                    <property name="id">wxID_ANY</property>
                                                                     <property name="max_size"></property>
                                                                     <property name="maximize_button">0</property>
                                                                     <property name="maximum_size"></property>
@@ -437,10 +508,10 @@
                                                                     <property name="selection">0</property>
                                                                     <property name="show">1</property>
                                                                     <property name="size"></property>
-                                                                    <property name="style">wxRA_SPECIFY_COLS</property>
-                                                                    <property name="subclass"></property>
+                                                                    <property name="style"></property>
+                                                                    <property name="subclass">; ; forward_declare</property>
                                                                     <property name="toolbar_pane">0</property>
-                                                                    <property name="tooltip">Show or hide net names on pads and/or tracks.</property>
+                                                                    <property name="tooltip"></property>
                                                                     <property name="validator_data_type"></property>
                                                                     <property name="validator_style">wxFILTER_NONE</property>
                                                                     <property name="validator_type">wxDefaultValidator</property>
@@ -450,10 +521,13 @@
                                                                     <property name="window_style"></property>
                                                                 </object>
                                                             </object>
-                                                            <object class="sizeritem" expanded="0">
-                                                                <property name="border">6</property>
+                                                            <object class="gbsizeritem" expanded="1">
+                                                                <property name="border">5</property>
+                                                                <property name="colspan">2</property>
+                                                                <property name="column">0</property>
                                                                 <property name="flag">wxALL</property>
-                                                                <property name="proportion">0</property>
+                                                                <property name="row">1</property>
+                                                                <property name="rowspan">1</property>
                                                                 <object class="wxCheckBox" expanded="0">
                                                                     <property name="BottomDockable">1</property>
                                                                     <property name="LeftDockable">1</property>
@@ -648,17 +722,26 @@
                                                     <object class="sizeritem" expanded="1">
                                                         <property name="border">5</property>
                                                         <property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>
-                                                        <property name="proportion">0</property>
-                                                        <object class="wxBoxSizer" expanded="1">
+                                                        <property name="proportion">1</property>
+                                                        <object class="wxGridBagSizer" expanded="1">
+                                                            <property name="empty_cell_size"></property>
+                                                            <property name="flexible_direction">wxBOTH</property>
+                                                            <property name="growablecols"></property>
+                                                            <property name="growablerows"></property>
+                                                            <property name="hgap">0</property>
                                                             <property name="minimum_size"></property>
-                                                            <property name="name">bSizer7</property>
-                                                            <property name="orient">wxVERTICAL</property>
+                                                            <property name="name">gbSizer2</property>
+                                                            <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
                                                             <property name="permission">none</property>
-                                                            <object class="sizeritem" expanded="0">
+                                                            <property name="vgap">2</property>
+                                                            <object class="gbsizeritem" expanded="1">
                                                                 <property name="border">5</property>
-                                                                <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
-                                                                <property name="proportion">0</property>
-                                                                <object class="wxRadioBox" expanded="0">
+                                                                <property name="colspan">1</property>
+                                                                <property name="column">0</property>
+                                                                <property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property>
+                                                                <property name="row">0</property>
+                                                                <property name="rowspan">1</property>
+                                                                <object class="wxStaticText" expanded="1">
                                                                     <property name="BottomDockable">1</property>
                                                                     <property name="LeftDockable">1</property>
                                                                     <property name="RightDockable">1</property>
@@ -672,7 +755,6 @@
                                                                     <property name="caption"></property>
                                                                     <property name="caption_visible">1</property>
                                                                     <property name="center_pane">0</property>
-                                                                    <property name="choices">&quot;Do not show&quot; &quot;Show when routing&quot; &quot;Show when routing w/ via clearance at end&quot; &quot;Show when routing and editing&quot; &quot;Show always&quot;</property>
                                                                     <property name="close_button">1</property>
                                                                     <property name="context_help"></property>
                                                                     <property name="context_menu">1</property>
@@ -686,9 +768,72 @@
                                                                     <property name="font"></property>
                                                                     <property name="gripper">0</property>
                                                                     <property name="hidden">0</property>
-                                                                    <property name="id">ID_SHOW_CLEARANCE</property>
-                                                                    <property name="label">Track &amp;&amp; Via Clearances</property>
-                                                                    <property name="majorDimension">1</property>
+                                                                    <property name="id">wxID_ANY</property>
+                                                                    <property name="label">Tracks:</property>
+                                                                    <property name="markup">0</property>
+                                                                    <property name="max_size"></property>
+                                                                    <property name="maximize_button">0</property>
+                                                                    <property name="maximum_size"></property>
+                                                                    <property name="min_size"></property>
+                                                                    <property name="minimize_button">0</property>
+                                                                    <property name="minimum_size"></property>
+                                                                    <property name="moveable">1</property>
+                                                                    <property name="name">m_trackClearancesLabel</property>
+                                                                    <property name="pane_border">1</property>
+                                                                    <property name="pane_position"></property>
+                                                                    <property name="pane_size"></property>
+                                                                    <property name="permission">protected</property>
+                                                                    <property name="pin_button">1</property>
+                                                                    <property name="pos"></property>
+                                                                    <property name="resize">Resizable</property>
+                                                                    <property name="show">1</property>
+                                                                    <property name="size"></property>
+                                                                    <property name="style"></property>
+                                                                    <property name="subclass">; ; forward_declare</property>
+                                                                    <property name="toolbar_pane">0</property>
+                                                                    <property name="tooltip"></property>
+                                                                    <property name="window_extra_style"></property>
+                                                                    <property name="window_name"></property>
+                                                                    <property name="window_style"></property>
+                                                                    <property name="wrap">-1</property>
+                                                                </object>
+                                                            </object>
+                                                            <object class="gbsizeritem" expanded="1">
+                                                                <property name="border">5</property>
+                                                                <property name="colspan">1</property>
+                                                                <property name="column">1</property>
+                                                                <property name="flag">wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
+                                                                <property name="row">0</property>
+                                                                <property name="rowspan">1</property>
+                                                                <object class="wxChoice" expanded="1">
+                                                                    <property name="BottomDockable">1</property>
+                                                                    <property name="LeftDockable">1</property>
+                                                                    <property name="RightDockable">1</property>
+                                                                    <property name="TopDockable">1</property>
+                                                                    <property name="aui_layer"></property>
+                                                                    <property name="aui_name"></property>
+                                                                    <property name="aui_position"></property>
+                                                                    <property name="aui_row"></property>
+                                                                    <property name="best_size"></property>
+                                                                    <property name="bg"></property>
+                                                                    <property name="caption"></property>
+                                                                    <property name="caption_visible">1</property>
+                                                                    <property name="center_pane">0</property>
+                                                                    <property name="choices">&quot;Do not show clearances&quot; &quot;Show when routing&quot; &quot;Show when routing w/ via clearance at end&quot; &quot;Show when routing and editing&quot; &quot;Show always&quot;</property>
+                                                                    <property name="close_button">1</property>
+                                                                    <property name="context_help"></property>
+                                                                    <property name="context_menu">1</property>
+                                                                    <property name="default_pane">0</property>
+                                                                    <property name="dock">Dock</property>
+                                                                    <property name="dock_fixed">0</property>
+                                                                    <property name="docking">Left</property>
+                                                                    <property name="enabled">1</property>
+                                                                    <property name="fg"></property>
+                                                                    <property name="floatable">1</property>
+                                                                    <property name="font"></property>
+                                                                    <property name="gripper">0</property>
+                                                                    <property name="hidden">0</property>
+                                                                    <property name="id">wxID_ANY</property>
                                                                     <property name="max_size"></property>
                                                                     <property name="maximize_button">0</property>
                                                                     <property name="maximum_size"></property>
@@ -704,13 +849,13 @@
                                                                     <property name="pin_button">1</property>
                                                                     <property name="pos"></property>
                                                                     <property name="resize">Resizable</property>
-                                                                    <property name="selection">3</property>
+                                                                    <property name="selection">0</property>
                                                                     <property name="show">1</property>
                                                                     <property name="size"></property>
-                                                                    <property name="style">wxRA_SPECIFY_COLS</property>
-                                                                    <property name="subclass"></property>
+                                                                    <property name="style"></property>
+                                                                    <property name="subclass">; ; forward_declare</property>
                                                                     <property name="toolbar_pane">0</property>
-                                                                    <property name="tooltip">Show clearance outlines around tracks, and optionally the via clearance around the end of the track while routing.</property>
+                                                                    <property name="tooltip"></property>
                                                                     <property name="validator_data_type"></property>
                                                                     <property name="validator_style">wxFILTER_NONE</property>
                                                                     <property name="validator_type">wxDefaultValidator</property>
@@ -720,10 +865,13 @@
                                                                     <property name="window_style"></property>
                                                                 </object>
                                                             </object>
-                                                            <object class="sizeritem" expanded="0">
-                                                                <property name="border">6</property>
+                                                            <object class="gbsizeritem" expanded="1">
+                                                                <property name="border">5</property>
+                                                                <property name="colspan">2</property>
+                                                                <property name="column">0</property>
                                                                 <property name="flag">wxALL</property>
-                                                                <property name="proportion">0</property>
+                                                                <property name="row">1</property>
+                                                                <property name="rowspan">1</property>
                                                                 <object class="wxCheckBox" expanded="0">
                                                                     <property name="BottomDockable">1</property>
                                                                     <property name="LeftDockable">1</property>
@@ -796,6 +944,210 @@
                                                             <property name="width">0</property>
                                                         </object>
                                                     </object>
+                                                    <object class="sizeritem" expanded="1">
+                                                        <property name="border">13</property>
+                                                        <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+                                                        <property name="proportion">0</property>
+                                                        <object class="wxStaticText" expanded="1">
+                                                            <property name="BottomDockable">1</property>
+                                                            <property name="LeftDockable">1</property>
+                                                            <property name="RightDockable">1</property>
+                                                            <property name="TopDockable">1</property>
+                                                            <property name="aui_layer"></property>
+                                                            <property name="aui_name"></property>
+                                                            <property name="aui_position"></property>
+                                                            <property name="aui_row"></property>
+                                                            <property name="best_size"></property>
+                                                            <property name="bg"></property>
+                                                            <property name="caption"></property>
+                                                            <property name="caption_visible">1</property>
+                                                            <property name="center_pane">0</property>
+                                                            <property name="close_button">1</property>
+                                                            <property name="context_help"></property>
+                                                            <property name="context_menu">1</property>
+                                                            <property name="default_pane">0</property>
+                                                            <property name="dock">Dock</property>
+                                                            <property name="dock_fixed">0</property>
+                                                            <property name="docking">Left</property>
+                                                            <property name="enabled">1</property>
+                                                            <property name="fg"></property>
+                                                            <property name="floatable">1</property>
+                                                            <property name="font"></property>
+                                                            <property name="gripper">0</property>
+                                                            <property name="hidden">0</property>
+                                                            <property name="id">wxID_ANY</property>
+                                                            <property name="label">Selection &amp;&amp; Highlighting</property>
+                                                            <property name="markup">0</property>
+                                                            <property name="max_size"></property>
+                                                            <property name="maximize_button">0</property>
+                                                            <property name="maximum_size"></property>
+                                                            <property name="min_size"></property>
+                                                            <property name="minimize_button">0</property>
+                                                            <property name="minimum_size"></property>
+                                                            <property name="moveable">1</property>
+                                                            <property name="name">m_staticText4</property>
+                                                            <property name="pane_border">1</property>
+                                                            <property name="pane_position"></property>
+                                                            <property name="pane_size"></property>
+                                                            <property name="permission">protected</property>
+                                                            <property name="pin_button">1</property>
+                                                            <property name="pos"></property>
+                                                            <property name="resize">Resizable</property>
+                                                            <property name="show">1</property>
+                                                            <property name="size"></property>
+                                                            <property name="style"></property>
+                                                            <property name="subclass">; ; forward_declare</property>
+                                                            <property name="toolbar_pane">0</property>
+                                                            <property name="tooltip"></property>
+                                                            <property name="window_extra_style"></property>
+                                                            <property name="window_name"></property>
+                                                            <property name="window_style"></property>
+                                                            <property name="wrap">-1</property>
+                                                        </object>
+                                                    </object>
+                                                    <object class="sizeritem" expanded="1">
+                                                        <property name="border">5</property>
+                                                        <property name="flag">wxEXPAND|wxBOTTOM</property>
+                                                        <property name="proportion">0</property>
+                                                        <object class="wxStaticLine" expanded="1">
+                                                            <property name="BottomDockable">1</property>
+                                                            <property name="LeftDockable">1</property>
+                                                            <property name="RightDockable">1</property>
+                                                            <property name="TopDockable">1</property>
+                                                            <property name="aui_layer"></property>
+                                                            <property name="aui_name"></property>
+                                                            <property name="aui_position"></property>
+                                                            <property name="aui_row"></property>
+                                                            <property name="best_size"></property>
+                                                            <property name="bg"></property>
+                                                            <property name="caption"></property>
+                                                            <property name="caption_visible">1</property>
+                                                            <property name="center_pane">0</property>
+                                                            <property name="close_button">1</property>
+                                                            <property name="context_help"></property>
+                                                            <property name="context_menu">1</property>
+                                                            <property name="default_pane">0</property>
+                                                            <property name="dock">Dock</property>
+                                                            <property name="dock_fixed">0</property>
+                                                            <property name="docking">Left</property>
+                                                            <property name="enabled">1</property>
+                                                            <property name="fg"></property>
+                                                            <property name="floatable">1</property>
+                                                            <property name="font"></property>
+                                                            <property name="gripper">0</property>
+                                                            <property name="hidden">0</property>
+                                                            <property name="id">wxID_ANY</property>
+                                                            <property name="max_size"></property>
+                                                            <property name="maximize_button">0</property>
+                                                            <property name="maximum_size"></property>
+                                                            <property name="min_size"></property>
+                                                            <property name="minimize_button">0</property>
+                                                            <property name="minimum_size"></property>
+                                                            <property name="moveable">1</property>
+                                                            <property name="name">m_staticline4</property>
+                                                            <property name="pane_border">1</property>
+                                                            <property name="pane_position"></property>
+                                                            <property name="pane_size"></property>
+                                                            <property name="permission">protected</property>
+                                                            <property name="pin_button">1</property>
+                                                            <property name="pos"></property>
+                                                            <property name="resize">Resizable</property>
+                                                            <property name="show">1</property>
+                                                            <property name="size"></property>
+                                                            <property name="style">wxLI_HORIZONTAL</property>
+                                                            <property name="subclass">; ; forward_declare</property>
+                                                            <property name="toolbar_pane">0</property>
+                                                            <property name="tooltip"></property>
+                                                            <property name="window_extra_style"></property>
+                                                            <property name="window_name"></property>
+                                                            <property name="window_style"></property>
+                                                        </object>
+                                                    </object>
+                                                    <object class="sizeritem" expanded="1">
+                                                        <property name="border">5</property>
+                                                        <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
+                                                        <property name="proportion">0</property>
+                                                        <object class="wxBoxSizer" expanded="1">
+                                                            <property name="minimum_size"></property>
+                                                            <property name="name">bSizer9</property>
+                                                            <property name="orient">wxVERTICAL</property>
+                                                            <property name="permission">none</property>
+                                                            <object class="sizeritem" expanded="1">
+                                                                <property name="border">5</property>
+                                                                <property name="flag">wxALL</property>
+                                                                <property name="proportion">0</property>
+                                                                <object class="wxCheckBox" expanded="1">
+                                                                    <property name="BottomDockable">1</property>
+                                                                    <property name="LeftDockable">1</property>
+                                                                    <property name="RightDockable">1</property>
+                                                                    <property name="TopDockable">1</property>
+                                                                    <property name="aui_layer"></property>
+                                                                    <property name="aui_name"></property>
+                                                                    <property name="aui_position"></property>
+                                                                    <property name="aui_row"></property>
+                                                                    <property name="best_size"></property>
+                                                                    <property name="bg"></property>
+                                                                    <property name="caption"></property>
+                                                                    <property name="caption_visible">1</property>
+                                                                    <property name="center_pane">0</property>
+                                                                    <property name="checked">1</property>
+                                                                    <property name="close_button">1</property>
+                                                                    <property name="context_help"></property>
+                                                                    <property name="context_menu">1</property>
+                                                                    <property name="default_pane">0</property>
+                                                                    <property name="dock">Dock</property>
+                                                                    <property name="dock_fixed">0</property>
+                                                                    <property name="docking">Left</property>
+                                                                    <property name="enabled">1</property>
+                                                                    <property name="fg"></property>
+                                                                    <property name="floatable">1</property>
+                                                                    <property name="font"></property>
+                                                                    <property name="gripper">0</property>
+                                                                    <property name="hidden">0</property>
+                                                                    <property name="id">wxID_ANY</property>
+                                                                    <property name="label">Show all fields when parent footprint is selected</property>
+                                                                    <property name="max_size"></property>
+                                                                    <property name="maximize_button">0</property>
+                                                                    <property name="maximum_size"></property>
+                                                                    <property name="min_size"></property>
+                                                                    <property name="minimize_button">0</property>
+                                                                    <property name="minimum_size"></property>
+                                                                    <property name="moveable">1</property>
+                                                                    <property name="name">m_checkForceShowFieldsWhenFPSelected</property>
+                                                                    <property name="pane_border">1</property>
+                                                                    <property name="pane_position"></property>
+                                                                    <property name="pane_size"></property>
+                                                                    <property name="permission">protected</property>
+                                                                    <property name="pin_button">1</property>
+                                                                    <property name="pos"></property>
+                                                                    <property name="resize">Resizable</property>
+                                                                    <property name="show">1</property>
+                                                                    <property name="size"></property>
+                                                                    <property name="style"></property>
+                                                                    <property name="subclass">; ; forward_declare</property>
+                                                                    <property name="toolbar_pane">0</property>
+                                                                    <property name="tooltip"></property>
+                                                                    <property name="validator_data_type"></property>
+                                                                    <property name="validator_style">wxFILTER_NONE</property>
+                                                                    <property name="validator_type">wxDefaultValidator</property>
+                                                                    <property name="validator_variable"></property>
+                                                                    <property name="window_extra_style"></property>
+                                                                    <property name="window_name"></property>
+                                                                    <property name="window_style"></property>
+                                                                </object>
+                                                            </object>
+                                                        </object>
+                                                    </object>
+                                                    <object class="sizeritem" expanded="1">
+                                                        <property name="border">5</property>
+                                                        <property name="flag">wxEXPAND</property>
+                                                        <property name="proportion">0</property>
+                                                        <object class="spacer" expanded="1">
+                                                            <property name="height">10</property>
+                                                            <property name="permission">protected</property>
+                                                            <property name="width">0</property>
+                                                        </object>
+                                                    </object>
                                                     <object class="sizeritem" expanded="1">
                                                         <property name="border">13</property>
                                                         <property name="flag">wxTOP|wxRIGHT|wxLEFT|wxEXPAND</property>
@@ -917,7 +1269,7 @@
                                                     </object>
                                                     <object class="sizeritem" expanded="1">
                                                         <property name="border">5</property>
-                                                        <property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>
+                                                        <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
                                                         <property name="proportion">0</property>
                                                         <object class="wxBoxSizer" expanded="1">
                                                             <property name="minimum_size"></property>
@@ -926,7 +1278,7 @@
                                                             <property name="permission">none</property>
                                                             <object class="sizeritem" expanded="1">
                                                                 <property name="border">5</property>
-                                                                <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT</property>
+                                                                <property name="flag">wxALL</property>
                                                                 <property name="proportion">0</property>
                                                                 <object class="wxCheckBox" expanded="1">
                                                                     <property name="BottomDockable">1</property>
diff --git a/pcbnew/dialogs/panel_display_options_base.h b/pcbnew/dialogs/panel_display_options_base.h
index 637946d4bf..d0da7c1834 100644
--- a/pcbnew/dialogs/panel_display_options_base.h
+++ b/pcbnew/dialogs/panel_display_options_base.h
@@ -20,8 +20,9 @@
 #include <wx/string.h>
 #include <wx/stattext.h>
 #include <wx/statline.h>
-#include <wx/radiobox.h>
+#include <wx/choice.h>
 #include <wx/checkbox.h>
+#include <wx/gbsizer.h>
 #include <wx/simplebook.h>
 
 ///////////////////////////////////////////////////////////////////////////
@@ -34,21 +35,21 @@ class PANEL_DISPLAY_OPTIONS_BASE : public RESETTABLE_PANEL
 	private:
 
 	protected:
-		enum
-		{
-			ID_SHOW_CLEARANCE = 1000
-		};
-
 		wxBoxSizer* m_galOptionsSizer;
 		wxSimplebook* m_optionsBook;
 		wxStaticText* m_annotationsLabel;
 		wxStaticLine* m_staticline1;
-		wxRadioBox* m_ShowNetNamesOption;
+		wxStaticText* m_netNamesLabel;
+		wxChoice* m_ShowNetNamesOption;
 		wxCheckBox* m_OptDisplayPadNumber;
 		wxStaticText* m_clearanceLabel;
 		wxStaticLine* m_staticline2;
-		wxRadioBox* m_OptDisplayTracksClearance;
+		wxStaticText* m_trackClearancesLabel;
+		wxChoice* m_OptDisplayTracksClearance;
 		wxCheckBox* m_OptDisplayPadClearence;
+		wxStaticText* m_staticText4;
+		wxStaticLine* m_staticline4;
+		wxCheckBox* m_checkForceShowFieldsWhenFPSelected;
 		wxStaticText* m_crossProbingLabel;
 		wxStaticLine* m_staticline3;
 		wxCheckBox* m_checkCrossProbeOnSelection;
diff --git a/pcbnew/pcb_base_frame.cpp b/pcbnew/pcb_base_frame.cpp
index 1f29f6a17c..ffcd35ec87 100644
--- a/pcbnew/pcb_base_frame.cpp
+++ b/pcbnew/pcb_base_frame.cpp
@@ -989,11 +989,13 @@ void PCB_BASE_FRAME::CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVars
 {
     EDA_DRAW_FRAME::CommonSettingsChanged( aEnvVarsChanged, aTextVarsChanged );
 
-    RENDER_SETTINGS*     settings = GetCanvas()->GetView()->GetPainter()->GetSettings();
-    PCB_RENDER_SETTINGS* renderSettings = static_cast<KIGFX::PCB_RENDER_SETTINGS*>( settings );
+    KIGFX::VIEW*         view = GetCanvas()->GetView();
+    KIGFX::PCB_PAINTER*  painter = static_cast<KIGFX::PCB_PAINTER*>( view->GetPainter() );
+    PCB_RENDER_SETTINGS* settings = painter->GetSettings();
 
-    renderSettings->LoadColors( GetColorSettings( true ) );
-    renderSettings->LoadDisplayOptions( GetDisplayOptions() );
+    settings->LoadColors( GetColorSettings( true ) );
+    settings->LoadDisplayOptions( GetDisplayOptions() );
+    settings->m_ForceShowFieldsWhenFPSelected = GetPcbNewSettings()->m_Display.m_ForceShowFieldsWhenFPSelected;
 
     // Note: KIGFX::REPAINT isn't enough for things that go from invisible to visible as
     // they won't be found in the view layer's itemset for re-painting.
@@ -1016,7 +1018,7 @@ void PCB_BASE_FRAME::CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVars
                 return 0;
             } );
 
-    GetCanvas()->GetView()->UpdateAllItems( KIGFX::COLOR );
+    view->UpdateAllItems( KIGFX::COLOR );
 
     RecreateToolbars();
 
@@ -1076,6 +1078,7 @@ void PCB_BASE_FRAME::ActivateGalCanvas()
 
     settings->LoadDisplayOptions( displ_opts );
     settings->LoadColors( GetColorSettings() );
+    settings->m_ForceShowFieldsWhenFPSelected = GetPcbNewSettings()->m_Display.m_ForceShowFieldsWhenFPSelected;
 
     view->RecacheAllItems();
     canvas->SetEventDispatcher( m_toolDispatcher );
diff --git a/pcbnew/pcb_draw_panel_gal.cpp b/pcbnew/pcb_draw_panel_gal.cpp
index 0524f57677..f63ff161f7 100644
--- a/pcbnew/pcb_draw_panel_gal.cpp
+++ b/pcbnew/pcb_draw_panel_gal.cpp
@@ -564,9 +564,12 @@ void PCB_DRAW_PANEL_GAL::OnShow()
     if( frame )
     {
         SetTopLayer( frame->GetActiveLayer() );
-        KIGFX::PAINTER* painter = m_view->GetPainter();
-        auto settings = static_cast<KIGFX::PCB_RENDER_SETTINGS*>( painter->GetSettings() );
+
+        KIGFX::PCB_PAINTER* painter = static_cast<KIGFX::PCB_PAINTER*>( m_view->GetPainter() );
+        KIGFX::PCB_RENDER_SETTINGS* settings = painter->GetSettings();
+
         settings->LoadDisplayOptions( frame->GetDisplayOptions() );
+        settings->m_ForceShowFieldsWhenFPSelected = frame->GetPcbNewSettings()->m_Display.m_ForceShowFieldsWhenFPSelected;
     }
 }
 
diff --git a/pcbnew/pcb_edit_frame.cpp b/pcbnew/pcb_edit_frame.cpp
index 1fb59532cf..a5a07c61f0 100644
--- a/pcbnew/pcb_edit_frame.cpp
+++ b/pcbnew/pcb_edit_frame.cpp
@@ -2350,12 +2350,6 @@ void PCB_EDIT_FRAME::CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVars
 
     GetAppearancePanel()->OnColorThemeChanged();
 
-    KIGFX::PCB_VIEW*            view = GetCanvas()->GetView();
-    KIGFX::PCB_PAINTER*         painter = static_cast<KIGFX::PCB_PAINTER*>( view->GetPainter() );
-    KIGFX::PCB_RENDER_SETTINGS* renderSettings = painter->GetSettings();
-
-    renderSettings->LoadDisplayOptions( GetDisplayOptions() );
-
     SetElementVisibility( LAYER_RATSNEST, GetPcbNewSettings()->m_Display.m_ShowGlobalRatsnest );
 
     GetGalDisplayOptions().ReadWindowSettings( GetPcbNewSettings()->m_Window );
diff --git a/pcbnew/pcb_field.cpp b/pcbnew/pcb_field.cpp
index 4a48636333..6203a3bd54 100644
--- a/pcbnew/pcb_field.cpp
+++ b/pcbnew/pcb_field.cpp
@@ -26,6 +26,7 @@
 #include <footprint.h>
 #include <board_design_settings.h>
 #include <i18n_utility.h>
+#include <pcb_painter.h>
 
 PCB_FIELD::PCB_FIELD( FOOTPRINT* aParent, int aFieldId, const wxString& aName ) :
         PCB_TEXT( aParent, PCB_FIELD_T ),
@@ -131,6 +132,15 @@ double PCB_FIELD::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const
     if( !aView )
         return 0.0;
 
+    KIGFX::PCB_PAINTER*         painter = static_cast<KIGFX::PCB_PAINTER*>( aView->GetPainter() );
+    KIGFX::PCB_RENDER_SETTINGS* renderSettings = painter->GetSettings();
+
+    if( GetParentFootprint() && GetParentFootprint()->IsSelected()
+            && renderSettings->m_ForceShowFieldsWhenFPSelected )
+    {
+        return 0.0;
+    }
+
     // Handle Render tab switches
     if( IsValue() && !aView->IsLayerVisible( LAYER_FP_VALUES ) )
         return HIDE;
diff --git a/pcbnew/pcb_painter.cpp b/pcbnew/pcb_painter.cpp
index 2a6182027b..fb927f7207 100644
--- a/pcbnew/pcb_painter.cpp
+++ b/pcbnew/pcb_painter.cpp
@@ -117,6 +117,8 @@ PCB_RENDER_SETTINGS::PCB_RENDER_SETTINGS()
     SetDashLengthRatio( 12 );       // From ISO 128-2
     SetGapLengthRatio( 3 );         // From ISO 128-2
 
+    m_ForceShowFieldsWhenFPSelected = true;
+
     update();
 }
 
diff --git a/pcbnew/pcb_painter.h b/pcbnew/pcb_painter.h
index c8d772f830..c785f2d804 100644
--- a/pcbnew/pcb_painter.h
+++ b/pcbnew/pcb_painter.h
@@ -124,6 +124,7 @@ public:
 
 public:
     bool               m_ForcePadSketchModeOn;
+    bool               m_ForceShowFieldsWhenFPSelected;
 
     ZONE_DISPLAY_MODE  m_ZoneDisplayMode;
     HIGH_CONTRAST_MODE m_ContrastModeDisplay;
diff --git a/pcbnew/pcb_view.cpp b/pcbnew/pcb_view.cpp
index 7dc83e4505..774e4aeeec 100644
--- a/pcbnew/pcb_view.cpp
+++ b/pcbnew/pcb_view.cpp
@@ -124,8 +124,8 @@ void PCB_VIEW::Update( const KIGFX::VIEW_ITEM* aItem ) const
 
 void PCB_VIEW::UpdateDisplayOptions( const PCB_DISPLAY_OPTIONS& aOptions )
 {
-    auto    painter     = static_cast<KIGFX::PCB_PAINTER*>( GetPainter() );
-    auto    settings    = static_cast<KIGFX::PCB_RENDER_SETTINGS*>( painter->GetSettings() );
+    KIGFX::PCB_PAINTER*         painter  = static_cast<KIGFX::PCB_PAINTER*>( GetPainter() );
+    KIGFX::PCB_RENDER_SETTINGS* settings = painter->GetSettings();
 
     settings->LoadDisplayOptions( aOptions );
 }
diff --git a/pcbnew/pcbnew_settings.cpp b/pcbnew/pcbnew_settings.cpp
index a6d241d774..b474b06d38 100644
--- a/pcbnew/pcbnew_settings.cpp
+++ b/pcbnew/pcbnew_settings.cpp
@@ -270,6 +270,9 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS()
     m_params.emplace_back( new PARAM<bool>( "pcb_display.origin_invert_y_axis",
             &m_Display.m_DisplayInvertYAxis, false ) );
 
+    m_params.emplace_back( new PARAM<bool>( "pcb_display.force_show_fields_when_fp_selected",
+            &m_Display.m_ForceShowFieldsWhenFPSelected, true ) );
+
     m_params.emplace_back( new PARAM<bool>( "pcb_display.live_3d_refresh",
             &m_Display.m_Live3DRefresh, false ) );
 
diff --git a/pcbnew/pcbnew_settings.h b/pcbnew/pcbnew_settings.h
index 669dac1a27..3e1f1170cc 100644
--- a/pcbnew/pcbnew_settings.h
+++ b/pcbnew/pcbnew_settings.h
@@ -332,6 +332,7 @@ public:
         bool                 m_DisplayInvertXAxis;
         bool                 m_DisplayInvertYAxis;
 
+        bool                 m_ForceShowFieldsWhenFPSelected;
         bool                 m_Live3DRefresh;
     };