From d4914043287d812d52bf02af654fb6563d7e5e96 Mon Sep 17 00:00:00 2001 From: Dan Nechita Date: Mon, 17 Feb 2025 17:28:10 +0200 Subject: [PATCH] glade/oscplot: Fix runtime GTK3 warning when creating plot The warning: (osc:17335): Gtk-WARNING **: 13:53:21.583: Content added to the action area of a dialog using header bars The GtkDialogFileChooser that is being created via Glade has an built in GtkHeaderBar which has an action area where the 'Save' and 'Cancel' buttons are added. And this is not allowed, hence the above warning. The GTK2 version of the GtkDialogFileChooser didn't have a built in GtkHeaderBar. The solution was to create in Glade a simple GtkDialog to which a GtkFileChooserWidget has been added. A GtkDialog does not have a built in GtkHeaderBar. Signed-off-by: Dan Nechita --- glade/oscplot.glade | 25 ++++++++++++++++++------- oscplot.c | 14 ++++++++------ 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/glade/oscplot.glade b/glade/oscplot.glade index c1934116..5c7b94a0 100644 --- a/glade/oscplot.glade +++ b/glade/oscplot.glade @@ -1,5 +1,5 @@ - + @@ -1608,19 +1608,16 @@ - + False - 5 ADI IIO oscilloscope - Save As - GtkFileChooserDialog True adi-osc dialog - save - True False + vertical 2 @@ -1653,7 +1650,7 @@ False True - 5 + 1 @@ -1663,6 +1660,20 @@ 0 + + + True + False + select-folder + True + True + + + False + True + 1 + + True diff --git a/oscplot.c b/oscplot.c index 5b085e92..34e57b48 100644 --- a/oscplot.c +++ b/oscplot.c @@ -274,6 +274,7 @@ struct _OscPlotPrivate GtkWidget *phase_label; GtkWidget *saveas_button; GtkWidget *saveas_dialog; + GtkFileChooser *saveas_filechooser; GtkWidget *saveas_type_dialog; GtkWidget *title_edit_dialog; GtkWidget *fullscreen_button; @@ -4550,14 +4551,14 @@ static void saveas_dialog_show(GtkWidget *w, OscPlot *plot) { OscPlotPrivate *priv = plot->priv; - gtk_file_chooser_set_action(GTK_FILE_CHOOSER (priv->saveas_dialog), GTK_FILE_CHOOSER_ACTION_SAVE); - gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(priv->saveas_dialog), TRUE); + gtk_file_chooser_set_action(priv->saveas_filechooser, GTK_FILE_CHOOSER_ACTION_SAVE); + gtk_file_chooser_set_do_overwrite_confirmation(priv->saveas_filechooser, TRUE); if (!priv->saveas_filename) { - gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (priv->saveas_dialog), getenv("HOME")); + gtk_file_chooser_set_current_folder(priv->saveas_filechooser, getenv("HOME")); } else { - if (!gtk_file_chooser_set_filename(GTK_FILE_CHOOSER (priv->saveas_dialog), priv->saveas_filename)) - gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (priv->saveas_dialog), getenv("HOME")); + if (!gtk_file_chooser_set_filename(priv->saveas_filechooser, priv->saveas_filename)) + gtk_file_chooser_set_current_folder(priv->saveas_filechooser, getenv("HOME")); g_free(priv->saveas_filename); priv->saveas_filename = NULL; } @@ -4794,7 +4795,7 @@ void cb_saveas_response(GtkDialog *dialog, gint response_id, OscPlot *plot) /* Save as Dialog */ OscPlotPrivate *priv = plot->priv; - priv->saveas_filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (priv->saveas_dialog)); + priv->saveas_filename = gtk_file_chooser_get_filename(priv->saveas_filechooser); if (response_id == GTK_RESPONSE_ACCEPT) { gint type = gtk_combo_box_get_active(GTK_COMBO_BOX(priv->cmb_saveas_type)); @@ -6985,6 +6986,7 @@ static void create_plot(OscPlot *plot) priv->phase_label = GTK_WIDGET(gtk_builder_get_object(builder, "phase_info")); priv->saveas_button = GTK_WIDGET(gtk_builder_get_object(builder, "save_as")); priv->saveas_dialog = GTK_WIDGET(gtk_builder_get_object(builder, "saveas_dialog")); + priv->saveas_filechooser = GTK_FILE_CHOOSER(gtk_builder_get_object(builder, "saveas_filechooser_widget")); priv->title_edit_dialog = GTK_WIDGET(gtk_builder_get_object(builder, "dialog_plot_title_edit")); priv->fullscreen_button = GTK_WIDGET(gtk_builder_get_object(builder, "fullscreen")); priv->menu_fullscreen = GTK_WIDGET(gtk_builder_get_object(builder, "menuitem_fullscreen"));