static void fm_compact_view_init (FMCompactView *compact_view) { FMAbstractIconView *view = FM_ABSTRACT_ICON_VIEW (compact_view); /* initialize the icon view properties */ exo_icon_view_set_layout_mode (view->icons, EXO_ICON_VIEW_LAYOUT_COLS); exo_icon_view_set_row_spacing (view->icons, 0); exo_icon_view_set_margin (view->icons, 3); g_object_set (G_OBJECT (compact_view), "text-beside-icons", TRUE, NULL); /* setup the icon renderer */ g_object_set (FM_DIRECTORY_VIEW (view)->icon_renderer, "ypad", 0u, NULL); /* setup the name renderer (wrap only very long names) */ g_object_set (FM_DIRECTORY_VIEW (view)->name_renderer, "wrap-mode", PANGO_WRAP_WORD_CHAR, "wrap-width", 1280, "xalign", 0.0f, "yalign", 0.5f, NULL); g_settings_bind (marlin_compact_view_settings, "zoom-level", compact_view, "zoom-level", 0); }
static void fm_compact_view_zoom_level_changed (FMDirectoryView *view) { g_return_if_fail (FM_IS_DIRECTORY_VIEW (view)); /* set the zoom lvl for the name_renderer */ g_object_set (FM_DIRECTORY_VIEW (view)->name_renderer, "zoom-level", view->zoom_level, NULL); /* set the new "size" for the icon renderer */ g_object_set (FM_DIRECTORY_VIEW (view)->icon_renderer, "size", marlin_zoom_level_to_icon_size (view->zoom_level), NULL); exo_icon_view_invalidate_sizes (FM_ABSTRACT_ICON_VIEW (view)->icons); }
static gboolean fm_list_view_draw(GtkWidget* view_, cairo_t* cr, FMListView* view) { g_return_val_if_fail(FM_IS_LIST_VIEW(view), FALSE); GOFDirectoryAsync *dir = fm_directory_view_get_current_directory (FM_DIRECTORY_VIEW (view)); if (gof_directory_async_is_empty (dir)) { PangoLayout* layout = gtk_widget_create_pango_layout(GTK_WIDGET(view), NULL); gchar *str = g_strconcat("<span size='x-large'>", _("This folder is empty."), "</span>", NULL); pango_layout_set_markup (layout, str, -1); PangoRectangle extents; /* Get hayout height and width */ pango_layout_get_extents(layout, NULL, &extents); gdouble width = pango_units_to_double(extents.width); gdouble height = pango_units_to_double(extents.height); gtk_render_layout(gtk_widget_get_style_context(GTK_WIDGET(view)), cr, (double)gtk_widget_get_allocated_width(GTK_WIDGET(view))/2 - width/2, (double)gtk_widget_get_allocated_height(GTK_WIDGET(view))/2 - height/2, layout); } return FALSE; }
static void fm_icon_container_unfreeze_updates (CajaIconContainer *container) { FMIconView *icon_view; icon_view = get_icon_view (container); g_return_if_fail (icon_view != NULL); fm_directory_view_unfreeze_updates (FM_DIRECTORY_VIEW (icon_view)); }
static void fm_list_view_unfreeze_updates (FMListView *view) { /*We're done editing - make the filename-cells readonly again.*/ g_object_set (G_OBJECT (view->details->file_name_cell), "editable", FALSE, NULL); fm_directory_view_unfreeze_updates (FM_DIRECTORY_VIEW (view)); }
static void fm_list_view_freeze_updates (FMListView *view) { /* Make filename-cells editable. */ g_object_set (G_OBJECT (view->details->file_name_cell), "editable", TRUE, NULL); fm_directory_view_freeze_updates (FM_DIRECTORY_VIEW (view)); }
static void list_selection_changed_callback (GtkTreeSelection *selection, gpointer user_data) { FMListView *view = FM_LIST_VIEW (user_data); if (view->details->selection != NULL) gof_file_list_free (view->details->selection); view->details->selection = get_selection (view); fm_directory_view_notify_selection_changed (FM_DIRECTORY_VIEW (view)); }
static void row_expanded_callback (GtkTreeView *treeview, GtkTreeIter *iter, GtkTreePath *path, gpointer callback_data) { FMListView *view; GOFDirectoryAsync *directory; view = FM_LIST_VIEW (callback_data); if (fm_list_model_load_subdirectory (view->model, path, &directory)) { fm_directory_view_add_subdirectory (FM_DIRECTORY_VIEW (view), directory); } }
static void subdirectory_unloaded_callback (FMListModel *model, GOFDirectoryAsync *directory, gpointer callback_data) { g_debug ("%s\n", G_STRFUNC); FMListView *view; g_return_if_fail (FM_IS_LIST_MODEL (model)); g_return_if_fail (GOF_DIRECTORY_IS_ASYNC (directory)); view = FM_LIST_VIEW(callback_data); fm_directory_view_remove_subdirectory (FM_DIRECTORY_VIEW (view), directory); }
static int fm_desktop_icon_container_icons_compare (CajaIconContainer *container, CajaIconData *data_a, CajaIconData *data_b) { CajaFile *file_a; CajaFile *file_b; FMDirectoryView *directory_view; SortCategory category_a, category_b; file_a = (CajaFile *) data_a; file_b = (CajaFile *) data_b; directory_view = FM_DIRECTORY_VIEW (FM_ICON_CONTAINER (container)->view); g_return_val_if_fail (directory_view != NULL, 0); category_a = get_sort_category (file_a); category_b = get_sort_category (file_b); if (category_a == category_b) { return caja_file_compare_for_sort (file_a, file_b, CAJA_FILE_SORT_BY_DISPLAY_NAME, fm_directory_view_should_sort_directories_first (directory_view), FALSE); } if (category_a < category_b) { return -1; } else { return +1; } }
static CajaIconInfo * fm_icon_container_get_icon_images (CajaIconContainer *container, CajaIconData *data, int size, GList **emblem_pixbufs, char **embedded_text, gboolean for_drag_accept, gboolean need_large_embeddded_text, gboolean *embedded_text_needs_loading, gboolean *has_window_open) { FMIconView *icon_view; char **emblems_to_ignore; CajaFile *file; gboolean use_embedding; CajaFileIconFlags flags; guint emblem_size; file = (CajaFile *) data; g_assert (CAJA_IS_FILE (file)); icon_view = get_icon_view (container); g_return_val_if_fail (icon_view != NULL, NULL); use_embedding = FALSE; if (embedded_text) { *embedded_text = caja_file_peek_top_left_text (file, need_large_embeddded_text, embedded_text_needs_loading); use_embedding = *embedded_text != NULL; } if (emblem_pixbufs != NULL) { emblem_size = caja_icon_get_emblem_size_for_icon_size (size); /* don't return images larger than the actual icon size */ emblem_size = MIN (emblem_size, size); if (emblem_size > 0) { emblems_to_ignore = fm_directory_view_get_emblem_names_to_exclude (FM_DIRECTORY_VIEW (icon_view)); *emblem_pixbufs = caja_file_get_emblem_pixbufs (file, emblem_size, FALSE, emblems_to_ignore); g_strfreev (emblems_to_ignore); } } *has_window_open = caja_file_has_open_window (file); flags = CAJA_FILE_ICON_FLAGS_USE_MOUNT_ICON_AS_EMBLEM; if (!fm_icon_view_is_compact (icon_view) || caja_icon_container_get_zoom_level (container) > CAJA_ZOOM_LEVEL_STANDARD) { flags |= CAJA_FILE_ICON_FLAGS_USE_THUMBNAILS; if (fm_icon_view_is_compact (icon_view)) { flags |= CAJA_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE; } } if (use_embedding) { flags |= CAJA_FILE_ICON_FLAGS_EMBEDDING_TEXT; } if (for_drag_accept) { flags |= CAJA_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT; } return caja_file_get_icon (file, size, flags); }
static void create_and_set_up_tree_view (FMListView *view) { int k; GtkTreeViewColumn *col; GtkCellRenderer *renderer; view->model = FM_DIRECTORY_VIEW (view)->model; g_object_set (G_OBJECT (view->model), "has-child", TRUE, NULL); view->tree = GTK_TREE_VIEW (exo_tree_view_new ()); gtk_tree_view_set_model (view->tree, GTK_TREE_MODEL (view->model)); gtk_tree_view_set_search_column (view->tree, FM_LIST_MODEL_FILENAME); gtk_tree_view_set_rubber_banding (view->tree, TRUE); gtk_tree_view_set_rules_hint (view->tree, TRUE); g_signal_connect (view->tree, "item-hovered", G_CALLBACK (fm_list_view_item_hovered), view); g_signal_connect_object (gtk_tree_view_get_selection (view->tree), "changed", G_CALLBACK (list_selection_changed_callback), view, 0); g_signal_connect_object (view->tree, "button-press-event", G_CALLBACK (button_press_callback), view, 0); g_signal_connect (view->tree, "draw", G_CALLBACK (fm_list_view_draw), view); g_signal_connect_object (view->tree, "key_press_event", G_CALLBACK (key_press_callback), view, 0); g_signal_connect_object (view->tree, "row_expanded", G_CALLBACK (row_expanded_callback), view, 0); g_signal_connect_object (view->tree, "row_collapsed", G_CALLBACK (row_collapsed_callback), view, 0); g_signal_connect_object (view->tree, "row-activated", G_CALLBACK (row_activated_callback), view, 0); gtk_tree_selection_set_mode (gtk_tree_view_get_selection (view->tree), GTK_SELECTION_MULTIPLE); g_signal_connect_object (view->model, "subdirectory_unloaded", G_CALLBACK (subdirectory_unloaded_callback), view, 0); for(k=FM_LIST_MODEL_FILENAME; k< FM_LIST_MODEL_NUM_COLUMNS; k++) { if (k == FM_LIST_MODEL_FILENAME) { col = gtk_tree_view_column_new (); view->details->file_name_column = col; gtk_tree_view_column_set_sort_column_id (col,k); gtk_tree_view_column_set_resizable (col, TRUE); gtk_tree_view_column_set_title (col, gettext(col_title[k-FM_LIST_MODEL_FILENAME])); gtk_tree_view_column_set_expand (col, TRUE); /* add the icon renderer */ gtk_tree_view_column_pack_start (col, FM_DIRECTORY_VIEW (view)->icon_renderer, FALSE); gtk_tree_view_column_set_attributes (col, FM_DIRECTORY_VIEW (view)->icon_renderer, "file", FM_LIST_MODEL_FILE_COLUMN, NULL); renderer = marlin_cell_renderer_text_ellipsized_new (); view->details->file_name_cell = (GtkCellRendererText *) renderer; g_signal_connect (renderer, "edited", G_CALLBACK (cell_renderer_edited), view); g_signal_connect (renderer, "editing-canceled", G_CALLBACK (cell_renderer_editing_canceled), view); g_signal_connect (renderer, "editing-started", G_CALLBACK (cell_renderer_editing_started_cb), view); gtk_tree_view_column_pack_start (col, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (col, renderer, (GtkTreeCellDataFunc) filename_cell_data_func, view, NULL); } else { renderer = gtk_cell_renderer_text_new( ); col = gtk_tree_view_column_new_with_attributes(gettext(col_title[k-FM_LIST_MODEL_FILENAME]), renderer, "text", k, NULL); gtk_tree_view_column_set_sort_column_id (col,k); gtk_tree_view_column_set_resizable (col, TRUE); //gtk_tree_view_column_set_fixed_width (col, 240); //amtest gtk_tree_view_column_set_cell_data_func (col, renderer, (GtkTreeCellDataFunc) color_row_func, NULL, NULL); } gtk_tree_view_append_column(view->tree, col); } gtk_widget_show (GTK_WIDGET (view->tree)); gtk_container_add (GTK_CONTAINER (view), GTK_WIDGET (view->tree)); }
static gboolean key_press_callback (GtkWidget *widget, GdkEventKey *event, gpointer callback_data) { FMDirectoryView *view; //GdkEventButton button_event = { 0 }; gboolean handled; GtkTreeView *tree_view; GtkTreePath *path; tree_view = GTK_TREE_VIEW (widget); view = FM_DIRECTORY_VIEW (callback_data); handled = FALSE; switch (event->keyval) { case GDK_KEY_F10: if (event->state & GDK_CONTROL_MASK) { fm_directory_view_do_popup_menu (view, (GdkEventButton *) event); handled = TRUE; } break; case GDK_KEY_Right: gtk_tree_view_get_cursor (tree_view, &path, NULL); if (path) { gtk_tree_view_expand_row (tree_view, path, FALSE); gtk_tree_path_free (path); } handled = TRUE; break; case GDK_KEY_Left: gtk_tree_view_get_cursor (tree_view, &path, NULL); if (path) { gtk_tree_view_collapse_row (tree_view, path); gtk_tree_path_free (path); } handled = TRUE; break; case GDK_KEY_space: if (event->state & GDK_CONTROL_MASK) { handled = FALSE; break; } if (!gtk_widget_has_focus (GTK_WIDGET (tree_view))) { handled = FALSE; break; } if ((event->state & GDK_SHIFT_MASK) != 0) { /* alternate */ fm_directory_view_activate_selected_items (view, MARLIN_WINDOW_OPEN_FLAG_NEW_TAB); } else { fm_directory_view_preview_selected_items (view); } handled = TRUE; break; case GDK_KEY_Return: case GDK_KEY_KP_Enter: if ((event->state & GDK_SHIFT_MASK) != 0) { /* alternate */ fm_directory_view_activate_selected_items (view, MARLIN_WINDOW_OPEN_FLAG_NEW_TAB); } else { fm_directory_view_activate_selected_items (view, MARLIN_WINDOW_OPEN_FLAG_DEFAULT); } handled = TRUE; break; default: handled = FALSE; } return handled; }
static gboolean button_press_callback (GtkTreeView *tree_view, GdkEventButton *event, FMListView *view) { GtkTreeSelection *selection; GtkTreePath *path; GtkTreeIter iter; GtkAction *action; GOFFile *file; selection = gtk_tree_view_get_selection (tree_view); /* check if the event is for the bin window */ if (G_UNLIKELY (event->window != gtk_tree_view_get_bin_window (tree_view))) return FALSE; /* we unselect all selected items if the user clicks on an empty * area of the treeview and no modifier key is active. */ if ((event->state & gtk_accelerator_get_default_mod_mask ()) == 0 && !gtk_tree_view_get_path_at_pos (tree_view, event->x, event->y, NULL, NULL, NULL, NULL)) { gtk_tree_selection_unselect_all (selection); } /* open the context menu on right clicks */ if (event->type == GDK_BUTTON_PRESS && event->button == 3) { if (gtk_tree_view_get_path_at_pos (tree_view, event->x, event->y, &path, NULL, NULL, NULL)) { /* select the path on which the user clicked if not selected yet */ if (!gtk_tree_selection_path_is_selected (selection, path)) { /* we don't unselect all other items if Control is active */ if ((event->state & GDK_CONTROL_MASK) == 0) gtk_tree_selection_unselect_all (selection); if (!gtk_tree_view_is_blank_at_pos (tree_view, event->x, event->y, NULL, NULL, NULL, NULL) && gtk_tree_path_get_depth (path) == 1) gtk_tree_selection_select_path (selection, path); } gtk_tree_path_free (path); } /* queue the menu popup */ fm_directory_view_queue_popup (FM_DIRECTORY_VIEW (view), event); return TRUE; } else if ((event->type == GDK_BUTTON_PRESS || event->type == GDK_2BUTTON_PRESS) && event->button == 2) { /* determine the path to the item that was middle-clicked */ if (gtk_tree_view_get_path_at_pos (tree_view, event->x, event->y, &path, NULL, NULL, NULL)) { /* select only the path to the item on which the user clicked */ gtk_tree_selection_unselect_all (selection); gtk_tree_selection_select_path (selection, path); fm_directory_view_activate_selected_items (FM_DIRECTORY_VIEW (view), MARLIN_WINDOW_OPEN_FLAG_NEW_TAB); /* cleanup */ gtk_tree_path_free (path); } return TRUE; } return FALSE; }
static void row_activated_callback (GtkTreeView *treeview, GtkTreeIter *iter, GtkTreePath *path, FMListView *view) { g_debug ("%s\n", G_STRFUNC); fm_directory_view_activate_selected_items (FM_DIRECTORY_VIEW (view), MARLIN_WINDOW_OPEN_FLAG_DEFAULT); }
static void fm_list_view_item_hovered (ExoTreeView *exo_tree, GtkTreePath *path, FMListView *view) { fm_directory_view_notify_item_hovered (FM_DIRECTORY_VIEW (view), path); }