David,
Thanks for your suggestions and the sample code.
I have managed to make it work.
Just one more problem. If I have more then one button, say, in a nxn, it
seems that if one callback is open, I have to close it to open a new one
i.e. only one callback window will open at a  time.
One easy solution that I got is to declare nxn child_window, like
    GtkWidget *child_window1 = NULL;
    GtkWidget *child_window2 = NULL;
and put an unique child_window to each button like
    button = gtk_button_new_with_label("main");
    g_signal_connect(button, "clicked",
                     G_CALLBACK(callback_it1), &child_window1);
    gtk_table_attach_defaults(GTK_TABLE(table), button, 0, 1, 0, 1);
    gtk_widget_modify_bg( button, GTK_STATE_NORMAL, &colorBlue );

    button = gtk_button_new_with_label("main2");
    g_signal_connect(button, "clicked",
                     G_CALLBACK(callback_it2), &child_window2);
    gtk_table_attach_defaults(GTK_TABLE(table), button, 1, 2, 0, 1);
    gtk_widget_modify_bg( button, GTK_STATE_NORMAL, &colorBlue );

when this is very easy, but tedious and (IMHO) NOT the correct way of
doing this thing.
Can you please show how to get this done?

On Fri, 2012-05-18 at 20:18 +0200, David Nečas wrote:
> On Fri, May 18, 2012 at 09:12:45PM +0530, Rudra Banerjee wrote:
> > Here is a minimal example of a program, where if i click the button, a
> > pop up window appears. I am posting both the call back function and the
> > main routine (table.c).
> > I am facing 2 problem.
> 
> Unfortunately, you are facing much more problems.
> 
> For start
> 
>     gtk_container_add(GTK_CONTAINER(window1), vbox1);
> 
> is called with an unitialised variable window1 (i.e. no window1 is ever
> created).  This leads to a CRITICAL message to console and/or crash.
> 
> And if window1 existed then vbox1 would be packed into two different
> containers (window1 and window) which is not possible.  So I'm ignoring
> that part altogether.
> 
> The callback should look like
> 
> void
> callback_it(GtkWidget *button, gpointer user_data)
> {
>    ...
> }
> 
> where in user_data the callback receives the last argument you passed to
> g_signal_connect().  It is rarely useful to pass a constant such as
> "Call" there.
> 
> The callback is *not* another main() function; it should *not* call
> gtk_init() again, etc.  Please read the signals section in the Gtk+
> tutorial
> 
>     http://developer.gnome.org/gtk-tutorial/2.90/x159.html
> 
> There are several other highly suspicious things:
> - redeclaration of global variables (such as window) inside a function;
>   are you aware this creates a new local variable window that has nothing
>   to do with the global one?
> - inclusion of .c files instead of separate compilation + linking them
>   together
> - calling gtk_widget_show() on individual widgets and then again showing
>   everything using gtk_widget_show_all()
> - not terminating the Gtk+ main loop when the main window is destroyed;
>   this is usually the first thing to set up in a Gtk+ program, see
> 
>     http://developer.gnome.org/gtk-tutorial/2.90/c39.html#SEC-HELLOWORLD
> 
> etc.
> 
> > 1) The problem is evry time I click the button "main", a new window
> > appears(obviously). What I want to achive is, if the window is already
> > present, it should not open again; rather it should focus that window. I
> > believe, this can be achived by gtk_window_present(may be I am wrong).
> > But I don't know how to use it.
> 
> You use it just by calling gtk_window_present() on the window object.
> To that meaningfully you need not only to keep the window object around
> but also get notified when the window is destroyed.  Either by
> connecting to the "destroy" signal or, if you just want to set a pointer
> to NULL once it is gone, by using g_object_add_weak_pointer().
> 
> > 2) In the callback function, I have C_1 and C_2. What I want to achive
> > is C<sub>1</sub> etc via pango(or any other).
> 
> For simple things you can sometimes just use UTF-8.  But generally, you
> need to use Pango markup.  If the widget does not have function to set
> the markup it has a function to obtain the label widget so that you can
> use gtk_label_set_markup() on that.
> 
> See the attached code with main problems fixed (and merged to one file).
> Please go through the Gtk+ tutorial farther that you perhaps have done.
> 
> Yeti
> 


_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to