[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: GTK+1.3 classes. and@www.com



I recommend checking out the source of the Inti project to see how you
could do this.  That's what I did a while back and it helped.  (Or you
could just use gtkmm)  Basically you have to set up a function for GTK to
call that is not a normal member function -- it has to be a static
function or a free function.  Then you need to pass the "this" pointer as
"data" argument for the callback.  That function in turn calls your
object's method.  So something like....

gtk_signal_connect( GTK_OBJECT(button), "clicked", 
		GTK_SIGNAL_FUNC( the_static_or_free_function ), this);  // this being
the Window object
...
...
void the_static_or_free_function(GtkButton * b, gpointer data)
{
	Window * w = static_cast<Window*>(data);  // not sure if static_cast is
right here...
	w->on_button_click();
}

If I remember right, the C++ GTK wrappers have a few generic functions or
"function object" classes that they use over and over again -- you don't
have to write a static function every time you want to do this.

Rob

On Tue, 26 Mar 2002 09:58:28 -0800
"David Larsson" <dls@www.com> wrote:

> Hi, I have a problem conserning gtk and classes in c++..
> It's when I call class-method from a class-method with the help of
gtk_signal_connect().
> 
> Short example.
> ---Cut here----
> class Window {
>   public:
>     GtkWidget *button;
>     Window() {
>        gtk_signal_connect(GTK_OBJECT(button), "clicked", 
>            GTK_SIGNAL_FUNC(button_functio), NULL);
>     }
>     void button_function() {
>       /* Some junk here. */
>     }
> }
> 
> void Window::button_function()
> {
>   /*  Some junk here. */
> }
> 
> int main(int argv, char **argc)
> {
>   gtk_init(&argv, &argc);
>   Windows w;
>   gtk_main();
> }
> ---and here---
> (Lacks a lot of things to make it work, but just a short example)
> 
> This doesn't work, and you get a error-message of the type 'void <*>' is
not 'void', but if I change void button_function() to static void
button_function() this works, but ofcourse I can't have the function
static. Any ideas?
> 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]