Possible bug in GdlDockLayout or Python Bindings

Micah Carrick <[email protected]> Sat, 12 Sep 2009 15:07:44 -0700
Newsgroups gmane.comp.gnome.devtools
Message-ID <[email protected]>
Hey guys, I'm not quite sure who to contact regarding the gdl python 
bindings or which project the bug should be submitted to (I don't know 
much about language bindings). Another user posted this issue back in 
Feb. of last year: 
http://www.mail-archive.com/[email protected]/msg00335.html

However, it was left unresolved. I've done a little testing and have 
some more information.

The problem is with loading a GdlDockLayout from a file. I've built a 
little test application in C and another in Python. The one in C works, 
where as the Python one does not. When the Python application loads the 
layout from the file, it looses all dock items. I've attached the test 
applications to this email. These test programs save the layout when to 
close, so you'll have to run it once, close it, and then run it again to 
see the bug.

If anyone could take a quick look and a) make sure I'm using gdl 
properly (docs are limited) and b) suggest whom I might contact and/or 
submit a bug regarding this problem and c) any suggestions for a quick 
fix would be great. Who is maintaining the gdl python bindings?

Regards,

-- 
- Micah Carrick

  Developer - http://www.micahcarrick.com
  GTK+ Forums - http://www.gtkforums.com

_______________________________________________
gnome-devtools mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gnome-devtools
gdl-test.c (text/x-csrc, 2.2 KB)
/* gcc -Wall -g `pkg-config --cflags --libs gtk+-2.0 gdl-1.0`-o gdl-test gdl-test.c  */

#include <gtk/gtk.h>
#include <gdl/gdl.h>

gboolean on_window_delete_event(GtkWindow *window, GdkEvent *event, GdlDockLayout *layout)
{
    gdl_dock_layout_save_layout (layout, "test");
    gdl_dock_layout_save_to_file (layout, "layout_c.xml");
    g_print("Saved layout XML to file.\n");
    
    return FALSE;
}

int main (int argc, char *argv[])
{
    GtkWidget *win, *dock, *label1, *item1, *label2, *item2;
    GdlDockLayout *layout;
    
    gtk_init (&argc, &argv);
    
    win = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    dock = gdl_dock_new ();
    layout = gdl_dock_layout_new (GDL_DOCK(dock));
    
    g_signal_connect (G_OBJECT(win), "destroy",
                      G_CALLBACK (gtk_main_quit), NULL);
    
    g_signal_connect (G_OBJECT(win), "delete-event",
                      G_CALLBACK (on_window_delete_event), layout);

    label1 = gtk_label_new ("Label 1");
    item1 = gdl_dock_item_new_with_stock ("item1", 
                                          "Item 1",
                                          GTK_STOCK_OPEN,
                                          GDL_DOCK_ITEM_BEH_NORMAL);
                                          
    gtk_container_add (GTK_CONTAINER (item1), label1);
    gdl_dock_add_item (GDL_DOCK (dock), GDL_DOCK_ITEM (item1), GDL_DOCK_LEFT);
    gtk_widget_show_all (item1);
    
    label2 = gtk_label_new ("Label 21");
    item2 = gdl_dock_item_new_with_stock ("item2", 
                                          "Item 2",
                                          GTK_STOCK_SAVE,
                                          GDL_DOCK_ITEM_BEH_NORMAL);
                                          
    gtk_container_add (GTK_CONTAINER (item2), label2);
    gdl_dock_add_item (GDL_DOCK (dock), GDL_DOCK_ITEM (item2), GDL_DOCK_RIGHT);
    gtk_widget_show_all (item2);
        
    gtk_container_add(GTK_CONTAINER(win), dock);
    
    gtk_widget_show_all(win);  
    
    if (gdl_dock_layout_load_from_file (layout, "layout_c.xml"))
    {
        gdl_dock_layout_load_layout (layout, "test");
        g_print("Loaded layout XML from file.\n");
    }

    gtk_main();

    return 0;
}
gdl-test.py (text/x-python, 942 B)
#!/usr/bin/python
import os
import pygtk
pygtk.require("2.0")
import gtk
import gdl

def on_window_delete_event(window, params):
    layout.save_layout('test')
    layout.save_to_file('layout_py.xml')
    print "Saved layout XML to file."

win = gtk.Window(gtk.WINDOW_TOPLEVEL)
win.connect('destroy', gtk.main_quit)
win.connect('delete-event', on_window_delete_event)
    
dock = gdl.Dock()
layout = gdl.DockLayout(dock)    
    
item1 = gdl.DockItem("item1", "Item 1", gtk.STOCK_OPEN, gdl.DOCK_ITEM_BEH_NORMAL)
item1.add(gtk.Label("Label 1"))
dock.add_item (item1, gdl.DOCK_LEFT)
item1.show_all()

item2 = gdl.DockItem("item2", "Item 2", gtk.STOCK_SAVE, gdl.DOCK_ITEM_BEH_NORMAL)
item2.add(gtk.Label("Label 2"))
dock.add_item (item2, gdl.DOCK_RIGHT)
item2.show_all()

if layout.load_from_file('layout_py.xml'):
    layout.load_layout('test')
    print "Loaded layout XML from file."
                
win.add(dock)
win.show_all()

gtk.main()