summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Kareh <[email protected]>2026-02-26 15:40:51 -0500
committerVictor Kareh <[email protected]>2026-02-26 15:47:32 -0500
commit7000294b55860226117746d316287ea6465fec08 (patch)
tree522e01543f059ec8da77f39a735c547fdcb195a7
parent89e422c3dcccddf77e49458a67025f1ef399f28b (diff)
downloadcaja-hidden-transparency.tar.bz2
caja-hidden-transparency.tar.xz
list-view: Display hidden files with transparencyhidden-transparency
Render hidden files with some transparency to visually distinguish them from regular files. Fixes #1872
-rw-r--r--src/file-manager/fm-list-view.c67
1 files changed, 63 insertions, 4 deletions
diff --git a/src/file-manager/fm-list-view.c b/src/file-manager/fm-list-view.c
index 57b5862c..9ad06db8 100644
--- a/src/file-manager/fm-list-view.c
+++ b/src/file-manager/fm-list-view.c
@@ -1585,6 +1585,66 @@ apply_columns_settings (FMListView *list_view,
}
static void
+pixbuf_cell_data_func (GtkTreeViewColumn *column,
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ FMListView *view)
+{
+ CajaFile *file;
+ cairo_surface_t *surface;
+
+ gtk_tree_model_get (model, iter,
+ FM_LIST_MODEL_FILE_COLUMN, &file,
+ FM_LIST_MODEL_SMALLEST_ICON_COLUMN, &surface,
+ -1);
+
+ /* Apply transparency to hidden files */
+ if (file != NULL && surface != NULL && caja_file_is_hidden_file (file))
+ {
+ cairo_surface_t *original_surface;
+ cairo_t *cr;
+ int width, height;
+ cairo_format_t format;
+ double scale_x, scale_y;
+
+ width = cairo_image_surface_get_width (surface);
+ height = cairo_image_surface_get_height (surface);
+ format = cairo_image_surface_get_format (surface);
+ cairo_surface_get_device_scale (surface, &scale_x, &scale_y);
+
+ /* Keep reference to original */
+ original_surface = surface;
+
+ /* Create a new transparent surface */
+ surface = cairo_surface_create_similar_image (original_surface, format, width, height);
+ cairo_surface_set_device_scale (surface, scale_x, scale_y);
+
+ cr = cairo_create (surface);
+
+ /* Paint the original surface with 55% opacity */
+ cairo_set_source_surface (cr, original_surface, 0, 0);
+ cairo_paint_with_alpha (cr, 0.55);
+
+ cairo_destroy (cr);
+ cairo_surface_destroy (original_surface);
+ }
+
+ /* Set the surface and clean up */
+ g_object_set (renderer, "surface", surface, NULL);
+
+ if (surface != NULL)
+ {
+ cairo_surface_destroy (surface);
+ }
+
+ if (file != NULL)
+ {
+ caja_file_unref (file);
+ }
+}
+
+static void
filename_cell_data_func (GtkTreeViewColumn *column,
GtkCellRenderer *renderer,
GtkTreeModel *model,
@@ -1863,10 +1923,9 @@ create_and_set_up_tree_view (FMListView *view)
gtk_tree_view_column_set_resizable (view->details->file_name_column, TRUE);
gtk_tree_view_column_pack_start (view->details->file_name_column, cell, FALSE);
- gtk_tree_view_column_set_attributes (view->details->file_name_column,
- cell,
- "surface", FM_LIST_MODEL_SMALLEST_ICON_COLUMN,
- NULL);
+ gtk_tree_view_column_set_cell_data_func (view->details->file_name_column, cell,
+ (GtkTreeCellDataFunc) pixbuf_cell_data_func,
+ view, NULL);
cell = gtk_cell_renderer_text_new ();
g_object_set (cell,