<!-- Generated with glade 3.40.0 -->
<interface>
<requires lib="gtk+" version="3.24"/>
+ <object class="GtkFileChooserDialog" id="fopen">
+ <property name="can-focus">False</property>
+ <property name="type-hint">dialog</property>
+ <property name="do-overwrite-confirmation">True</property>
+ <property name="select-multiple">True</property>
+ <child internal-child="vbox">
+ <object class="GtkBox">
+ <property name="can-focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox">
+ <property name="can-focus">False</property>
+ <property name="layout-style">end</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
<object class="GtkWindow" id="w">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
- <object class="GtkImageMenuItem">
+ <object class="GtkImageMenuItem" id="dopen">
<property name="label">gtk-open</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
#include <pthread.h> // only for thread based variant
static GtkBuilder *builder = NULL;
+GtkFileChooserNative *gtkfopen = NULL, *gtkfsave = NULL, *gtkdopen = NULL;
static int chldin[2], chldout[2];
// pre declaration
);
}
+void e_filechooser_activate(GtkWidget *wdg, gpointer user_data) {
+ GtkFileChooser *e = GTK_FILE_CHOOSER(wdg);
+ GSList *name, *names = gtk_file_chooser_get_filenames(e);
+ printf(
+ "ACTIVATE %s\n",
+ gtk_buildable_get_name(GTK_BUILDABLE(wdg))
+ );
+ for (name = names; name; name = name->next) {
+ printf("FILE %i\n%s\n", strlen(name->data), name->data);
+ free(name->data);
+ }
+ printf("FILE END\n");
+ g_slist_free(names);
+}
+
+void e_filechooser_response(GtkNativeDialog *wdg, gint id, gpointer user_data) {
+ GtkFileChooser *e = GTK_FILE_CHOOSER(wdg);
+ char *file = gtk_file_chooser_get_filename(e);
+ printf("%s %i\n%s\n", user_data, strlen(file), file);
+ free(file);
+}
+
gboolean s_switch_state_set(GtkWidget *wdg, gboolean state, gpointer d) {
GtkSwitch *s = GTK_SWITCH(wdg);
printf(
}
}
+void a_builder_fopen(char *args) {
+ if (!gtkfopen) {
+ gtkfopen = gtk_file_chooser_native_new(
+ NULL, NULL, GTK_FILE_CHOOSER_ACTION_OPEN, NULL, NULL
+ );
+ //g_signal_connect(gtkfopen, "file_activated", G_CALLBACK(e_filechooser_activate), NULL);
+ g_signal_connect(gtkfopen, "response", G_CALLBACK(e_filechooser_response), "FOPEN");
+ }
+ gtk_native_dialog_show(GTK_NATIVE_DIALOG(gtkfopen));
+}
+void a_builder_fsave(char *args) {
+ if (!gtkfsave) {
+ gtkfsave = gtk_file_chooser_native_new(
+ NULL, NULL, GTK_FILE_CHOOSER_ACTION_SAVE, NULL, NULL
+ );
+ // g_signal_connect(gtkfsave, "file_activated", G_CALLBACK(e_filechooser_activate), NULL);
+ g_signal_connect(gtkfsave, "response", G_CALLBACK(e_filechooser_response), "FSAVE");
+ }
+ gtk_native_dialog_show(GTK_NATIVE_DIALOG(gtkfsave));
+}
+void a_builder_dopen(char *args) {
+ if (!gtkdopen) {
+ gtkdopen = gtk_file_chooser_native_new(
+ NULL, NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, NULL, NULL
+ );
+ // g_signal_connect(gtkdopen, "file_activated", G_CALLBACK(e_filechooser_activate), NULL);
+ g_signal_connect(gtkdopen, "response", G_CALLBACK(e_filechooser_response), "DOPEN");
+ }
+ gtk_native_dialog_show(GTK_NATIVE_DIALOG(gtkdopen));
+}
// ====== CLI ACTIONS PARSING ======
int a_builder(char *cmd, char *args) {
if (!cmd || !cmd[0]) return 0;
- else if (!strcmp(cmd, "load")) a_builder_load(args);
- else if (!strcmp(cmd, "add")) a_builder_add(args);
+ else if (!strcmp(cmd, "load")) a_builder_load(args);
+ else if (!strcmp(cmd, "add")) a_builder_add(args);
+ else if (!strcmp(cmd, "fopen")) a_builder_fopen(args);
+ else if (!strcmp(cmd, "fsave")) a_builder_fsave(args);
+ else if (!strcmp(cmd, "dopen")) a_builder_dopen(args);
else return 0;
return 1;
}
g_signal_connect(wdg, "activate", G_CALLBACK(e_entry_activate), NULL);}
else if (GTK_IS_TOOL_BUTTON(wdg)) g_signal_connect(wdg, "clicked", G_CALLBACK(e_widget_clicked), NULL);
else if (GTK_IS_BUTTON(wdg)) g_signal_connect(wdg, "clicked", G_CALLBACK(e_widget_clicked), NULL);
+ else if (GTK_IS_FILE_CHOOSER(wdg)) g_signal_connect(wdg, "file_activated", G_CALLBACK(e_filechooser_activate), NULL);
else if (GTK_IS_WINDOW(wdg)) g_signal_connect(wdg, "delete-event", G_CALLBACK(e_window_close), NULL);
else { printf("INIT %s unknown\n", name); return; }
close(chldout[0]);
dup2(chldin[0], STDIN_FILENO);
dup2(chldout[1], STDOUT_FILENO);
- execvp(argv[0], &argv[1]);
+ execvp(argv[0], argv);
}
}