On Tue, 2014-03-11 at 21:14 +0100, Joël Krähemann wrote:
> On Tue, 2014-03-11 at 14:01 +0000, Richard Shann wrote:
> > On Tue, 2014-03-11 at 13:18 +0100, Joël Krähemann wrote:
> > > On Tue, 2014-03-11 at 08:12 +0000, Richard Shann wrote:
> > > > On Tue, 2014-03-11 at 04:43 +0100, Joël Krähemann wrote:
> > > > > On Mon, 2014-03-10 at 09:52 +0000, Richard Shann wrote:
> > > > > > On Mon, 2014-03-10 at 09:29 +0100, Joël Krähemann wrote:
> > > > > > > On Mon, 2014-03-10 at 09:26 +0100, Joël Krähemann wrote:
> > > > > > > > On Sun, 2014-03-09 at 14:03 +0000, Richard Shann wrote:
> > > > > > > > > > From: Jo?l Kr?hemann <j...@weedlight.ch>
> > > > > > > > > > To: gtk-app-devel-list@gnome.org
> > > > > > > > > > Subject: Re: Help replacing GtkDrawingArea with GtkLayout
> > > > > > > > > > Message-ID: <1394327737.3369.3.camel@debian>
> > > > > > > > > > Content-Type: text/plain; charset="us-ascii"
> > > > > > > > > > 
> > > > > > > > > > Hi,
> > > > > > > > > > 
> > > > > > > > > > Didn't before but may be check the following:
> > > > > > > > > > 
> > > > > > > > > > g_object_set(G_OBJECT(layout),
> > > > > > > > > >   "app-paintable\0", TRUE, 
> > > > > > > > > >   NULL);
> > > > > > > > > 
> > > > > > > > > Hmm, I hadn't noticed that property. It is presumably set ok 
> > > > > > > > > since I can
> > > > > > > > > draw and place widgets on the GtkLayout. It was the configure 
> > > > > > > > > and scroll
> > > > > > > > > events that I didn't receive.
> > > > > > > > > BTW why do you have two NULL bytes at the end of the property 
> > > > > > > > > name
> > > > > > > > > (AFAIK only one is needed)?
> > > > > > > > > 
> > > > > > > > > Richard
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > 
> > > > > > > > Assumed you get annoyed by warnings, you can slightly disable 
> > > > > > > > it. It's
> > > > > > > > distribution depend what flags are per default on. For further 
> > > > > > > > reading:
> > > > > > > > 
> > > > > > > > http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
> > > > > > > > 
> > > > > > > > regards
> > > > > > > > Joël
> > > > > > > > 
> > > > > > > > 
> > > > > > > > _______________________________________________
> > > > > > > > gtk-app-devel-list mailing list
> > > > > > > > gtk-app-devel-list@gnome.org
> > > > > > > > https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
> > > > > > > 
> > > > > > > You should ask why I forget to add GDK_SCROLL_MASK
> > > > > > 
> > > > > > Well, I didn't ask because I already tried it. The GtkLayout didn't
> > > > > > receive that nor the configure signal even with setting
> > > > > > GDK_ALL_EVENTS_MASK. What *did* work is receiving the events on the
> > > > > > parent.
> > > > > > But I am still curious why you have two NULL bytes termination your
> > > > > > signal name strings, the extra one must surely get ignored...
> > > > > > 
> > > > > > Richard
> > > > > > 
> > > > > > 
> > > > > > > 
> > > > > > > gtk_widget_set_events (GTK_WIDGET (layout),
> > > > > > >   GDK_EXPOSURE_MASK 
> > > > > > >   | GDK_LEAVE_NOTIFY_MASK 
> > > > > > >   | GDK_BUTTON_PRESS_MASK 
> > > > > > >   | GDK_BUTTON_RELEASE_MASK 
> > > > > > >   | GDK_POINTER_MOTION_MASK 
> > > > > > >   | GDK_POINTER_MOTION_HINT_MASK 
> > > > > > >   | GDK_SCROLL_MASK
> > > > > > >   );
> > > > > > > 
> > > > > > > then you have to
> > > > > > > 
> > > > > > > g_signal_connect(G_OBJECT(layout), "scroll-event\0",
> > > > > > >   G_CALLBACK(layout_callback), NULL);
> > > > > > > 
> > > > > > > 
> > > > > > > gboolean
> > > > > > > layout_callback(GtkWidget *widget, GdkEvent *event, gpointer 
> > > > > > > user_data)
> > > > > > > {
> > > > > > >   /* do your thing */
> > > > > > > 
> > > > > > >   return(FALSE);
> > > > > > > }
> > > > > > > 
> > > > > > > 
> > > > > > > 
> > > > > > 
> > > > > > 
> > > > > Is your code somewhere online? Are you using
> > > > > gtk_widget_set_size_request()?
> > > > > 
> > > > 
> > > > I gave a minimal example earlier in the thread:
> > > > 
> > > > https://mail.gnome.org/archives/gtk-app-devel-list/2014-March/msg00007.html
> > > > 
> > > > 
> > > > Richard
> > > > 
> > > > 
> > > Much better! As someone told you before the widget is realized you have
> > > to set the appropriate flags.
> > 
> > The widget is not realized before the flags are set. Indeed gtk_main()
> > has not even been called, so no signals have been emitted when the flags
> > are set.
> > Here is the code with the sequence altered as you suggest:
> > 
> > 8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><
> > #include <gtk/gtk.h>
> > static gboolean
> > configure_event ()
> > {
> >     fprintf (stderr, "configure-event\n");
> >     gtk_main_quit ();
> >     return FALSE;
> > }
> > 
> > int main(int argc, char *argv[])
> > {
> >     GtkWidget *window;
> >     GtkWidget *layout;
> >     GtkWidget *label1;
> > 
> >     gtk_init (&argc, &argv);
> > 
> >     window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
> >    
> >     layout = gtk_layout_new (NULL, NULL);
> >     gtk_widget_add_events (layout, GDK_ALL_EVENTS_MASK);
> >     gtk_container_add (GTK_CONTAINER (window), layout);
> >    
> > 
> >     label1 = gtk_label_new ("label 1");
> > 
> >     gtk_layout_put (GTK_LAYOUT (layout), label1, 10, 50);
> >   
> > 
> >     gtk_widget_show_all (window);
> > 
> >     GdkWindow *win = gtk_widget_get_window(layout); 
> >     g_print("win is %p initial mask 0x%x\n", win, gdk_window_get_events
> > (win));
> >     gdk_window_set_events (win, gdk_window_get_events (win) |
> > GDK_STRUCTURE_MASK);
> >     g_print("After adding GDK_STRUCTURE_MASK mask 0x%x\n",
> > gdk_window_get_events (win));
> >     
> >     g_signal_connect (layout, "configure-event", G_CALLBACK
> > (configure_event), NULL);
> > 
> >     gtk_main ();
> > 
> >     return 0;
> > }
> > 
> > 8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><
> > 
> > As you can verify, it makes no difference - it would be very bizarre if
> > it did.
> > 
> > > 
> > > layout = gtk_layout_new (NULL, NULL);
> > > 
> > > /* SET FLAGS HERE */
> > > 
> > > gtk_container_add (GTK_CONTAINER (window), layout);
> > > 
> > > 
> > > and don't forget to add the missing parameters.
> > 
> > The parameters in the definition of the callback function
> > configure_event(void) are not missing, it is deliberately declared not
> > to have them. It is not a good idea to declare the callback with
> > parameters if they are not going to be used.
> > 
> > Richard
> > 
> > 
> > > 
> > > gboolean
> > > configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer
> > > user_data){
> > >   /* YOUR CODE HERE */
> > > }
> > 
> > 
> > 
> > 
> > 
> 
> Please consider the documentation of gtk_widget_set_app_paintable()
> don't believe GtkLayout can do your job. You could try id with a
> GtkDrawingArea with a cairo surface. I do some drawing in C take a look
> at http://sourceforge.net/p/ags/code/HEAD/tree/src/ags/X/ags_editor.c
> 
> regards Joël
> 
> 
> 
> _______________________________________________
> gtk-app-devel-list mailing list
> gtk-app-devel-list@gnome.org
> https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list


Finally got it you can't read GdkWindow before you didn't show the assigned 
widget.

#include <gtk/gtk.h>

gboolean
configure_event (GtkWidget *widget,
                 GdkEventConfigure *configure,
                 gpointer data)
{
  fprintf (stderr, "configure-event\n");
  gtk_main_quit ();
  return FALSE;
}
int main(int argc, char *argv[])
{
  GtkWidget *window;
  GtkWidget *layout;
  GtkWidget *label1;
  GdkWindow *win;

  gtk_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

  layout = gtk_layout_new (NULL, NULL);
  g_object_set(G_OBJECT(layout),
               "app-paintable", TRUE,
               NULL);

  gtk_widget_add_events (layout, GDK_ALL_EVENTS_MASK);
  gtk_container_add (GTK_CONTAINER (window), layout);

  label1 = gtk_label_new ("label 1");

  gtk_layout_put (GTK_LAYOUT (layout), label1, 10, 50);


  gtk_widget_show_all (window);

  win = gtk_layout_get_bin_window (GTK_LAYOUT(layout));
  g_print("win is %p initial mask 0x%x\n", win, gdk_window_get_events
          (win));
  gdk_window_set_events (win, gdk_window_get_events (win) |
                         GDK_STRUCTURE_MASK);
  g_print("After adding GDK_STRUCTURE_MASK mask 0x%x\n",
          gdk_window_get_events (win));

  g_signal_connect (layout, "configure-event",
                    G_CALLBACK (configure_event), NULL);

  gtk_main ();

  return 0;
}

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

Reply via email to