[Gd-hackers] gtk interface: shorten identifiers, ... ?

Danny Milosavljevic danny_milo at yahoo.com
Sun Nov 26 22:03:59 CET 2006


Hi,

I wonder how to modify the gtk interface in
svn://anonsvn.gwydiondylan.org/scm/svn/dylan/trunk/duim/platform/gtk+/gtk2
to make an example like this possible:

module: hello-world
use-libraries: dylan, common-dylan, io, gtk-2
use-modules: common-dylan, streams, standard-io, format-out, gtk

define method hello(widget :: <widget>)
  format-out("Hello, World, %=!\n", widget);
  force-output(*standard-output*);
  let dialog = make(<message-dialog>, get-parent(widget),
                           #"destroy-with-parent",
                           #"warning",
                           #"yes-no",
                           "foo!");
  dialog.response.connect(method(widget, data)
                       format-out("Response event occurred: %= got %=\n",
                                   widget, data);
                       force-output(*standard-output*);
                       destroy(widget);
                   end method);
  show(dialog);
end method hello;

define method delete-event(widget :: <widget>, event :: <gdk-event>)
  => (deny-deletion? :: <boolean>)
  format-out("Delete event occurred: %= got %=\n", widget, event);
  force-output(*standard-output*);
  #t
end method delete-event;

define method destroy-event(widget :: <widget>) => ()
  format-out("Destroy event occurred: %=\n", widget);
  force-output(*standard-output*);
  gtk-main-quit()
end method destroy-event;

begin
  gtk-init(application-name(), application-arguments());

  let window = make(<window>, #"toplevel");
  g-signal-connect(window, "delete_event", delete-event);
  g-signal-connect(window, "destroy", destroy-event);
  set-border-width(window, 10);

  let button = make(<button>, label: "Hello, world!");
  button.clicked.connect(hello);
/*
  g-signal-connect(button, "clicked", method(#rest args) 
                                           destroy(window);
                                       end method);
*/
  add(window, button);

  show(button);
  show(window);

  gtk-main();
end;

That is,
1) use short identifiers for "object methods"
2) use symbols for flags
3) add actual slots for signals (so that it isn't so easy to specify
non-existant signals)
4) add support for "make(<window>" etc

For 1), I started to look into adding a "name-mapper:
g-object-strip-object-prefix" to melange. However, I'm not sure at what
phase the name mapping is done. (If it were done too early, obviously the
gtk wrapper code itself wouldn't find its own functions)

For 2), I have no idea... that would be some kind of flag mapper :)

Hmm...

cheers,
  Danny (newbie)




More information about the hackers mailing list