attached you'll find a patch against current cvs. Although
it is created on win32 almost all changes are _not_ win32 
related. The ChangeLog entry follows. Ok to commit ?

2002-04-01  Hans Breuer  <[EMAIL PROTECTED]>

        * codegen/override.py : extended to allow 'sys.platform'
        specific ignores

        * examples/pygtk-demo/demos/colorsel.py : use
                color = gtk.gdk.color_parse("blue")
        to get the initial color

        * examples/pygtk-demo/demos/draw.py : (new file) 
        demonstrating some simple drawing operations. It is
        using the gtk.GC interface additions below.

        * gtk/gdk.override : implement GdkGC.tp_getattr,
        GdkGC.tp_setattr and gdk_gc_set_dashes (ported from #if 0'ed
        code in gtk/gtk-types.c (should be removed there ?)

        * gtk/gtk.override : ignore-win32 GTK_TYPE_PLUG 
        GTK_TYPE_SOCKET gtk_socket_new (the TYPE ignores do not work yet)

        * config.h.win32 makefile.msc pygtk/makefile.msc :
        new files to build pygtk on windoze using the established
        glib/build/win32 infrastructure

        * pygtk/gtk-fake-win32.c : (new file) implementing
        gtk_plug_get_type() and gtk_socket_get_type(). It could
        vanish if codegen/codegen.py has learned something like
        'ignore-class-$(sys.platform) or my GtkPlug/GtkSocket
        patch gets accepted with Gtk.

        * gtk/gtkmodule.c : added a g_assert() to ensure importing
        pygobject did work.

BTW: the makefile.msc's do export init$(MODULE) functions 'by hand'.
IMO using the Python define DL_EXPORT() can't work for inter-module
dependencies [explanation if there is interest].

Regards,
        Hans
diff --exclude-from=c:\util\tool\diff.ign -u -r 
from-cvs/gnome-python/pygtk/codegen/override.py 
my-gtk/gnome-python/pygtk/codegen/override.py
--- from-cvs/gnome-python/pygtk/codegen/override.py     Wed Mar 20 22:36:20 2002
+++ my-gtk/gnome-python/pygtk/codegen/override.py       Mon Apr 01 16:37:14 2002
@@ -59,7 +59,7 @@
        else:
            line = buffer ; rest = ''
        words = string.split(line)
-       if words[0] == 'ignore':
+       if words[0] == 'ignore' or words[0] == 'ignore-' + sys.platform :
            for func in words[1:]: self.ignores[func] = 1
            for func in string.split(rest): self.ignores[func] = 1
        elif words[0] == 'ignore-glob':
Only in my-gtk/gnome-python/pygtk: config.h.win32
diff --exclude-from=c:\util\tool\diff.ign -u -r 
from-cvs/gnome-python/pygtk/examples/pygtk-demo/demos/colorsel.py 
my-gtk/gnome-python/pygtk/examples/pygtk-demo/demos/colorsel.py
--- from-cvs/gnome-python/pygtk/examples/pygtk-demo/demos/colorsel.py   Thu Jan 24 
14:18:30 2002
+++ my-gtk/gnome-python/pygtk/examples/pygtk-demo/demos/colorsel.py     Sun Mar 31 
+00:03:02 2002
@@ -34,13 +34,7 @@
 def main():
     global window, color, da
     
-    # How do I get a GdkColor?
-    # GdkColormap.alloc() wants a GtkColor, not strings nor (r, g, b) and
-    # gtk.gdk.Color isn't implemented...
-    #color = gtk.gdk.Color()
-    #color.red = 0
-    #color.blue = 0xFFFF
-    #color.green = 0
+    color = gtk.gdk.color_parse("blue")
     
     window = gtk.Window()
     window.set_title("Color selection")
@@ -60,7 +54,6 @@
     
     da = gtk.DrawingArea()
     da.set_size_request(200, 200)
-    color = da.get_style().white
     da.modify_bg(gtk.STATE_NORMAL, color)
     frame.add(da)
     
Only in my-gtk/gnome-python/pygtk/examples/pygtk-demo/demos: draw.py
diff --exclude-from=c:\util\tool\diff.ign -u -r 
from-cvs/gnome-python/pygtk/gtk/gdk.override my-gtk/gnome-python/pygtk/gtk/gdk.override
--- from-cvs/gnome-python/pygtk/gtk/gdk.override        Wed Mar 20 22:36:28 2002
+++ my-gtk/gnome-python/pygtk/gtk/gdk.override  Sat Mar 30 19:24:00 2002
@@ -1206,6 +1206,160 @@
     return pygc;
 }
 %%
+override-slot GdkGC.tp_getattr
+PyObject *
+_wrap_gdk_gc_tp_getattr(PyGObject *self, char *key)
+{
+    GdkGCValues gc;
+
+    if (!strcmp(key, "__members__"))
+       return Py_BuildValue("[ssssssssssssssssss]", "background", "cap_style",
+                            "clip_mask", "clip_x_origin", "clip_y_origin",
+                            "fill", "font", "foreground", "function",
+                            "graphics_exposures", "join_style", "line_style",
+                            "line_width", "stipple", "sub_window", "tile",
+                            "ts_x_origin", "ts_y_origin");
+    gdk_gc_get_values(GDK_GC(self->obj), &gc);
+    if (!strcmp(key, "foreground")) return pyg_boxed_new(GDK_TYPE_COLOR, 
+&(gc.foreground), TRUE, TRUE);
+    if (!strcmp(key, "background")) return pyg_boxed_new(GDK_TYPE_COLOR, 
+&(gc.background), TRUE, TRUE);
+    if (!strcmp(key, "font")) return pyg_boxed_new(GDK_TYPE_FONT, gc.font, TRUE, 
+TRUE);
+    if (!strcmp(key, "function")) return PyInt_FromLong(gc.function);
+    if (!strcmp(key, "fill")) return PyInt_FromLong(gc.fill);
+    if (!strcmp(key, "tile")) {
+       if (gc.tile != NULL) return pygobject_new((GObject *)gc.tile);
+       Py_INCREF(Py_None); return Py_None;
+    }
+    if (!strcmp(key, "stipple")) {
+       if (gc.stipple != NULL) return pygobject_new((GObject *)gc.stipple);
+       Py_INCREF(Py_None); return Py_None;
+    }
+    if (!strcmp(key, "clip_mask")) {
+       if (gc.clip_mask!=NULL) return pygobject_new((GObject *)gc.clip_mask);
+       Py_INCREF(Py_None); return Py_None;
+    }
+    if (!strcmp(key, "subwindow_mode"))
+       return PyInt_FromLong(gc.subwindow_mode);
+    if (!strcmp(key, "ts_x_origin")) return PyInt_FromLong(gc.ts_x_origin);
+    if (!strcmp(key, "ts_y_origin")) return PyInt_FromLong(gc.ts_y_origin);
+    if (!strcmp(key, "clip_x_origin")) return PyInt_FromLong(gc.clip_x_origin);
+    if (!strcmp(key, "clip_y_origin")) return PyInt_FromLong(gc.clip_y_origin);
+    if (!strcmp(key, "graphics_exposures"))
+       return PyInt_FromLong(gc.graphics_exposures);
+    if (!strcmp(key, "line_width")) return PyInt_FromLong(gc.line_width);
+    if (!strcmp(key, "line_style")) return PyInt_FromLong(gc.line_style);
+    if (!strcmp(key, "cap_style")) return PyInt_FromLong(gc.cap_style);
+    if (!strcmp(key, "join_style")) return PyInt_FromLong(gc.join_style);
+
+    return Py_FindMethod(_PyGdkGC_methods, (PyObject *)self, key);
+}
+%%
+override-slot GdkGC.tp_setattr
+static int
+_wrap_gdk_gc_tp_setattr(PyGObject *self, char *key, PyObject *value)
+{
+    GdkGC *gc = GDK_GC(self->obj);
+
+    if (value == NULL) {
+       PyErr_SetString(PyExc_TypeError, "can't delete attributes");
+       return -1;
+    }
+    if (PyInt_Check(value)) {
+       int i = PyInt_AsLong(value);
+       GdkGCValues v;
+       gdk_gc_get_values(gc, &v);
+       if (!strcmp(key, "function")) gdk_gc_set_function(gc, i);
+       else if (!strcmp(key, "fill")) gdk_gc_set_fill(gc, i);
+       else if (!strcmp(key, "subwindow_mode")) gdk_gc_set_subwindow(gc, i);
+       else if (!strcmp(key, "ts_x_origin"))
+           gdk_gc_set_ts_origin(gc, i, v.ts_y_origin);
+       else if (!strcmp(key, "ts_y_origin"))
+           gdk_gc_set_ts_origin(gc, v.ts_x_origin, i);
+       else if (!strcmp(key, "clip_x_origin"))
+           gdk_gc_set_clip_origin(gc, i, v.clip_y_origin);
+       else if (!strcmp(key, "clip_y_origin"))
+           gdk_gc_set_clip_origin(gc, v.clip_x_origin, i);
+       else if (!strcmp(key, "graphics_exposures")) gdk_gc_set_exposures(gc, i);
+       else if (!strcmp(key, "line_width"))
+           gdk_gc_set_line_attributes(gc, i,v.line_style,v.cap_style,v.join_style);
+       else if (!strcmp(key, "line_style"))
+           gdk_gc_set_line_attributes(gc, v.line_width,i,v.cap_style,v.join_style);
+       else if (!strcmp(key, "cap_style"))
+           gdk_gc_set_line_attributes(gc, v.line_width,v.line_style,i,v.join_style);
+       else if (!strcmp(key, "join_style"))
+           gdk_gc_set_line_attributes(gc, v.line_width,v.line_style,v.cap_style,i);
+       else {
+           PyErr_SetString(PyExc_TypeError,"type mismatch");
+           return -1;
+       }
+    } else if (pyg_boxed_check(value, GDK_TYPE_COLOR)) {
+       GdkColor *c = pyg_boxed_get(value, GdkColor);
+       if (!strcmp(key, "foreground")) gdk_gc_set_foreground(gc, c);
+       else if (!strcmp(key, "background")) gdk_gc_set_background(gc, c);
+       else {
+           PyErr_SetString(PyExc_TypeError,"type mismatch");
+           return -1;
+       }
+    } else if (pyg_boxed_check(value, GDK_TYPE_FONT)) {
+       if (!strcmp(key, "font")) gdk_gc_set_font(gc, pyg_boxed_get(value, GdkFont));
+       else{
+           PyErr_SetString(PyExc_TypeError,"type mismatch");
+           return -1;
+       }
+    } else if (pygobject_check(value, &PyGdkWindow_Type) || value == Py_None) {
+       PyGObject *window = (PyGObject *)value;
+       GdkWindow *w = (value==Py_None)?NULL:GDK_WINDOW(window->obj);
+       if (!strcmp(key, "tile")) gdk_gc_set_tile(gc, w);
+       else if (!strcmp(key, "stipple")) gdk_gc_set_stipple(gc, w);
+       else if (!strcmp(key, "clip_mask")) gdk_gc_set_clip_mask(gc, w);
+       else {
+           PyErr_SetString(PyExc_TypeError,"type mismatch");
+           return -1;
+       }
+    } else {
+       PyErr_SetString(PyExc_TypeError,"type mismatch");
+       return -1;
+    }
+    return 0;
+}
+%%
+override gdk_gc_set_dashes
+static PyObject *
+_wrap_gdk_gc_set_dashes(PyGObject *self, PyObject *args)
+{
+    gint dash_offset, n, i;
+    PyObject *list;
+    guchar *dash_list;
+
+    if (!PyArg_ParseTuple(args, "iO:GdkGC.set_dashes", &dash_offset, &list))
+       return NULL;
+    if (!PySequence_Check(list)) {
+       PyErr_SetString(PyExc_TypeError, "second argument must be a sequence");
+       return NULL;
+    }
+    n = PySequence_Length(list);
+    dash_list = g_new(char, n);
+    for (i = 0; i < n; i++) {
+       PyObject *item = PySequence_GetItem(list, i);
+       Py_DECREF(item);
+
+       if (!PyInt_Check(item)) {
+           PyErr_SetString(PyExc_TypeError, "sequence member must be an int");
+           g_free(dash_list);
+           return NULL;
+       }
+       dash_list[i] = (guchar)PyInt_AsLong(item);
+       if (dash_list[i] == 0) {
+           PyErr_SetString(PyExc_TypeError, "sequence member must not be 0");
+           g_free(dash_list);
+           return NULL;
+       }
+    }
+    gdk_gc_set_dashes(GDK_GC(self->obj), dash_offset, dash_list, n);
+    g_free(dash_list);
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+%%
 override gdk_drawable_get_size noargs
 static PyObject *
 _wrap_gdk_drawable_get_size(PyGObject *self)
Only in my-gtk/gnome-python/pygtk/gtk: gtk-fake-win32.c
diff --exclude-from=c:\util\tool\diff.ign -u -r 
from-cvs/gnome-python/pygtk/gtk/gtk.override my-gtk/gnome-python/pygtk/gtk/gtk.override
--- from-cvs/gnome-python/pygtk/gtk/gtk.override        Wed Mar 20 22:36:36 2002
+++ my-gtk/gnome-python/pygtk/gtk/gtk.override  Sun Mar 31 10:57:48 2002
@@ -4934,3 +4934,8 @@
                        &max_size);
     return Py_BuildValue("(dddd)", lower, upper, position, max_size);
 }
+%%
+ignore-win32 
+       GTK_TYPE_PLUG
+       GTK_TYPE_SOCKET
+       gtk_socket_new
diff --exclude-from=c:\util\tool\diff.ign -u -r 
from-cvs/gnome-python/pygtk/gtk/gtkmodule.c my-gtk/gnome-python/pygtk/gtk/gtkmodule.c
--- from-cvs/gnome-python/pygtk/gtk/gtkmodule.c Sun Mar 31 22:42:40 2002
+++ my-gtk/gnome-python/pygtk/gtk/gtkmodule.c   Sun Mar 31 22:43:46 2002
@@ -35,6 +35,7 @@
  
     /* initialise gobject */
     init_pygobject();
+    g_assert(pygobject_register_class != NULL);
 
     /* set the default python encoding to utf-8 */
     PyUnicode_SetDefaultEncoding("utf-8");

-------- Hans "at" Breuer "dot" Org -----------
Tell me what you need, and I'll tell you how to 
get along without it.                -- Dilbert

Reply via email to