--- libs/gcugtk/gcuperiodic.c.bak 2017-05-06 03:20:48.976428546 +0200 +++ libs/gcugtk/gcuperiodic.c 2017-05-06 03:39:25.031950707 +0200 @@ -410,6 +410,36 @@ return GCU_PERIODIC_COLOR_MAX + periodic->nbschemes++; } +gboolean +gcu_periodic_query_tooltip ( + GtkWidget *widget, + gint x, + gint y, + gboolean keyboard_mode, + GtkTooltip *tooltip, + gint *user_data) +{ + GtkWidget *w; + const gchar *conf, *name, *str; + gchar *markup; + int Z; + + name = gtk_buildable_get_name (GTK_BUILDABLE (widget)); + Z = atoi (name + 3); + str = gcu_element_get_weight_as_string (Z); + conf = gcu_element_get_electronic_configuration (Z); + markup = g_strdup_printf ("%u\n%s\n%s\n%s\n%s", + Z, gcu_element_get_symbol (Z), gcu_element_get_name (Z), (conf)? conf: "", (str)? str: ""); + + w = gtk_label_new (NULL); + gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_CENTER); + gtk_label_set_markup (GTK_LABEL (w), markup); + gtk_tooltip_set_custom (tooltip, w); + + g_free (markup); + return TRUE; +} + void gcu_periodic_set_tips (GcuPeriodic *periodic, unsigned scheme) { if (scheme != periodic->tips) { @@ -425,31 +455,10 @@ break; case GCU_PERIODIC_TIP_STANDARD: for (i = 1; i <= 118; i++) { - GtkWidget *win, *grid, *w; - char *markup, *str; - char const *conf; if (!periodic->buttons[i]) continue; - win = gtk_window_new (GTK_WINDOW_POPUP); - gtk_widget_set_name (win, "gtk-tooltip"); - grid = gtk_grid_new (); - gtk_container_add (GTK_CONTAINER (win), grid); - w = GTK_WIDGET (g_object_new (GTK_TYPE_LABEL, "xalign", 0., NULL)); - markup = g_strdup_printf ("%u", i); - gtk_label_set_text (GTK_LABEL (w), markup); - g_free (markup); - gtk_grid_attach (GTK_GRID (grid), w, 0, 0, 1, 1); - str = gcu_element_get_weight_as_string (i); - conf = gcu_element_get_electronic_configuration (i); - w = GTK_WIDGET (g_object_new (GTK_TYPE_LABEL, "justify", GTK_JUSTIFY_CENTER, NULL)); - markup = g_strdup_printf ("%s\n%s\n%s\n%s", - gcu_element_get_symbol (i), gcu_element_get_name (i), (conf)? conf: "", (str)? str: ""); - g_free (str); - gtk_label_set_markup (GTK_LABEL (w), markup); - g_free (markup); - gtk_grid_attach (GTK_GRID (grid), w, 0, 1, 1, 1); - gtk_widget_show_all (grid); - gtk_widget_set_tooltip_window (GTK_WIDGET (periodic->buttons[i]), GTK_WINDOW (win)); + g_object_set (G_OBJECT (periodic->buttons[i]), "has-tooltip", TRUE, NULL); + g_signal_connect (periodic->buttons[i], "query-tooltip", G_CALLBACK (gcu_periodic_query_tooltip), NULL); } break; }