fortrangoingonforty/sniffly / dcced97

Browse files

sync renderer state with active tab to fix empty tab rendering

Authored by espadonne
SHA
dcced9744d6b68c93ea506ae6f291da46e42916e
Parents
03c6288
Tree
746cd9e

2 changed files

StatusFile+-
M src/gui/gtk_app.f90 4 1
M src/rendering/treemap_renderer.f90 29 1
src/gui/gtk_app.f90modified
@@ -30,7 +30,7 @@ module gtk_app
30
                                 set_navigation_callback, get_previous_breadcrumb_path, &
30
                                 set_navigation_callback, get_previous_breadcrumb_path, &
31
                                 clear_previous_breadcrumb_path
31
                                 clear_previous_breadcrumb_path
32
   use treemap_renderer, only: register_progress_callback, scan_directory, set_redraw_widget, &
32
   use treemap_renderer, only: register_progress_callback, scan_directory, set_redraw_widget, &
33
-                               register_scan_completion_callback
33
+                               register_scan_completion_callback, set_renderer_state_from_tab
34
   use tab_manager, only: tab_state, init_tab_manager, create_tab, get_active_tab, &
34
   use tab_manager, only: tab_state, init_tab_manager, create_tab, get_active_tab, &
35
                          switch_to_tab, num_tabs, active_tab_index, get_path_basename
35
                          switch_to_tab, num_tabs, active_tab_index, get_path_basename
36
   use tab_widget, only: create_tab_bar, refresh_tab_bar, register_tab_switch_callback, &
36
   use tab_widget, only: create_tab_bar, refresh_tab_bar, register_tab_switch_callback, &
@@ -938,6 +938,9 @@ contains
938
     print *, "  Active tab index: ", active_tab_index
938
     print *, "  Active tab index: ", active_tab_index
939
     print *, "  Tab has_data: ", tab%has_data
939
     print *, "  Tab has_data: ", tab%has_data
940
 
940
 
941
+    ! Sync renderer state with active tab (CRITICAL for correct rendering)
942
+    call set_renderer_state_from_tab(tab%root_node, tab%current_view_node, tab%has_data)
943
+
941
     ! Check if tab has data
944
     ! Check if tab has data
942
     if (.not. tab%has_data) then
945
     if (.not. tab%has_data) then
943
       print *, "  Tab has no data yet - showing empty tab UI"
946
       print *, "  Tab has no data yet - showing empty tab UI"
src/rendering/treemap_renderer.f90modified
@@ -25,7 +25,8 @@ module treemap_renderer
25
             get_node_center_by_index, find_node_in_direction, register_progress_callback, &
25
             get_node_center_by_index, find_node_in_direction, register_progress_callback, &
26
             scan_directory, invalidate_layout, get_current_view_node, remove_selected_node_from_view, &
26
             scan_directory, invalidate_layout, get_current_view_node, remove_selected_node_from_view, &
27
             clear_cache, toggle_file_extensions, toggle_age_based_coloring, toggle_size_display_mode, &
27
             clear_cache, toggle_file_extensions, toggle_age_based_coloring, toggle_size_display_mode, &
28
-            toggle_hidden_files, toggle_render_mode, set_redraw_widget, register_scan_completion_callback
28
+            toggle_hidden_files, toggle_render_mode, set_redraw_widget, register_scan_completion_callback, &
29
+            set_renderer_state_from_tab
29
 
30
 
30
   ! Callback interfaces for progress updates
31
   ! Callback interfaces for progress updates
31
   abstract interface
32
   abstract interface
@@ -209,6 +210,33 @@ contains
209
     node_ptr => current_view_node
210
     node_ptr => current_view_node
210
   end function get_current_view_node
211
   end function get_current_view_node
211
 
212
 
213
+  ! Set renderer state from tab (for tab switching)
214
+  subroutine set_renderer_state_from_tab(tab_root, tab_current_view, tab_has_data)
215
+    type(file_node), pointer, intent(in) :: tab_root, tab_current_view
216
+    logical, intent(in) :: tab_has_data
217
+
218
+    print *, "=== SET_RENDERER_STATE_FROM_TAB ==="
219
+    print *, "  tab_has_data: ", tab_has_data
220
+
221
+    ! Update global renderer state to match the tab
222
+    has_data = tab_has_data
223
+
224
+    if (tab_has_data .and. associated(tab_root)) then
225
+      ! Copy tab's tree data to renderer globals
226
+      root_node = tab_root
227
+      current_view_node => tab_current_view
228
+      print *, "  Synced renderer to tab's tree data"
229
+    else
230
+      ! Empty tab - nullify current view
231
+      current_view_node => null()
232
+      has_data = .false.
233
+      print *, "  Tab is empty - cleared renderer state"
234
+    end if
235
+
236
+    ! Invalidate layout to force recalculation
237
+    layout_calculated = .false.
238
+  end subroutine set_renderer_state_from_tab
239
+
212
   ! Scan directory and prepare for rendering
240
   ! Scan directory and prepare for rendering
213
   subroutine scan_directory(path)
241
   subroutine scan_directory(path)
214
     use, intrinsic :: iso_c_binding
242
     use, intrinsic :: iso_c_binding