#include "debugging/debugging.h"
#include <map>
-#include <gtk/gtktreemodel.h>
-#include <gtk/gtktreednd.h>
-#include <gtk/gtkmain.h>
+#include <gtk/gtk.h>
+#include <uilib/uilib.h>
#include "iscenegraph.h"
#include "nameable.h"
graph_type& graph = *GRAPH_TREE_MODEL( tree_model )->graph;
graph_type::iterator i = graph_iterator_read_tree_iter( iter );
- GtkTreePath* path = gtk_tree_path_new();
+ GtkTreePath* path = ui::TreePath();
for ( std::size_t depth = ( *i ).first.get().size(); depth != 0; --depth )
{
};
void node_attach_name_changed_callback( scene::Node& node, const NameCallback& callback ){
- if ( &node != 0 ) {
+ // Reference cannot be bound to dereferenced null pointer in well-defined
+ // C++ code, and Clang will assume that comparison below always evaluates
+ // to true, resulting in a segmentation fault. Use a dirty hack to force
+ // Clang to check those "bad" references for null nonetheless.
+ volatile intptr_t n = (intptr_t)&node;
+
+ if ( n != 0 ) {
Nameable* nameable = Node_getNameable( node );
if ( nameable != 0 ) {
nameable->attach( callback );
}
}
void node_detach_name_changed_callback( scene::Node& node, const NameCallback& callback ){
- if ( &node != 0 ) {
+ volatile intptr_t n = (intptr_t)&node; // see the comment on line 650
+
+ if ( n != 0 ) {
Nameable* nameable = Node_getNameable( node );
if ( nameable != 0 ) {
nameable->detach( callback );
ASSERT_MESSAGE( tree_model != 0, "RUNTIME ERROR" );
GraphTreeNode* graph = GRAPH_TREE_MODEL( tree_model )->m_graph;
- GtkTreePath* path = gtk_tree_path_new();
+ GtkTreePath* path = ui::TreePath(ui::New);
for ( GraphTreeNode* node = ( *graph_iterator_read_tree_iter( iter ) ).second; node != graph; node = node->m_parent )
{
const char* node_get_name( scene::Node& node );
const char* node_get_name_safe( scene::Node& node ){
- if ( &node == 0 ) {
+ volatile intptr_t n = (intptr_t)&node; // see the comment on line 650
+ if ( n == 0 ) {
return "";
}
return node_get_name( node );
}
void node_attach_name_changed_callback( scene::Node& node, const NameCallback& callback ){
- if ( &node != 0 ) {
+ volatile intptr_t n = (intptr_t)&node; // see the comment on line 650
+ if ( n != 0 ) {
Nameable* nameable = Node_getNameable( node );
if ( nameable != 0 ) {
nameable->attach( callback );
}
}
void node_detach_name_changed_callback( scene::Node& node, const NameCallback& callback ){
- if ( &node != 0 ) {
+ volatile intptr_t n = (intptr_t)&node; // see the comment on line 650
+ if ( n != 0 ) {
Nameable* nameable = Node_getNameable( node );
if ( nameable != 0 ) {
nameable->detach( callback );
{
GtkTreeIter iter;
- GtkTreePath* path = gtk_tree_path_new_from_string( "0" );
+ GtkTreePath* path = ui::TreePath( "0" );
gtk_tree_model_get_iter( model, &iter, path );
gtk_tree_path_free( path );
{
GtkTreeIter iter;
- GtkTreePath* path = gtk_tree_path_new_from_string( "1" );
+ GtkTreePath* path = ui::TreePath( "1" );
gtk_tree_model_get_iter( model, &iter, path );
gtk_tree_path_free( path );