File compiz-gwd-fix-tooltips.patch of Package compiz

--- a/gtk/window-decorator/gtk-window-decorator.h
+++ b/gtk/window-decorator/gtk-window-decorator.h
@@ -284,7 +284,6 @@ extern gint	     double_click_timeout;
 /* tooltip */
 extern GtkWidget     *tip_window;
 extern GtkWidget     *tip_label;
-extern GTimeVal	     tooltip_last_popdown;
 extern gint	     tooltip_timer_tag;
 
 extern GSList *draw_list;
--- a/gtk/window-decorator/tooltip.c
+++ b/gtk/window-decorator/tooltip.c
@@ -23,31 +23,23 @@
 
 /* stolen from gtktooltip.c */
 
-#define DEFAULT_DELAY 500           /* Default delay in ms */
-#define STICKY_DELAY 0              /* Delay before popping up next tip
-				     * if we're sticky
-				     */
-#define STICKY_REVERT_DELAY 1000    /* Delay before sticky tooltips revert
-				     * to normal
-				     */
+#define DEFAULT_DELAY 400 /* Default delay in ms */
 
 static void
 show_tooltip (const char *text)
 {
     GdkDeviceManager *device_manager;
     GdkDevice *pointer;
-    GtkRequisition requisition;
     gint	   x, y, w, h;
     GdkScreen	   *screen;
     gint	   monitor_num;
     GdkRectangle   monitor;
 
-    gtk_label_set_text (GTK_LABEL (tip_label), text);
+    screen = gdk_screen_get_default ();
 
-    gtk_widget_get_preferred_size (tip_window, &requisition, NULL);
+    gtk_label_set_markup (GTK_LABEL (tip_label), text);
 
-    w = requisition.width;
-    h = requisition.height;
+    gtk_window_get_size (GTK_WINDOW (tip_window), &w, &h);
 
     device_manager = gdk_display_get_device_manager (gdk_display_get_default ());
     pointer = gdk_device_manager_get_client_pointer (device_manager);
@@ -76,9 +68,6 @@ show_tooltip (const char *text)
 static void
 hide_tooltip (void)
 {
-    if (gtk_widget_get_visible (tip_window))
-	g_get_current_time (&tooltip_last_popdown);
-
     gtk_widget_hide (tip_window);
 
     if (tooltip_timer_tag)
@@ -88,23 +77,6 @@ hide_tooltip (void)
     }
 }
 
-static gboolean
-tooltip_recently_shown (void)
-{
-    GTimeVal now;
-    glong    msec;
-
-    g_get_current_time (&now);
-
-    msec = now.tv_sec - tooltip_last_popdown.tv_sec;
-    if (msec > STICKY_REVERT_DELAY / 1000)
-	return FALSE;
-
-    msec = msec * 1000 + (now.tv_usec - tooltip_last_popdown.tv_usec) / 1000;
-
-    return (msec < STICKY_REVERT_DELAY);
-}
-
 static gint
 tooltip_timeout (gpointer data)
 {
@@ -118,15 +90,10 @@ tooltip_timeout (gpointer data)
 static void
 tooltip_start_delay (const char *text)
 {
-    guint delay = DEFAULT_DELAY;
-
     if (tooltip_timer_tag)
 	return;
 
-    if (tooltip_recently_shown ())
-	delay = STICKY_DELAY;
-
-    tooltip_timer_tag = g_timeout_add (delay,
+    tooltip_timer_tag = g_timeout_add (DEFAULT_DELAY,
 				       tooltip_timeout,
 				       (gpointer) text);
 }
@@ -137,9 +104,16 @@ tooltip_paint_window (GtkWidget *tooltip
 {
     GtkRequisition req;
 
-    gtk_widget_get_preferred_size (tip_window, &req, NULL);
-    gtk_render_background (gtk_widget_get_style_context (tip_window),
+    if (!tooltip)
+	return FALSE;
+
+    req.width = gtk_widget_get_allocated_width (tooltip);
+    req.height = gtk_widget_get_allocated_height (tooltip);
+
+    gtk_render_background (gtk_widget_get_style_context (tooltip),
                            cr, 0, 0, req.width, req.height);
+    gtk_render_frame (gtk_widget_get_style_context (tooltip),
+                      cr, 0, 0, req.width, req.height);
 
     return FALSE;
 }
@@ -147,24 +121,37 @@ tooltip_paint_window (GtkWidget *tooltip
 gboolean
 create_tooltip_window (void)
 {
+    GdkScreen *screen;
+    GdkVisual *visual;
+
+    screen = gdk_screen_get_default ();
+
     tip_window = gtk_window_new (GTK_WINDOW_POPUP);
 
     gtk_widget_set_app_paintable (tip_window, TRUE);
     gtk_window_set_resizable (GTK_WINDOW (tip_window), FALSE);
-    gtk_widget_set_name (tip_window, "gtk-tooltips");
+    gtk_style_context_add_class (gtk_widget_get_style_context (tip_window),
+                                 GTK_STYLE_CLASS_TOOLTIP);
     gtk_container_set_border_width (GTK_CONTAINER (tip_window), 4);
 
     gtk_window_set_type_hint (GTK_WINDOW (tip_window),
                               GDK_WINDOW_TYPE_HINT_TOOLTIP);
 
-    g_signal_connect_swapped (tip_window,
-			      "draw",
-			      G_CALLBACK (tooltip_paint_window),
-			      0);
+    gtk_window_set_screen (GTK_WINDOW (tip_window), screen);
+
+    visual = gdk_screen_get_rgba_visual (screen);
+    if (visual)
+	gtk_widget_set_visual (tip_window, visual);
+
+    g_signal_connect (G_OBJECT (tip_window),
+		      "draw",
+		      G_CALLBACK (tooltip_paint_window),
+		      NULL);
 
     tip_label = gtk_label_new (NULL);
     gtk_label_set_line_wrap (GTK_LABEL (tip_label), TRUE);
-    gtk_misc_set_alignment (GTK_MISC (tip_label), 0.5, 0.5);
+    gtk_widget_set_halign (tip_label, GTK_ALIGN_CENTER);
+    gtk_widget_set_valign (tip_label, GTK_ALIGN_CENTER);
     gtk_widget_show (tip_label);
 
     gtk_container_add (GTK_CONTAINER (tip_window), tip_label);
openSUSE Build Service is sponsored by