Re: Help replacing GtkDrawingArea with GtkLayout

2014-03-11 Thread Richard Shann
On Tue, 2014-03-11 at 13:18 +0100, Joël Krähemann wrote:
 On Tue, 2014-03-11 at 08:12 +, 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 +, 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 +, 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/msg7.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
#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;
}



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 

Re: Help replacing GtkDrawingArea with GtkLayout

2014-03-11 Thread Joël Krähemann
On Tue, 2014-03-11 at 14:01 +, 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 +, 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 +, 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 +, 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/msg7.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
 #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;
 }
 
 
 
 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 

Re: Help replacing GtkDrawingArea with GtkLayout

2014-03-11 Thread Joël Krähemann
On Tue, 2014-03-11 at 21:14 +0100, Joël Krähemann wrote:
 On Tue, 2014-03-11 at 14:01 +, 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 +, 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 +, 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 +, 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/msg7.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
  #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;
  }
  
  
  
  As you can verify, it makes no difference - it would be very bizarre if
  it did.
  
   
   layout