* to normal
*/
-static void gtk_tooltips_class_init (GtkTooltipsClass *klass);
-static void gtk_tooltips_init (GtkTooltips *tooltips);
static void gtk_tooltips_destroy (GtkObject *object);
static void gtk_tooltips_event_handler (GtkWidget *widget,
static gboolean get_keyboard_mode (GtkWidget *widget);
-static GtkObjectClass *parent_class;
static const gchar tooltips_data_key[] = "_GtkTooltipsData";
static const gchar tooltips_info_key[] = "_GtkTooltipsInfo";
-GType
-gtk_tooltips_get_type (void)
-{
- static GType tooltips_type = 0;
-
- if (!tooltips_type)
- {
- static const GTypeInfo tooltips_info =
- {
- sizeof (GtkTooltipsClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) gtk_tooltips_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (GtkTooltips),
- 0, /* n_preallocs */
- (GInstanceInitFunc) gtk_tooltips_init,
- };
-
- tooltips_type = g_type_register_static (GTK_TYPE_OBJECT, I_("GtkTooltips"),
- &tooltips_info, 0);
- }
-
- return tooltips_type;
-}
+G_DEFINE_TYPE (GtkTooltips, gtk_tooltips, GTK_TYPE_OBJECT)
static void
gtk_tooltips_class_init (GtkTooltipsClass *class)
object_class = (GtkObjectClass*) class;
- parent_class = g_type_class_peek_parent (class);
-
object_class->destroy = gtk_tooltips_destroy;
}
gtk_tooltips_unset_tip_window (tooltips);
- GTK_OBJECT_CLASS (parent_class)->destroy (object);
+ GTK_OBJECT_CLASS (gtk_tooltips_parent_class)->destroy (object);
}
static void
if (!tooltips->tip_window)
{
tooltips->tip_window = gtk_window_new (GTK_WINDOW_POPUP);
+ gtk_window_set_type_hint (GTK_WINDOW (tooltips->tip_window), GDK_WINDOW_TYPE_HINT_TOOLTIP);
gtk_tooltips_update_screen (tooltips, TRUE);
gtk_widget_set_app_paintable (tooltips->tip_window, TRUE);
gtk_window_set_resizable (GTK_WINDOW (tooltips->tip_window), FALSE);
tooltips->tips_data_list = g_list_append (tooltips->tips_data_list,
tooltipsdata);
- g_signal_connect_after (widget, "event-after",
+ g_signal_connect_after (widget, "event_after",
G_CALLBACK (gtk_tooltips_event_handler),
tooltipsdata);
GdkScreen *pointer_screen;
gint monitor_num, px, py;
GdkRectangle monitor;
+ GtkWindow *toplevel;
if (!tooltips->tip_window)
gtk_tooltips_force_window (tooltips);
else
y = y + widget->allocation.height + 4;
+ toplevel = GTK_WINDOW (gtk_widget_get_toplevel (widget));
+ if (toplevel && GTK_IS_WINDOW (toplevel))
+ gtk_window_set_transient_for (GTK_WINDOW (tooltips->tip_window), toplevel);
+
gtk_window_move (GTK_WINDOW (tooltips->tip_window), x, y);
gtk_widget_show (tooltips->tip_window);
}
}
}
+static gboolean
+tooltips_enabled (GtkTooltips *tooltips, GtkWidget *w)
+{
+ GtkSettings *settings;
+ gboolean touchscreen;
+
+ if (!tooltips->enabled)
+ return FALSE;
+
+ settings = gtk_widget_get_settings (w);
+ g_object_get (settings, "gtk-touchscreen-mode", &touchscreen, NULL);
+
+ return !touchscreen;
+}
+
static void
gtk_tooltips_start_delay (GtkTooltips *tooltips,
GtkWidget *widget)
GtkTooltipsData *old_tips_data;
old_tips_data = tooltips->active_tips_data;
- if (tooltips->enabled &&
+ if (tooltips_enabled (tooltips, widget) &&
(!old_tips_data || old_tips_data->widget != widget))
{
guint delay;