void
gtk_tooltips_force_window (GtkTooltips *tooltips)
{
- g_return_if_fail (tooltips != NULL);
g_return_if_fail (GTK_IS_TOOLTIPS (tooltips));
if (!tooltips->tip_window)
{
GtkTooltipsData *tooltipsdata;
- g_return_if_fail (tooltips != NULL);
g_return_if_fail (GTK_IS_TOOLTIPS (tooltips));
g_return_if_fail (widget != NULL);
tooltipsdata = gtk_tooltips_data_get (widget);
- if (tooltipsdata)
- gtk_tooltips_widget_remove (tooltipsdata->widget, tooltipsdata);
if (!tip_text)
- return;
-
- tooltipsdata = g_new0 (GtkTooltipsData, 1);
+ {
+ if (tooltipsdata)
+ gtk_tooltips_widget_remove (tooltipsdata->widget, tooltipsdata);
+ return;
+ }
+
+ if (tooltips->active_tips_data
+ && tooltips->active_tips_data->widget == widget
+ && GTK_WIDGET_DRAWABLE (tooltips->active_tips_data->widget))
+ {
+ g_free (tooltipsdata->tip_text);
+ g_free (tooltipsdata->tip_private);
- if (tooltipsdata != NULL)
+ tooltipsdata->tip_text = g_strdup (tip_text);
+ tooltipsdata->tip_private = g_strdup (tip_private);
+
+ gtk_tooltips_draw_tips (tooltips);
+ }
+ else
{
+ gtk_widget_ref (widget);
+
+ if (tooltipsdata)
+ gtk_tooltips_widget_remove (tooltipsdata->widget, tooltipsdata);
+
+ tooltipsdata = g_new0 (GtkTooltipsData, 1);
+
tooltipsdata->tooltips = tooltips;
tooltipsdata->widget = widget;
- gtk_widget_ref (widget);
tooltipsdata->tip_text = g_strdup (tip_text);
tooltipsdata->tip_private = g_strdup (tip_private);
tooltips->tips_data_list = g_list_append (tooltips->tips_data_list,
- tooltipsdata);
- gtk_signal_connect_after(GTK_OBJECT (widget), "event",
+ tooltipsdata);
+ gtk_signal_connect_after (GTK_OBJECT (widget), "event",
(GtkSignalFunc) gtk_tooltips_event_handler,
- (gpointer) tooltipsdata);
+ tooltipsdata);
gtk_object_set_data (GTK_OBJECT (widget), tooltips_data_key,
- (gpointer) tooltipsdata);
+ tooltipsdata);
gtk_signal_connect (GTK_OBJECT (widget), "unmap",
(GtkSignalFunc) gtk_tooltips_widget_unmap,
- (gpointer) tooltipsdata);
+ tooltipsdata);
gtk_signal_connect (GTK_OBJECT (widget), "unrealize",
(GtkSignalFunc) gtk_tooltips_widget_unmap,
- (gpointer) tooltipsdata);
+ tooltipsdata);
gtk_signal_connect (GTK_OBJECT (widget), "destroy",
- (GtkSignalFunc) gtk_tooltips_widget_remove,
- (gpointer) tooltipsdata);
+ (GtkSignalFunc) gtk_tooltips_widget_remove,
+ tooltipsdata);
}
}
-void
-gtk_tooltips_set_colors (GtkTooltips *tooltips,
- GdkColor *background,
- GdkColor *foreground)
-{
- g_return_if_fail (tooltips != NULL);
-
- g_warning ("gtk_tooltips_set_colors is deprecated and does nothing.\n"
- "The colors for tooltips are now taken from the style.");
-}
-
static gint
gtk_tooltips_paint_window (GtkTooltips *tooltips)
{
- gtk_paint_flat_box(tooltips->tip_window->style, tooltips->tip_window->window,
- GTK_STATE_NORMAL, GTK_SHADOW_OUT,
- NULL, GTK_WIDGET(tooltips->tip_window), "tooltip",
- 0, 0, -1, -1);
+ gtk_paint_flat_box (tooltips->tip_window->style, tooltips->tip_window->window,
+ GTK_STATE_NORMAL, GTK_SHADOW_OUT,
+ NULL, GTK_WIDGET(tooltips->tip_window), "tooltip",
+ 0, 0, -1, -1);
- return TRUE;
+ return FALSE;
}
static void
if (!tooltips->tip_window)
gtk_tooltips_force_window (tooltips);
else if (GTK_WIDGET_VISIBLE (tooltips->tip_window))
- {
- gtk_widget_hide (tooltips->tip_window);
- g_get_current_time (&tooltips->last_popdown);
- }
+ g_get_current_time (&tooltips->last_popdown);
gtk_widget_ensure_style (tooltips->tip_window);
style = tooltips->tip_window->style;
else
y = y + widget->allocation.height + 4;
- gtk_widget_popup (tooltips->tip_window, x, y);
+ gtk_window_move (GTK_WINDOW (tooltips->tip_window), x, y);
+ gtk_widget_show (tooltips->tip_window);
}
static gint
tooltips->use_sticky_delay = use_sticky_delay;
}
break;
+
default:
gtk_tooltips_set_active_widget (tooltips, NULL);
+ return FALSE;
break;
}
tooltipsdata);
gtk_tooltips_destroy_data (tooltipsdata);
}
+
+void
+_gtk_tooltips_show_tip (GtkWidget *widget)
+{
+ /* Showing the tip from the keyboard */
+
+ /* FIXME this function is completely broken right now,
+ * popdown doesn't occur when it should.
+ */
+
+ GtkTooltipsData *tooltipsdata;
+
+ tooltipsdata = gtk_tooltips_data_get (widget);
+
+ if (tooltipsdata == NULL)
+ return;
+
+ gtk_tooltips_set_active_widget (tooltipsdata->tooltips,
+ widget);
+
+ gtk_tooltips_timeout (tooltipsdata->tooltips);
+}