Skip to content

Instantly share code, notes, and snippets.

@huycozy
Created October 25, 2023 03:59
Show Gist options
  • Save huycozy/cf98fbd30e81df1172f99a05ca28c05d to your computer and use it in GitHub Desktop.
Save huycozy/cf98fbd30e81df1172f99a05ca28c05d to your computer and use it in GitHub Desktop.
GTK program to open directory picker
  1. Create directory_picker.c file:
#include <gtk/gtk.h>

// Callback function for the "Open" button
void open_button_clicked(GtkWidget *widget, gpointer data) {
    GtkWidget *dialog;
    const gchar *selected_folder;

    // Create a new file chooser dialog
    dialog = gtk_file_chooser_dialog_new("Select a Directory",
                                        GTK_WINDOW(data),
                                        GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
                                        "_Cancel", GTK_RESPONSE_CANCEL,
                                        "_Open", GTK_RESPONSE_ACCEPT,
                                        NULL);

    // Show the dialog and wait for a response
    gint response = gtk_dialog_run(GTK_DIALOG(dialog));

    if (response == GTK_RESPONSE_ACCEPT) {
        // Get the selected folder path
        selected_folder = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
        g_print("Selected Folder: %s\n", selected_folder);

        // You can use the selected_folder path as needed
        // For this example, we just print it to the console
    }

    // Clean up the dialog
    gtk_widget_destroy(dialog);
}

int main(int argc, char *argv[]) {
    GtkWidget *window;
    GtkWidget *button_box;
    GtkWidget *open_button;

    gtk_init(&argc, &argv);

    // Create the main window
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "GTK Directory Picker Example");
    gtk_container_set_border_width(GTK_CONTAINER(window), 10);

    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);

    // Create a button box to hold the "Open" button
    button_box = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
    gtk_container_add(GTK_CONTAINER(window), button_box);

    // Create the "Open" button
    open_button = gtk_button_new_with_label("Open Directory Picker");
    gtk_container_add(GTK_CONTAINER(button_box), open_button);

    // Connect the "clicked" signal of the "Open" button to the callback function
    g_signal_connect(G_OBJECT(open_button), "clicked", G_CALLBACK(open_button_clicked), window);

    // Show all the widgets
    gtk_widget_show_all(window);

    // Start the GTK main loop
    gtk_main();

    return 0;
}
  1. Compile it
gcc -o directory_picker directory_picker.c `pkg-config --cflags --libs gtk+-3.0`
  1. Run the executable output file

Demo

Screencast.from.25-10-2023.10.58.48.webm
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment