index

notes on gauche-gtk+

sourceforge links

problem with Cairo!

(i'm not an expert on the matter, but I think, that:)
Gauche-gtk-0.4.1 contains gtkgl and glgd subdirs. I think they both are written to use pango built upon Free-Type, but in recent versions, pango uses Cairo instead?

I have this poor workaround (to disable the 2 parts):

Makefile.in
- HAVE_GTKGL=@GTKGL_SO@
- HAVE_GLGD=@GLGD_SO@
+ HAVE_GTKGL=
+ HAVE_GLGD=

how to build my gauche-gtk ?

See gauche-gtk-building

My patches

Here I try to list & document my many changes to gauche-gtk, not related to the change of the stub building process; that one is documented in gauche-gtk-building.

I have some patches for GTK itself, and build it with this (gentoo) ebuild.

/p/gauche-gtk-0.4.1/work/Gauche-gtk-0.4.1/src/Makefile

uses $(GOSH) /x/activity/gauche/stubs/h2stub.scm

/p/gauche-gtk-0.4.1/work/Gauche-gtk-0.4.1/src/gtk-lib.hints

;(define-cclass < (input-file "gtkuimanager.h") < < (define-cproc-fix gtk-ui-manager-add-ui-from-file < (fix-arguments! '(self:: filename::)) < (fix-body! "GError* err = NULL; uint r; < r = gtk_ui_manager_add_ui_from_file(self, filename, &err); < if (!r) { < Scm_Error(\"gtk-ui-manager-add-ui-from-file: %s\", err->message); < } < SCM_RETURN(SCM_TRUE);"))

gauche-gtk.h has gobject_compare!

/p/gauche-gtk-0.4.1-experimental/work/Gauche-gtk-0.4.1/src/gauche-gtk.c

g_signal_connect_after(GTK_OBJECT(gobj), "destroy", /* _after */

Was it (another workaround) for the Bug about g_signal_connect_after ?

ScmObj Scm_GObjectGetData(ScmGObject gobj, ScmObj key, ScmObj fallback) { ScmObj p = Scm_Assq(key, gobj->data);

versus: ScmObj p = Scm_Assoc(key, gobj->data, SCM_CMP_EQUAL);

in gdkevents.c

static void Scm_GdkEventKeyClass_string_SET(ScmObj OBJARG, ScmObj value) < { < GdkEventKey* obj = SCM_GDK_EVENT_KEY(OBJARG); < if (! SCM_STRINGP(value)) Scm_Error("bad argument: string needed\n"); < obj->string = Scm_GetStringConst(SCM_STRING(value)); < } < 1157c1158 < SCM_CLASS_SLOT_SPEC("string", Scm_GdkEventKeyClass_string_GET, Scm_GdkEventKeyClass_string_SET),

--- > SCM_CLASS_SLOT_SPEC("string", Scm_GdkEventKeyClass_string_GET, NULL),

dnd

in gtk-lib.hints

updated GDKPIXBUFFILES

-> aclocal && autoconf && configure!

for f (./lib/gtk.scm ./src/gauche-glib.stub ./src/gauche-gtk.c ./src/gauche-gtk.h ./src/gtk-lib.hints ./src/Makefile.in ./src/GTKFILES ./src/gdk-lib.hints ) {make_patch $f /p/gauche-gtk-0.4.1-r1.patched/work/Gauche-gtk-0.4.1/$f }

type aliases

there is a hack in ~/gauche/stubs/fixup.scm:

;;/usr/include/gtk-2.0/gdk/gdktypes.h typedef struct _GdkDrawable GdkWindow;

I removed need for these fixups.

;;================================================================== ;; gtkdnd.h [mmc!] ;;

(input-file "gtkdnd.h")

(define-cproc-fix gtk-drag-dest-set

(fix-arguments! '(widget:: flags:: targets actions::)) (fix-body! " if (! SCM_LISTP(targets)) Scm_Error(\"LIST of gtk-target-entry/s required, but got %S\", targets); int n_targets = 0; /* Scm_Length(targets); /

ScmObj p; / First*/

SCM_FOR_EACH(p, targets) { if (!SCM_GTK_TARGET_ENTRY_P(SCM_CAR(p))) Scm_Error(\"gtk-target-entry required, but got %S\", SCM_CAR(p)); n_targets++; }

GtkTargetEntry* c_targets = malloc((n_targets) * sizeof (GtkTargetEntry)); /* + 1*/ int i = 0; SCM_FOR_EACH(p, targets) { memcpy (c_targets + i++, SCM_GTK_TARGET_ENTRY(SCM_CAR(p)), sizeof (GtkTargetEntry)); }; /* Get the `n_targets' /

gtk_drag_dest_set(widget, flags, c_targets, n_targets, actions); free(c_targets); return SCM_UNDEFINED;"))

;; Same! (define-cproc-fix gtk-drag-source-set

(fix-arguments! '(widget:: flags:: targets actions::)) (fix-body! " if (! SCM_LISTP(targets)) Scm_Error(\"LIST of gtk-target-entry/s required, but got %S\", targets); int n_targets = 0; / Scm_Length(targets); /

ScmObj p; / First*/

SCM_FOR_EACH(p, targets) { if (!SCM_GTK_TARGET_ENTRY_P(SCM_CAR(p))) Scm_Error(\"gtk-target-entry required, but got %S\", SCM_CAR(p)); n_targets++; }

GtkTargetEntry* c_targets = malloc((n_targets) * sizeof (GtkTargetEntry)); /* + 1*/ int i = 0; SCM_FOR_EACH(p, targets) { memcpy (c_targets + i++, SCM_GTK_TARGET_ENTRY(SCM_CAR(p)), sizeof (GtkTargetEntry)); Scm_Warn(\"%d -> %s\", i, SCM_GTK_TARGET_ENTRY(SCM_CAR(p))->target); }; /* Get the `n_targets' /

Scm_Warn(\"gtk-drag-source-set: %d\", n_targets); gtk_drag_source_set(widget, flags, c_targets, n_targets, actions); free(c_targets); return SCM_UNDEFINED;"))

* gtk-lib.h did i patch it?

;;; [10 gen 05]

;(define-cclass (input-file "gtkuimanager.h")

(define-cproc-fix gtk-ui-manager-add-ui-from-file

(fix-arguments! '(self:: filename::)) (fix-body! "GError* err = NULL; uint r; r = gtk_ui_manager_add_ui_from_file(self, filename, &err); if (!r) { Scm_Error(\"gtk-ui-manager-add-ui-from-file: %s\", err->message); } SCM_RETURN(SCM_TRUE);"))

(define-cproc-fix gtk-window-set-icon-from-file

(fix-arguments! '(window:: filename::)) (fix-body! "GError err = NULL; gboolean r; r = gtk_window_set_icon_from_file(window, filename, &err); if (!r) { Scm_Error(\"gtk-window-set-icon-from-file: %s\", err->message); } SCM_RETURN(SCM_TRUE);"))

(define-cproc-fix gtk-window-set-default-icon-from-file

(fix-arguments! '(filename::>)) (fix-body! "GError *err = NULL; gboolean r; r = gtk_window_set_default_icon_from_file(filename, &err); if (!r) { Scm_Error(\"gtk-window-set-default-icon-from-file: %s\", err->message); } SCM_RETURN(SCM_TRUE);"))

;;; [10 gen 05] ;(define-cclass (input-file "gtkuimanager.h")