]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtktooltips.c
Add a tooltip explaining the format of page ranges, and improve the page
[~andy/gtk] / gtk / gtktooltips.c
index 7fdf526c747884a3f4c38a64a8567f5e142fd2e0..d203082d7cfdeb0355e0cd6286b13f6fe4f0148e 100644 (file)
@@ -49,8 +49,6 @@
                                     * 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,
@@ -69,36 +67,10 @@ static void gtk_tooltips_unset_tip_window  (GtkTooltips *tooltips);
 
 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)
@@ -107,8 +79,6 @@ gtk_tooltips_class_init (GtkTooltipsClass *class)
 
   object_class = (GtkObjectClass*) class;
 
-  parent_class = g_type_class_peek_parent (class);
-
   object_class->destroy = gtk_tooltips_destroy;
 }
 
@@ -210,7 +180,7 @@ gtk_tooltips_destroy (GtkObject *object)
 
   gtk_tooltips_unset_tip_window (tooltips);
 
-  GTK_OBJECT_CLASS (parent_class)->destroy (object);
+  GTK_OBJECT_CLASS (gtk_tooltips_parent_class)->destroy (object);
 }
 
 static void
@@ -249,6 +219,7 @@ gtk_tooltips_force_window (GtkTooltips *tooltips)
   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);
@@ -358,7 +329,7 @@ gtk_tooltips_set_tip (GtkTooltips *tooltips,
 
       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);
 
@@ -405,6 +376,7 @@ gtk_tooltips_draw_tips (GtkTooltips *tooltips)
   GdkScreen *pointer_screen;
   gint monitor_num, px, py;
   GdkRectangle monitor;
+  GtkWindow *toplevel;
 
   if (!tooltips->tip_window)
     gtk_tooltips_force_window (tooltips);
@@ -466,6 +438,10 @@ gtk_tooltips_draw_tips (GtkTooltips *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);
 }
@@ -610,6 +586,21 @@ stop_keyboard_mode (GtkWidget *widget)
     }
 }
 
+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)
@@ -617,7 +608,7 @@ gtk_tooltips_start_delay (GtkTooltips *tooltips,
   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;