I am monitoring the GtkCellRendererAccel’s accel-edited Signal and every time the accel_edited_clbk
it is called I am getting this message in the console:
(Demo:5644): Gdk-CRITICAL **: 13:37:41.156: gdk_window_get_window_type: assertion 'GDK_IS_WINDOW (window)' failed
and I am not sure why.
Here is a piece of code:
#include <gtk/gtk.h>
enum
{
ACCEL_MODS_COL,
ACCEL_KEY_COL,
KEYCODE_COL,
N_COLS
};
struct entry
{
gint accel_mods;
guint accel_key;
guint keycode;
} entry;
static struct entry entries[] =
{
{ GDK_CONTROL_MASK, GDK_KEY_X, 0 }
};
GtkTreeModel *create_model ( void );
void create_renderer_column ( GtkWidget *tree_view, GtkTreeModel *tree_model );
static void accel_edited_clbk ( G_GNUC_UNUSED GtkCellRendererText *cell,
const gchar *path_string,
guint key_val,
GdkModifierType modifier,
guint keycode,
gpointer data )
{
GtkTreeIter iter;
GtkTreeModel *model;
GtkTreePath *path;
/// ***
model = GTK_TREE_MODEL ( data );
path = gtk_tree_path_new_from_string ( path_string );
gtk_tree_model_get_iter ( model, &iter, path );
/// ***
gtk_tree_store_set ( GTK_TREE_STORE ( model ), &iter,
ACCEL_MODS_COL, modifier,
ACCEL_KEY_COL, key_val,
KEYCODE_COL, keycode,
-1 );
/// ***
gtk_tree_path_free ( path );
/// ***
g_print ( "%u %d %u\n", key_val, modifier, keycode );
}
gint main ( void )
{
GtkWidget *window;
GtkWidget *tree_view;
GtkTreeModel *tree_model;
/// ***
gtk_init ( NULL, NULL );
/// *** Crate the Window
window = gtk_window_new ( GTK_WINDOW_TOPLEVEL );
gtk_window_set_default_size ( GTK_WINDOW ( window ), 200, 200 );
/// *** Create the Model
tree_model = create_model();
/// *** Create the View
tree_view = gtk_tree_view_new_with_model ( tree_model );
gtk_container_add ( GTK_CONTAINER ( window ), tree_view );
/// *** Create the Renderer and the Column
create_renderer_column ( tree_view, tree_model );
/// *** Showing all
gtk_widget_show_all ( window );
/// ***
gtk_main ();
}
GtkTreeModel *create_model ( void )
{
GtkTreeStore *tree_store;
GtkTreeIter iter;
/// ***
tree_store = gtk_tree_store_new ( N_COLS, G_TYPE_INT, G_TYPE_UINT, G_TYPE_UINT );
/// ***
for ( guint index = 0; index < G_N_ELEMENTS ( entries ) ; index++ )
{
gtk_tree_store_append ( tree_store, &iter, NULL );
gtk_tree_store_set ( tree_store, &iter,
ACCEL_MODS_COL, entries[index].accel_mods,
ACCEL_KEY_COL, entries[index].accel_key,
KEYCODE_COL, entries[index].keycode,
-1 );
}
/// ***
return GTK_TREE_MODEL ( tree_store );
}
void create_renderer_column ( GtkWidget *tree_view, GtkTreeModel *tree_model )
{
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
/// ***
renderer = gtk_cell_renderer_accel_new ();
g_object_set ( renderer,
"accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_GTK,
"editable", TRUE,
NULL );
/// ***
g_signal_connect ( renderer, "accel-edited", G_CALLBACK ( accel_edited_clbk ), tree_model );
/// ***
column = gtk_tree_view_column_new_with_attributes ( "Accel", renderer,
"accel-mods", ACCEL_MODS_COL,
"accel-key", ACCEL_KEY_COL,
"keycode", KEYCODE_COL,
NULL );
/// ***
gtk_tree_view_append_column ( GTK_TREE_VIEW ( tree_view ), column );
}
How can I fix this?