I'm developing some app with GTK 4 framework and catch odd behaviour:
I've created app, main window, some widgets. Everything worked while I didn't try add a GtkAlertDialog object. It works fine several times and then app fall with segfault. I've tryed to use ordinary window GtkAlertDialog instead. It works absolutely similarly.
I began to suspect graphic drivers (Intel HD 4000) and update it. No solution. Below I'm pasting code:
#include <gtk/gtk.h>
#include <stdint.h>
#include "gtk_ui.h"
static GtkWidget *window, *dialogWindow;
static GtkWidget *btnUpload,*btnDownload, *btnRefresh, *btnSaveFile,*btnReadFile;
GtkWidget *mainbox;
static GtkWidget *cmbbxPortsList;
GtkWidget *button_grid;
static GtkStringList *listPorts;
void gtk_ui_activate (GtkApplication *app,
gpointer user_data)
{
GtkWidget *mainbox;
GtkWidget *PageLabels[MAX_NUM_PAGES];
GtkWidget *lblCaption;
GtkWidget *lblLimitMin, *lblLimitMax;
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "Window");
mainbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5);
gtk_window_set_child (GTK_WINDOW (window), mainbox);
button_grid = gtk_grid_new();
gtk_box_append (GTK_BOX (mainbox), button_grid);
btnUpload = gtk_button_new_with_label(strUpload);
btnDownload = gtk_button_new_with_label(strDownload);
btnReadFile = gtk_button_new_with_label(strReadFile);
btnSaveFile = gtk_button_new_with_label(strSaveFile);
btnRefresh = gtk_button_new_with_label(strRefresh);
listPorts = gtk_string_list_new(NULL);
cmbbxPortsList = gtk_drop_down_new((GListModel*)(listPorts),NULL);
g_signal_connect(btnRefresh,"clicked",G_CALLBACK (callbackRefreshListPort),NULL);
g_signal_connect(btnUpload,"clicked",G_CALLBACK (callbackUploadData),NULL);
g_signal_connect(btnDownload,"clicked",G_CALLBACK (callbackDownloadData),NULL);
uint8_t ButtonYCounter = 0;
gtk_grid_attach(GTK_GRID(button_grid),cmbbxPortsList,0,ButtonYCounter++,1,1);
gtk_grid_attach(GTK_GRID(button_grid),btnRefresh,0,ButtonYCounter++,1,1);
gtk_grid_attach(GTK_GRID(button_grid),btnUpload,0,ButtonYCounter++,1,1);
gtk_grid_attach(GTK_GRID(button_grid),btnDownload,0,ButtonYCounter++,1,1);
gtk_grid_attach(GTK_GRID(button_grid),btnReadFile,0,ButtonYCounter++,1,1);
gtk_grid_attach(GTK_GRID(button_grid),btnSaveFile,0,ButtonYCounter++,1,1);
gtk_window_present (GTK_WINDOW (window));
}
static void callbackUploadData(GtkWidget *widget, gpointer data)
{
dialogWindow = gtk_window_new();
gtk_window_set_modal(GTK_WINDOW(dialogWindow),TRUE);
gtk_window_present(GTK_WINDOW(dialogWindow));
//GtkAlertDialog* dialogWindow = gtk_alert_dialog_new("Error");
//gtk_alert_dialog_set_message(dialogWindow,strSections[error_obj.section]);
//gtk_alert_dialog_set_detail(dialogWindow,getErrorVerbose(error_obj.error));
}
int
main (int argc,
char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new ("org.gtk.example", G_APPLICATION_DEFAULT_FLAGS);
g_signal_connect (app, "activate", G_CALLBACK (gtk_ui_activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}
An error fo segfault: Thread 1 received signal SIGSEGV, Segmentation fault.
0x00007fffff267381 in ig7icd64!DrvSetLayerPaletteEntries () from C:\WINDOWS\SYSTEM32\ig7icd64.dll
I've tried to call from GtkAlertDialog, GtkWindow, udate drivers. Nothing to helps. I use msys2, gcc to develop in windows 10 and Eclipse CDT.