From 9ac85237eac7b499806eb6f1804ba6031e5da885 Mon Sep 17 00:00:00 2001 From: Bert Burgemeister Date: Sat, 4 Jun 2016 09:41:45 +0200 Subject: [PATCH] Don't core dump on generic commands given to non-GtkWidgets --- pipeglade.c | 24 ++++++++++++++++++------ pipegladetest.sh | 17 ++++++++++++++++- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/pipeglade.c b/pipeglade.c index c33eef7..c06aa54 100644 --- a/pipeglade.c +++ b/pipeglade.c @@ -1913,7 +1913,8 @@ static void update_focus(struct ui_data *ud){ char dummy; - if (sscanf(ud->data, " %c", &dummy) < 1 && + if (GTK_IS_WIDGET(ud->obj) && + sscanf(ud->data, " %c", &dummy) < 1 && gtk_widget_get_can_focus(GTK_WIDGET(ud->obj))) gtk_widget_grab_focus(GTK_WIDGET(ud->obj)); else @@ -2120,7 +2121,8 @@ update_sensitivity(struct ui_data *ud) char dummy; unsigned int val; - if (sscanf(ud->data, "%u %c", &val, &dummy) == 1 && val < 2) + if (GTK_IS_WIDGET(ud->obj) && + sscanf(ud->data, "%u %c", &val, &dummy) == 1 && val < 2) gtk_widget_set_sensitive(GTK_WIDGET(ud->obj), val); else ign_cmd(ud->type, ud->msg); @@ -2132,9 +2134,11 @@ update_size_request(struct ui_data *ud) char dummy; int x, y; - if (sscanf(ud->data, "%d %d %c", &x, &y, &dummy) == 2) + if (GTK_IS_WIDGET(ud->obj) && + sscanf(ud->data, "%d %d %c", &x, &y, &dummy) == 2) gtk_widget_set_size_request(GTK_WIDGET(ud->obj), x, y); - else if (sscanf(ud->data, " %c", &dummy) < 1) + else if (GTK_IS_WIDGET(ud->obj) && + sscanf(ud->data, " %c", &dummy) < 1) gtk_widget_set_size_request(GTK_WIDGET(ud->obj), -1, -1); else ign_cmd(ud->type, ud->msg); @@ -2300,7 +2304,10 @@ update_toggle_button(struct ui_data *ud) static void update_tooltip_text(struct ui_data *ud) { - gtk_widget_set_tooltip_text(GTK_WIDGET(ud->obj), ud->data); + if (GTK_IS_WIDGET(ud->obj)) + gtk_widget_set_tooltip_text(GTK_WIDGET(ud->obj), ud->data); + else + ign_cmd(ud->type, ud->msg); } /* @@ -2589,7 +2596,8 @@ update_visibility(struct ui_data *ud) char dummy; unsigned int val; - if (sscanf(ud->data, "%u %c", &val, &dummy) == 1 && val < 2) + if (GTK_IS_WIDGET(ud->obj) && + sscanf(ud->data, "%u %c", &val, &dummy) == 1 && val < 2) gtk_widget_set_visible(GTK_WIDGET(ud->obj), val); else ign_cmd(ud->type, ud->msg); @@ -2607,6 +2615,10 @@ update_widget_style(struct ui_data *ud) const char *prefix = "* {", *suffix = "}"; size_t sz; + if (!GTK_IS_WIDGET(ud->obj)) { + ign_cmd(ud->type, ud->msg); + return; + } style_provider = g_object_get_data(ud->obj, "style_provider"); sz = strlen(prefix) + strlen(suffix) + strlen(ud->data) + 1; context = gtk_widget_get_style_context(GTK_WIDGET(ud->obj)); diff --git a/pipegladetest.sh b/pipegladetest.sh index 05b9c15..a4e86b9 100755 --- a/pipegladetest.sh +++ b/pipegladetest.sh @@ -923,11 +923,26 @@ if test $AUTOMATIC; then check_error "treeview1:set 1 7 555 5" \ "ignoring GtkTreeView command \"treeview1:set 1 7 555 5\"" - # GtkTreeViewColumn + # GtkTreeViewColumn (which is not a GtkWidget) check_error "treeviewcolumn3:nnn" \ "ignoring GtkTreeViewColumn command \"treeviewcolumn3:nnn\"" check_error "treeviewcolumn3:force" \ "ignoring GtkTreeViewColumn command \"treeviewcolumn3:force\"" + check_error "treeviewcolumn3:grab_focus" \ + "ignoring GtkTreeViewColumn command \"treeviewcolumn3:grab_focus\"" + check_error "treeviewcolumn3:snapshot x.svg" \ + "ignoring GtkTreeViewColumn command \"treeviewcolumn3:snapshot x.svg\"" + check_error "treeviewcolumn3:set_sensitive 0" \ + "ignoring GtkTreeViewColumn command \"treeviewcolumn3:set_sensitive 0\"" + check_error "treeviewcolumn3:set_size_request 50 60" \ + "ignoring GtkTreeViewColumn command \"treeviewcolumn3:set_size_request 50 60\"" + check_error "treeviewcolumn3:set_visible 0" \ + "ignoring GtkTreeViewColumn command \"treeviewcolumn3:set_visible 0\"" + check_error "treeviewcolumn3:style" \ + "ignoring GtkTreeViewColumn command \"treeviewcolumn3:style\"" + check_error "treeviewcolumn3:set_tooltip_text" \ + "ignoring GtkTreeViewColumn command \"treeviewcolumn3:set_tooltip_text\"" + # GtkEntry check_error "entry1:nnn" \ "ignoring GtkEntry command \"entry1:nnn\"" -- 2.11.4.GIT