On Saturday, 25 June 2016 at 13:01:09 UTC, TheDGuy wrote:
Thanks for your answer.
I have to pass the Button object to my timeout function to change the CSS class. But how do i do that within the Timeout constructor?

I mean:

I have to pass my function and delay time to the constructor, but i can't pass any data to the function here, also only functions are allowed (at least it looks like that to me) who don't have parameters.

If i want to add a new function i have to use the function .add(), with this function i can pass 'userData' (so my button for example). But why am i unable to do that in the constructor? Do i have 2 different functions for the same thing, one with the other one without parameter?

My current approach:

    private void letButtonsFlash(){
        foreach(Button btn;bArr){
            btn.setSensitive(false);
        }
        for(int i = 0; i < level; i++){
            Button currentButton = bArr[rndButtonBlink[i]];
ListG list = currentButton.getStyleContext().listClasses(); string CSSClassName = to!string(cast(char*)list.next().data); currentButton.getStyleContext().addClass(CSSClassName ~ "-flash");
            //writeln(CSSClassName);
Timeout t = new Timeout(&timeout_delay,5,false); //error appears here
            t.add(5,&timeout_delay,currentButton);
        }
        foreach(Button btn;bArr){
            btn.setSensitive(true);
        }
    }
    bool timeout_delay(Button currentButton){
ListG list = currentButton.getStyleContext().listClasses(); string CSSClassName = to!string(cast(char*)list.next().data); currentButton.getStyleContext().removeClass(CSSClassName ~ "-flash");
        return false;
    }

But i get the error:
Error: none of the overloads of '__ctor' are callable using argument types (bool delegate(void* userData), int, bool), candidates are: glib.Timeout.Timeout.this(uint interval, bool delegate() dlg, bool fireNow = false) glib.Timeout.Timeout.this(uint interval, bool delegate() dlg, GPriority priority, bool fireNow = false) glib.Timeout.Timeout.this(bool delegate() dlg, uint seconds, bool fireNow = false) glib.Timeout.Timeout.this(bool delegate() dlg, uint seconds, GPriority priority, bool fireNow = false)

If i take a look at GTK for C it looks like there is a function for that:

http://www.gtk.org/tutorial1.2/gtk_tut-17.html

Why is this so confusing?

Reply via email to