gtk+ r21754 - in trunk: . docs/reference docs/reference/gtk gtk



Author: matthiasc
Date: Mon Nov  3 19:46:21 2008
New Revision: 21754
URL: http://svn.gnome.org/viewvc/gtk+?rev=21754&view=rev

Log:
Add new statusicon tooltip api


Modified:
   trunk/ChangeLog
   trunk/docs/reference/ChangeLog
   trunk/docs/reference/gtk/gtk-sections.txt
   trunk/gtk/gtk.symbols
   trunk/gtk/gtkstatusicon.c
   trunk/gtk/gtkstatusicon.h

Modified: trunk/docs/reference/gtk/gtk-sections.txt
==============================================================================
--- trunk/docs/reference/gtk/gtk-sections.txt	(original)
+++ trunk/docs/reference/gtk/gtk-sections.txt	Mon Nov  3 19:46:21 2008
@@ -3461,6 +3461,12 @@
 gtk_status_icon_set_screen
 gtk_status_icon_get_screen
 gtk_status_icon_set_tooltip
+gtk_status_icon_set_tooltip_text
+gtk_status_icon_get_tooltip_text
+gtk_status_icon_set_tooltip_markup
+gtk_status_icon_get_tooltip_markup
+gtk_status_icon_set_has_tooltip
+gtk_status_icon_get_has_tooltip
 gtk_status_icon_set_visible
 gtk_status_icon_get_visible
 gtk_status_icon_set_blinking

Modified: trunk/gtk/gtk.symbols
==============================================================================
--- trunk/gtk/gtk.symbols	(original)
+++ trunk/gtk/gtk.symbols	Mon Nov  3 19:46:21 2008
@@ -1150,7 +1150,15 @@
 gtk_status_icon_get_gicon
 gtk_status_icon_get_size
 gtk_status_icon_set_screen
+#ifndef GTK_DISABLE_DEPRECATED
 gtk_status_icon_set_tooltip
+#endif
+gtk_status_icon_set_tooltip_text
+gtk_status_icon_get_tooltip_text
+gtk_status_icon_set_tooltip_markup
+gtk_status_icon_get_tooltip_markup
+gtk_status_icon_set_has_tooltip
+gtk_status_icon_get_has_tooltip
 gtk_status_icon_set_visible
 gtk_status_icon_get_visible
 gtk_status_icon_set_blinking

Modified: trunk/gtk/gtkstatusicon.c
==============================================================================
--- trunk/gtk/gtkstatusicon.c	(original)
+++ trunk/gtk/gtkstatusicon.c	Mon Nov  3 19:46:21 2008
@@ -79,7 +79,10 @@
   PROP_VISIBLE,
   PROP_ORIENTATION,
   PROP_EMBEDDED,
-  PROP_BLINKING
+  PROP_BLINKING,
+  PROP_HAS_TOOLTIP,
+  PROP_TOOLTIP_TEXT,
+  PROP_TOOLTIP_MARKUP
 };
 
 enum 
@@ -90,6 +93,7 @@
   BUTTON_PRESS_EVENT_SIGNAL,
   BUTTON_RELEASE_EVENT_SIGNAL,
   SCROLL_EVENT_SIGNAL,
+  QUERY_TOOLTIP_SIGNAL,
   LAST_SIGNAL
 };
 
@@ -111,11 +115,13 @@
   NOTIFYICONDATAW nid;
   gint		last_click_x, last_click_y;
   GtkOrientation orientation;
+  gchar         *tooltip_text;
 #endif
 	
 #ifdef GDK_WINDOWING_QUARTZ
   GtkWidget     *dummy_widget;
   GtkQuartzStatusIcon *status_item;
+  gchar         *tooltip_text;
 #endif
 
   gint          size;
@@ -163,6 +169,11 @@
 static void     gtk_status_icon_orientation_changed (GtkStatusIcon *status_icon);
 static gboolean gtk_status_icon_scroll           (GtkStatusIcon  *status_icon,
 						  GdkEventScroll *event);
+static gboolean gtk_status_icon_query_tooltip    (GtkStatusIcon *status_icon,
+						  gint           x,
+						  gint           y,
+						  gboolean       keyboard_tip,
+						  GtkTooltip    *tooltip);
 
 static gboolean gtk_status_icon_key_press        (GtkStatusIcon  *status_icon,
 						  GdkEventKey    *event);
@@ -191,6 +202,7 @@
   class->button_press_event   = NULL;
   class->button_release_event = NULL;
   class->scroll_event         = NULL;
+  class->query_tooltip        = NULL;
 
   g_object_class_install_property (gobject_class,
 				   PROP_PIXBUF,
@@ -316,6 +328,80 @@
 						      GTK_ORIENTATION_HORIZONTAL,
 						      GTK_PARAM_READABLE));
 
+/**
+ * GtkStatusIcon:has-tooltip:
+ *
+ * Enables or disables the emission of #GtkStatusIcon::query-tooltip on
+ * @status_icon.  A value of %TRUE indicates that @status_icon can have a
+ * tooltip, in this case the status icon will be queried using
+ * #GtkStatusIcon::query-tooltip to determine whether it will provide a
+ * tooltip or not.
+ *
+ * Note that setting this property to %TRUE for the first time will change
+ * the event masks of the windows of this status icon to include leave-notify
+ * and motion-notify events. This will not be undone when the property is set
+ * to %FALSE again.
+ *
+ * Whether this property is respected is platform dependent.
+ * For plain text tooltips, use #GtkStatusIcon:tooltip-text in preference.
+ *
+ * Since: 2.16
+ */
+  g_object_class_install_property (gobject_class,
+				   PROP_HAS_TOOLTIP,
+				   g_param_spec_boolean ("has-tooltip",
+ 							 P_("Has tooltip"),
+ 							 P_("Whether this tray icon has a tooltip"),
+ 							 FALSE,
+ 							 GTK_PARAM_READWRITE));
+  /**
+   * GtkStatusIcon:tooltip-text:
+   *
+   * Sets the text of tooltip to be the given string.
+   *
+   * Also see gtk_tooltip_set_text().
+   *
+   * This is a convenience property which will take care of getting the
+   * tooltip shown if the given string is not %NULL.
+   * #GtkStatusIcon:has-tooltip will automatically be set to %TRUE and
+   * the default handler for the #GtkStatusIcon::query-tooltip signal
+   * will take care of displaying the tooltip.
+   *
+   * Since: 2.16
+   */
+  g_object_class_install_property (gobject_class,
+                                   PROP_TOOLTIP_TEXT,
+                                   g_param_spec_string ("tooltip-text",
+                                                        P_("Tooltip Text"),
+                                                        P_("The contents of the tooltip for this widget"),
+                                                        NULL,
+                                                        GTK_PARAM_READWRITE));
+  /**
+   * GtkStatusIcon:tooltip-markup:
+   *
+   * Sets the text of tooltip to be the given string, which is marked up
+   * with the <link linkend="PangoMarkupFormat">Pango text markup 
+   * language</link>. Also see gtk_tooltip_set_markup().
+   *
+   * This is a convenience property which will take care of getting the
+   * tooltip shown if the given string is not %NULL.
+   * #GtkStatusIcon:has-tooltip will automatically be set to %TRUE and
+   * the default handler for the #GtkStatusIcon::query-tooltip signal
+   * will take care of displaying the tooltip.
+   *
+   * On some platforms, embedded markup will be ignored.
+   *
+   * Since: 2.16
+   */
+  g_object_class_install_property (gobject_class,
+				   PROP_TOOLTIP_MARKUP,
+				   g_param_spec_string ("tooltip-markup",
+ 							P_("Tooltip markup"),
+							P_("The contents of the tooltip for this tray icon"),
+							NULL,
+							GTK_PARAM_READWRITE));
+
+
   /**
    * GtkStatusIcon::activate:
    * @status_icon: the object which received the signal
@@ -405,14 +491,13 @@
    * The ::button-press-event signal will be emitted when a button
    * (typically from a mouse) is pressed.
    *
-   * Whether this event is emitted is platform-dependent.  Use the 
-   * #GtkStatusIcon::activate and #GtkStatusIcon::popup-menu signals 
-   * in preference.
+   * Whether this event is emitted is platform-dependent.  Use the ::activate
+   * and ::popup-menu signals in preference.
    *
    * Return value: %TRUE to stop other handlers from being invoked
    * for the event. %FALSE to propagate the event further.
    *
-   * Since: 2.16
+   * Since: 2.14
    */
   status_icon_signals [BUTTON_PRESS_EVENT_SIGNAL] =
     g_signal_new (I_("button_press_event"),
@@ -432,14 +517,13 @@
    * The ::button-release-event signal will be emitted when a button
    * (typically from a mouse) is released.
    *
-   * Whether this event is emitted is platform-dependent.  Use the 
-   * #GtkStatusIcon::activate and #GtkStatusIcon::popup-menu signals 
-   * in preference.
+   * Whether this event is emitted is platform-dependent.  Use the ::activate
+   * and ::popup-menu signals in preference.
    *
    * Return value: %TRUE to stop other handlers from being invoked
    * for the event. %FALSE to propagate the event further.
    *
-   * Since: 2.16
+   * Since: 2.14
    */
   status_icon_signals [BUTTON_RELEASE_EVENT_SIGNAL] =
     g_signal_new (I_("button_release_event"),
@@ -457,15 +541,13 @@
    * @event: the #GdkEventScroll which triggered this signal
    *
    * The ::scroll-event signal is emitted when a button in the 4 to 7
-   * range is pressed. Wheel mice are usually configured to generate
+   * range is pressed. Wheel mice are usually configured to generate 
    * button press events for buttons 4 and 5 when the wheel is turned.
    *
    * Whether this event is emitted is platform-dependent.
    *
-   * Returns: %TRUE to stop other handlers from being invoked for the event.
+   * Returns: %TRUE to stop other handlers from being invoked for the event. 
    *   %FALSE to propagate the event further.
-   *
-   * Since: 2.16
    */
   status_icon_signals[SCROLL_EVENT_SIGNAL] =
     g_signal_new (I_("scroll_event"),
@@ -477,6 +559,49 @@
 		  G_TYPE_BOOLEAN, 1,
 		  GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
 
+  /**
+   * GtkStatusIcon::query-tooltip:
+   * @status_icon: the object which received the signal
+   * @x: the x coordinate of the cursor position where the request has been
+   *     emitted, relative to @status_icon
+   * @y: the y coordinate of the cursor position where the request has been
+   *     emitted, relative to @status_icon
+   * @keyboard_mode: %TRUE if the tooltip was trigged using the keyboard
+   * @tooltip: a #GtkTooltip
+   *
+   * Emitted when the #GtkSettings:gtk-tooltip-timeout has expired with the
+   * cursor hovering above @status_icon; or emitted when @status_icon got
+   * focus in keyboard mode.
+   *
+   * Using the given coordinates, the signal handler should determine
+   * whether a tooltip should be shown for @status_icon. If this is
+   * the case %TRUE should be returned, %FALSE otherwise. Note that if
+   * @keyboard_mode is %TRUE, the values of @x and @y are undefined and
+   * should not be used.
+   *
+   * The signal handler is free to manipulate @tooltip with the therefore
+   * destined function calls.
+   *
+   * Whether this signal is emitted is platform-dependent.
+   * For plain text tooltips, use #GtkStatusIcon:tooltip-text in preference.
+   *
+   * Returns: %TRUE if @tooltip should be shown right now, %FALSE otherwise.
+   *
+   * Since: 2.16
+   */
+  status_icon_signals [QUERY_TOOLTIP_SIGNAL] =
+    g_signal_new (I_("query_tooltip"),
+		  G_TYPE_FROM_CLASS (gobject_class),
+		  G_SIGNAL_RUN_LAST,
+		  G_STRUCT_OFFSET (GtkStatusIconClass, query_tooltip),
+		  g_signal_accumulator_true_handled, NULL,
+		  _gtk_marshal_BOOLEAN__INT_INT_BOOLEAN_OBJECT,
+		  G_TYPE_BOOLEAN, 4,
+		  G_TYPE_INT,
+		  G_TYPE_INT,
+		  G_TYPE_BOOLEAN,
+		  GTK_TYPE_TOOLTIP);
+
   g_type_class_add_private (class, sizeof (GtkStatusIconPrivate));
 }
 
@@ -517,7 +642,7 @@
 {
   ButtonCallbackData *bc = (ButtonCallbackData *) data;
 
-  if (bc->event->type == GDK_BUTTON_PRESS)
+  if (event->type == GDK_BUTTON_PRESS)
     gtk_status_icon_button_press (bc->status_icon, bc->event);
   else
     gtk_status_icon_button_release (bc->status_icon, bc->event);
@@ -707,6 +832,8 @@
 			    G_CALLBACK (gtk_status_icon_button_release), status_icon);
   g_signal_connect_swapped (priv->tray_icon, "scroll-event",
 			    G_CALLBACK (gtk_status_icon_scroll), status_icon);
+  g_signal_connect_swapped (priv->tray_icon, "query-tooltip",
+			    G_CALLBACK (gtk_status_icon_query_tooltip), status_icon);
   g_signal_connect_swapped (priv->tray_icon, "screen-changed",
 		    	    G_CALLBACK (gtk_status_icon_screen_changed), status_icon);
   priv->image = gtk_image_new ();
@@ -823,6 +950,7 @@
     Shell_NotifyIconW (NIM_DELETE, &priv->nid);
   if (priv->nid.hIcon)
     DestroyIcon (priv->nid.hIcon);
+  g_free (priv->tooltip_text);
 
   gtk_widget_destroy (priv->dummy_widget);
 
@@ -833,6 +961,7 @@
   QUARTZ_POOL_ALLOC;
   [priv->status_item release];
   QUARTZ_POOL_RELEASE;
+  g_free (priv->tooltip_text);
 #endif
 
   G_OBJECT_CLASS (gtk_status_icon_parent_class)->finalize (object);
@@ -872,6 +1001,12 @@
     case PROP_VISIBLE:
       gtk_status_icon_set_visible (status_icon, g_value_get_boolean (value));
       break;
+    case PROP_HAS_TOOLTIP:
+      gtk_status_icon_set_has_tooltip (status_icon, g_value_get_boolean (value));
+    case PROP_TOOLTIP_TEXT:
+      gtk_status_icon_set_tooltip_text (status_icon, g_value_get_string (value));
+    case PROP_TOOLTIP_MARKUP:
+      gtk_status_icon_set_tooltip_markup (status_icon, g_value_get_string (value));
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -945,6 +1080,15 @@
       g_value_set_enum (value, status_icon->priv->orientation);
 #endif
       break;
+    case PROP_HAS_TOOLTIP:
+      g_value_set_boolean (value, gtk_status_icon_get_has_tooltip (status_icon));
+      break;
+    case PROP_TOOLTIP_TEXT:
+      g_value_set_string (value, gtk_status_icon_get_tooltip_text (status_icon));
+      break;
+    case PROP_TOOLTIP_MARKUP:
+      g_value_set_string (value, gtk_status_icon_get_tooltip_markup (status_icon));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -1572,6 +1716,20 @@
 		 event, &handled);
   return handled;
 }
+
+static gboolean
+gtk_status_icon_query_tooltip (GtkStatusIcon *status_icon,
+			       gint           x,
+			       gint           y,
+			       gboolean       keyboard_tip,
+			       GtkTooltip    *tooltip)
+{
+  gboolean handled = FALSE;
+  g_signal_emit (status_icon,
+		 status_icon_signals [QUERY_TOOLTIP_SIGNAL], 0,
+		 x, y, keyboard_tip, tooltip, &handled);
+  return handled;
+}
 #endif /* GDK_WINDOWING_X11 */
 
 static void
@@ -1999,47 +2157,18 @@
  * gtk_status_icon_set_tooltip:
  * @status_icon: a #GtkStatusIcon
  * @tooltip_text: the tooltip text, or %NULL
- * 
+ *
  * Sets the tooltip of the status icon.
- * 
+ *
  * Since: 2.10
- **/ 
+ *
+ * Deprecated:2.16: Use gtk_status_icon_set_tooltip_text() instead.
+ */
 void
 gtk_status_icon_set_tooltip (GtkStatusIcon *status_icon,
 			     const gchar   *tooltip_text)
 {
-  GtkStatusIconPrivate *priv;
-
-  g_return_if_fail (GTK_IS_STATUS_ICON (status_icon));
-
-  priv = status_icon->priv;
-
-#ifdef GDK_WINDOWING_X11
-
-  gtk_widget_set_tooltip_text (priv->tray_icon, tooltip_text);
-
-#endif
-#ifdef GDK_WINDOWING_WIN32
-  if (tooltip_text == NULL)
-    priv->nid.uFlags &= ~NIF_TIP;
-  else
-    {
-      WCHAR *wcs = g_utf8_to_utf16 (tooltip_text, -1, NULL, NULL, NULL);
-
-      priv->nid.uFlags |= NIF_TIP;
-      wcsncpy (priv->nid.szTip, wcs, G_N_ELEMENTS (priv->nid.szTip) - 1);
-      priv->nid.szTip[G_N_ELEMENTS (priv->nid.szTip) - 1] = 0;
-      g_free (wcs);
-    }
-  if (priv->nid.hWnd != NULL && priv->visible)
-    if (!Shell_NotifyIconW (NIM_MODIFY, &priv->nid))
-      g_warning ("%s:%d:Shell_NotifyIconW(NIM_MODIFY) failed", __FILE__, __LINE__-1);
-#endif
-#ifdef GDK_WINDOWING_QUARTZ
-  QUARTZ_POOL_ALLOC;
-  [priv->status_item setToolTip:tooltip_text];
-  QUARTZ_POOL_RELEASE;
-#endif
+  gtk_status_icon_set_tooltip_text (status_icon, tooltip_text);
 }
 
 static gboolean
@@ -2441,6 +2570,251 @@
 }
 
 /**
+ * gtk_status_icon_set_has_tooltip:
+ * @status_icon: a #GtkStatusIcon
+ * @has_tooltip: whether or not @status_icon has a tooltip
+ *
+ * Sets the has-tooltip property on @status_icon to @has_tooltip.
+ * See #GtkStatusIcon:has-tooltip for more information.
+ *
+ * Since: 2.16
+ */
+void
+gtk_status_icon_set_has_tooltip (GtkStatusIcon *status_icon,
+				 gboolean       has_tooltip)
+{
+  GtkStatusIconPrivate *priv;
+
+  g_return_if_fail (GTK_IS_STATUS_ICON (status_icon));
+
+  priv = status_icon->priv;
+
+#ifdef GDK_WINDOWING_X11
+  gtk_widget_set_has_tooltip (priv->tray_icon, has_tooltip);
+#endif
+#ifdef GDK_WINDOWING_WIN32
+  if (!has_tooltip && priv->tooltip_text)
+    gtk_tray_icon_set_tooltip_text (status_icon, NULL);
+#endif
+#ifdef GDK_WINDOWING_QUARTZ
+  if (!has_tooltip && priv->tooltip_text)
+    gtk_tray_icon_set_tooltip_text (status_icon, NULL);
+#endif
+}
+
+/**
+ * gtk_status_icon_get_has_tooltip:
+ * @status_icon: a #GtkStatusIcon
+ *
+ * Returns the current value of the has-tooltip property.
+ * See #GtkStatusIcon:has-tooltip for more information.
+ *
+ * Return value: current value of has-tooltip on @status_icon.
+ *
+ * Since: 2.16
+ */
+gboolean
+gtk_status_icon_get_has_tooltip (GtkStatusIcon *status_icon)
+{
+  GtkStatusIconPrivate *priv;
+  gboolean has_tooltip = FALSE;
+
+  g_return_val_if_fail (GTK_IS_STATUS_ICON (status_icon), FALSE);
+
+  priv = status_icon->priv;
+
+#ifdef GDK_WINDOWING_X11
+  has_tooltip = gtk_widget_get_has_tooltip (priv->tray_icon);
+#endif
+#ifdef GDK_WINDOWING_WIN32
+  has_tooltip = (priv->tooltip_text != NULL);
+#endif
+#ifdef GDK_WINDOWING_QUARTZ
+  has_tooltip = (priv->tooltip_text != NULL);
+#endif
+
+  return has_tooltip;
+}
+
+/**
+ * gtk_status_icon_set_tooltip_text:
+ * @status_icon: a #GtkStatusIcon
+ * @tooltip_text: the contents of the tooltip for @status_icon
+ *
+ * Sets @tooltip_text as the contents of the tooltip.
+ *
+ * This function will take care of setting #GtkStatusIcon:has-tooltip to
+ * %TRUE and of the default handler for the #GtkStatusIcon::query-tooltip
+ * signal.
+ *
+ * See also the #GtkStatusIcon:tooltip-text property and
+ * gtk_tooltip_set_text().
+ *
+ * Since: 2.16
+ */
+void
+gtk_status_icon_set_tooltip_text (GtkStatusIcon *status_icon,
+				  const gchar   *tooltip_text)
+{
+  GtkStatusIconPrivate *priv;
+
+  g_return_if_fail (GTK_IS_STATUS_ICON (status_icon));
+
+  priv = status_icon->priv;
+
+#ifdef GDK_WINDOWING_X11
+
+  gtk_widget_set_tooltip_text (priv->tray_icon, tooltip_text);
+
+#endif
+#ifdef GDK_WINDOWING_WIN32
+  if (tooltip_text == NULL)
+    priv->nid.uFlags &= ~NIF_TIP;
+  else
+    {
+      WCHAR *wcs = g_utf8_to_utf16 (tooltip_text, -1, NULL, NULL, NULL);
+
+      priv->nid.uFlags |= NIF_TIP;
+      wcsncpy (priv->nid.szTip, wcs, G_N_ELEMENTS (priv->nid.szTip) - 1);
+      priv->nid.szTip[G_N_ELEMENTS (priv->nid.szTip) - 1] = 0;
+      g_free (wcs);
+    }
+  if (priv->nid.hWnd != NULL && priv->visible)
+    if (!Shell_NotifyIconW (NIM_MODIFY, &priv->nid))
+      g_warning ("%s:%d:Shell_NotifyIconW(NIM_MODIFY) failed", __FILE__, __LINE__-1);
+
+  g_free (priv->tooltip_text);
+  priv->tooltip_text = g_strdup (tooltip_text);
+#endif
+#ifdef GDK_WINDOWING_QUARTZ
+  QUARTZ_POOL_ALLOC;
+  [priv->status_item setToolTip:tooltip_text];
+  QUARTZ_POOL_RELEASE;
+
+  g_free (priv->tooltip_text);
+  priv->tooltip_text = g_strdup (tooltip_text);
+#endif
+}
+
+/**
+ * gtk_status_icon_get_tooltip_text:
+ * @status_icon: a #GtkStatusIcon
+ *
+ * Gets the contents of the tooltip for @status_icon.
+ *
+ * Return value: the tooltip text, or %NULL. You should free the
+ *   returned string with g_free() when done.
+ *
+ * Since: 2.16
+ */
+gchar *
+gtk_status_icon_get_tooltip_text (GtkStatusIcon *status_icon)
+{
+  GtkStatusIconPrivate *priv;
+  gchar *tooltip_text = NULL;
+
+  g_return_val_if_fail (GTK_IS_STATUS_ICON (status_icon), NULL);
+
+  priv = status_icon->priv;
+
+#ifdef GDK_WINDOWING_X11
+  tooltip_text = gtk_widget_get_tooltip_text (priv->tray_icon);
+#endif
+#ifdef GDK_WINDOWING_WIN32
+  if (priv->tooltip_text)
+    tooltip_text = g_strdup (priv->tooltip_text);
+#endif
+#ifdef GDK_WINDOWING_QUARTZ
+  if (priv->tooltip_text)
+    tooltip_text = g_strdup (priv->tooltip_text);
+#endif
+
+  return tooltip_text;
+}
+
+/**
+ * gtk_status_icon_set_tooltip_markup:
+ * @status_icon: a #GtkStatusIcon
+ * @markup: the contents of the tooltip for @status_icon, or %NULL
+ *
+ * Sets @markup as the contents of the tooltip, which is marked up with
+ *  the <link linkend="PangoMarkupFormat">Pango text markup language</link>.
+ *
+ * This function will take care of setting #GtkStatusIcon:has-tooltip to %TRUE
+ * and of the default handler for the #GtkStatusIcon::query-tooltip signal.
+ *
+ * See also the #GtkStatusIcon:tooltip-markup property and
+ * gtk_tooltip_set_markup().
+ *
+ * Since: 2.16
+ */
+void
+gtk_status_icon_set_tooltip_markup (GtkStatusIcon *status_icon,
+				    const gchar   *markup)
+{
+  GtkStatusIconPrivate *priv;
+#ifndef GDK_WINDOWING_X11
+  gchar *text = NULL;
+#endif
+
+  g_return_if_fail (GTK_IS_STATUS_ICON (status_icon));
+
+  priv = status_icon->priv;
+
+#ifdef GDK_WINDOWING_X11
+  gtk_widget_set_tooltip_markup (priv->tray_icon, markup);
+#endif
+#ifdef GDK_WINDOWING_WIN32
+  if (markup)
+    pango_parse_markup (markup, -1, 0, NULL, &text, NULL, NULL);
+  gtk_status_icon_set_tooltip_text (status_icon, text);
+  g_free (text);
+#endif
+#ifdef GDK_WINDOWING_QUARTZ
+  if (markup)
+    pango_parse_markup (markup, -1, 0, NULL, &text, NULL, NULL);
+  gtk_status_icon_set_tooltip_text (status_icon, text);
+  g_free (text);
+#endif
+}
+
+/**
+ * gtk_status_icon_get_tooltip_markup:
+ * @status_icon: a #GtkStatusIcon
+ *
+ * Gets the contents of the tooltip for @status_icon.
+ *
+ * Return value: the tooltip text, or %NULL. You should free the
+ *   returned string with g_free() when done.
+ *
+ * Since: 2.16
+ */
+gchar *
+gtk_status_icon_get_tooltip_markup (GtkStatusIcon *status_icon)
+{
+  GtkStatusIconPrivate *priv;
+  gchar *markup = NULL;
+
+  g_return_val_if_fail (GTK_IS_STATUS_ICON (status_icon), NULL);
+
+  priv = status_icon->priv;
+
+#ifdef GDK_WINDOWING_X11
+  markup = gtk_widget_get_tooltip_markup (priv->tray_icon);
+#endif
+#ifdef GDK_WINDOWING_WIN32
+  if (priv->tooltip_text)
+    markup = g_markup_escape_text (priv->tooltip_text);
+#endif
+#ifdef GDK_WINDOWING_QUARTZ
+  if (priv->tooltip_text)
+    markup = g_markup_escape_text (priv->tooltip_text);
+#endif
+
+  return markup;
+}
+
+/**
  * gtk_status_icon_get_x11_window_id:
  * @status_icon: a #GtkStatusIcon
  *

Modified: trunk/gtk/gtkstatusicon.h
==============================================================================
--- trunk/gtk/gtkstatusicon.h	(original)
+++ trunk/gtk/gtkstatusicon.h	Mon Nov  3 19:46:21 2008
@@ -67,10 +67,14 @@
                                      GdkEventButton *event);
   gboolean (* scroll_event)         (GtkStatusIcon  *status_icon,
                                      GdkEventScroll *event);
+  gboolean (* query_tooltip)        (GtkStatusIcon  *status_icon,
+                                     gint            x,
+                                     gint            y,
+                                     gboolean        keyboard_mode,
+                                     GtkTooltip     *tooltip);
 
   void (*__gtk_reserved1);
   void (*__gtk_reserved2);
-  void (*__gtk_reserved3);
 };
 
 GType                 gtk_status_icon_get_type           (void) G_GNUC_CONST;
@@ -106,8 +110,16 @@
                                                           GdkScreen          *screen);
 GdkScreen            *gtk_status_icon_get_screen         (GtkStatusIcon      *status_icon);
 
+#ifndef GTK_DISABLE_DEPRECATED
 void                  gtk_status_icon_set_tooltip        (GtkStatusIcon      *status_icon,
                                                           const gchar        *tooltip_text);
+#endif
+void                  gtk_status_icon_set_has_tooltip    (GtkStatusIcon      *status_icon,
+                                                          gboolean            has_tooltip);
+void                  gtk_status_icon_set_tooltip_text   (GtkStatusIcon      *status_icon,
+                                                          const char         *text);
+void                  gtk_status_icon_set_tooltip_markup (GtkStatusIcon      *status_icon,
+                                                          const char         *markup);
 void                  gtk_status_icon_set_visible        (GtkStatusIcon      *status_icon,
 							  gboolean            visible);
 gboolean              gtk_status_icon_get_visible        (GtkStatusIcon      *status_icon);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]