Hi John!
Absolutely, I don't mine :) Thank's for the answer!
Guided by your advice (and results of further research), I've modyfied the code:
Code:
/* compile it with command:
gcc -o ./Encryptor `pkg-config --cflags --libs gtk+-2.0` `pkg-config --libs gtk+-2.0` ./Encryptor.c
*/
#include <gtk/gtk.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
GtkWidget *przycisk_wyboru_pliku;
//void encrypt_by_key_one(GtkWidget *widget, gpointer data) /* <-- I don't shure is it better than this line below: */
void encrypt_by_key_one()
{
if (gtk_dialog_run (GTK_DIALOG (przycisk_wyboru_pliku)) == GTK_RESPONSE_ACCEPT)
{
char *nazwa_pliku;
char cmd[100];
nazwa_pliku = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (przycisk_wyboru_pliku));
sprintf(cmd, "gpg --encrypt -r GPG_KEY_ONE '%s' &", nazwa_pliku); //taken %s into apostro should be correct
system(cmd);
g_free (nazwa_pliku); /* <-- without this I have segfault */
printf ("File encrypted!\n");
}
else
{
printf ("Encryption failed!\n");
}
gtk_widget_destroy (przycisk_wyboru_pliku);
}
void encrypt_by_key_two()
{
printf("Encrypted via key two!\n");
}
int main( int argc, char *argv[])
{
gtk_init(&argc, &argv);
/* MAIN WINDOW PROGRAM */
GtkWidget *okno_programu = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(okno_programu), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(okno_programu), 250, 255);
gtk_window_set_title(GTK_WINDOW(okno_programu), "Encryptor");
gtk_container_set_border_width(GTK_CONTAINER(okno_programu), 5);
g_signal_connect_swapped(G_OBJECT(okno_programu), "destroy",
G_CALLBACK(gtk_main_quit), G_OBJECT(okno_programu));
/* CONTAINER 'FIXED' */
GtkWidget *fixed = gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(okno_programu), fixed);
/* FRAME FOR FILE */
GtkWidget *controls_frame = gtk_frame_new(" Choose file to encrypt ");
gtk_widget_set_size_request(controls_frame, 220, 85);
gtk_frame_set_shadow_type(GTK_FRAME(controls_frame), GTK_SHADOW_ETCHED_IN);
gtk_fixed_put(GTK_FIXED(fixed), controls_frame, 10, 10);
/* FILE BUTTON */
GtkWidget *przycisk_wyboru_pliku = gtk_file_chooser_button_new("przycisk_wyboru_pliku", GTK_FILE_CHOOSER_ACTION_OPEN);
gtk_widget_set_size_request(przycisk_wyboru_pliku, 190, 35);
gtk_fixed_put(GTK_FIXED(fixed), przycisk_wyboru_pliku, 25, 40);
g_signal_connect(G_OBJECT(przycisk_wyboru_pliku), "file-set", G_CALLBACK(przycisk_wyboru_pliku), (gpointer)okno_programu);
/* FRAME FOR KEY BUTTONS */
GtkWidget *controls_frame_2 = gtk_frame_new(" GPG ");
gtk_widget_set_size_request(controls_frame_2, 220, 130);
gtk_frame_set_shadow_type(GTK_FRAME(controls_frame_2), GTK_SHADOW_ETCHED_IN);
gtk_fixed_put(GTK_FIXED(fixed), controls_frame_2, 10, 100);
/* BUTTON FOR KEY ONE */
GtkWidget *szyfruj_kluczem_one = gtk_button_new_with_label("Encrypt via key one");
gtk_widget_set_size_request(szyfruj_kluczem_one, 190, 35);
gtk_fixed_put(GTK_FIXED(fixed), szyfruj_kluczem_one, 25, 130);
gtk_signal_connect_object (GTK_OBJECT (szyfruj_kluczem_one), "clicked",
GTK_SIGNAL_FUNC (encrypt_by_key_one), NULL);
/* BUTTON FOR KEY TWO */
GtkWidget *szyfruj_kluczem_two = gtk_button_new_with_label("Encrypt via key two");
gtk_widget_set_size_request(szyfruj_kluczem_two, 190, 35);
gtk_fixed_put(GTK_FIXED(fixed), szyfruj_kluczem_two, 25, 180);
gtk_signal_connect_object (GTK_OBJECT (szyfruj_kluczem_two), "clicked",
GTK_SIGNAL_FUNC (encrypt_by_key_two), NULL);
gtk_widget_show_all(okno_programu);
gtk_main();
return 0;
}
After applying those changes (and of course with real gpg key ID) I've this as result:
Quote:
(Encryptor:2984): Gtk-CRITICAL **: gtk_dialog_run: assertion `GTK_IS_DIALOG (dialog)' failed
Encryption failed!
(Encryptor:2984): Gtk-CRITICAL **: gtk_widget_destroy: assertion `GTK_IS_WIDGET (widget)' failed
It must be a simple bug, but I don't see it :(
Furthermore, this signall connect any from the choose button here is correct?:
Code:
/* FILE BUTTON */
GtkWidget *przycisk_wyboru_pliku = gtk_file_chooser_button_new("przycisk_wyboru_pliku", GTK_FILE_CHOOSER_ACTION_OPEN);
gtk_widget_set_size_request(przycisk_wyboru_pliku, 190, 35);
gtk_fixed_put(GTK_FIXED(fixed), przycisk_wyboru_pliku, 25, 40);
g_signal_connect(G_OBJECT(przycisk_wyboru_pliku), "file-set"", G_CALLBACK(przycisk_wyboru_pliku), (gpointer)okno_programu);
With signal connect enabled I have segfault...
I am a beginner but I fight on :)