GList * nemo_directory_match_pattern (NemoDirectory *directory, const char *pattern) { GList *files, *l, *ret; GPatternSpec *spec; ret = NULL; spec = g_pattern_spec_new (pattern); files = nemo_directory_get_file_list (directory); for (l = files; l; l = l->next) { NemoFile *file; char *name; file = NEMO_FILE (l->data); name = nemo_file_get_display_name (file); if (g_pattern_match_string (spec, name)) { ret = g_list_prepend(ret, nemo_file_ref (file)); } g_free (name); } g_pattern_spec_free (spec); nemo_file_list_free (files); return ret; }
void nemo_action_set_tt (NemoAction *action, NemoFile *file) { const gchar *orig_tt = nemo_action_get_orig_tt (action); if (!test_string_for_label_token (orig_tt) || file == NULL || action->selection_type != SELECTION_SINGLE) { gtk_action_set_tooltip (GTK_ACTION (action), orig_tt); return; } gchar *display_name = nemo_file_get_display_name (file); gchar **split = g_strsplit (orig_tt, TOKEN_LABEL_FILE_NAME, 2); gchar *new_tt = g_strconcat (split[0], display_name, split[1], NULL); gchar *escaped = eel_str_double_underscores (new_tt); gtk_action_set_tooltip (GTK_ACTION (action), escaped); g_strfreev (split); g_free (display_name); g_free (new_tt); g_free (escaped); }
static const char * tree_node_get_display_name (TreeNode *node) { if (node->display_name == NULL) { node->display_name = nemo_file_get_display_name (node->file); } return node->display_name; }
char * nemo_compute_title_for_location (GFile *location) { NemoFile *file; char *title; char *builder; /* TODO-gio: This doesn't really work all that great if the info about the file isn't known atm... */ if (nemo_is_home_directory (location)) { return g_strdup (_("Home")); } builder = NULL; if (location) { file = nemo_file_get (location); builder = nemo_file_get_description (file); if (builder == NULL) { builder = nemo_file_get_display_name (file); } nemo_file_unref (file); } if (builder == NULL) { builder = g_file_get_basename (location); } if (g_settings_get_boolean (nemo_preferences, NEMO_PREFERENCES_SHOW_FULL_PATH_TITLES)) { file = nemo_file_get (location); char *path = g_filename_from_uri (nemo_file_get_uri (file), NULL, NULL); if (path != NULL) { title = g_strdup_printf("%s - %s", builder, path); } else { title = g_strdup(builder); } nemo_file_unref (file); g_free (path); g_free (builder); } else { title = g_strdup(builder); g_free (builder); } return title; }
static gboolean tree_node_update_display_name (TreeNode *node) { char *display_name; if (node->display_name == NULL) { return FALSE; } /* don't update root node display names */ if (node->parent == NULL) { return FALSE; } display_name = nemo_file_get_display_name (node->file); if (strcmp (display_name, node->display_name) == 0) { g_free (display_name); return FALSE; } g_free (node->display_name); node->display_name = NULL; return TRUE; }
static void bookmark_set_name_from_ready_file (NemoBookmark *self, NemoFile *file) { gchar *display_name; if (self->details->has_custom_name) { return; } display_name = nemo_file_get_display_name (self->details->file); if (nemo_file_is_home (self->details->file)) { nemo_bookmark_set_custom_name (self, _("Home")); } else if (g_strcmp0 (self->details->name, display_name) != 0) { nemo_bookmark_set_custom_name (self, display_name); DEBUG ("%s: name changed to %s", nemo_bookmark_get_name (self), display_name); } g_free (display_name); }
/* This callback returns the text, both the editable part, and the * part below that is not editable. */ static void nemo_icon_view_container_get_icon_text (NemoIconContainer *container, NemoIconData *data, char **editable_text, char **additional_text, gboolean include_invisible) { GQuark *attributes; char *text_array[4]; int i, j, num_attributes; NemoIconView *icon_view; NemoFile *file; gboolean use_additional; file = NEMO_FILE (data); g_assert (NEMO_IS_FILE (file)); g_assert (editable_text != NULL); icon_view = get_icon_view (container); g_return_if_fail (icon_view != NULL); use_additional = (additional_text != NULL); /* In the smallest zoom mode, no text is drawn. */ if (nemo_icon_container_get_zoom_level (container) == NEMO_ZOOM_LEVEL_SMALLEST && !include_invisible) { *editable_text = NULL; } else { /* Strip the suffix for nemo object xml files. */ *editable_text = nemo_file_get_display_name (file); } if (!use_additional) { return; } if (nemo_icon_view_is_compact (icon_view)) { *additional_text = NULL; return; } if (NEMO_IS_DESKTOP_ICON_FILE (file) || nemo_file_is_nemo_link (file)) { /* Don't show the normal extra information for desktop icons, * or desktop files, it doesn't make sense. */ *additional_text = NULL; return; } /* Find out what attributes go below each icon. */ attributes = nemo_icon_view_container_get_icon_text_attribute_names (container, &num_attributes); /* Get the attributes. */ j = 0; for (i = 0; i < num_attributes; ++i) { if (attributes[i] == attribute_none_q) { continue; } text_array[j++] = nemo_file_get_string_attribute_with_default_q (file, attributes[i]); } text_array[j] = NULL; /* Return them. */ if (j == 0) { *additional_text = NULL; } else if (j == 1) { /* Only one item, avoid the strdup + free */ *additional_text = text_array[0]; } else { *additional_text = g_strjoinv ("\n", text_array); for (i = 0; i < j; i++) { g_free (text_array[i]); } } }
static gchar * get_insertion_string (NemoAction *action, TokenType token_type, GList *selection, NemoFile *parent) { GList *l; GString *str = g_string_new(""); gboolean first = TRUE; switch (token_type) { case TOKEN_PATH_LIST: if (g_list_length (selection) > 0) { for (l = selection; l != NULL; l = l->next) { if (!first) str = insert_separator (action, str); str = insert_quote (action, str); gchar *path = get_path (action, NEMO_FILE (l->data)); if (path) str = score_append (action, str, path); g_free (path); str = insert_quote (action, str); first = FALSE; } } else { goto default_parent_path; } break; case TOKEN_URI_LIST: if (g_list_length (selection) > 0) { for (l = selection; l != NULL; l = l->next) { if (!first) str = insert_separator (action, str); str = insert_quote (action, str); gchar *uri = nemo_file_get_uri (NEMO_FILE (l->data)); str = score_append (action, str, uri); g_free (uri); str = insert_quote (action, str); first = FALSE; } } else { goto default_parent_path; } break; case TOKEN_PARENT_PATH: ; default_parent_path: ; gchar *path = get_path (action, parent); if (path == NULL) { gchar *name = nemo_file_get_display_name (parent); if (g_strcmp0 (name, "x-nemo-desktop") == 0) path = nemo_get_desktop_directory (); else path = g_strdup (""); g_free (name); } str = insert_quote (action, str); str = score_append (action, str, path); str = insert_quote (action, str); g_free (path); break; case TOKEN_FILE_DISPLAY_NAME: if (g_list_length (selection) > 0) { gchar *file_display_name = nemo_file_get_display_name (NEMO_FILE (selection->data)); str = score_append (action, str, file_display_name); g_free (file_display_name); } else { goto default_parent_display_name; } break; case TOKEN_PARENT_DISPLAY_NAME: ; default_parent_display_name: ; gchar *parent_display_name; gchar *real_display_name = nemo_file_get_display_name (parent); if (g_strcmp0 (real_display_name, "x-nemo-desktop") == 0) parent_display_name = g_strdup_printf (_("Desktop")); else parent_display_name = nemo_file_get_display_name (parent); g_free (real_display_name); str = insert_quote (action, str); str = score_append (action, str, parent_display_name); str = insert_quote (action, str); g_free (parent_display_name); break; case TOKEN_DEVICE: if (g_list_length (selection) > 0) { for (l = selection; l != NULL; l = l->next) { if (!first) str = insert_separator (action, str); str = insert_quote (action, str); gchar *dev = get_device_path (action, NEMO_FILE (l->data)); if (dev) str = score_append (action, str, dev); g_free (dev); str = insert_quote (action, str); first = FALSE; } } else { goto default_parent_path; } break; default: break; } gchar *ret = str->str; g_string_free (str, FALSE); return ret; }
gboolean nemo_action_get_visibility (NemoAction *action, GList *selection, NemoFile *parent) { gboolean selection_type_show = FALSE; gboolean extension_type_show = TRUE; gboolean condition_type_show = TRUE; recalc_dbus_conditions (action); if (!nemo_action_get_dbus_satisfied (action)) goto out; gchar **conditions = nemo_action_get_conditions (action); guint condition_count = conditions != NULL ? g_strv_length (conditions) : 0; if (condition_count > 0) { int j; gchar *condition; for (j = 0; j < condition_count; j++) { condition = conditions[j]; if (g_strcmp0 (condition, "desktop") == 0) { gchar *name = nemo_file_get_display_name (parent); if (g_strcmp0 (name, "x-nemo-desktop") != 0) condition_type_show = FALSE; g_free (name); } else if (g_strcmp0 (condition, "removable") == 0) { gboolean is_removable = FALSE; if (g_list_length (selection) > 0) { GMount *mount = nemo_file_get_mount (selection->data); if (mount) { GDrive *drive = g_mount_get_drive (mount); if (drive) { if (g_drive_is_media_removable (drive)) is_removable = TRUE; g_object_unref (drive); } } } condition_type_show = is_removable; } else if (g_str_has_prefix (condition, "gsettings")) { condition_type_show = check_gsettings_condition (action, condition); } if (!condition_type_show) break; } } if (!condition_type_show) goto out; SelectionType selection_type = nemo_action_get_selection_type (action); GList *iter; guint selected_count = g_list_length (selection); switch (selection_type) { case SELECTION_SINGLE: selection_type_show = selected_count == 1; break; case SELECTION_MULTIPLE: selection_type_show = selected_count > 1; break; case SELECTION_NOT_NONE: selection_type_show = selected_count > 0; break; case SELECTION_NONE: selection_type_show = selected_count == 0; break; case SELECTION_ANY: selection_type_show = TRUE; break; default: selection_type_show = selected_count == selection_type; break; } gchar **extensions = nemo_action_get_extension_list (action); gchar **mimetypes = nemo_action_get_mimetypes_list (action); guint ext_count = extensions != NULL ? g_strv_length (extensions) : 0; guint mime_count = mimetypes != NULL ? g_strv_length (mimetypes) : 0; if (ext_count == 1 && g_strcmp0 (extensions[0], "any") == 0) goto out; gboolean found_match = TRUE; for (iter = selection; iter != NULL && found_match; iter = iter->next) { found_match = FALSE; gchar *raw_fn = nemo_file_get_name (NEMO_FILE (iter->data)); gchar *filename = g_ascii_strdown (raw_fn, -1); g_free (raw_fn); int i; gboolean is_dir = get_is_dir_hack (iter->data); if (ext_count > 0) { for (i = 0; i < ext_count; i++) { if (g_strcmp0 (extensions[i], "dir") == 0) { if (is_dir) { found_match = TRUE; break; } } else if (g_strcmp0 (extensions[i], "none") == 0) { if (g_strrstr (filename, ".") == NULL) { found_match = TRUE; break; } } else if (g_strcmp0 (extensions[i], "nodirs") == 0) { if (!is_dir) { found_match = TRUE; break; } } else { gchar *str = g_ascii_strdown (extensions[i], -1); if (g_str_has_suffix (filename, str)) { found_match = TRUE; } g_free (str); if (found_match) { break; } } } g_free (filename); } if (mime_count > 0) { for (i = 0; i < mime_count; i++) { if (nemo_file_is_mime_type (NEMO_FILE (iter->data), mimetypes[i])) { found_match = TRUE; break; } } } if (nemo_file_is_mime_type (NEMO_FILE (iter->data), "application/x-nemo-link")) { found_match = FALSE; } } extension_type_show = found_match; out: return selection_type_show && extension_type_show && condition_type_show; }