mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-12-08 23:03:46 +00:00
223 lines
6.3 KiB
Diff
223 lines
6.3 KiB
Diff
|
---
|
|||
|
lib/Xm/CascadeB.c | 21 ++++++++++++++++++++-
|
|||
|
lib/Xm/CascadeBG.c | 20 ++++++++++++++++++++
|
|||
|
lib/Xm/ToggleB.c | 44 ++++++++++++++++++++++++++++++++++----------
|
|||
|
lib/Xm/ToggleBG.c | 30 ++++++++++++++++++++++++++++++
|
|||
|
lib/Xm/XmI.h | 2 ++
|
|||
|
5 files changed, 106 insertions(+), 11 deletions(-)
|
|||
|
|
|||
|
--- a/lib/Xm/CascadeB.c
|
|||
|
+++ b/lib/Xm/CascadeB.c
|
|||
|
@@ -641,11 +641,30 @@ Redisplay(
|
|||
|
((XmCascadeButtonWidget)cb)->label.normal_GC =
|
|||
|
CB_BackgroundGC(cb);
|
|||
|
}
|
|||
|
+#if FIX_1395
|
|||
|
+ /* 1395:
|
|||
|
+ By default (if not etched and not armed) window (widget) have
|
|||
|
+ background color that used to draw widget bg. When widget is
|
|||
|
+ etched, background selected correctly (as selected color),
|
|||
|
+ but label exposr method will use default background color
|
|||
|
+ to fill area bellow lable text. Result is ugly menus.
|
|||
|
+ We should replace colors before expose from label
|
|||
|
+ and change it back after repainting.
|
|||
|
+ */
|
|||
|
+ Pixel tmpc = cb->core.background_pixel;
|
|||
|
+ XSetWindowBackground(XtDisplay(cb), XtWindow(cb), select_pix);
|
|||
|
+#endif
|
|||
|
|
|||
|
_XmProcessLock();
|
|||
|
expose = xmLabelClassRec.core_class.expose;
|
|||
|
_XmProcessUnlock();
|
|||
|
- (*expose)(cb, event, region);
|
|||
|
+ (*expose)((Widget) cb, event, region);
|
|||
|
+#if FIX_1395
|
|||
|
+ /*
|
|||
|
+ Set correct window background (label is repainted, role back)
|
|||
|
+ */
|
|||
|
+ XSetWindowBackground(XtDisplay(cb), XtWindow(cb), tmpc);
|
|||
|
+#endif
|
|||
|
|
|||
|
if (replaceGC)
|
|||
|
((XmCascadeButtonWidget)cb)->label.normal_GC = tmpGC;
|
|||
|
--- a/lib/Xm/CascadeBG.c
|
|||
|
+++ b/lib/Xm/CascadeBG.c
|
|||
|
@@ -1069,6 +1069,10 @@ Redisplay(
|
|||
|
Pixel junk, select_pix;
|
|||
|
XmManagerWidget mw = (XmManagerWidget) XtParent(cb);
|
|||
|
Boolean replaceGC = False;
|
|||
|
+#ifdef FIX_1395
|
|||
|
+ XGCValues values;
|
|||
|
+ GC tmp_bgc = NULL;
|
|||
|
+#endif
|
|||
|
|
|||
|
XmGetColors(XtScreen(mw), mw->core.colormap,
|
|||
|
mw->core.background_pixel,
|
|||
|
@@ -1080,6 +1084,17 @@ Redisplay(
|
|||
|
tmpGC = LabG_NormalGC(cb);
|
|||
|
LabG_NormalGC(cb) = CBG_BackgroundGC(cb);
|
|||
|
}
|
|||
|
+#ifdef FIX_1395
|
|||
|
+ /* Fetch the select_color GetGC() actually used. */
|
|||
|
+ XGetGCValues(XtDisplay(cb), LabG_BackgroundGC(cb), GCBackground, &values);
|
|||
|
+ if (values.background != select_pix)
|
|||
|
+ {
|
|||
|
+ values.background = select_pix;
|
|||
|
+ XChangeGC(XtDisplay((Widget)cb), LabG_BackgroundGC(cb), GCBackground, &values);
|
|||
|
+ }
|
|||
|
+ tmp_bgc = LabG_BackgroundGC(cb);
|
|||
|
+ LabG_BackgroundGC(cb) = CBG_ArmGC(cb);
|
|||
|
+#endif
|
|||
|
|
|||
|
|
|||
|
_XmProcessLock();
|
|||
|
@@ -1087,6 +1102,11 @@ Redisplay(
|
|||
|
_XmProcessUnlock();
|
|||
|
(* expose)((Widget)cb, event, region);
|
|||
|
|
|||
|
+#ifdef FIX_1395
|
|||
|
+ /* Restore default bg GC*/
|
|||
|
+ LabG_BackgroundGC(cb) = tmp_bgc;
|
|||
|
+#endif
|
|||
|
+
|
|||
|
if (replaceGC)
|
|||
|
LabG_NormalGC(cb) = tmpGC;
|
|||
|
}
|
|||
|
--- a/lib/Xm/ToggleB.c
|
|||
|
+++ b/lib/Xm/ToggleB.c
|
|||
|
@@ -3579,11 +3579,24 @@ DrawToggleLabel(
|
|||
|
}
|
|||
|
|
|||
|
{
|
|||
|
- XtExposeProc expose;
|
|||
|
- _XmProcessLock();
|
|||
|
- expose = xmLabelClassRec.core_class.expose;
|
|||
|
- _XmProcessUnlock();
|
|||
|
- (* expose) ((Widget) tb, NULL, NULL);
|
|||
|
+
|
|||
|
+ XtExposeProc expose;
|
|||
|
+#if FIX_1395
|
|||
|
+ Pixel tmpc = tb->core.background_pixel; /* Save bg color */
|
|||
|
+
|
|||
|
+ /* Changing label background color if button toggled */
|
|||
|
+ if (tb->toggle.visual_set == XmSET && !Lab_IsMenupane(tb))
|
|||
|
+ XSetWindowBackground(XtDisplay(tb), XtWindow(tb), tb->toggle.select_color);
|
|||
|
+#endif
|
|||
|
+ _XmProcessLock();
|
|||
|
+ expose = xmLabelClassRec.core_class.expose;
|
|||
|
+ _XmProcessUnlock();
|
|||
|
+ (* expose) ((Widget) tb, NULL, NULL);
|
|||
|
+#if FIX_1395
|
|||
|
+ /* restore default bg color */
|
|||
|
+ if (tb->toggle.visual_set == XmSET && !Lab_IsMenupane(tb) )
|
|||
|
+ XSetWindowBackground(XtDisplay(tb), XtWindow(tb), tmpc);
|
|||
|
+#endif
|
|||
|
}
|
|||
|
|
|||
|
if (restore_gc)
|
|||
|
@@ -3615,6 +3628,7 @@ DrawEtchedInMenu(
|
|||
|
GC tmp_gc = None;
|
|||
|
XmDisplay dpy = (XmDisplay) XmGetXmDisplay(XtDisplay(tb));
|
|||
|
Boolean etched_in = dpy->display.enable_etched_in_menu;
|
|||
|
+ Pixel select_pix, tmpc;
|
|||
|
|
|||
|
if (tb->primitive.top_shadow_color == tb->toggle.select_color ||
|
|||
|
tb->primitive.bottom_shadow_color == tb->toggle.select_color)
|
|||
|
@@ -3635,7 +3649,7 @@ DrawEtchedInMenu(
|
|||
|
|
|||
|
if (tb->toggle.Armed)
|
|||
|
{
|
|||
|
- Pixel select_pix;
|
|||
|
+ tmpc = tb->core.background_pixel;
|
|||
|
|
|||
|
XmGetColors(XtScreen(tb), tb->core.colormap,
|
|||
|
tb->core.background_pixel,
|
|||
|
@@ -3651,10 +3665,20 @@ DrawEtchedInMenu(
|
|||
|
|
|||
|
{
|
|||
|
XtExposeProc expose;
|
|||
|
- _XmProcessLock();
|
|||
|
- expose = xmLabelClassRec.core_class.expose;
|
|||
|
- _XmProcessUnlock();
|
|||
|
- (* expose) ((Widget) tb, NULL, NULL);
|
|||
|
+#if FIX_1395
|
|||
|
+ if (tb->toggle.Armed)
|
|||
|
+ {
|
|||
|
+ XSetWindowBackground(XtDisplay(tb), XtWindow(tb), select_pix);
|
|||
|
+ }
|
|||
|
+ else
|
|||
|
+ {
|
|||
|
+ XSetWindowBackground(XtDisplay(tb), XtWindow(tb), tb->core.background_pixel);
|
|||
|
+ }
|
|||
|
+#endif
|
|||
|
+ _XmProcessLock();
|
|||
|
+ expose = xmLabelClassRec.core_class.expose;
|
|||
|
+ _XmProcessUnlock();
|
|||
|
+ (* expose) ((Widget) tb, NULL, NULL);
|
|||
|
}
|
|||
|
|
|||
|
if (restore_gc)
|
|||
|
--- a/lib/Xm/ToggleBG.c
|
|||
|
+++ b/lib/Xm/ToggleBG.c
|
|||
|
@@ -4295,6 +4295,10 @@ DrawEtchedInMenu(
|
|||
|
int fh = tb->rectangle.height - 2 * margin;
|
|||
|
Boolean restore_gc = False;
|
|||
|
GC tmp_gc = NULL;
|
|||
|
+#ifdef FIX_1395
|
|||
|
+ Boolean restore_bgc = False;
|
|||
|
+ GC tmp_bgc = NULL;
|
|||
|
+#endif
|
|||
|
XmDisplay dpy = (XmDisplay) XmGetXmDisplay(XtDisplay((Widget) tb));
|
|||
|
Boolean etched_in = dpy->display.enable_etched_in_menu;
|
|||
|
|
|||
|
@@ -4329,6 +4333,25 @@ DrawEtchedInMenu(
|
|||
|
LabG_NormalGC(tb) = TBG_BackgroundGC(tb);
|
|||
|
restore_gc = True;
|
|||
|
}
|
|||
|
+
|
|||
|
+#ifdef FIX_1395
|
|||
|
+ {
|
|||
|
+ XGCValues values;
|
|||
|
+ /* Fetch the select_color GetGC() actually used. */
|
|||
|
+ XGetGCValues(XtDisplay(tb), TBG_SelectGC(tb), GCBackground, &values);
|
|||
|
+ /* Before label expose call we should change bgc
|
|||
|
+ to correct color and then restore it.
|
|||
|
+ */
|
|||
|
+ if (values.background != select_pix)
|
|||
|
+ {
|
|||
|
+ XChangeGC(XtDisplay((Widget)tb), TBG_SelectGC(tb),
|
|||
|
+ GCBackground, &values);
|
|||
|
+ tmp_bgc = LabG_BackgroundGC(tb);
|
|||
|
+ LabG_BackgroundGC(tb) = TBG_SelectGC(tb);
|
|||
|
+ restore_bgc = True;
|
|||
|
+ }
|
|||
|
+ }
|
|||
|
+#endif
|
|||
|
}
|
|||
|
|
|||
|
{
|
|||
|
@@ -4345,6 +4368,13 @@ DrawEtchedInMenu(
|
|||
|
XSetClipMask(XtDisplay(tb), TBG_BackgroundGC(tb), None);
|
|||
|
LabG_NormalGC(tb) = tmp_gc;
|
|||
|
}
|
|||
|
+
|
|||
|
+#ifdef FIX_1395
|
|||
|
+ if (restore_bgc)
|
|||
|
+ {
|
|||
|
+ LabG_BackgroundGC(tb) = tmp_bgc;
|
|||
|
+ }
|
|||
|
+#endif
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
--- a/lib/Xm/XmI.h
|
|||
|
+++ b/lib/Xm/XmI.h
|
|||
|
@@ -284,5 +284,7 @@ extern void (*_XtProcessLock)();
|
|||
|
extern Pixel _XmAssignInsensitiveColor(Widget w);
|
|||
|
#endif
|
|||
|
|
|||
|
+#define FIX_1395 1
|
|||
|
+
|
|||
|
#endif /* _XmI_h */
|
|||
|
/* DON'T ADD ANYTHING AFTER THIS #endif */
|