0

I'm following the instructions of the official Raspberry Pi book called An introduction to C & GUI Programming (link).

It uses GTK2 to create a gui in C.

I encountered some problems trying the code that should save a file. Here the code of the book (same I used):

#include <gtk/gtk.h> static void save_file (GtkWidget *btn, gpointer ptr) { GtkWidget *sch = gtk_file_chooser_dialog_new ("Save file", GTK_WINDOW (ptr), GTK_FILE_CHOOSER_ACTION_SAVE, "Cancel", 0, "OK", 1, NULL); if (gtk_dialog_run (GTK_DIALOG (sch)) == 1) { printf ("%s selected\n", gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (sch))); } gtk_widget_destroy (sch); } void end_program (GtkWidget *wid, gpointer ptr) { gtk_main_quit (); } int main (int argc, char * argv[]) { gtk_init (&argc, &argv); GtkWidget *win = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget *btn = gtk_button_new_with_label ("Close window"); g_signal_connect (btn, "clicked", G_CALLBACK (end_program), NULL); g_signal_connect (win, "delete_event", G_CALLBACK (end_program), NULL); GtkWidget *vbox = gtk_vbox_new (FALSE, 5); gtk_container_add (GTK_CONTAINER (win), box); GtkWidget *fc_btn = gtk_button_new_with_label ("Save file"); g_signal_connect (fc_btn, "clicked", G_CALLBACK (save_file), win); gtk_box_pack_start (GTK_BOX (vbox), fc_btn, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), btn, TRUE, TRUE, 0); gtk_widget_show_all (win); gtk_main (); return 0; } 

The books says that this program should open a window with a button that, if clicked, opens a new window where I can insert the name of the file and with OK I should be able to save it.

The resulting file path is printed correctly inside the terminal.

If I enter inside the path where I saved the file, the file doesn't exist! It's not hidded neither saved with a different name.

Is there something missing in this piece of code?

1
  • I went to the referenced link and downloaded the PDF file to review it. The code snippet that talks about what the file chooser dialog looks like when saving a file only contains code to present the file chooser dialog and confirm that a file entry was typed in or an existing file was chosen. There is no functionality in the sample code to actually write out data to a file and create a file. See my response below along with a recommended video tutorial link. Commented May 5, 2022 at 20:02

1 Answer 1

1

I left you a comment above. As noted, I reviewed the sample code in the PDF version of the book in your link. The purpose of that code is to present a file chooser dialog widget and confirm the name of the file you either select or type in by printing the full path in the console. The program, as is, has no mechanism for actually writing a file out to your storage medium. So that is why you do not see a file when you view the folder on your system. If you want as a minimum, a file actually written, a little more code needs to be added. Just to give you one really simple example of what that might look like, I made a revision to the "save_file" function in your sample program as noted in the following code snippet.

static void save_file (GtkWidget *btn, gpointer ptr) { GtkWidget *sch = gtk_file_chooser_dialog_new ("Save file", GTK_WINDOW (ptr), GTK_FILE_CHOOSER_ACTION_SAVE, "Cancel", 0, "OK", 1, NULL); if (gtk_dialog_run (GTK_DIALOG (sch)) == 1) { printf ("%s selected\n", gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (sch))); char cmd[1024]; strcpy(cmd, "touch "); strcat(cmd, gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (sch))); system(cmd); } gtk_widget_destroy (sch); } 

FYI, I built this revised program on a Linux system using the "touch" command which will either update an existing file's timestamp or create a new empty file and the "system" command which allows one to execute a program as though one was using a terminal. You mentioned a Raspberry Pi system, which I believe uses Linux or a Linux like operating system, so these commands should work.

For further examples and tutorials, you might want to check out some videos out on the web. The following link is not a specific recommendation, but it was one of the first videos I found out on the web that walks through the various steps of C coding with GTK including references to the GTK file chooser dialog.

"https://www.youtube.com/watch?v=EdJVkr87LSk&list=PLMkSWKN9VsZH562FmV8sMvMu_sVZsYAt6"

You might want to review those videos to see if they might help you.

I hope that clarifies things for you.

Regards.

Sign up to request clarification or add additional context in comments.

1 Comment

Your code works nicely!! Thank you also for the link to the videos

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.