talkatu/talkatu

Use native file choosers in demo

2022-01-30, Elliott Sales de Andrade
185f255b8a01
Parents 53d3a46592f2
Children 2959450b0d1c
Use native file choosers in demo

Although there is a `gtk_native_dialog_run` blocking call, that is gone in GTK4, so I implemented this using callbacks.

Testing Done:
Opened dialogs and loaded `test.md`/`test.html`, also cancelled dialog and nothing happened.

Reviewed at https://reviews.imfreedom.org/r/1262/
--- a/demo/talkatudemowindow.c Sat Dec 11 19:59:22 2021 -0600
+++ b/demo/talkatudemowindow.c Sun Jan 30 17:07:01 2022 -0600
@@ -50,28 +50,12 @@
G_DEFINE_TYPE(TalkatuDemoWindow, talkatu_demo_window, GTK_TYPE_WINDOW);
static void
-talkatu_demo_window_insert_html_cb(GtkButton *toggle, gpointer data) {
+talkatu_demo_window_insert_html_response_cb(GtkNativeDialog *dialog,
+ gint response, gpointer data)
+{
TalkatuDemoWindow *window = TALKATU_DEMO_WINDOW(data);
- GtkWidget *dialog = NULL;
- GtkFileFilter *filter = NULL;
- gint res;
- dialog = gtk_file_chooser_dialog_new(
- _("insert html..."),
- GTK_WINDOW(window),
- GTK_FILE_CHOOSER_ACTION_OPEN,
- "OK", GTK_RESPONSE_ACCEPT,
- "Cancel", GTK_RESPONSE_REJECT,
- NULL
- );
-
- filter = gtk_file_filter_new();
- gtk_file_filter_set_name(filter, "HTML files");
- gtk_file_filter_add_pattern(filter, "*.html");
- gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
-
- res = gtk_dialog_run(GTK_DIALOG(dialog));
- if(res == GTK_RESPONSE_ACCEPT) {
+ if(response == GTK_RESPONSE_ACCEPT) {
gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
gchar *contents = NULL;
gsize len;
@@ -90,32 +74,43 @@
g_free(filename);
}
- gtk_widget_destroy(dialog);
+ gtk_native_dialog_destroy(dialog);
+ g_object_unref(dialog);
}
static void
-talkatu_demo_window_insert_markdown_cb(GtkButton *toggle, gpointer data) {
+talkatu_demo_window_insert_html_cb(GtkButton *toggle, gpointer data) {
TalkatuDemoWindow *window = TALKATU_DEMO_WINDOW(data);
- GtkWidget *dialog = NULL;
+ GtkFileChooserNative *dialog = NULL;
GtkFileFilter *filter = NULL;
- gint res;
- dialog = gtk_file_chooser_dialog_new(
- _("insert markdown..."),
+ dialog = gtk_file_chooser_native_new(
+ _("Insert html..."),
GTK_WINDOW(window),
GTK_FILE_CHOOSER_ACTION_OPEN,
- "OK", GTK_RESPONSE_ACCEPT,
- "Cancel", GTK_RESPONSE_REJECT,
- NULL
+ "OK",
+ "Cancel"
);
filter = gtk_file_filter_new();
- gtk_file_filter_set_name(filter, "Markdown files");
- gtk_file_filter_add_pattern(filter, "*.md");
+ gtk_file_filter_set_name(filter, "HTML files");
+ gtk_file_filter_add_pattern(filter, "*.html");
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
- res = gtk_dialog_run(GTK_DIALOG(dialog));
- if(res == GTK_RESPONSE_ACCEPT) {
+ g_signal_connect(dialog, "response",
+ G_CALLBACK(talkatu_demo_window_insert_html_response_cb),
+ window);
+ gtk_native_dialog_set_modal(GTK_NATIVE_DIALOG(dialog), TRUE);
+ gtk_native_dialog_show(GTK_NATIVE_DIALOG(dialog));
+}
+
+static void
+talkatu_demo_window_insert_markdown_response_cb(GtkNativeDialog *dialog,
+ gint response, gpointer data)
+{
+ TalkatuDemoWindow *window = TALKATU_DEMO_WINDOW(data);
+
+ if(response == GTK_RESPONSE_ACCEPT) {
gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
gchar *contents = NULL;
gsize len;
@@ -134,7 +129,34 @@
g_free(filename);
}
- gtk_widget_destroy(dialog);
+ gtk_native_dialog_destroy(dialog);
+ g_object_unref(dialog);
+}
+
+static void
+talkatu_demo_window_insert_markdown_cb(GtkButton *toggle, gpointer data) {
+ TalkatuDemoWindow *window = TALKATU_DEMO_WINDOW(data);
+ GtkFileChooserNative *dialog = NULL;
+ GtkFileFilter *filter = NULL;
+
+ dialog = gtk_file_chooser_native_new(
+ _("Insert markdown..."),
+ GTK_WINDOW(window),
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ "OK",
+ "Cancel"
+ );
+
+ filter = gtk_file_filter_new();
+ gtk_file_filter_set_name(filter, "Markdown files");
+ gtk_file_filter_add_pattern(filter, "*.md");
+ gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
+
+ g_signal_connect(dialog, "response",
+ G_CALLBACK(talkatu_demo_window_insert_markdown_response_cb),
+ window);
+ gtk_native_dialog_set_modal(GTK_NATIVE_DIALOG(dialog), TRUE);
+ gtk_native_dialog_show(GTK_NATIVE_DIALOG(dialog));
}
static void