@@ -87,6 +87,10 @@ module gtk_app |
| 87 | 87 | ! Open directory button pointer (for pulsing on empty tabs) |
| 88 | 88 | type(c_ptr), save :: open_dir_btn_ptr = c_null_ptr |
| 89 | 89 | |
| 90 | + ! Toggle button pointers (for active state indicators) |
| 91 | + type(c_ptr), save :: toggle_dotfiles_btn_ptr = c_null_ptr |
| 92 | + logical, save :: dotfiles_button_active = .true. ! Track button state (starts true since hidden files shown by default) |
| 93 | + |
| 90 | 94 | ! Drawing area pointer (for redrawing treemap) |
| 91 | 95 | type(c_ptr), save :: drawing_area_ptr = c_null_ptr |
| 92 | 96 | |
@@ -356,8 +360,10 @@ contains |
| 356 | 360 | |
| 357 | 361 | ! Toggle Dotfiles button |
| 358 | 362 | toggle_dotfiles_btn = gtk_button_new() |
| 363 | + toggle_dotfiles_btn_ptr = toggle_dotfiles_btn ! Store reference for state updates |
| 359 | 364 | call gtk_button_set_icon_name(toggle_dotfiles_btn, "view-reveal-symbolic"//c_null_char) |
| 360 | 365 | call gtk_widget_set_tooltip_text(toggle_dotfiles_btn, "Toggle Hidden Files/Dotfiles"//c_null_char) |
| 366 | + call gtk_widget_add_css_class(toggle_dotfiles_btn, "suggested-action"//c_null_char) ! Start active (hidden files shown by default) |
| 361 | 367 | call g_signal_connect(toggle_dotfiles_btn, "clicked"//c_null_char, & |
| 362 | 368 | c_funloc(on_toggle_dotfiles_clicked), c_null_ptr) |
| 363 | 369 | call gtk_box_append(toolbar, toggle_dotfiles_btn) |
@@ -517,17 +523,8 @@ contains |
| 517 | 523 | type(c_ptr) :: css_provider, display |
| 518 | 524 | character(len=:), allocatable :: css_data |
| 519 | 525 | |
| 520 | | - ! CSS with pulsing animation for suggested-action class (empty tabs) |
| 521 | | - ! and card border styling to match active tab appearance |
| 526 | + ! CSS for canvas card border styling |
| 522 | 527 | css_data = & |
| 523 | | - "@keyframes pulse { " // & |
| 524 | | - "0% { opacity: 1.0; } " // & |
| 525 | | - "50% { opacity: 0.5; } " // & |
| 526 | | - "100% { opacity: 1.0; } " // & |
| 527 | | - "} " // & |
| 528 | | - ".suggested-action { " // & |
| 529 | | - "animation: pulse 1.5s ease-in-out infinite; " // & |
| 530 | | - "} " // & |
| 531 | 528 | ".canvas-card { " // & |
| 532 | 529 | "background-color: rgba(250, 250, 250, 1.0); " // & |
| 533 | 530 | "border: 1px solid rgba(179, 179, 179, 1.0); " // & |
@@ -543,10 +540,10 @@ contains |
| 543 | 540 | ! Get default display |
| 544 | 541 | display = gdk_display_get_default() |
| 545 | 542 | |
| 546 | | - ! Add CSS provider to display (600 = GTK_STYLE_PROVIDER_PRIORITY_APPLICATION) |
| 547 | | - call gtk_style_context_add_provider_for_display(display, css_provider, 600_c_int) |
| 543 | + ! Add CSS provider to display (800 = GTK_STYLE_PROVIDER_PRIORITY_USER) |
| 544 | + call gtk_style_context_add_provider_for_display(display, css_provider, 800_c_int) |
| 548 | 545 | |
| 549 | | - print *, "Custom CSS loaded (pulsing animation + canvas card styling)" |
| 546 | + print *, "Custom CSS loaded (canvas card styling)" |
| 550 | 547 | end subroutine load_custom_css |
| 551 | 548 | |
| 552 | 549 | ! Callback when Open Directory button is clicked |
@@ -1362,6 +1359,7 @@ contains |
| 1362 | 1359 | ! Callback when Toggle Dotfiles button is clicked |
| 1363 | 1360 | subroutine on_toggle_dotfiles_clicked(button, user_data) bind(c) |
| 1364 | 1361 | use treemap_renderer, only: toggle_hidden_files |
| 1362 | + use gtk, only: gtk_widget_add_css_class, gtk_widget_remove_css_class |
| 1365 | 1363 | type(c_ptr), value :: button, user_data |
| 1366 | 1364 | type(tab_state), pointer :: tab |
| 1367 | 1365 | |
@@ -1372,8 +1370,25 @@ contains |
| 1372 | 1370 | return |
| 1373 | 1371 | end if |
| 1374 | 1372 | |
| 1373 | + ! Toggle the hidden files state in renderer |
| 1375 | 1374 | call toggle_hidden_files() |
| 1376 | | - call sniffly_update_status("Toggled hidden files visibility - rescanning...") |
| 1375 | + |
| 1376 | + ! Toggle our button state tracker |
| 1377 | + dotfiles_button_active = .not. dotfiles_button_active |
| 1378 | + |
| 1379 | + print *, "DEBUG: dotfiles_button_active =", dotfiles_button_active |
| 1380 | + print *, "DEBUG: toggle_dotfiles_btn_ptr associated?", c_associated(toggle_dotfiles_btn_ptr) |
| 1381 | + |
| 1382 | + ! Update button visual state - toggle GTK's built-in suggested-action class |
| 1383 | + if (dotfiles_button_active) then |
| 1384 | + print *, "DEBUG: Adding 'suggested-action' CSS class" |
| 1385 | + call gtk_widget_add_css_class(toggle_dotfiles_btn_ptr, "suggested-action"//c_null_char) |
| 1386 | + call sniffly_update_status("Showing hidden files - rescanning...") |
| 1387 | + else |
| 1388 | + print *, "DEBUG: Removing 'suggested-action' CSS class" |
| 1389 | + call gtk_widget_remove_css_class(toggle_dotfiles_btn_ptr, "suggested-action"//c_null_char) |
| 1390 | + call sniffly_update_status("Hiding hidden files - rescanning...") |
| 1391 | + end if |
| 1377 | 1392 | |
| 1378 | 1393 | ! Trigger rescan to apply the filter |
| 1379 | 1394 | if (len_trim(tab%scan_path) > 0) then |