====== Caricare interfaccia glade non dalla directory corrente ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//24/12/2009//** \\ \\ **Scenario: ** (facendo riferimento all'articolo [[programmazione:libglade:sviluppare_con_libglade]]) spesso capita di dovere distribuire una directory contenente eseguibile e file glade per l'interfaccia grafica. Il nostro eseguibile quindi deve poter trovare il file contenente l'interfaccia grafica da qualunque percorso esso sia lanciato. Quando si deve caricare un file generato da glade si usa spesso del codice di questo tipo: ... /* Carica l'interfaccia dal file di glade */ xml = glade_xml_new ("interfaccia.glade", NULL, NULL); ... Se lanciamo a questo punto il nostro eseguibile dalla directory dello stesso, nessun problema l'eseguibile si avvia correttamente, ma se lanciamo l'eseguibile da un'altra directory otterremmo un messaggio del genere: libglade-WARNING **: could not find glade file 'interfaccia.glade' che ci avverte del fatto che libglade non e' in grado di trovare il nostro file ''interfaccia.glade'' . ===== Ovviare al problema ===== Se utilizziamo le seguenti istruzioni invece il file viene sempre trovato in maniera corretta //purche' resti nella stessa directory dell'eseguibile// ... /*Carica l'interfaccia dal file glade*/ /*Ricava il percorso dell'eseguibile, senza il nome del file*/ gchar* base = g_path_get_dirname(argv[0]); /*Concatena il percorso base al nome file "interfaccia.glade"*/ gchar* glade_file = g_build_filename (base, "interfaccia.glade", NULL); /*Infine carica come disolito il file dell'interfaccia */ xml = glade_xml_new(glade_file, NULL, NULL); ... ===== Quando l'eseguibile potrebbe essere nel path di sistema ===== ... gchar* base; gchar* glade_file; //se il programma NON e' in path if (g_find_program_in_path ("eseguibile.bin")==NULL){ /*Ricava il percorso dell'eseguibile, senza il nome del file */ base = g_path_get_dirname(argv[0]); /*Concatena il percorso base al nome file gui.glade */ glade_file = g_build_filename (base,"../share/progetto", "gui.glade", NULL); }else{ base = g_path_get_dirname(g_find_program_in_path ("eseguibile.bin")); glade_file = g_build_filename (base,"../share/progetto", "gui.glade", NULL); } ...