RE: dialog widget problem



I was thinking of putting my dialog window in a separate function and not 
in main().....a novel idea.  Anyway, I suppose the implication of this is 
that i have to create the window each time and I don't mind this but what 
about the signal_connects , should they also be in the same function I 
create the dialog window in and if so, what are the implications of the 
rest of the program continuing to run or will it wait for me to do 
something with the dialog box.

-----Original Message-----
From:	Matt Eisemann [SMTP:meisemann dsrnet com]
Sent:	Wednesday, November 01, 2000 2:52 PM
To:	'Dugas, Alan'; gtk-list gnome org
Subject:	RE: dialog widget problem

I did try the printf() comment but both numbers were the same.  I also have 
not tried the gtk_signal_emit_stop_by_name since the print statement (see 
below) never executes in the gboolean ok_delete_handler(GtkWidget *widget, 
GdkEvent *event,
>                                                   gpointer user_data)

      The fact that the print statement in the function above never 
executes, makes me think that it never gets in that function and I get a 
core dump.  I also have (but did not include before) a window_event_handler 
which works great.  Is there a difference in the way delete-event works for 
main application windows and for dialog windows or not really?

gboolean window_event_handler(GtkWidget *widget, GdkEvent *event,
                                               gpointer display_tasks);

  The only difference I see is that I am told to use return FALSE for this 
and return TRUE for a dialog window.


  One other potential problem is that I do not use gtk_main() directly.  I 
have created my own event loop which has worked fine for other events.
  While(tasks->running ==TRUE)
  {
    g_main_iteration(FALSE);
    /* other event check iteration */
  }

  Any ideas?  Thanks ahead of time for your help.

Matt


-----Original Message-----
From:	Dugas, Alan [SMTP:alan dugas analog com]
Sent:	Tuesday, October 31, 2000 11:35 AM
To:	'Dugas, Alan'; gtk-list gnome org; Matt Eisemann
Subject:	RE: dialog widget problem

Hmm...  It sounds like dialog_win might not be pointing to the widget you 
want
when you set tasks->dialog_win.  Use a debugger to check the value of 
dialog_win
to see if it's changing.  If you don't have a debugger available, insert
printf() statements to display the value of dialog_win after you create the
dialog window and again when you assign tasks->dialog_win = dialog_win, 
they
should be the same.  In addition to this, try using
gtk_widget_show(GTK_WIDGET(widget)) in ok_delete_handler(), it may also 
help
shed some light on the problem.  And lastly I think you may need to insert 
a
call to gtk_signal_emit_stop_by_name() in ok_delete_handler() to prevent 
the
default handler(s) from being run (see page195 of the GTK tutorial).  It 
could
be that a default handler is destroying your widget so that when you go to 
use
it later (i.e. "show" it) you get a segfault.



				-- Stupid Genius

> ----------
> From: 	Matt Eisemann[SMTP:meisemann dsrnet com]
> Sent: 	Tuesday, October 31, 2000 8:55 AM
> To: 	'Dugas, Alan'; gtk-list gnome org
> Subject: 	RE: dialog widget problem
>
> Below should show my scoping of how I do everything.  It must be a 
scoping
> issue.  Basically what I do is in two different functions I implement the 
> following code to display the dialog under a specific condition.
>
> void some_func(void)
> {
>   ....
>   if(tasks->dead_tasks == TRUE)
>   {
>     gtk_widge_show_all(tasks->dialog_win);
>     tasks->dead_tasks = FALSE;
>   }
> }
>
> The above is seen in two different functions.
> In main() I have the code
>
> int main(int argc, char *argv[])
> {
>   dialog_win = gtk_dialog_new();
>   dialog_label = gtk_label_new("WARNING.  There are DEAD tasks running. 
");
>   dialog_ok = gtk_button_new_with_label("OK");
>   gtk_window_set_title(GTK_WINDOW(dialog_win), "dead tasks");
>   gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_win)->vbox),dialog_label,
>                                FALSE,FALSE,NO_PADDING);
>
> 
 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_win)->action_area),dialog_ok,
>                                FALSE, FALSE,NO_PADDING);
>   /* later in main  this might be problem.  copy ptr of widget to point 
to
> dialog_win.  Both are defined as GtkWidget *dialog_win.  */
>   tasks->dialog_win = dialog_win;
>
>   /* callbacks then follow after the above */
>
>   ....
>    gtk_signal_connect_object(GTK_OBJECT(dialog_ok),"clicked",
>
>                                          GTK_SIGNAL_FUNC(gtk_widget_hide 
> ),GTK_OBJECT(dialog_win));
>   gtk_signal_connect(GTK_OBJECT(tasks->dialog_win),"delete_event",
>                               GTK_SIGNAL_FUNC(ok_delete_handler),NULL);
>
>   }
>
>   The above signal does not make a difference, I get a core dump whether 
I
> use GTK_OBJECT(tasks->dialog_win) or GTK_OBJECT(dialog_win).  The
> utics_ok_delete_handler function
>
> gboolean ok_delete_handler(GtkWidget *widget, GdkEvent *event,
>                                                   gpointer user_data)
> {
>   char who[]="ok_delete_handler";
>
>   printf("closing: %s \n",who);
>   gtk_widget_hide(widget);
>   return(TRUE);
> }
>
> Hopefully the above should give the idea of the scoping I am using.  The
> only problem I might see is the fact I make a copy of the ptr to the 
widget
> but it should be displaying the same widget with just a different pointer 
> unless I am wrong.
>
>
> -----Original Message-----
> From:	Dugas, Alan [SMTP:alan dugas analog com]
> Sent:	Monday, October 30, 2000 6:51 PM
> To:	gtk-list gnome org; Matt Eisemann
> Subject:	RE: dialog widget problem
>
> The code looks OK to me, however, you may be running into a scoping issue
> with dialog_win depending on where you use gtk_signal_connect().
>  Otherwise,
> I think I'd need to see more of your code to figure out what's going on.
>
>
>
>
> 				-- Stupid Genius
> > ----------
> > From: 	Matt Eisemann[SMTP:meisemann dsrnet com]
> > Sent: 	Monday, October 30, 2000 6:23 PM
> > To: 	'Dugas, Alan'; gtk-list gnome org
> > Subject: 	RE: dialog widget problem
> >
> > You were right.  For some reason it needed gtk_signal_connect_object. 
 If
> > I
> > want to also have a window delete handler in case they close the window
> > via
> > window mgr does the following look right given the variable names I 
have
> > used already.
> >
> > gtk_signal_connect(GTK_OBJECT(dialog_win),"delete_event",
> >
> >
> > GTK_SIGNAL_FUNC(utics_ok_delete_handler),NULL);
> >
> > gboolean utics_ok_delete_handler(GtkWidget *widget, GdkEvent *event,
> >                                                   gpointer user_data)
> > {
> >   gtk_widget_hide(widget);
> >   return(TRUE);
> > }
> >
> > Actually, i just tried it and I got a core dump.  Anything look wrong
> > above.  Thanks ahead of time for your help.
> >
> > Matt
> >
> >
> >
> > -----Original Message-----
> > From:	Dugas, Alan [SMTP:alan dugas analog com]
> > Sent:	Monday, October 30, 2000 5:58 PM
> > To:	gtk-list gnome org; Matt Eisemann
> > Subject:	RE: dialog widget problem
> >
> > Just a thought...  It appears the problem has to do with
> > gtk_signal_connect()
> > passing it's first argument to gtk_widget_hide() whereas I think your
> > trying to
> > pass the last argument instead.  Try using gtk_signal_connect_object(), 
> it
> >
> > will
> > change the order of the argments passed to the callback function so 
that
> > the
> > last argument to gtk_signal_connect_object() is passed as the first
> > argument to
> > gtk_widget_hide() instead.
> >
> >
> >
> > 				-- Stupid Genius
> >
> > > ----------
> > > From: 	Matt Eisemann[SMTP:meisemann dsrnet com]
> > > Sent: 	Monday, October 30, 2000 5:09 PM
> > > To: 	gtk-list gnome org
> > > Subject: 	dialog widget problem
> > >
> > > Currently I am creating an application, but there is something wrong
> > with
> > > the callback that hides the widget or something is wrong in my logic.
> >  Here
> > > is a bit of code below which so should give some idea of what I am
> > doing.
> > >  The main window calls a dialog box when a certain flag is set.  I 
want
> > the
> > > user to be able to push the "OK" button and hide the dialog window 
and
> > > reset the flag back to FALSE.  I hopefully left out extraneous
> > information
> > > and code.
> > >
> > > void some_function(... )
> > > {
> > >
> > >   .....
> > >
> > >
> > >
> > >   if(tasks->dead_tasks == TRUE)
> > >   {
> > >     gtk_widget_show_all(tasks->dialog_win);
> > >     tasks->dead_tasks = FALSE;
> > >   }
> > > }
> > >
> > >
> > >
> > > int main(INT argc, CHAR *argv[])
> > > {
> > >   ...
> > >   dialog_win = gtk_dialog_new();
> > >   dialog_label = gtk_label_new("WARNING.  There is something wrong.
>  ");
> > >   dialog_ok = gtk_button_new_with_label("OK");
> > >   gtk_window_set_title(GTK_WINDOW(dialog_win),"dead tasks");
> > >
> > >
>  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_win)->vbox),dialog_label,F
> >
> > > ALSE,FALSE,NO_PADDING);
> > >
>   gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_win)->action_area),dialog
> >
> > > _ok, FALSE,FALSE, NO_PADDING);
> > >
> > >   gtk_signal_connect(GTK_OBJECT(dialog_ok),"clicked",
> > >
> > >
>                               GTK_SIGNAL_FUNC(gtk_widget_hide),GTK_OBJEC
> >
> > > T(dialog_win));
> > >  }
> > >   The code works somewthat above but the problem is that the OK 
button
> > > disappears and not the whole window.
> > >
> > >
> > > _______________________________________________
> > > gtk-list mailing list
> > > gtk-list gnome org
> > > http://mail.gnome.org/mailman/listinfo/gtk-list
> > >
> >
> >
> > _______________________________________________
> > gtk-list mailing list
> > gtk-list gnome org
> > http://mail.gnome.org/mailman/listinfo/gtk-list
> >
> 





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