diff --git a/src/libsysprof/sysprof-symbol.c b/src/libsysprof/sysprof-symbol.c index 7435cc5c..6db132a6 100644 --- a/src/libsysprof/sysprof-symbol.c +++ b/src/libsysprof/sysprof-symbol.c @@ -31,6 +31,7 @@ enum { PROP_BINARY_PATH, PROP_KIND, PROP_NAME, + PROP_TOOLTIP_TEXT, N_PROPS }; @@ -74,6 +75,10 @@ sysprof_symbol_get_property (GObject *object, g_value_set_enum (value, sysprof_symbol_get_kind (self)); break; + case PROP_TOOLTIP_TEXT: + g_value_take_string (value, sysprof_symbol_dup_tooltip_text (self)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } @@ -102,6 +107,11 @@ sysprof_symbol_class_init (SysprofSymbolClass *klass) NULL, (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + properties [PROP_TOOLTIP_TEXT] = + g_param_spec_string ("tooltip-text", NULL, NULL, + NULL, + (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + properties [PROP_KIND] = g_param_spec_enum ("kind", NULL, NULL, SYSPROF_TYPE_SYMBOL_KIND, @@ -200,6 +210,27 @@ sysprof_symbol_get_kind (SysprofSymbol *self) return self ? self->kind : 0; } +/** + * sysprof_symbol_dup_tooltip_text: + * @self: a #SysprofSymbol + * + * Returns: (transfer full): the tooltip text + */ +char * +sysprof_symbol_dup_tooltip_text (SysprofSymbol *self) +{ + GString *str; + + g_return_val_if_fail (SYSPROF_IS_SYMBOL (self), NULL); + + str = g_string_new (self->name); + + if (!g_str_has_prefix (str->str, "In File") && self->binary_path) + g_string_append_printf (str, " [%s+0x%"G_GINT64_MODIFIER"x]", self->binary_path, self->begin_address); + + return g_string_free (str, FALSE); +} + G_DEFINE_ENUM_TYPE (SysprofSymbolKind, sysprof_symbol_kind, G_DEFINE_ENUM_VALUE (SYSPROF_SYMBOL_KIND_ROOT, "root"), G_DEFINE_ENUM_VALUE (SYSPROF_SYMBOL_KIND_PROCESS, "process"), diff --git a/src/libsysprof/sysprof-symbol.h b/src/libsysprof/sysprof-symbol.h index 50b39129..7d70cc88 100644 --- a/src/libsysprof/sysprof-symbol.h +++ b/src/libsysprof/sysprof-symbol.h @@ -45,19 +45,21 @@ SYSPROF_AVAILABLE_IN_ALL G_DECLARE_FINAL_TYPE (SysprofSymbol, sysprof_symbol, SYSPROF, SYMBOL, GObject) SYSPROF_AVAILABLE_IN_ALL -GType sysprof_symbol_kind_get_type (void) G_GNUC_CONST; +GType sysprof_symbol_kind_get_type (void) G_GNUC_CONST; SYSPROF_AVAILABLE_IN_ALL -const char *sysprof_symbol_get_name (SysprofSymbol *self); +const char *sysprof_symbol_get_name (SysprofSymbol *self); SYSPROF_AVAILABLE_IN_ALL -const char *sysprof_symbol_get_binary_nick (SysprofSymbol *self); +const char *sysprof_symbol_get_binary_nick (SysprofSymbol *self); SYSPROF_AVAILABLE_IN_ALL -const char *sysprof_symbol_get_binary_path (SysprofSymbol *self); +const char *sysprof_symbol_get_binary_path (SysprofSymbol *self); SYSPROF_AVAILABLE_IN_ALL -SysprofSymbolKind sysprof_symbol_get_kind (SysprofSymbol *self); +SysprofSymbolKind sysprof_symbol_get_kind (SysprofSymbol *self); SYSPROF_AVAILABLE_IN_ALL -guint sysprof_symbol_hash (const SysprofSymbol *self); +guint sysprof_symbol_hash (const SysprofSymbol *self); SYSPROF_AVAILABLE_IN_ALL -gboolean sysprof_symbol_equal (const SysprofSymbol *a, - const SysprofSymbol *b); +gboolean sysprof_symbol_equal (const SysprofSymbol *a, + const SysprofSymbol *b); +SYSPROF_AVAILABLE_IN_ALL +char *sysprof_symbol_dup_tooltip_text (SysprofSymbol *self); G_END_DECLS