From owner-freebsd-ports-bugs@FreeBSD.ORG Wed Aug 10 12:50:21 2005 Return-Path: X-Original-To: freebsd-ports-bugs@hub.freebsd.org Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 64A9B16A41F for ; Wed, 10 Aug 2005 12:50:21 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 89DB843D48 for ; Wed, 10 Aug 2005 12:50:20 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.3/8.13.3) with ESMTP id j7ACoKVF013264 for ; Wed, 10 Aug 2005 12:50:20 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.3/8.13.1/Submit) id j7ACoK9R013263; Wed, 10 Aug 2005 12:50:20 GMT (envelope-from gnats) Resent-Date: Wed, 10 Aug 2005 12:50:20 GMT Resent-Message-Id: <200508101250.j7ACoK9R013263@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Carlos A M dos Santos Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 7E64A16A41F for ; Wed, 10 Aug 2005 12:42:57 +0000 (GMT) (envelope-from casantos@urisan.tche.br) Received: from gama-rt.urisan.tche.br (smtp.san.uri.br [200.213.37.10]) by mx1.FreeBSD.org (Postfix) with ESMTP id 59EDC43D53 for ; Wed, 10 Aug 2005 12:42:55 +0000 (GMT) (envelope-from casantos@urisan.tche.br) Received: from urisan.tche.br (localhost.localdomain [127.0.0.1]) by gama-rt.urisan.tche.br (8.11.6p2/MS Mail 5.0.2195.6713) with SMTP id j7ACO6303070 for ; Wed, 10 Aug 2005 09:24:06 -0300 Received: by urisan.tche.br (sSMTP sendmail emulation); Wed, 10 Aug 2005 09:42:28 -0300 Message-Id: <200508101224.j7ACO6303070@gama-rt.urisan.tche.br> Date: Wed, 10 Aug 2005 09:42:28 -0300 From: Carlos A M dos Santos To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Cc: Subject: ports/84748: Upgrade ports/x11-toolkits/Xaw3d to version 1.5E X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Carlos A M dos Santos List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Aug 2005 12:50:21 -0000 >Number: 84748 >Category: ports >Synopsis: Upgrade ports/x11-toolkits/Xaw3d to version 1.5E >Confidential: no >Severity: non-critical >Priority: high >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: update >Submitter-Id: current-users >Arrival-Date: Wed Aug 10 12:50:20 GMT 2005 >Closed-Date: >Last-Modified: >Originator: Carlos A M dos Santos >Release: FreeBSD 5.4-RELEASE i386 >Organization: Universidade Regional Integrada >Environment: System: FreeBSD sophia.inf.urisan 5.4-RELEASE FreeBSD 5.4-RELEASE #1: Mon May 16 01:34:41 BRT 2005 root@avatar.casantos.org:/share/FreeBSD/5.4-RELEASE/src/sys/i386/compile/A7N266-VM i386 >Description: Xaw3d is maintained by D J Hawkey Jr since April 2003 (see http://www.visi.com/~hawkeyd/xaw3d.html). The attached patch fixes the port to use the latest official version an to use an additional patch provided by Stefan Monnier that allows the user to enable or disable arrows in sclollbars at runtime. >How-To-Repeat: N.A. >Fix: Apply the attached patch. --- x11-toolkits::Xaw3d.patch begins here --- diff -durP ports/x11-toolkits/Xaw3d/Makefile ports/x11-toolkits/Xaw3d/Makefile --- ports.orig/x11-toolkits/Xaw3d/Makefile Tue Apr 12 22:18:46 2005 +++ ports/x11-toolkits/Xaw3d/Makefile Tue May 24 09:14:57 2005 @@ -2,15 +2,14 @@ # Date created: 18 November 1994 # Whom: asami # -# $FreeBSD: ports/x11-toolkits/Xaw3d/Makefile,v 1.44 2005/04/12 03:26:52 obrien Exp $ +# $FreeBSD: ports/x11-toolkits/Xaw3d/Makefile,v 1.42 2005/01/10 19:12:13 lesi Exp $ # PORTNAME= Xaw3d -PORTVERSION= 1.5 +PORTVERSION= 1.5E PORTREVISION= 1 CATEGORIES= x11-toolkits -MASTER_SITES= ${MASTER_SITE_XCONTRIB} -MASTER_SITE_SUBDIR= widgets/Xaw3d/R6.3 +MASTER_SITES= ftp://ftp.visi.com/users/hawkeyd/X/ MAINTAINER= ports@FreeBSD.org COMMENT= A 3-D Athena Widget set that looks like Motif diff -durP ports/x11-toolkits/Xaw3d/distinfo ports/x11-toolkits/Xaw3d/distinfo --- ports.orig/x11-toolkits/Xaw3d/distinfo Fri Jan 30 07:06:24 2004 +++ ports/x11-toolkits/Xaw3d/distinfo Tue May 24 09:15:07 2005 @@ -1,2 +1,2 @@ -MD5 (Xaw3d-1.5.tar.gz) = a77aa4ebe3be7964e4dbbc351e48277f -SIZE (Xaw3d-1.5.tar.gz) = 284420 +MD5 (Xaw3d-1.5E.tar.gz) = 29ecfdcd6bcf47f62ecfd672d31269a1 +SIZE (Xaw3d-1.5E.tar.gz) = 309264 Only in ports/x11-toolkits/Xaw3d/files: patch-aa diff -durP ports/x11-toolkits/Xaw3d/files/patch-runtime_scrollbars ports/x11-toolkits/Xaw3d/files/patch-runtime_scrollbars --- ports.orig/x11-toolkits/Xaw3d/files/patch-runtime_scrollbars Wed Dec 31 21:00:00 1969 +++ ports/x11-toolkits/Xaw3d/files/patch-runtime_scrollbars Tue May 24 09:23:17 2005 @@ -0,0 +1,824 @@ +Index: ChangeLog +=================================================================== +RCS file: ChangeLog +diff -N ChangeLog +--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++ ChangeLog 4 Apr 2005 13:41:08 -0000 1.1 +@@ -0,0 +1,5 @@ ++2005-04-04 Stefan Monnier ++ ++ * Scrollbar.c (FractionLoc): Don't constrain to 0.0 ... 1.0. ++ (MoveThumb): Rewrite the "picked" handling. ++ +Index: Imakefile +=================================================================== +RCS file: /u/monnier/cvsroot/Xaw3d/Imakefile,v +retrieving revision 1.1.1.9 +retrieving revision 1.2 +diff -u -r1.1.1.9 -r1.2 +--- Imakefile 25 Mar 2005 18:12:03 -0000 1.1.1.9 ++++ Imakefile 27 Mar 2005 13:53:38 -0000 1.2 +@@ -8,8 +8,6 @@ + #undef MULTIPLANE_PIXMAPS + XCOMM For grayed stipple shadows, define GRAY_BLKWHT_STIPPLES: + #define GRAY_BLKWHT_STIPPLES +-XCOMM For scrollbars with arrows, define ARROW_SCROLLBARS: +-#undef ARROW_SCROLLBARS + + #define DoNormalLib NormalLibXaw + #define DoSharedLib SharedLibXaw +@@ -22,7 +20,7 @@ + #define IncSubSubdir Xaw3d + + XCOMM When building outside an X11 source tree: +-XCOMM EXTRA_INCLUDES = -I. ++EXTRA_INCLUDES = -I. + + #ifdef SharedXawReqs + REQUIREDLIBS = SharedXawReqs +@@ -119,13 +117,6 @@ + XAW_GRAY_BLKWHT_STIPPLES = \ + -e 's/\/\* gray stipples \*\//\#undef XAW_GRAY_BLKWHT_STIPPLES/' + #endif +-#ifdef ARROW_SCROLLBARS +-XAW_ARROW_SCROLLBARS = \ +- -e 's/\/\* arrow scrollbars \*\//\#define XAW_ARROW_SCROLLBARS/' +-#else +-XAW_ARROW_SCROLLBARS = \ +- -e 's/\/\* arrow scrollbars \*\//\#undef XAW_ARROW_SCROLLBARS/' +-#endif + + depend:: laygram.c laygram.h laylex.c Xaw3dP.h + +@@ -148,8 +139,7 @@ + + Xaw3dP.h: Xaw3dP.h.sed + sed $(XAW_INTERNATIONALIZATION) $(XAW_MULTIPLANE_PIXMAPS) \ +- $(XAW_GRAY_BLKWHT_STIPPLES) $(XAW_ARROW_SCROLLBARS) \ +- Xaw3dP.h.sed > Xaw3dP.h ++ $(XAW_GRAY_BLKWHT_STIPPLES) Xaw3dP.h.sed > Xaw3dP.h + + $(OBJS): Xaw3dP.h + +Index: README.XAW3D +=================================================================== +RCS file: /u/monnier/cvsroot/Xaw3d/README.XAW3D,v +retrieving revision 1.1.1.4 +retrieving revision 1.2 +diff -u -r1.1.1.4 -r1.2 +--- README.XAW3D 25 Mar 2005 18:12:04 -0000 1.1.1.4 ++++ README.XAW3D 27 Mar 2005 13:53:38 -0000 1.2 +@@ -48,7 +48,6 @@ + #define XAW_INTERNATIONALIZATION + #define XAW_MULTIPLANE_PIXMAPS + #define XAW_GRAY_BLKWHT_STIPPLES +- #undef XAW_ARROW_SCROLLBARS + + Xaw3dP.h need not be included by the application source, as the public + headers that reference any 3D features include this header. The +@@ -133,16 +132,6 @@ + beNiceToColormap resource is True and 3) the display allows it. This + option was disabled in previous Xaw3d releases. + +- The default Xaw3d does not use arrow scrollbars. At the top of this +- distribution's Imakefile are the lines: +- +- XCOMM For scrollbars with arrows, define ARROW_SCROLLBARS: +- #undef ARROW_SCROLLBARS +- +- If you want arrow-style scrollbars, change the "#undef" to "#define". +- Note that the Scrollbar widget's translations and actions will change +- accordingly. +- + Building Xaw3d within an X11 source tree: + ----------------------------------------- + +Index: Scrollbar.c +=================================================================== +RCS file: /u/monnier/cvsroot/Xaw3d/Scrollbar.c,v +retrieving revision 1.1.1.6 +retrieving revision 1.4 +diff -u -r1.1.1.6 -r1.4 +--- Scrollbar.c 25 Mar 2005 18:12:04 -0000 1.1.1.6 ++++ Scrollbar.c 4 Apr 2005 16:06:04 -0000 1.4 +@@ -53,6 +53,11 @@ + + ******************************************************************/ + ++/* TODO: ++ - avoid adhoc tests for `->arrows'. ++ - add support for scroll wheels. ++ */ ++ + /* ScrollBar.c */ + /* created by weissman, Mon Jul 7 13:20:03 1986 */ + /* converted by swick, Thu Aug 27 1987 */ +@@ -69,38 +74,48 @@ + + /* Private definitions. */ + +-#ifdef XAW_ARROW_SCROLLBARS +-static char defaultTranslations[] = +- ": NotifyScroll()\n\ +- : MoveThumb() NotifyThumb() \n\ +- : NotifyScroll()\n\ +- : HandleThumb() \n\ +- : HandleThumb() \n\ +- : MoveThumb() NotifyThumb() \n\ +- : EndScroll()"; +-#else + static char defaultTranslations[] = ++#ifdef XAW_SCROLL_WHEEL ++ ": StartScroll(Wheel, Backward) \n\ ++ : StartScroll(Wheel, Forward) \n" ++#endif + ": StartScroll(Forward) \n\ + : StartScroll(Continuous) MoveThumb() NotifyThumb() \n\ + : StartScroll(Backward) \n\ ++ : HandleThumb() \n\ ++ : HandleThumb() \n\ + : MoveThumb() NotifyThumb() \n\ + : NotifyScroll(Proportional) EndScroll()"; +-#ifdef bogusScrollKeys +- /* examples */ +- "f: StartScroll(Forward) NotifyScroll(FullLength) EndScroll()" +- "b: StartScroll(Backward) NotifyScroll(FullLength) EndScroll()" +-#endif +-#endif ++/* #ifdef XAW_ARROW_SCROLLBARS ++ * ": NotifyScroll()\n\ ++ * : MoveThumb() NotifyThumb() \n\ ++ * : NotifyScroll()\n\ ++ * : HandleThumb() \n\ ++ * : HandleThumb() \n\ ++ * : MoveThumb() NotifyThumb() \n\ ++ * : EndScroll()"; ++ * #else ++ * ": StartScroll(Forward) \n\ ++ * : StartScroll(Continuous) MoveThumb() NotifyThumb() \n\ ++ * : StartScroll(Backward) \n\ ++ * : MoveThumb() NotifyThumb() \n\ ++ * : NotifyScroll(Proportional) EndScroll()"; ++ * #ifdef bogusScrollKeys ++ * /\* examples *\/ ++ * "f: StartScroll(Forward) NotifyScroll(FullLength) EndScroll()" ++ * "b: StartScroll(Backward) NotifyScroll(FullLength) EndScroll()" ++ * #endif ++ * #endif */ + + static float floatZero = 0.0; + + #define Offset(field) XtOffsetOf(ScrollbarRec, field) + + static XtResource resources[] = { +-#ifdef XAW_ARROW_SCROLLBARS + /* {XtNscrollCursor, XtCCursor, XtRCursor, sizeof(Cursor), + Offset(scrollbar.cursor), XtRString, "crosshair"},*/ +-#else ++ {XtNarrowScrollbars, XtCArrowScrollbars, XtRBoolean, sizeof(Boolean), ++ Offset(scrollbar.arrows), XtRBoolean, (XtPointer) False}, + {XtNscrollVCursor, XtCCursor, XtRCursor, sizeof(Cursor), + Offset(scrollbar.verCursor), XtRString, "sb_v_double_arrow"}, + {XtNscrollHCursor, XtCCursor, XtRCursor, sizeof(Cursor), +@@ -113,7 +128,6 @@ + Offset(scrollbar.leftCursor), XtRString, "sb_left_arrow"}, + {XtNscrollRCursor, XtCCursor, XtRCursor, sizeof(Cursor), + Offset(scrollbar.rightCursor), XtRString, "sb_right_arrow"}, +-#endif + {XtNlength, XtCLength, XtRDimension, sizeof(Dimension), + Offset(scrollbar.length), XtRImmediate, (XtPointer) 1}, + {XtNthickness, XtCThickness, XtRDimension, sizeof(Dimension), +@@ -149,22 +163,16 @@ + static void Redisplay(); + static Boolean SetValues(); + +-#ifdef XAW_ARROW_SCROLLBARS + static void HandleThumb(); +-#else + static void StartScroll(); +-#endif + static void MoveThumb(); + static void NotifyThumb(); + static void NotifyScroll(); + static void EndScroll(); + + static XtActionsRec actions[] = { +-#ifdef XAW_ARROW_SCROLLBARS + {"HandleThumb", HandleThumb}, +-#else + {"StartScroll", StartScroll}, +-#endif + {"MoveThumb", MoveThumb}, + {"NotifyThumb", NotifyThumb}, + {"NotifyScroll", NotifyScroll}, +@@ -235,12 +243,11 @@ + (XtConvertArgList)NULL, (Cardinal)0 ); + } + +-#ifdef XAW_ARROW_SCROLLBARS +-/* CHECKIT #define MARGIN(sbw) (sbw)->scrollbar.thickness + (sbw)->threeD.shadow_width */ +-#define MARGIN(sbw) (sbw)->scrollbar.thickness +-#else +-#define MARGIN(sbw) (sbw)->threeD.shadow_width +-#endif ++#define MARGIN(sbw) \ ++ ((sbw)->scrollbar.arrows \ ++ /* CHECKIT (sbw)->scrollbar.thickness + (sbw)->threeD.shadow_width */ \ ++ ? (sbw)->scrollbar.thickness \ ++ : (sbw)->threeD.shadow_width) + + /* + The original Xaw Scrollbar's FillArea *really* relied on the fact that the +@@ -357,7 +364,6 @@ + } + } + +-#ifdef XAW_ARROW_SCROLLBARS + static void PaintArrows (sbw) + ScrollbarWidget sbw; + { +@@ -453,7 +459,6 @@ + } + } + } +-#endif + + /* Function Name: Destroy + * Description: Called as the scrollbar is going away... +@@ -464,10 +469,8 @@ + Widget w; + { + ScrollbarWidget sbw = (ScrollbarWidget) w; +-#ifdef XAW_ARROW_SCROLLBARS + if(sbw->scrollbar.timer_id != (XtIntervalId) 0) + XtRemoveTimeOut (sbw->scrollbar.timer_id); +-#endif + XtReleaseGC (w, sbw->scrollbar.gc); + } + +@@ -552,12 +555,8 @@ + ? sbw->scrollbar.thickness : sbw->scrollbar.length; + + SetDimensions (sbw); +-#ifdef XAW_ARROW_SCROLLBARS +- sbw->scrollbar.scroll_mode = 0; + sbw->scrollbar.timer_id = (XtIntervalId)0; +-#else + sbw->scrollbar.direction = 0; +-#endif + sbw->scrollbar.topLoc = 0; + sbw->scrollbar.shownLength = sbw->scrollbar.min_thumb; + } +@@ -568,19 +567,19 @@ + XSetWindowAttributes *attributes; + { + ScrollbarWidget sbw = (ScrollbarWidget) w; +-#ifdef XAW_ARROW_SCROLLBARS +- if(sbw->simple.cursor_name == NULL) +- XtVaSetValues(w, XtNcursorName, "crosshair", NULL); +- /* dont set the cursor of the window to anything */ +- *valueMask &= ~CWCursor; +-#else +- sbw->scrollbar.inactiveCursor = +- (sbw->scrollbar.orientation == XtorientVertical) +- ? sbw->scrollbar.verCursor +- : sbw->scrollbar.horCursor; ++ if (sbw->scrollbar.arrows) { ++ /* if (sbw->simple.cursor_name == NULL) ++ * XtVaSetValues(w, XtNcursorName, "crosshair", NULL); */ ++ /* dont set the cursor of the window to anything */ ++ *valueMask &= ~CWCursor; ++ } else { ++ sbw->scrollbar.inactiveCursor = ++ (sbw->scrollbar.orientation == XtorientVertical) ++ ? sbw->scrollbar.verCursor ++ : sbw->scrollbar.horCursor; + +- XtVaSetValues (w, XtNcursor, sbw->scrollbar.inactiveCursor, NULL); +-#endif ++ XtVaSetValues (w, XtNcursor, sbw->scrollbar.inactiveCursor, NULL); ++ } + /* + * The Simple widget actually stuffs the value in the valuemask. + */ +@@ -669,11 +668,9 @@ + sbw->scrollbar.topLoc = -(sbw->scrollbar.length + 1); + PaintThumb (sbw, event); + } +-#ifdef XAW_ARROW_SCROLLBARS +- /* we'd like to be region aware here!!!! */ +- PaintArrows (sbw); +-#endif +- ++ if (sbw->scrollbar.arrows) ++ /* we'd like to be region aware here!!!! */ ++ PaintArrows (sbw); + } + + +@@ -776,7 +773,6 @@ + } + } + +-#ifdef XAW_ARROW_SCROLLBARS + /* ARGSUSED */ + static void HandleThumb (w, event, params, num_params) + Widget w; +@@ -787,10 +783,14 @@ + Position x,y; + ScrollbarWidget sbw = (ScrollbarWidget) w; + ++ /* The old non-ARROW_SCROLLBAR binding emulation: ++ HandleThumb() -> */ ++ if (!sbw->scrollbar.arrows) return; ++ + ExtractPosition( event, &x, &y ); + /* if the motion event puts the pointer in thumb, call Move and Notify */ + /* also call Move and Notify if we're already in continuous scroll mode */ +- if (sbw->scrollbar.scroll_mode == 2 || ++ if (sbw->scrollbar.direction == 'C' || + (PICKLENGTH (sbw,x,y) >= sbw->scrollbar.topLoc && + PICKLENGTH (sbw,x,y) <= sbw->scrollbar.topLoc + sbw->scrollbar.shownLength)){ + XtCallActionProc(w, "MoveThumb", event, params, *num_params); +@@ -805,12 +805,12 @@ + #define A_FEW_PIXELS 5 + ScrollbarWidget sbw = (ScrollbarWidget) client_data; + int call_data; +- if (sbw->scrollbar.scroll_mode != 1 && sbw->scrollbar.scroll_mode != 3) { ++ if (sbw->scrollbar.direction != 'B' && sbw->scrollbar.direction != 'F') { + sbw->scrollbar.timer_id = (XtIntervalId) 0; + return; + } + call_data = MAX (A_FEW_PIXELS, sbw->scrollbar.length / 20); +- if (sbw->scrollbar.scroll_mode == 1) ++ if (sbw->scrollbar.direction == 'B') + call_data = -call_data; + XtCallCallbacks((Widget)sbw, XtNscrollProc, (XtPointer) call_data); + sbw->scrollbar.timer_id = +@@ -820,12 +820,11 @@ + client_data); + } + +-#else /* XAW_ARROW_SCROLLBARS */ + /* ARGSUSED */ + static void StartScroll (w, event, params, num_params ) + Widget w; + XEvent *event; +- String *params; /* direction: Back|Forward|Smooth */ ++ String *params; /* direction: Back|Forward|Continuous */ + Cardinal *num_params; /* we only support 1 */ + { + ScrollbarWidget sbw = (ScrollbarWidget) w; +@@ -833,11 +832,24 @@ + char direction; + + if (sbw->scrollbar.direction != 0) return; /* if we're already scrolling */ +- if (*num_params > 0) ++ if (*num_params > 0) + direction = *params[0]; + else + direction = 'C'; + ++ if (sbw->scrollbar.arrows) { ++ /* The old ARROW_SCROLLBAR binding emulation: ++ StartScroll(Forward) -> NotifyScroll() ++ StartScroll(Backward) -> NotifyScroll() ++ StartScroll(Continuous) -> */ ++ switch (direction) { ++ case 'b': case 'B': case 'f': case 'F': ++ NotifyScroll(w, event, params, 0); ++ break; ++ } ++ return; ++ } ++ + sbw->scrollbar.direction = direction; + + switch (direction) { +@@ -865,20 +877,17 @@ + XtVaSetValues (w, XtNcursor, cursor, NULL); + XFlush (XtDisplay (w)); + } +-#endif /* XAW_ARROW_SCROLLBARS */ + + /* + * Make sure the first number is within the range specified by the other + * two numbers. + */ + +-#ifndef XAW_ARROW_SCROLLBARS + static int InRange(num, small, big) + int num, small, big; + { + return (num < small) ? small : ((num > big) ? big : num); + } +-#endif + + /* + * Same as above, but for floating numbers. +@@ -891,7 +900,6 @@ + } + + +-#ifdef XAW_ARROW_SCROLLBARS + static void NotifyScroll (w, event, params, num_params) + Widget w; + XEvent *event; +@@ -902,94 +910,94 @@ + int call_data; + Position x, y; + +- if (sbw->scrollbar.scroll_mode == 2 /* if scroll continuous */ +- || LookAhead (w, event)) +- return; +- +- ExtractPosition (event, &x, &y); ++ if (sbw->scrollbar.arrows) { ++ if (sbw->scrollbar.direction == 'C' /* if scroll continuous */ ++ || LookAhead (w, event)) ++ return; ++ ++ /* Old ARROW_SCROLLBAR bindings emulation: ++ NotifyScroll(Proportional) -> */ ++ if (num_params > 0 && (*params[0] == 'P' || *params[0] == 'p')) ++ return; + +- if (PICKLENGTH (sbw,x,y) < sbw->scrollbar.thickness) { +- /* handle first arrow zone */ +- call_data = -MAX (A_FEW_PIXELS, sbw->scrollbar.length / 20); +- XtCallCallbacks (w, XtNscrollProc, (XtPointer)(call_data)); +- /* establish autoscroll */ +- sbw->scrollbar.timer_id = +- XtAppAddTimeOut (XtWidgetToApplicationContext (w), +- (unsigned long) 300, RepeatNotify, (XtPointer)w); +- sbw->scrollbar.scroll_mode = 1; +- } else if (PICKLENGTH (sbw,x,y) > sbw->scrollbar.length - sbw->scrollbar.thickness) { +- /* handle last arrow zone */ +- call_data = MAX (A_FEW_PIXELS, sbw->scrollbar.length / 20); +- XtCallCallbacks (w, XtNscrollProc, (XtPointer)(call_data)); +- /* establish autoscroll */ +- sbw->scrollbar.timer_id = +- XtAppAddTimeOut (XtWidgetToApplicationContext (w), +- (unsigned long) 300, RepeatNotify, (XtPointer)w); +- sbw->scrollbar.scroll_mode = 3; +- } else if (PICKLENGTH (sbw, x, y) < sbw->scrollbar.topLoc) { +- /* handle zone "above" the thumb */ +- call_data = - sbw->scrollbar.length; +- XtCallCallbacks (w, XtNscrollProc, (XtPointer)(call_data)); +- } else if (PICKLENGTH (sbw, x, y) > sbw->scrollbar.topLoc + sbw->scrollbar.shownLength) { +- /* handle zone "below" the thumb */ +- call_data = sbw->scrollbar.length; +- XtCallCallbacks (w, XtNscrollProc, (XtPointer)(call_data)); +- } else +- { +- /* handle the thumb in the motion notify action */ +- } +- return; +-} +-#else /* XAW_ARROW_SCROLLBARS */ +-static void NotifyScroll (w, event, params, num_params) +- Widget w; +- XEvent *event; +- String *params; /* style: Proportional|FullLength */ +- Cardinal *num_params; /* we only support 1 */ +-{ +- ScrollbarWidget sbw = (ScrollbarWidget) w; +- int call_data; +- char style; +- Position x, y; +- +- if (sbw->scrollbar.direction == 0) return; /* if no StartScroll */ +- if (LookAhead (w, event)) return; +- if (*num_params > 0) +- style = *params[0]; +- else +- style = 'P'; +- +- switch (style) { +- case 'P': /* Proportional */ +- case 'p': + ExtractPosition (event, &x, &y); +- call_data = +- InRange (PICKLENGTH (sbw, x, y), 0, (int) sbw->scrollbar.length); +- break; + +- case 'F': /* FullLength */ +- case 'f': +- call_data = sbw->scrollbar.length; +- break; +- } +- switch (sbw->scrollbar.direction) { +- case 'B': +- case 'b': +- call_data = -call_data; +- /* fall through */ ++ if (PICKLENGTH (sbw,x,y) < sbw->scrollbar.thickness) { ++ /* handle first arrow zone */ ++ call_data = -MAX (A_FEW_PIXELS, sbw->scrollbar.length / 20); ++ XtCallCallbacks (w, XtNscrollProc, (XtPointer)(call_data)); ++ /* establish autoscroll */ ++ sbw->scrollbar.timer_id = ++ XtAppAddTimeOut (XtWidgetToApplicationContext (w), ++ (unsigned long) 300, RepeatNotify, (XtPointer)w); ++ sbw->scrollbar.direction = 'B'; ++ } else if (PICKLENGTH (sbw,x,y) > sbw->scrollbar.length - sbw->scrollbar.thickness) { ++ /* handle last arrow zone */ ++ call_data = MAX (A_FEW_PIXELS, sbw->scrollbar.length / 20); ++ XtCallCallbacks (w, XtNscrollProc, (XtPointer)(call_data)); ++ /* establish autoscroll */ ++ sbw->scrollbar.timer_id = ++ XtAppAddTimeOut (XtWidgetToApplicationContext (w), ++ (unsigned long) 300, RepeatNotify, (XtPointer)w); ++ sbw->scrollbar.direction = 'F'; ++ } else if (PICKLENGTH (sbw, x, y) < sbw->scrollbar.topLoc) { ++ /* handle zone "above" the thumb */ ++ call_data = - sbw->scrollbar.length; ++ XtCallCallbacks (w, XtNscrollProc, (XtPointer)(call_data)); ++ } else if (PICKLENGTH (sbw, x, y) > sbw->scrollbar.topLoc + sbw->scrollbar.shownLength) { ++ /* handle zone "below" the thumb */ ++ call_data = sbw->scrollbar.length; ++ XtCallCallbacks (w, XtNscrollProc, (XtPointer)(call_data)); ++ } else ++ { ++ /* handle the thumb in the motion notify action */ ++ } ++ } else { /* XAW_ARROW_SCROLLBARS */ ++ char style; + +- case 'F': +- case 'f': +- XtCallCallbacks (w, XtNscrollProc, (XtPointer)call_data); +- break; ++ if (sbw->scrollbar.direction == 0) ++ /* Either we haven't yet done StartScoll, or w've already done ++ an EndScroll (e.g: Btn1Down, Btn2Down, Btn2up, Btn1up). */ ++ return; ++ if (LookAhead (w, event)) return; ++ if (*num_params > 0) ++ style = *params[0]; ++ else ++ style = 'P'; ++ ++ switch (style) { ++ case 'P': /* Proportional */ ++ case 'p': ++ ExtractPosition (event, &x, &y); ++ call_data = ++ InRange (PICKLENGTH (sbw, x, y), 0, (int) sbw->scrollbar.length); ++ break; ++ ++ /* case 'F': /\* FullLength *\/ ++ * case 'f': */ ++ default: ++ call_data = sbw->scrollbar.length; ++ break; ++ } + +- case 'C': +- case 'c': +- /* NotifyThumb has already called the thumbProc(s) */ +- break; +- } ++ switch (sbw->scrollbar.direction) { ++ case 'B': ++ case 'b': ++ call_data = -call_data; ++ /* fall through */ ++ ++ case 'F': ++ case 'f': ++ XtCallCallbacks (w, XtNscrollProc, (XtPointer)call_data); ++ break; ++ ++ case 'C': ++ case 'c': ++ /* NotifyThumb has already called the thumbProc(s) */ ++ break; ++ } ++ } /* XAW_ARROW_SCROLLBARS */ + } +-#endif /* XAW_ARROW_SCROLLBARS */ + + /* ARGSUSED */ + static void EndScroll(w, event, params, num_params ) +@@ -1000,23 +1008,18 @@ + { + ScrollbarWidget sbw = (ScrollbarWidget) w; + +-#ifdef XAW_ARROW_SCROLLBARS +- sbw->scrollbar.scroll_mode = 0; +- /* no need to remove any autoscroll timeout; it will no-op */ +- /* because the scroll_mode is 0 */ +- /* but be sure to remove timeout in destroy proc */ +-#else + XtVaSetValues (w, XtNcursor, sbw->scrollbar.inactiveCursor, NULL); + XFlush (XtDisplay (w)); + sbw->scrollbar.direction = 0; +-#endif ++ /* no need to remove any autoscroll timeout; it will no-op */ ++ /* because the direction is 0 */ ++ /* but be sure to remove timeout in destroy proc */ + } + + static float FractionLoc (sbw, x, y) + ScrollbarWidget sbw; + int x, y; + { +- float result; + int margin; + float height, width; + +@@ -1025,8 +1028,7 @@ + y -= margin; + height = sbw->core.height - 2 * margin; + width = sbw->core.width - 2 * margin; +- result = PICKLENGTH (sbw, x / width, y / height); +- return FloatInRange(result, 0.0, 1.0); ++ return PICKLENGTH (sbw, x / width, y / height); + } + + +@@ -1038,42 +1040,34 @@ + { + ScrollbarWidget sbw = (ScrollbarWidget) w; + Position x, y; +- float loc, t, s; ++ float loc; + +-#ifndef XAW_ARROW_SCROLLBARS +- if (sbw->scrollbar.direction == 0) return; /* if no StartScroll */ +-#endif ++ if (!sbw->scrollbar.arrows) ++ if (sbw->scrollbar.direction == 0) return; /* if no StartScroll */ + + if (LookAhead (w, event)) return; + + if (!event->xmotion.same_screen) return; + + ExtractPosition (event, &x, &y); +- loc = FractionLoc (sbw, x, y); +- t = sbw->scrollbar.top; +- s = sbw->scrollbar.shown; +-#ifdef XAW_ARROW_SCROLLBARS +- if (sbw->scrollbar.scroll_mode != 2 ) +- /* initialize picked position */ +- sbw->scrollbar.picked = (FloatInRange( loc, t, t + s ) - t); +-#else +- sbw->scrollbar.picked = 0.5 * s; +-#endif +- if (sbw->scrollbar.pick_top) +- sbw->scrollbar.top = loc; +- else { +- sbw->scrollbar.top = loc - sbw->scrollbar.picked; +- if (sbw->scrollbar.top < 0.0) sbw->scrollbar.top = 0.0; ++ ++ if (sbw->scrollbar.direction != 'C') { ++ /* initialize picked position offset */ ++ sbw->scrollbar.picked ++ = sbw->scrollbar.pick_top ? 0 ++ : FractionLoc (sbw, x, y) - sbw->scrollbar.top; + } + ++ loc = FractionLoc (sbw, x, y) - sbw->scrollbar.picked; ++ ++ sbw->scrollbar.top = FloatInRange (loc, 0.0, 1.0); ++ + #if 0 + /* this breaks many text-line scrolls */ + if (sbw->scrollbar.top + sbw->scrollbar.shown > 1.0) + sbw->scrollbar.top = 1.0 - sbw->scrollbar.shown; + #endif +-#ifdef XAW_ARROW_SCROLLBARS +- sbw->scrollbar.scroll_mode = 2; /* indicate continuous scroll */ +-#endif ++ sbw->scrollbar.direction = 'C'; /* indicate continuous scroll */ + PaintThumb (sbw, event); + XFlush (XtDisplay (w)); /* re-draw it before Notifying */ + } +@@ -1089,9 +1083,8 @@ + register ScrollbarWidget sbw = (ScrollbarWidget) w; + float top = sbw->scrollbar.top; + +-#ifndef XAW_ARROW_SCROLLBARS +- if (sbw->scrollbar.direction == 0) return; /* if no StartScroll */ +-#endif ++ if (!sbw->scrollbar.arrows) ++ if (sbw->scrollbar.direction == 0) return; /* if no StartScroll */ + + if (LookAhead (w, event)) return; + +@@ -1152,12 +1145,6 @@ + w,top,shown); + #endif + +-#ifdef XAW_ARROW_SCROLLBARS +- if (sbw->scrollbar.scroll_mode == (char) 2) return; /* if still thumbing */ +-#else +- if (sbw->scrollbar.direction == 'c') return; /* if still thumbing */ +-#endif +- + sbw->scrollbar.top = (top > 1.0) ? 1.0 : + (top >= 0.0) ? top : sbw->scrollbar.top; + +Index: Scrollbar.h +=================================================================== +RCS file: /u/monnier/cvsroot/Xaw3d/Scrollbar.h,v +retrieving revision 1.1.1.5 +retrieving revision 1.2 +diff -u -r1.1.1.5 -r1.2 +--- Scrollbar.h 25 Mar 2005 18:08:51 -0000 1.1.1.5 ++++ Scrollbar.h 25 Mar 2005 22:41:01 -0000 1.2 +@@ -116,10 +116,12 @@ + #define XtCShown "Shown" + #define XtCTopOfThumb "TopOfThumb" + #define XtCPickTop "PickTop" ++#define XtCArrowScrollbars "ArrowScrollbars" + + #define XtNminimumThumb "minimumThumb" + #define XtNtopOfThumb "topOfThumb" + #define XtNpickTop "pickTop" ++#define XtNarrowScrollbars "arrowScrollbars" + + typedef struct _ScrollbarRec *ScrollbarWidget; + typedef struct _ScrollbarClassRec *ScrollbarWidgetClass; +Index: ScrollbarP.h +=================================================================== +RCS file: /u/monnier/cvsroot/Xaw3d/ScrollbarP.h,v +retrieving revision 1.1.1.6 +retrieving revision 1.2 +diff -u -r1.1.1.6 -r1.2 +--- ScrollbarP.h 25 Mar 2005 18:12:04 -0000 1.1.1.6 ++++ ScrollbarP.h 25 Mar 2005 22:41:01 -0000 1.2 +@@ -70,14 +70,12 @@ + XtCallbackList thumbProc; /* jump (to position) scroll */ + XtCallbackList jumpProc; /* same as thumbProc but pass data by ref */ + Pixmap thumb; /* thumb color */ +-#ifndef XAW_ARROW_SCROLLBARS + Cursor upCursor; /* scroll up cursor */ + Cursor downCursor; /* scroll down cursor */ + Cursor leftCursor; /* scroll left cursor */ + Cursor rightCursor; /* scroll right cursor */ + Cursor verCursor; /* scroll vertical cursor */ + Cursor horCursor; /* scroll horizontal cursor */ +-#endif + float top; /* What percent is above the win's top */ + float shown; /* What percent is shown in the win */ + Dimension length; /* either height or width */ +@@ -87,18 +85,16 @@ + * when scrolling starts */ + + /* private */ +-#ifdef XAW_ARROW_SCROLLBARS +- XtIntervalId timer_id; /* autorepeat timer; remove on destruction */ +- char scroll_mode; /* 0:none 1:up/back 2:track 3:down/forward */ +-#else + Cursor inactiveCursor; /* the normal cursor for scrollbar */ +- char direction; /* a scroll has started; which direction */ +-#endif ++ char direction; /* 0:none, C:drag, F:down/forw, B:up/back */ + GC gc; /* a (shared) gc */ + Position topLoc; /* Pixel that corresponds to top */ + Dimension shownLength; /* Num pixels corresponding to shown */ + Boolean pick_top; /* pick thumb at top or anywhere*/ ++ Boolean arrows; /* Whether it has arrows at the end. */ + ++ /* Only used for arrow-scrollbars. */ ++ XtIntervalId timer_id; /* autorepeat timer; remove on destruction */ + } ScrollbarPart; + + typedef struct _ScrollbarRec { +Index: Text.c +=================================================================== +RCS file: /u/monnier/cvsroot/Xaw3d/Text.c,v +retrieving revision 1.1.1.10 +retrieving revision 1.2 +diff -u -r1.1.1.10 -r1.2 +--- Text.c 25 Mar 2005 18:12:05 -0000 1.1.1.10 ++++ Text.c 27 Mar 2005 13:53:38 -0000 1.2 +@@ -1462,10 +1462,8 @@ + if (height < 1) + height = 1; + nlines = (int) (lines * (int) ctx->text.lt.lines) / height; +-#ifdef XAW_ARROW_SCROLLBARS + if (nlines == 0 && lines != 0) + nlines = lines > 0 ? 1 : -1; +-#endif + _XawTextPrepareToUpdate(ctx); + _XawTextVScroll(ctx, nlines); + _XawTextExecuteUpdate(ctx); +Index: Xaw3dP.h.sed +=================================================================== +RCS file: /u/monnier/cvsroot/Xaw3d/Xaw3dP.h.sed,v +retrieving revision 1.1.1.1 +retrieving revision 1.2 +diff -u -r1.1.1.1 -r1.2 +--- Xaw3dP.h.sed 25 Mar 2005 18:12:06 -0000 1.1.1.1 ++++ Xaw3dP.h.sed 27 Mar 2005 13:53:38 -0000 1.2 +@@ -36,7 +36,6 @@ + /* I18n support */ + /* XPM support */ + /* gray stipples */ +-/* arrow scrollbars */ + + #ifndef XtX + #define XtX(w) (((RectObj)w)->rectangle.x) --- x11-toolkits::Xaw3d.patch ends here --- >Release-Note: >Audit-Trail: >Unformatted: