[gelöst] gtk_file_selection_get_filename überschreibt alles?!?
-
Hallo,
ich habe ein misteriöses problem mit der funktion gtk_file_selection_get_filename. es kommt mir so vor, als würde es ständig mein komplettes array von strukturen (wenn man das so nennen kann) überschreiben.
ich rufe die funktion get_filename über einen open-dialog 2 mal nacheinander auf. wenn ich möglichkeit 1 benutze (ist markiert), steht hinterher in pdateien[0]->path und pdateien[1]->path das gleiche oO bei möglichkeit 2 haben die zeichenketten unterschiedliche werte. und genau das ist mein problem. wieso werden die beiden geöffneten pfade (stehen in "sel") nicht einzeln gespeichert, sondern gleich in beiden variablen?
leider ist der code etwas länger, ich hab rausgekürzt, was ging.
würde mich sehr über eine kleine hilfe freuen
gruß
martin#include <stdio.h> #include <stdlib.h> #include <gtk/gtk.h> #include <string.h> #include <glib.h> typedef struct { char *path; char *title; char *artist; char *album; int year; char *comment; int track; char *genre; int bitrate; int sample_rate; int channels; int length; } sFile; int max_titel = 0; sFile *pdateien[1000]; int filetypification(char *pfad, sFile *pointer) { pointer->path = pfad; return 0; } static gboolean delete_event( GtkWidget *widget,GdkEvent *event, gpointer data ) { return FALSE; } int main( int argc, char *argv[] ) { GtkWidget *window; GtkWidget *b_play, *b_pause, *b_stop, *b_next, *b_previous, *b_repeat, *b_shuffle, *b_volup, *b_voldown, *b_open; GtkWidget *table; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *l_titel,*l_zeit, *f_titel, *f_zeit; GtkWidget *file_select; GtkWidget *pbar; GtkWidget *scrolled_window; GtkWidget *gtklist; GtkWidget *playlist; GtkWidget *list_item; gchar *sel; gint open; gtk_init (&argc, &argv); pbar = gtk_progress_bar_new (); int closeopen(void) { gtk_widget_hide(file_select); return (0); } int fileopen(void) { gtk_widget_show(file_select); return (0); } int closelist(void) { gtk_widget_hide(playlist); return (0); } int get_filename(GtkWidget *widget, GtkFileSelection *selected) { /* ------------------------------------------------------------------------------------*/ /* MÖGLICHKEIT 1: FUNKTIONIERT NICHT */ sel = (char *)gtk_file_selection_get_filename(GTK_FILE_SELECTION(selected)); /* MÖGLICHKEIT 2: FUNKTIONIERT */ if(max_titel == 0) sel = "asd"; else sel = "dsa"; /* ------------------------------------------------------------------------------------*/ printf("Folgende Datei wurde ausgewählt : %s\n\n", sel); gtk_widget_hide(file_select); open=1; pdateien[max_titel] = malloc(sizeof(sFile)); filetypification(sel, pdateien[max_titel]); max_titel++; printf("\n\npfad 1: %s\n",(char*)pdateien[0]->path); /* MÖGLICHKEIT 1: beim 2. mal ausgewählte datei oO MÖGLICHKEIT 2: asd */ if(max_titel == 2) { printf("\n\npfad 2: %s\n",(char*)pdateien[1]->path); /* MÖGLICHKEIT 1: beim 2. mal ausgewählte datei. MÖGLICHKEIT 2: dsa */ } return (0); } /* Create a new window */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); /* Set the window title */ gtk_window_set_title (GTK_WINDOW (window), "MP3 Player"); /* Set a handler for delete_event that immediately * exits GTK. */ g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (delete_event), NULL); /* Sets the border width of the window. */ gtk_container_set_border_width (GTK_CONTAINER (window), 20); /* Create a 2 Zeilen x8 Spalten table */ table = gtk_table_new (2, 8, TRUE); /*open Knopf*/ b_open = gtk_button_new_with_label ("OPEN"); g_signal_connect (G_OBJECT (b_open), "clicked", G_CALLBACK (fileopen),NULL); gtk_table_attach_defaults (GTK_TABLE (table), b_open, 7, 8, 0, 2); /*Eine Vertikale BOx mit unterliegenden horizontalen Boxen*/ vbox = gtk_vbox_new (FALSE, 5); hbox = gtk_hbox_new (FALSE, 5); gtk_container_add (GTK_CONTAINER (window), hbox); gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (window), 5); hbox = gtk_hbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (vbox), pbar, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); gtk_widget_show_all (window); /* Oeffnen-dialog ------------------------------------------------- */ file_select = gtk_file_selection_new("Auswahl"); /*Signale einrichten*/ gtk_signal_connect(GTK_OBJECT(file_select), "destroy", (GtkSignalFunc) closeopen, &file_select); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(file_select)->ok_button), "clicked", (GtkSignalFunc) get_filename, file_select); gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(file_select)->cancel_button), "clicked", (GtkSignalFunc) closeopen, GTK_OBJECT(file_select)); /*lock window size*/ gtk_window_set_resizable (GTK_WINDOW(window), FALSE); gtk_main (); return 0; }
-
falsches Forum ... entweder C++ oder (was wahrscheinlicher ist) ANSI C
-
oh ja, tut mir leid, bin ich wohl durcheinander gekommen
EDIT: lösung gefunden, hat sich erledigt.