static void fm_ditem_page_exec_drag_data_received (GtkWidget *widget, GdkDragContext *context, int x, int y, GtkSelectionData *selection_data, guint info, guint time, GtkEntry *entry) { char **uris; gboolean exactly_one; CajaFile *file; GKeyFile *key_file; char *uri, *type, *exec; uris = g_strsplit (gtk_selection_data_get_data (selection_data), "\r\n", 0); exactly_one = uris[0] != NULL && (uris[1] == NULL || uris[1][0] == '\0'); if (!exactly_one) { g_strfreev (uris); return; } file = caja_file_get_by_uri (uris[0]); g_strfreev (uris); g_return_if_fail (file != NULL); uri = caja_file_get_uri (file); if (caja_file_is_mime_type (file, "application/x-desktop")) { key_file = _g_key_file_new_from_uri (uri, G_KEY_FILE_NONE, NULL); if (key_file != NULL) { type = g_key_file_get_string (key_file, MAIN_GROUP, "Type", NULL); if (type != NULL && strcmp (type, "Application") == 0) { exec = g_key_file_get_string (key_file, MAIN_GROUP, "Exec", NULL); if (exec != NULL) { g_free (uri); uri = exec; } } g_free (type); g_key_file_free (key_file); } } gtk_entry_set_text (entry, uri?uri:""); gtk_widget_grab_focus (GTK_WIDGET (entry)); g_free (uri); caja_file_unref (file); }
char * nemo_link_local_get_link_uri (const char *uri) { GKeyFile *key_file; char *retval; if (!is_local_file_a_link (uri)) { return NULL; } key_file = _g_key_file_new_from_uri (uri, G_KEY_FILE_NONE, NULL); if (key_file == NULL) { return NULL; } retval = nemo_link_get_link_uri_from_desktop (key_file, uri); g_key_file_free (key_file); return retval; }
static char * slurp_key_string (const char *uri, const char *keyname, gboolean localize) { GKeyFile *key_file; char *result; key_file = _g_key_file_new_from_uri (uri, G_KEY_FILE_NONE, NULL); if (key_file == NULL) { return NULL; } if (localize) { result = g_key_file_get_locale_string (key_file, MAIN_GROUP, keyname, NULL, NULL); } else { result = g_key_file_get_string (key_file, MAIN_GROUP, keyname, NULL); } g_key_file_free (key_file); return result; }