Hi All,
The bug is a side effect for 6446041(poor menu text rendering in
8bit mode using default nimbus theme - firefox) my original fix was to
reset the GC clipping area and redraw the menu background. Soffice
doesn't like that as it redraws the menu background each time the item
focus is changed.
The solution was first to check if we are currently rendering in 8
depth mode (quick check) then query for the WM_CLASS info and check if the
application is "gecko". If so reset the GC and redraw otherwise do
nothing.
See patch below.
Cheers,
Erwann
Index: configure.in
===================================================================
--- configure.in (revision 47)
+++ configure.in (working copy)
@@ -2,7 +2,7 @@
ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"
AC_INIT(metacity)
-AM_INIT_AUTOMAKE(nimbus, 0.0.13)
+AM_INIT_AUTOMAKE(nimbus, 0.0.14)
DISTDIR=${PACKAGE}-${VERSION}
AM_MAINTAINER_MODE
Index: gtk-engine/nimbus_style.c
===================================================================
--- gtk-engine/nimbus_style.c (revision 47)
+++ gtk-engine/nimbus_style.c (working copy)
@@ -7,6 +7,8 @@
#include "nimbus_style.h"
#include "nimbus_rc_style.h"
#include "nimbus_utils.h"
+#include <X11/Xutil.h>
+#include <gdk/gdkx.h>
static const char *const state_names[5] = {
"Normal",
@@ -1699,8 +1701,24 @@
{
GdkGC *start, *mid_start, *mid_end, *end;
sanitize_size (window, &width, &height);
- gdk_gc_set_clip_rectangle (style->bg_gc[GTK_STATE_NORMAL], NULL);
- gdk_draw_rectangle (window, style->bg_gc[GTK_STATE_NORMAL], TRUE,
x,y,width-1,height-1);
+ if (gdk_drawable_get_depth (window) == 8)
+ {
+ XClassHint classHint;
+ int status;
+ gtk_widget_get_toplevel (widget);
+ status = XGetClassHint (GDK_DISPLAY_XDISPLAY
(gtk_widget_get_display (widget)),
+ GDK_WINDOW_XID ( gtk_widget_get_toplevel
(widget)->window), &classHint);
+ if (status)
+ {
+ if (strcmp (classHint.res_name, "gecko") == 0)
+ {
+ XFree (classHint.res_name);
+ XFree (classHint.res_class);
+ gdk_gc_set_clip_rectangle (style->bg_gc[GTK_STATE_NORMAL],
NULL);
+ gdk_draw_rectangle (window, style->bg_gc[GTK_STATE_NORMAL],
TRUE, x,y,width-1,height-1);
+ }
+ }
+ }
gdk_draw_rectangle (window, nimbus_realize_color (style,
rc->menu->border, area), FALSE, x,y,width-1,height-1);
gdk_draw_line (window, nimbus_realize_color (style,
rc->menu->shadow, area), x + width - 2,y+1,x + width - 2,height-2);
--
Erwann Ch?ned?,
Desktop Group, Sun Microsystems, Grenoble
Phone : +33 476 188 358 ext: 38358
[ I speak for myself, not for my employer ]