Blame tests/testtooltips.c

Packit 98cdb6
/* testtooltips.c: Test application for GTK+ >= 2.12 tooltips code
Packit 98cdb6
 *
Packit 98cdb6
 * Copyright (C) 2006-2007  Imendio AB
Packit 98cdb6
 * Contact: Kristian Rietveld <kris@imendio.com>
Packit 98cdb6
 *
Packit 98cdb6
 * This work is provided "as is"; redistribution and modification
Packit 98cdb6
 * in whole or in part, in any medium, physical or electronic is
Packit 98cdb6
 * permitted without restriction.
Packit 98cdb6
 *
Packit 98cdb6
 * This work is distributed in the hope that it will be useful,
Packit 98cdb6
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 98cdb6
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Packit 98cdb6
 *
Packit 98cdb6
 * In no event shall the authors or contributors be liable for any
Packit 98cdb6
 * direct, indirect, incidental, special, exemplary, or consequential
Packit 98cdb6
 * damages (including, but not limited to, procurement of substitute
Packit 98cdb6
 * goods or services; loss of use, data, or profits; or business
Packit 98cdb6
 * interruption) however caused and on any theory of liability, whether
Packit 98cdb6
 * in contract, strict liability, or tort (including negligence or
Packit 98cdb6
 * otherwise) arising in any way out of the use of this software, even
Packit 98cdb6
 * if advised of the possibility of such damage.
Packit 98cdb6
 */
Packit 98cdb6
Packit 98cdb6
#include <gtk/gtk.h>
Packit 98cdb6
Packit 98cdb6
static gboolean
Packit 98cdb6
query_tooltip_cb (GtkWidget  *widget,
Packit 98cdb6
		  gint        x,
Packit 98cdb6
		  gint        y,
Packit 98cdb6
		  gboolean    keyboard_tip,
Packit 98cdb6
		  GtkTooltip *tooltip,
Packit 98cdb6
		  gpointer    data)
Packit 98cdb6
{
Packit 98cdb6
  gtk_tooltip_set_markup (tooltip, gtk_button_get_label (GTK_BUTTON (widget)));
Packit 98cdb6
  gtk_tooltip_set_icon_from_stock (tooltip, GTK_STOCK_DELETE,
Packit 98cdb6
				   GTK_ICON_SIZE_MENU);
Packit 98cdb6
Packit 98cdb6
  return TRUE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static gboolean
Packit 98cdb6
query_tooltip_custom_cb (GtkWidget  *widget,
Packit 98cdb6
			 gint        x,
Packit 98cdb6
			 gint        y,
Packit 98cdb6
			 gboolean    keyboard_tip,
Packit 98cdb6
			 GtkTooltip *tooltip,
Packit 98cdb6
			 gpointer    data)
Packit 98cdb6
{
Packit 98cdb6
  GdkColor color = { 0, 0, 65535 };
Packit 98cdb6
  GtkWindow *window = gtk_widget_get_tooltip_window (widget);
Packit 98cdb6
Packit 98cdb6
  gtk_widget_modify_bg (GTK_WIDGET (window), GTK_STATE_NORMAL, &color;;
Packit 98cdb6
Packit 98cdb6
  return TRUE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static gboolean
Packit 98cdb6
query_tooltip_text_view_cb (GtkWidget  *widget,
Packit 98cdb6
			    gint        x,
Packit 98cdb6
			    gint        y,
Packit 98cdb6
			    gboolean    keyboard_tip,
Packit 98cdb6
			    GtkTooltip *tooltip,
Packit 98cdb6
			    gpointer    data)
Packit 98cdb6
{
Packit 98cdb6
  GtkTextTag *tag = data;
Packit 98cdb6
  GtkTextIter iter;
Packit 98cdb6
  GtkTextView *text_view = GTK_TEXT_VIEW (widget);
Packit 98cdb6
Packit 98cdb6
  if (keyboard_tip)
Packit 98cdb6
    {
Packit 98cdb6
      gint offset;
Packit 98cdb6
Packit 98cdb6
      g_object_get (text_view->buffer, "cursor-position", &offset, NULL);
Packit 98cdb6
      gtk_text_buffer_get_iter_at_offset (text_view->buffer, &iter, offset);
Packit 98cdb6
    }
Packit 98cdb6
  else
Packit 98cdb6
    {
Packit 98cdb6
      gint bx, by, trailing;
Packit 98cdb6
Packit 98cdb6
      gtk_text_view_window_to_buffer_coords (text_view, GTK_TEXT_WINDOW_TEXT,
Packit 98cdb6
					     x, y, &bx, &by;;
Packit 98cdb6
      gtk_text_view_get_iter_at_position (text_view, &iter, &trailing, bx, by);
Packit 98cdb6
    }
Packit 98cdb6
Packit 98cdb6
  if (gtk_text_iter_has_tag (&iter, tag))
Packit 98cdb6
    gtk_tooltip_set_text (tooltip, "Tooltip on text tag");
Packit 98cdb6
  else
Packit 98cdb6
   return FALSE;
Packit 98cdb6
Packit 98cdb6
  return TRUE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static gboolean
Packit 98cdb6
query_tooltip_tree_view_cb (GtkWidget  *widget,
Packit 98cdb6
			    gint        x,
Packit 98cdb6
			    gint        y,
Packit 98cdb6
			    gboolean    keyboard_tip,
Packit 98cdb6
			    GtkTooltip *tooltip,
Packit 98cdb6
			    gpointer    data)
Packit 98cdb6
{
Packit 98cdb6
  GtkTreeIter iter;
Packit 98cdb6
  GtkTreeView *tree_view = GTK_TREE_VIEW (widget);
Packit 98cdb6
  GtkTreeModel *model = gtk_tree_view_get_model (tree_view);
Packit 98cdb6
  GtkTreePath *path = NULL;
Packit 98cdb6
  gchar *tmp;
Packit 98cdb6
  gchar *pathstring;
Packit 98cdb6
Packit 98cdb6
  char buffer[512];
Packit 98cdb6
Packit 98cdb6
  if (!gtk_tree_view_get_tooltip_context (tree_view, &x, &y,
Packit 98cdb6
					  keyboard_tip,
Packit 98cdb6
					  &model, &path, &iter))
Packit 98cdb6
    return FALSE;
Packit 98cdb6
Packit 98cdb6
  gtk_tree_model_get (model, &iter, 0, &tmp, -1);
Packit 98cdb6
  pathstring = gtk_tree_path_to_string (path);
Packit 98cdb6
Packit 98cdb6
  g_snprintf (buffer, 511, "Path %s: %s", pathstring, tmp);
Packit 98cdb6
  gtk_tooltip_set_markup (tooltip, buffer);
Packit 98cdb6
Packit 98cdb6
  gtk_tree_view_set_tooltip_row (tree_view, tooltip, path);
Packit 98cdb6
Packit 98cdb6
  gtk_tree_path_free (path);
Packit 98cdb6
  g_free (pathstring);
Packit 98cdb6
  g_free (tmp);
Packit 98cdb6
Packit 98cdb6
  return TRUE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static GtkTreeModel *
Packit 98cdb6
create_model (void)
Packit 98cdb6
{
Packit 98cdb6
  GtkTreeStore *store;
Packit 98cdb6
  GtkTreeIter iter;
Packit 98cdb6
Packit 98cdb6
  store = gtk_tree_store_new (1, G_TYPE_STRING);
Packit 98cdb6
Packit 98cdb6
  /* A tree store with some random words ... */
Packit 98cdb6
  gtk_tree_store_insert_with_values (store, &iter, NULL, 0,
Packit 98cdb6
				     0, "File Manager", -1);
Packit 98cdb6
  gtk_tree_store_insert_with_values (store, &iter, NULL, 0,
Packit 98cdb6
				     0, "Gossip", -1);
Packit 98cdb6
  gtk_tree_store_insert_with_values (store, &iter, NULL, 0,
Packit 98cdb6
				     0, "System Settings", -1);
Packit 98cdb6
  gtk_tree_store_insert_with_values (store, &iter, NULL, 0,
Packit 98cdb6
				     0, "The GIMP", -1);
Packit 98cdb6
  gtk_tree_store_insert_with_values (store, &iter, NULL, 0,
Packit 98cdb6
				     0, "Terminal", -1);
Packit 98cdb6
  gtk_tree_store_insert_with_values (store, &iter, NULL, 0,
Packit 98cdb6
				     0, "Word Processor", -1);
Packit 98cdb6
Packit 98cdb6
  return GTK_TREE_MODEL (store);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
selection_changed_cb (GtkTreeSelection *selection,
Packit 98cdb6
		      GtkWidget        *tree_view)
Packit 98cdb6
{
Packit 98cdb6
  gtk_widget_trigger_tooltip_query (tree_view);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static struct Rectangle
Packit 98cdb6
{
Packit 98cdb6
  gint x;
Packit 98cdb6
  gint y;
Packit 98cdb6
  gfloat r;
Packit 98cdb6
  gfloat g;
Packit 98cdb6
  gfloat b;
Packit 98cdb6
  const char *tooltip;
Packit 98cdb6
}
Packit 98cdb6
rectangles[] =
Packit 98cdb6
{
Packit 98cdb6
  { 10, 10, 0.0, 0.0, 0.9, "Blue box!" },
Packit 98cdb6
  { 200, 170, 1.0, 0.0, 0.0, "Red thing" },
Packit 98cdb6
  { 100, 50, 0.8, 0.8, 0.0, "Yellow thing" }
Packit 98cdb6
};
Packit 98cdb6
Packit 98cdb6
static gboolean
Packit 98cdb6
query_tooltip_drawing_area_cb (GtkWidget  *widget,
Packit 98cdb6
			       gint        x,
Packit 98cdb6
			       gint        y,
Packit 98cdb6
			       gboolean    keyboard_tip,
Packit 98cdb6
			       GtkTooltip *tooltip,
Packit 98cdb6
			       gpointer    data)
Packit 98cdb6
{
Packit 98cdb6
  gint i;
Packit 98cdb6
Packit 98cdb6
  if (keyboard_tip)
Packit 98cdb6
    return FALSE;
Packit 98cdb6
Packit 98cdb6
  for (i = 0; i < G_N_ELEMENTS (rectangles); i++)
Packit 98cdb6
    {
Packit 98cdb6
      struct Rectangle *r = &rectangles[i];
Packit 98cdb6
Packit 98cdb6
      if (r->x < x && x < r->x + 50
Packit 98cdb6
	  && r->y < y && y < r->y + 50)
Packit 98cdb6
        {
Packit 98cdb6
	  gtk_tooltip_set_markup (tooltip, r->tooltip);
Packit 98cdb6
	  return TRUE;
Packit 98cdb6
	}
Packit 98cdb6
    }
Packit 98cdb6
Packit 98cdb6
  return FALSE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static gboolean
Packit 98cdb6
drawing_area_expose (GtkWidget      *drawing_area,
Packit 98cdb6
		     GdkEventExpose *event,
Packit 98cdb6
		     gpointer        data)
Packit 98cdb6
{
Packit 98cdb6
  gint i;
Packit 98cdb6
  cairo_t *cr;
Packit 98cdb6
Packit 98cdb6
  gdk_window_get_pointer (drawing_area->window, NULL, NULL, NULL);
Packit 98cdb6
Packit 98cdb6
  cr = gdk_cairo_create (drawing_area->window);
Packit 98cdb6
Packit 98cdb6
  cairo_rectangle (cr, 0, 0,
Packit 98cdb6
		   drawing_area->allocation.width,
Packit 98cdb6
		   drawing_area->allocation.height);
Packit 98cdb6
  cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
Packit 98cdb6
  cairo_fill (cr);
Packit 98cdb6
Packit 98cdb6
  for (i = 0; i < G_N_ELEMENTS (rectangles); i++)
Packit 98cdb6
    {
Packit 98cdb6
      struct Rectangle *r = &rectangles[i];
Packit 98cdb6
Packit 98cdb6
      cairo_rectangle (cr, r->x, r->y, 50, 50);
Packit 98cdb6
      cairo_set_source_rgb (cr, r->r, r->g, r->b);
Packit 98cdb6
      cairo_stroke (cr);
Packit 98cdb6
Packit 98cdb6
      cairo_rectangle (cr, r->x, r->y, 50, 50);
Packit 98cdb6
      cairo_set_source_rgba (cr, r->r, r->g, r->b, 0.5);
Packit 98cdb6
      cairo_fill (cr);
Packit 98cdb6
    }
Packit 98cdb6
Packit 98cdb6
  cairo_destroy (cr);
Packit 98cdb6
Packit 98cdb6
  return FALSE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static gboolean
Packit 98cdb6
query_tooltip_label_cb (GtkWidget  *widget,
Packit 98cdb6
			gint        x,
Packit 98cdb6
			gint        y,
Packit 98cdb6
			gboolean    keyboard_tip,
Packit 98cdb6
			GtkTooltip *tooltip,
Packit 98cdb6
			gpointer    data)
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget *custom = data;
Packit 98cdb6
Packit 98cdb6
  gtk_tooltip_set_custom (tooltip, custom);
Packit 98cdb6
Packit 98cdb6
  return TRUE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
int
Packit 98cdb6
main (int argc, char *argv[])
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget *window;
Packit 98cdb6
  GtkWidget *box;
Packit 98cdb6
  GtkWidget *drawing_area;
Packit 98cdb6
  GtkWidget *button;
Packit 98cdb6
  GtkWidget *label;
Packit 98cdb6
Packit 98cdb6
  GtkWidget *tooltip_window;
Packit 98cdb6
  GtkWidget *tooltip_button;
Packit 98cdb6
Packit 98cdb6
  GtkWidget *tree_view;
Packit 98cdb6
  GtkTreeViewColumn *column;
Packit 98cdb6
Packit 98cdb6
  GtkWidget *text_view;
Packit 98cdb6
  GtkTextBuffer *buffer;
Packit 98cdb6
  GtkTextIter iter;
Packit 98cdb6
  GtkTextTag *tag;
Packit 98cdb6
Packit 98cdb6
  gchar *text, *markup;
Packit 98cdb6
Packit 98cdb6
  gtk_init (&argc, &argv);
Packit 98cdb6
Packit 98cdb6
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
Packit 98cdb6
  gtk_window_set_title (GTK_WINDOW (window), "Tooltips test");
Packit 98cdb6
  gtk_container_set_border_width (GTK_CONTAINER (window), 10);
Packit 98cdb6
  g_signal_connect (window, "delete_event",
Packit 98cdb6
		    G_CALLBACK (gtk_main_quit), NULL);
Packit 98cdb6
Packit 98cdb6
  box = gtk_vbox_new (FALSE, 3);
Packit 98cdb6
  gtk_container_add (GTK_CONTAINER (window), box);
Packit 98cdb6
Packit 98cdb6
  /* A check button using the tooltip-markup property */
Packit 98cdb6
  button = gtk_check_button_new_with_label ("This one uses the tooltip-markup property");
Packit 98cdb6
  gtk_widget_set_tooltip_text (button, "Hello, I am a static tooltip.");
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
Packit 98cdb6
Packit 98cdb6
  text = gtk_widget_get_tooltip_text (button);
Packit 98cdb6
  markup = gtk_widget_get_tooltip_markup (button);
Packit 98cdb6
  g_assert (g_str_equal ("Hello, I am a static tooltip.", text));
Packit 98cdb6
  g_assert (g_str_equal ("Hello, I am a static tooltip.", markup));
Packit 98cdb6
  g_free (text); g_free (markup);
Packit 98cdb6
Packit 98cdb6
  /* A check button using the query-tooltip signal */
Packit 98cdb6
  button = gtk_check_button_new_with_label ("I use the query-tooltip signal");
Packit 98cdb6
  g_object_set (button, "has-tooltip", TRUE, NULL);
Packit 98cdb6
  g_signal_connect (button, "query-tooltip",
Packit 98cdb6
		    G_CALLBACK (query_tooltip_cb), NULL);
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
Packit 98cdb6
Packit 98cdb6
  /* A label */
Packit 98cdb6
  button = gtk_label_new ("I am just a label");
Packit 98cdb6
  gtk_label_set_selectable (GTK_LABEL (button), FALSE);
Packit 98cdb6
  gtk_widget_set_tooltip_text (button, "Label & and tooltip");
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
Packit 98cdb6
Packit 98cdb6
  text = gtk_widget_get_tooltip_text (button);
Packit 98cdb6
  markup = gtk_widget_get_tooltip_markup (button);
Packit 98cdb6
  g_assert (g_str_equal ("Label & and tooltip", text));
Packit 98cdb6
  g_assert (g_str_equal ("Label & and tooltip", markup));
Packit 98cdb6
  g_free (text); g_free (markup);
Packit 98cdb6
Packit 98cdb6
  /* A selectable label */
Packit 98cdb6
  button = gtk_label_new ("I am a selectable label");
Packit 98cdb6
  gtk_label_set_selectable (GTK_LABEL (button), TRUE);
Packit 98cdb6
  gtk_widget_set_tooltip_markup (button, "Another Label tooltip");
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
Packit 98cdb6
Packit 98cdb6
  text = gtk_widget_get_tooltip_text (button);
Packit 98cdb6
  markup = gtk_widget_get_tooltip_markup (button);
Packit 98cdb6
  g_assert (g_str_equal ("Another Label tooltip", text));
Packit 98cdb6
  g_assert (g_str_equal ("Another Label tooltip", markup));
Packit 98cdb6
  g_free (text); g_free (markup);
Packit 98cdb6
Packit 98cdb6
  /* Another one, with a custom tooltip window */
Packit 98cdb6
  button = gtk_check_button_new_with_label ("This one has a custom tooltip window!");
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
Packit 98cdb6
Packit 98cdb6
  tooltip_window = gtk_window_new (GTK_WINDOW_POPUP);
Packit 98cdb6
  tooltip_button = gtk_label_new ("blaat!");
Packit 98cdb6
  gtk_container_add (GTK_CONTAINER (tooltip_window), tooltip_button);
Packit 98cdb6
  gtk_widget_show (tooltip_button);
Packit 98cdb6
Packit 98cdb6
  gtk_widget_set_tooltip_window (button, GTK_WINDOW (tooltip_window));
Packit 98cdb6
  g_signal_connect (button, "query-tooltip",
Packit 98cdb6
		    G_CALLBACK (query_tooltip_custom_cb), NULL);
Packit 98cdb6
  g_object_set (button, "has-tooltip", TRUE, NULL);
Packit 98cdb6
Packit 98cdb6
  /* An insensitive button */
Packit 98cdb6
  button = gtk_button_new_with_label ("This one is insensitive");
Packit 98cdb6
  gtk_widget_set_sensitive (button, FALSE);
Packit 98cdb6
  g_object_set (button, "tooltip-text", "Insensitive!", NULL);
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
Packit 98cdb6
Packit 98cdb6
  /* Testcases from Kris without a tree view don't exist. */
Packit 98cdb6
  tree_view = gtk_tree_view_new_with_model (create_model ());
Packit 98cdb6
  gtk_widget_set_size_request (tree_view, 200, 240);
Packit 98cdb6
Packit 98cdb6
  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
Packit 98cdb6
					       0, "Test",
Packit 98cdb6
					       gtk_cell_renderer_text_new (),
Packit 98cdb6
					       "text", 0,
Packit 98cdb6
					       NULL);
Packit 98cdb6
Packit 98cdb6
  g_object_set (tree_view, "has-tooltip", TRUE, NULL);
Packit 98cdb6
  g_signal_connect (tree_view, "query-tooltip",
Packit 98cdb6
		    G_CALLBACK (query_tooltip_tree_view_cb), NULL);
Packit 98cdb6
  g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
Packit 98cdb6
		    "changed", G_CALLBACK (selection_changed_cb), tree_view);
Packit 98cdb6
Packit 98cdb6
  /* Set a tooltip on the column */
Packit 98cdb6
  column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), 0);
Packit 98cdb6
  gtk_tree_view_column_set_clickable (column, TRUE);
Packit 98cdb6
  g_object_set (column->button, "tooltip-text", "Header", NULL);
Packit 98cdb6
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (box), tree_view, FALSE, FALSE, 2);
Packit 98cdb6
Packit 98cdb6
  /* And a text view for Matthias */
Packit 98cdb6
  buffer = gtk_text_buffer_new (NULL);
Packit 98cdb6
Packit 98cdb6
  gtk_text_buffer_get_end_iter (buffer, &iter);
Packit 98cdb6
  gtk_text_buffer_insert (buffer, &iter, "Hello, the text ", -1);
Packit 98cdb6
Packit 98cdb6
  tag = gtk_text_buffer_create_tag (buffer, "bold", NULL);
Packit 98cdb6
  g_object_set (tag, "weight", PANGO_WEIGHT_BOLD, NULL);
Packit 98cdb6
Packit 98cdb6
  gtk_text_buffer_get_end_iter (buffer, &iter);
Packit 98cdb6
  gtk_text_buffer_insert_with_tags (buffer, &iter, "in bold", -1, tag, NULL);
Packit 98cdb6
Packit 98cdb6
  gtk_text_buffer_get_end_iter (buffer, &iter);
Packit 98cdb6
  gtk_text_buffer_insert (buffer, &iter, " has a tooltip!", -1);
Packit 98cdb6
Packit 98cdb6
  text_view = gtk_text_view_new_with_buffer (buffer);
Packit 98cdb6
  gtk_widget_set_size_request (text_view, 200, 50);
Packit 98cdb6
Packit 98cdb6
  g_object_set (text_view, "has-tooltip", TRUE, NULL);
Packit 98cdb6
  g_signal_connect (text_view, "query-tooltip",
Packit 98cdb6
		    G_CALLBACK (query_tooltip_text_view_cb), tag);
Packit 98cdb6
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (box), text_view, FALSE, FALSE, 2);
Packit 98cdb6
Packit 98cdb6
  /* Drawing area */
Packit 98cdb6
  drawing_area = gtk_drawing_area_new ();
Packit 98cdb6
  gtk_widget_set_size_request (drawing_area, 320, 240);
Packit 98cdb6
  g_object_set (drawing_area, "has-tooltip", TRUE, NULL);
Packit 98cdb6
  g_signal_connect (drawing_area, "expose_event",
Packit 98cdb6
		    G_CALLBACK (drawing_area_expose), NULL);
Packit 98cdb6
  g_signal_connect (drawing_area, "query-tooltip",
Packit 98cdb6
		    G_CALLBACK (query_tooltip_drawing_area_cb), NULL);
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (box), drawing_area, FALSE, FALSE, 2);
Packit 98cdb6
Packit 98cdb6
  button = gtk_label_new ("Custom tooltip I");
Packit 98cdb6
  label = gtk_label_new ("See, custom");
Packit 98cdb6
  g_object_ref_sink (label);
Packit 98cdb6
  g_object_set (button, "has-tooltip", TRUE, NULL);
Packit 98cdb6
  g_signal_connect (button, "query-tooltip",
Packit 98cdb6
		    G_CALLBACK (query_tooltip_label_cb), label);
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 2);
Packit 98cdb6
Packit 98cdb6
  button = gtk_label_new ("Custom tooltip II");
Packit 98cdb6
  label = gtk_label_new ("See, custom, too");
Packit 98cdb6
  g_object_ref_sink (label);
Packit 98cdb6
  g_object_set (button, "has-tooltip", TRUE, NULL);
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 2);
Packit 98cdb6
  g_signal_connect (button, "query-tooltip",
Packit 98cdb6
		    G_CALLBACK (query_tooltip_label_cb), label);
Packit 98cdb6
Packit 98cdb6
  /* Done! */
Packit 98cdb6
  gtk_widget_show_all (window);
Packit 98cdb6
Packit 98cdb6
  gtk_main ();
Packit 98cdb6
Packit 98cdb6
  return 0;
Packit 98cdb6
}