@@ -145,7 +145,11 @@ static int open_dwarf_file(char *path)
145
145
146
146
static void close_dwarf_file (void )
147
147
{
148
+ if (dwarf == NULL )
149
+ return ;
150
+
148
151
dwarf_end (dwarf );
152
+ dwarf = NULL ;
149
153
150
154
gtk_tree_store_clear (arg -> main_store );
151
155
gtk_tree_store_clear (arg -> attr_store );
@@ -176,7 +180,6 @@ static void close_dwarf_file(void)
176
180
}
177
181
178
182
g_free (arg -> filename );
179
-
180
183
g_free (arg );
181
184
}
182
185
@@ -580,15 +583,15 @@ static int attr_callback(Dwarf_Attribute *attr, void *_arg)
580
583
if (name == DW_AT_decl_file || name == DW_AT_call_file )
581
584
val_str = print_file_name (arg -> diep , raw_value );
582
585
else if (name == DW_AT_decl_line || name == DW_AT_call_line )
583
- val_str = g_strdup_printf ("Line %u " , raw_value );
586
+ val_str = g_strdup_printf ("Line %lu " , raw_value );
584
587
else if (name == DW_AT_inline )
585
588
val_str = g_strdup (dwarview_inline_name (raw_value ));
586
589
else if (name == DW_AT_ranges )
587
590
val_str = print_addr_ranges (arg -> diep );
588
591
else if (name == DW_AT_language )
589
592
val_str = g_strdup (dwarview_language_name (raw_value ));
590
593
else
591
- val_str = g_strdup_printf ("%#x " , raw_value );
594
+ val_str = g_strdup_printf ("%#lx " , raw_value );
592
595
break ;
593
596
case DW_FORM_block1 :
594
597
case DW_FORM_block2 :
@@ -605,7 +608,7 @@ static int attr_callback(Dwarf_Attribute *attr, void *_arg)
605
608
case DW_FORM_addr :
606
609
dwarf_formaddr (attr , & addr );
607
610
raw_value = addr ;
608
- val_str = g_strdup_printf ("%#x " , raw_value );
611
+ val_str = g_strdup_printf ("%#lx " , raw_value );
609
612
break ;
610
613
case DW_FORM_ref1 :
611
614
case DW_FORM_ref2 :
@@ -644,8 +647,7 @@ static int attr_callback(Dwarf_Attribute *attr, void *_arg)
644
647
return DWARF_CB_OK ;
645
648
}
646
649
647
- static void on_row_activated (GtkTreeView * view , GtkTreePath * path ,
648
- GtkTreeViewColumn * col , gpointer data )
650
+ static void on_cursor_changed (GtkTreeView * view , gpointer data )
649
651
{
650
652
GtkTreeView * attr_view = data ;
651
653
GtkTreeModel * main_model = gtk_tree_view_get_model (view );
@@ -660,7 +662,8 @@ static void on_row_activated(GtkTreeView *view, GtkTreePath *path,
660
662
};
661
663
char buf [32 ];
662
664
663
- gtk_tree_model_get_iter (main_model , & iter , path );
665
+ GtkTreeSelection * selection = gtk_tree_view_get_selection (view );
666
+ gtk_tree_selection_get_selected (selection , NULL , & iter );
664
667
gtk_tree_model_get_value (main_model , & iter , 0 , & val );
665
668
off = strtoul (g_value_get_string (& val ), NULL , 0 );
666
669
g_value_unset (& val );
@@ -675,26 +678,14 @@ static void on_row_activated(GtkTreeView *view, GtkTreePath *path,
675
678
dwarf_getattrs (& die , attr_callback , & arg , 0 );
676
679
}
677
680
678
- static gboolean on_button_press (GtkWidget * widget , GdkEvent * event , gpointer data )
681
+ static void on_row_activated (GtkTreeView * view , GtkTreePath * path ,
682
+ GtkTreeViewColumn * column , gpointer user_data )
679
683
{
680
- GtkTreeView * view = GTK_TREE_VIEW (widget );
681
- GtkTreePath * path = NULL ;
682
- bool expanded ;
683
-
684
- /* double-click to toggle expand/collapse */
685
- if (event -> button .type != GDK_2BUTTON_PRESS )
686
- return FALSE;
687
-
688
- gtk_tree_view_get_cursor (view , & path , NULL );
689
-
690
- expanded = gtk_tree_view_row_expanded (view , path );
684
+ bool expanded = gtk_tree_view_row_expanded (view , path );
691
685
if (expanded )
692
686
gtk_tree_view_collapse_row (view , path );
693
687
else
694
688
gtk_tree_view_expand_row (view , path , FALSE);
695
-
696
- gtk_tree_path_free (path );
697
- return TRUE;
698
689
}
699
690
700
691
#define MAX_SEARCH_COUNT 1000
@@ -928,9 +919,6 @@ static void on_file_open(GtkMenuItem *menu, gpointer *window)
928
919
GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN ;
929
920
GtkFileChooser * chooser ;
930
921
931
- if (dwarf != NULL )
932
- return ;
933
-
934
922
dialog = gtk_file_chooser_dialog_new ("Open File" , GTK_WINDOW (window ), action ,
935
923
"_Cancel" , GTK_RESPONSE_CANCEL ,
936
924
"_Open" , GTK_RESPONSE_ACCEPT ,
@@ -946,6 +934,7 @@ static void on_file_open(GtkMenuItem *menu, gpointer *window)
946
934
filename = gtk_file_chooser_get_filename (chooser );
947
935
gtk_widget_destroy (dialog );
948
936
937
+ close_dwarf_file ();
949
938
res = open_dwarf_file (filename );
950
939
if (res != 0 )
951
940
show_warning (GTK_WIDGET (window ), "Error: %s: %s\n" ,
@@ -956,11 +945,7 @@ static void on_file_open(GtkMenuItem *menu, gpointer *window)
956
945
957
946
static void on_file_close (GtkMenuItem * menu , gpointer * unused )
958
947
{
959
- if (dwarf == NULL )
960
- return ;
961
-
962
948
close_dwarf_file ();
963
- dwarf = NULL ;
964
949
}
965
950
966
951
static gboolean on_attr_press (GtkWidget * widget , GdkEvent * event , gpointer data )
@@ -1025,10 +1010,10 @@ static void add_gtk_callbacks(GtkBuilder *builder)
1025
1010
G_CALLBACK (on_file_open ));
1026
1011
gtk_builder_add_callback_symbol (builder , "on-file-close" ,
1027
1012
G_CALLBACK (on_file_close ));
1013
+ gtk_builder_add_callback_symbol (builder , "on-cursor-changed" ,
1014
+ G_CALLBACK (on_cursor_changed ));
1028
1015
gtk_builder_add_callback_symbol (builder , "on-row-activated" ,
1029
1016
G_CALLBACK (on_row_activated ));
1030
- gtk_builder_add_callback_symbol (builder , "on-button-press" ,
1031
- G_CALLBACK (on_button_press ));
1032
1017
gtk_builder_add_callback_symbol (builder , "on-search-activated" ,
1033
1018
G_CALLBACK (on_search_activated ));
1034
1019
gtk_builder_add_callback_symbol (builder , "on-search-result" ,
0 commit comments