[Bug 1708] New: XawScrollbarSetThumb does not change size of thumb.

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Mon Oct 25 13:57:52 PDT 2004


Please do not reply to this email: if you want to comment on the bug, go to          
the URL shown below and enter yourcomments there.   
 
https://freedesktop.org/bugzilla/show_bug.cgi?id=1708        
   
           Summary: XawScrollbarSetThumb does not change size of thumb.
           Product: xorg
           Version: 6.8.1
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: blocker
          Priority: P2
         Component: Lib/Xaw
        AssignedTo: xorg-bugzilla-noise at freedesktop.org
        ReportedBy: arnold at skeeve.com


The XawScrollbarSetThumb function doesn't change the size of the thumb. It
remains the same size no matter what values are used.  This occurs on both
Fedora Core 1 and 2 and with the libraries built from the 6.8.1 tar balls.
Here is a test program, extracted from my larger program.

Thanks,

Arnold Robbins
-----------------------------------------
/*
 * scroll.c --- try to figure out scrollbar.
 *
 * Arnold Robbins
 * arnold at skeeve.com
 */

#include <stdio.h>
#include <getopt.h>
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/cursorfont.h>
#include <X11/Xaw/Form.h>
#include <X11/Xaw/Command.h>
#include <X11/Xaw/Scrollbar.h>

typedef struct _instance_variables
{
    Pixel highColor;
    Pixel lowColor;
    Pixel criticalColor;
    Pixel chargingColor;
    Pixel foreground;
    int highValue;
    int lowValue;
    String geometry;
    int delay;
    Boolean displayPercent;
} instance_variable_rec;

static XtAppContext app_context;
static Widget scrollbar;
static Widget topLevel;
static Widget command;
static XtIntervalId timerId;
static instance_variable_rec iv;
static int debug;

#define CHAR_COUNT 5

static void update(XtPointer client_data, XtIntervalId * id)
{
    char buf[128];
    static int i = 1;

    sprintf(buf, "% 2d%%", i);

    XtVaSetValues(command, XtNlabel, buf, NULL);

fprintf(stderr, "i = %d\n", i); fflush(stderr);
    XawScrollbarSetThumb(scrollbar, 0.0001, (i / 100.0));
    i += 5;

if (i >= 100) exit(1);
    timerId = XtAppAddTimeOut(app_context, 1000 * iv.delay + 500,
			      update, app_context);
}

static void press(Widget w, XtPointer client_data, XtPointer call_data)
{
    iv.displayPercent = !iv.displayPercent;
    XtRemoveTimeOut(timerId);
    timerId = XtAppAddTimeOut(app_context, 0, update, app_context);
    if (debug)
	printf("displayPercent = %d\n", iv.displayPercent);
}

static XrmOptionDescRec options[] =
{
    {"-highcolor", "*highColor", XrmoptionSepArg, NULL},
    {"-lowcolor", "*lowColor", XrmoptionSepArg, NULL},
    {"-criticalcolor", "*criticalColor", XrmoptionSepArg, NULL},
    {"-chargingcolor", "*chargingColor", XrmoptionSepArg, NULL},
    {"-highvalue", "*highValue", XrmoptionSepArg, NULL},
    {"-lowvalue", "*lowValue", XrmoptionSepArg, NULL},
    {"-delay", "*delay", XrmoptionSepArg, NULL},
    {"-percent", "*percent", XrmoptionNoArg, (XtPointer) "true"},
};

#define offset(field) XtOffsetOf( instance_variable_rec, field )
static XtResource resources[] =
{
    {"highColor", XtCForeground, XtRPixel, sizeof(Pixel),
     offset(highColor), XtRString, "green"},
    {"lowColor", XtCForeground, XtRPixel, sizeof(Pixel),
     offset(lowColor), XtRString, "yellow"},
    {"criticalColor", XtCForeground, XtRPixel, sizeof(Pixel),
     offset(criticalColor), XtRString, "red"},
    {"chargingColor", XtCForeground, XtRPixel, sizeof(Pixel),
     offset(chargingColor), XtRString, "blue"},
    {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel),
     offset(foreground), XtRString, XtDefaultForeground},
    {"highValue", XtCValue, XtRInt, sizeof(int),
     offset(highValue), XtRImmediate, (XtPointer) 50},
    {"lowValue", XtCValue, XtRInt, sizeof(int),
     offset(lowValue), XtRImmediate, (XtPointer) 10},
    {"geometry", XtCString, XtRString, sizeof(String),
     offset(geometry), XtRString, (XtPointer) "10x100"},
    {"delay", XtCValue, XtRInt, sizeof(int),
     offset(delay), XtRImmediate, (XtPointer) 1},
    {"percent", XtCValue, XtRBoolean, sizeof(Boolean),
     offset(displayPercent), XtRImmediate, (XtPointer) FALSE},
};

int main(int argc, char **argv)
{
    Cursor cursor;
    int c;
    Widget form;
    XFontStruct *fs;
    int fontWidth, fontHeight;
    int x = 0, y = 0, height = 10, width = 100;


    topLevel = XtVaAppInitialize(&app_context, "XAcpi",
				 options, XtNumber(options),
				 &argc, argv, NULL, NULL);

    XtGetApplicationResources(topLevel,
			      &iv,
			      resources,
			      XtNumber(resources),
			      NULL, 0);

    if (iv.delay < 1)
	iv.delay = 1;

    XParseGeometry(iv.geometry, &x, &y, &width, &height);


    if (debug)
    {
	printf("highColor = %ld\n", iv.highColor);
	printf("lowColor = %ld\n", iv.lowColor);
	printf("criticalColor = %ld\n", iv.criticalColor);
	printf("chargingColor = %ld\n", iv.chargingColor);
	printf("foreground = %ld\n", iv.foreground);
	printf("highValue = %d\n", iv.highValue);
	printf("lowValue = %d\n", iv.lowValue);
	printf("geometry = %s\n", iv.geometry);
    }

    cursor = XCreateFontCursor(XtDisplay(topLevel), XC_top_left_arrow);

    form = XtVaCreateManagedWidget("form",
				   formWidgetClass, topLevel,
				   XtNorientation, XtorientHorizontal,
				   XtNborderWidth, 0,
				   XtNdefaultDistance, 2,
				   NULL);

    command = XtVaCreateManagedWidget("command",
				      commandWidgetClass, form,
				      XtNleft, XtChainLeft,
				      XtNhighlightThickness, 0,
				      XtNinternalHeight, 0,
				      XtNinternalWidth, 0,
				      XtNborderWidth, 0,
				      XtNlabel, "",
				      XtNresize, FALSE,
				      NULL);

    XtVaGetValues(command, XtNfont, &fs, NULL);
    fontWidth = fs->max_bounds.width;
    fontHeight = fs->max_bounds.ascent + fs->max_bounds.descent;
    XtVaSetValues(command, XtNwidth, fontWidth * CHAR_COUNT, NULL);

    if (debug)
    {
	int tmp = (width > fontWidth * CHAR_COUNT - 6)
	? width - fontWidth * CHAR_COUNT - 6
	: fontWidth * CHAR_COUNT;

	printf("width = %d, using %d + %d = %d\n",
	width, fontWidth * CHAR_COUNT, tmp, fontWidth * CHAR_COUNT + tmp);
    }

fprintf(stderr, "fontWidth * CHAR_COUNT = %d\n", fontWidth *
CHAR_COUNT);fflush(stderr);
    scrollbar = XtVaCreateManagedWidget("scrollbar",
					scrollbarWidgetClass, form,
					XtNhorizDistance, 3,
					XtNfromHoriz, command,
				      XtNorientation, XtorientHorizontal,
					XtNscrollHCursor, cursor,
					XtNthickness, fontHeight,
					/*
			  XtNlength, (width > fontWidth * CHAR_COUNT - 6)
				     ? width - fontWidth * CHAR_COUNT - 6
					: fontWidth * CHAR_COUNT,
					*/
			  XtNlength,  fontWidth * CHAR_COUNT,
					NULL);

    XawScrollbarSetThumb(scrollbar, 0.0, 0.0);
    XtVaSetValues(scrollbar,
		  XtNtranslations, XtParseTranslationTable(""), NULL);

    XtAddCallback(command, XtNcallback, press, NULL);

    XtRealizeWidget(topLevel);
    timerId = XtAppAddTimeOut(app_context, 0, update, app_context);
    XtAppMainLoop(app_context);

    return 0;
}        
   
   
--         
Configure bugmail: https://freedesktop.org/bugzilla/userprefs.cgi?tab=email       
   
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.


More information about the xorg-bugzilla-noise mailing list