]> Pileus Git - ~andy/gtk/commitdiff
widget: Add hack to make label mnemonics work again
authorBenjamin Otte <otte@redhat.com>
Tue, 26 Apr 2011 12:07:27 +0000 (14:07 +0200)
committerBenjamin Otte <otte@redhat.com>
Tue, 26 Apr 2011 12:15:34 +0000 (14:15 +0200)
Mnemonics for characters that go beyond the baseline (q, y, g) were not
being shown, because they are drawn outside of the label's allocated
size.
This patch just disables the clip-to-size for labels, so that the label
can draw outsize of its allocation. In most cases, that works around
this bug.

https://bugzilla.gnome.org/show_bug.cgi?id=648570

gtk/gtkwidget.c

index 7dddae7dea2b86971b3074c8619e05a69f5c07da..073120282a49ce400822e069e50613da99b7528f 100644 (file)
@@ -5660,6 +5660,20 @@ gtk_cairo_should_draw_window (cairo_t *cr,
          event->window == window;
 }
 
+static gboolean
+gtk_widget_get_clip_draw (GtkWidget *widget)
+{
+  /* labels are not clipped, because clipping them would cause
+   * mnemonics to not appear on characters that go beyond the
+   * baseline.
+   * https://bugzilla.gnome.org/show_bug.cgi?id=648570
+   */
+  if (GTK_IS_LABEL (widget))
+    return FALSE;
+
+  return TRUE;
+}
+
 /* code shared by gtk_container_propagate_draw() and
  * gtk_widget_draw()
  */
@@ -5673,6 +5687,8 @@ _gtk_widget_draw_internal (GtkWidget *widget,
   if (!gtk_widget_is_drawable (widget))
     return;
 
+  clip_to_size &= gtk_widget_get_clip_draw (widget);
+
   if (clip_to_size)
     {
       cairo_rectangle (cr,