I've scoured the docs, the wrapper code, the Internet, but can't come up with an explanation...

When running this example of a VolumeButton, no matter what the initial value of the slider, the icon showing is audio-volume-muted.

I wrote up a second test using the parent, a ScaleButton, passing a list of icons to the constructor. The order of the icons in the string array is correct, but the result was the same as with the VolumeButton. The muted icon shows on startup despite the initial value.

After fiddling with either one of these, moving the value up or down, the icons behave as described in the docs.

I've put both buttons in this one sample code file below.

Another odd thing...

If I run this example repeatedly, sometimes it doesn't find the icon set for one of the buttons. When it can't find the icons, and which button it can't find them for, seems to be random. This also happens if only one of these buttons is present in the code.


```
// Test Rig Foundation for Learning GtkD Coding

import std.stdio;

import gtk.MainWindow;
import gtk.Main;
import gtk.Box;
import gtk.Widget;
import gtk.VolumeButton;
import gtk.ScaleButton;
import gtk.Adjustment;
import gtk.c.types;

void main(string[] args)
{
        Main.init(args);

TestRigWindow myTestRig = new TestRigWindow("Test Rig with VolumeButton");
        
        Main.run();
        
} // main()


class TestRigWindow : MainWindow
{
        int borderWidth = 10;
        int width = 250;
        int height = 175;
        AppBox appBox;
        
        this(string title)
        {
                super(title);
                addOnDestroy(&quitApp);
                setBorderWidth(borderWidth);
                setSizeRequest(width, height);
                
                appBox = new AppBox();
                add(appBox);
                
                showAll();

        } // this() CONSTRUCTOR
        
                
        void quitApp(Widget widget)
        {
                writeln("Bye.");
                Main.quit();
                
        } // quitApp()

} // class myAppWindow


class AppBox : Box
{
        MyVolumeButton myVolumeButton;
        MyScaleButton myScaleButton;
        
        this()
        {
                super(Orientation.VERTICAL, 10);
                
                myVolumeButton = new MyVolumeButton();
                packStart(myVolumeButton, false, false, 0);

                myScaleButton = new MyScaleButton();
                packStart(myScaleButton, false, false, 0);
                
        } // this()

} // class AppBox


class MyScaleButton : ScaleButton
{
        double minimum = 0;
        double maximum = 10;
        double step = 1;

        Adjustment adjustment;
        double initialValue = 0;
        double pageIncrement = 1;
        double pageSize = 0;
        
string[] icons = ["audio-volume-muted", "audio-volume-high", "audio-volume-low", "audio-volume-medium"];
//      string[] icons = ["audio-volume-low", "audio-volume-high"];
        
        this()
        {
                super(IconSize.BUTTON, minimum, maximum, step, icons);
                
adjustment = new Adjustment(initialValue, minimum, maximum, step, pageIncrement, pageSize);
                setAdjustment(adjustment);
                addOnValueChanged(&valueChanged);
                
        } // this()
        
        
        void valueChanged(double value, ScaleButton sb)
        {
                writeln(getValue());
                
        } // valueChanged()


} // class MyScaleButton


class MyVolumeButton : VolumeButton
{
        double minimum = 0;
        double maximum = 10;
        double step = 1;

        Adjustment adjustment;
        double initialValue = 7;
        double pageIncrement = 1;
        double pageSize = 1;
        
        this()
        {
                super();
                
adjustment = new Adjustment(initialValue, minimum, maximum, step, pageIncrement, pageSize);
                setAdjustment(adjustment);
                addOnValueChanged(&valueChanged);
                
        } // this()
        
        
        void valueChanged(double value, ScaleButton sb)
        {
                writeln(getValue());
                
        } // valueChanged()


} // class MyVolumeButton

```

Reply via email to