Hello,
please could any body helps me how to get name (with full path) choosed with file chooser.
when I select file and press button open. I receive error (and app crash):
(dialog_soubor.exe:3504): Gtk-CRITICAL **: 12:55:44.880: gtk_file_chooser_widget_get_current_name: assertion 'impl->action == GTK_FILE_CHOOSER_ACTION_SAVE' failed
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_M_construct null not valid
Process returned 3 (0x3) execution time : 10.002 s
Press any key to continue.
my code is:
#include <gtk/gtk.h>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <ctime>
#include <vector>
using namespace std;
GtkWidget *labText;
static void on_open_response (GtkDialog *dialog, int response)
{
if (response == GTK_RESPONSE_ACCEPT)
{
GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog);
cout << " chooser" << endl;
string fileName = gtk_file_chooser_get_current_name(chooser);
cout << "file name: " << fileName << endl;
gtk_label_set_text(GTK_LABEL(labText),fileName.c_str());
}
gtk_window_destroy (GTK_WINDOW (dialog));
}
void OpenDialog (GtkWidget* wid, GtkWidget* data)
{
cout << "open"<< endl;
GtkWidget *dialog;
GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN;
dialog = gtk_file_chooser_dialog_new ("Open File", GTK_WINDOW(data), action, ("_Cancel"), GTK_RESPONSE_CANCEL,
("_Open"), GTK_RESPONSE_ACCEPT, NULL);
gtk_widget_show (dialog);
g_signal_connect (dialog, "response", G_CALLBACK (on_open_response), NULL);
}
static void appActivate (GApplication *app, gpointer user_data)
{
GtkWidget *win = gtk_application_window_new (GTK_APPLICATION (app));
GtkWidget *vBox = gtk_box_new (GTK_ORIENTATION_VERTICAL,10);
gtk_window_set_child (GTK_WINDOW (win), vBox);
labText = gtk_label_new("startovaci text");
gtk_box_append (GTK_BOX (vBox), labText);
GtkWidget *btnNeco = gtk_button_new_with_label("choose file");
gtk_box_append (GTK_BOX (vBox), btnNeco);
g_signal_connect_swapped(GTK_BUTTON(btnNeco), "clicked", G_CALLBACK(OpenDialog), win);
GtkWidget *btnBack = gtk_button_new_with_label("Close");
gtk_box_append (GTK_BOX (vBox), btnBack);
g_signal_connect_swapped(GTK_BUTTON(btnBack), "clicked", G_CALLBACK(gtk_window_destroy), win);
gtk_widget_show (win);
}
int main(int argc, char **argv)
{
GtkApplication *app;
app = gtk_application_new ("testing.app", G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "activate", G_CALLBACK (appActivate), NULL);
return g_application_run (G_APPLICATION (app), NULL, NULL);
g_object_unref (app);
return 0;
}
thank for any advice