GithubHelp home page GithubHelp logo

ferada / cl-cffi-gtk Goto Github PK

View Code? Open in Web Editor NEW

This project forked from crategus/cl-cffi-gtk

41.0 41.0 8.0 21.73 MB

#cl-cffi-gtk on Freenode. A Lisp binding to GTK+3. SBCL/CCL/ABCL (ECL/CLISP unstable)

Home Page: http://www.crategus.com/books/cl-cffi-gtk

Common Lisp 99.98% CSS 0.02% Scheme 0.01% Makefile 0.01%
gtk3 lisp ui

cl-cffi-gtk's Introduction

Hi there ๐Ÿ‘‹

cl-cffi-gtk's People

Contributors

ahungry avatar bpatrikm avatar crategus avatar ferada avatar jasom avatar jathd avatar kierangrant avatar monkey413 avatar plops avatar puercopop avatar ralph-schleicher avatar stacksmith avatar svillemot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cl-cffi-gtk's Issues

Unboxed G-Error?

The following code:

  (gobject:g-signal-connect
   (gtk-object buffer) "load-failed"
   (lambda (web-view load-event failing-uri error)
     (declare (ignore load-event failing-uri web-view error))
     (print "Load Fail")))

Produces an error:

Unknown GBoxed type 'GError'
   [Condition of type SIMPLE-ERROR]

Restarts:
 0: [ABORT] Exit debugger, returning to top level.

Backtrace:
  0: (GOBJECT::GET-G-BOXED-FOREIGN-INFO-FOR-GTYPE #<GTYPE :name "GError" :id 140228195051424>)
  1: ((:METHOD GOBJECT::PARSE-G-VALUE-FOR-TYPE (T (EQL (GOBJECT:GTYPE "GBoxed")))) #.(SB-SYS:INT-SAP #X01F38E68) #<unused argument>) [fast-method]
  2: ((FLET CALL-NEXT-METHOD :IN "/Users/jmercouris/.quicklisp/dists/quicklisp/software/cl-cffi-gtk-20200427-git/gobject/gobject.g-value.lisp"))
  3: ((:METHOD GOBJECT::PARSE-G-VALUE-FOR-TYPE :AROUND (T T)) #.(SB-SYS:INT-SAP #X01F38E68) #<GTYPE :name "GBoxed" :id 72>) [fast-method]
  4: ((SB-PCL::GF-DISPATCH GOBJECT::PARSE-G-VALUE-FOR-TYPE) #.(SB-SYS:INT-SAP #X01F38E68) #<GTYPE :name "GBoxed" :id 72>)
  5: ((:METHOD GOBJECT::PARSE-G-VALUE-FOR-TYPE (T T)) #.(SB-SYS:INT-SAP #X01F38E68) #<GTYPE :name "GError" :id 140228195051424>) [fast-method]
  6: ((FLET CALL-NEXT-METHOD :IN "/Users/jmercouris/.quicklisp/dists/quicklisp/software/cl-cffi-gtk-20200427-git/gobject/gobject.g-value.lisp"))
  7: ((:METHOD GOBJECT::PARSE-G-VALUE-FOR-TYPE :AROUND (T T)) #.(SB-SYS:INT-SAP #X01F38E68) #<GTYPE :name "GError" :id 140228195051424>) [fast-method]
  8: ((SB-PCL::GF-DISPATCH GOBJECT::PARSE-G-VALUE-FOR-TYPE) #.(SB-SYS:INT-SAP #X01F38E68) #<GTYPE :name "GError" :id 140228195051424>)
  9: (GOBJECT:PARSE-G-VALUE #.(SB-SYS:INT-SAP #X01F38E68))
 10: (GOBJECT::PARSE-CLOSURE-ARGUMENTS 4 #.(SB-SYS:INT-SAP #X01F38E20))
 11: ((LAMBDA (GOBJECT::CLOSURE GOBJECT::RETURN-VALUE GOBJECT::COUNT-OF-ARGS GOBJECT::ARGS GOBJECT::INVOCATION-HINT GOBJECT::MARSHAL-DATA) :IN "/Users/jmercouris/.quicklisp/dists/quicklisp/software/cl-cffi..
 12: ((LAMBDA (SB-ALIEN::ARGS-POINTER SB-ALIEN::RESULT-POINTER FUNCTION) :IN "/Users/jmercouris/.quicklisp/dists/quicklisp/software/cl-cffi-gtk-20200427-git/gobject/gobject.signals.lisp") #<unavailable arg..
 13: ("foreign function: funcall_alien_callback")
 14: ("foreign function: #x2010073B")
 15: ("foreign function: #x1CB7E00")
 16: ("foreign function: signal_emit_unlocked_R")
 17: ("foreign function: g_signal_emit_valist")
 18: ("foreign function: g_signal_emit")
 19: ("foreign function: _Z23webkitWebViewLoadFailedP14_WebKitWebView15WebKitLoadEventPKcP7_GError")
 --more--

here is the relevant section of the API:
https://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebView.html#WebKitWebView-load-failed

In the Crategus repository, this problem has been fixed as of commit: b658905

Any ideas?

Can't build with Debian 8 on latest SBCL

http://report.quicklisp.org/2018-11-29/failure-report/cl-cffi-gtk.html has a build failure log. I get this:

; in: DEFINE-G-OBJECT-CLASS "GListStore"
;     (GOBJECT:DEFINE-G-OBJECT-CLASS "GListStore" GIO::G-LIST-STORE
;                                    (:SUPERCLASS GOBJECT:G-OBJECT :EXPORT T
;                                     :INTERFACES ("GListModel") :TYPE-INITIALIZER
;                                     "g_list_store_get_type")
;                                    ((GIO::ITEM-TYPE GIO::G-LIST-STORE-ITEM-TYPE
;                                      "item-type" "GType" T T)))
; 
; caught ERROR:
;   (during macroexpansion of (DEFINE-G-OBJECT-CLASS "GListStore" ...))
;   Unknown interface GListModel

What can I do?

Boxed conversion needs to be fixed

E.g. a property of type GVariantType (which is basically an alias for char*) will fail to properly be translated onto the Lisp side. A bad fix (leaking memory) for this one particular case would be:

(defmethod parse-g-value-for-type (gvalue-ptr
                                   (type-numeric (eql (gtype "GBoxed"))))
  (if (g-type= (g-value-type gvalue-ptr) (g-type-strv))
      (convert-from-foreign (g-value-get-boxed gvalue-ptr)
                            '(g-strv :free-from-foreign nil))
      (let* ((boxed-type
               (get-g-boxed-foreign-info-for-gtype (g-value-type gvalue-ptr)))
             (result (boxed-parse-g-value gvalue-ptr boxed-type)))
        (if (g-type= (g-value-type gvalue-ptr) (g-type-from-name "GVariantType"))
            (g-variant-type-copy result)
            result))))

Basically copying the boxed value, which would otherwise be unref-ed and therefore could point to invalid memory once examined on the Lisp side.

It seems like one more case of having to specify :free-from-foreign/:free-to-foreign depending on the situation (if the boxed value is static there might be no need?). Alternatively the conversion could be done before the boxed value is being invalidated?

Tests fail: Unhandled memory fault at #x0.

I'm trying to package cl-cffi-gtk for Guix but tests are failing:

; compiling (TEST G-SIGNAL-HAS-HANDLER-PENDING ...)

; /gnu/store/3147aza1waksp76pllkifskyym4wmqvg-sbcl-cl-cffi-gtk-0.11.2-1.29443c5/lib/sbcl/test/rtest-gobject-signals-tmpX2JYJDQE.fasl written
; compilation finished in 0:00:00.002
CORRUPTION WARNING in SBCL pid 17(tid 0x7ffff7ff41c0):
Memory fault at (nil) (pc=0x7ffff1339339, sp=0x7ffff6e05b90)
The integrity of this image is possibly compromised.
Continuing with fingers crossed.
Unhandled SB-SYS:MEMORY-FAULT-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING
                                                 {10005585B3}>:
  Unhandled memory fault at #x0.

Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {10005585B3}>
0: (SB-DEBUG::DEBUGGER-DISABLED-HOOK #<SB-SYS:MEMORY-FAULT-ERROR {1002DA6433}> #<unused argument> :QUIT T)
1: (SB-DEBUG::RUN-HOOK SB-EXT:*INVOKE-DEBUGGER-HOOK* #<SB-SYS:MEMORY-FAULT-ERROR {1002DA6433}>)
2: (INVOKE-DEBUGGER #<SB-SYS:MEMORY-FAULT-ERROR {1002DA6433}>)
3: (ERROR SB-SYS:MEMORY-FAULT-ERROR :ADDRESS 0)
4: (SB-SYS:MEMORY-FAULT-ERROR #<unused argument> #.(SB-SYS:INT-SAP #X00000000))
5: ("foreign function: call_into_lisp")
6: ("foreign function: funcall2")
7: ("foreign function: handle_memory_fault_emulation_trap")
8: ("foreign function: handle_trap")
9: ("foreign function: #x41ABC3")
10: (GOBJECT::CALL-GOBJECT-CONSTRUCTOR "GtkButton" NIL NIL NIL)
11: (GOBJECT::CREATE-GOBJECT-FROM-CLASS #<GOBJECT-CLASS GTK:GTK-BUTTON> NIL)
12: ((:METHOD MAKE-INSTANCE (GOBJECT-CLASS)) #<GOBJECT-CLASS GTK:GTK-BUTTON>) [fast-method]
13: (SB-FASL::LOAD-FASL-GROUP #S(SB-FASL::FASL-INPUT :STREAM #<SB-SYS:FD-STREAM for "file /gnu/store/3147aza1waksp76pllkifskyym4wmqvg-sbcl-cl-cffi-gtk-0.11.2-1.29443c5/lib/sbcl/test/rtest-gobject-signals.fasl" {1002D94E93}> :TABLE #(65 SET *PACKAGE* "GTK-TESTSUITE" #<PACKAGE "IT.BESE.FIVEAM"> MAKE-SUITE #<PACKAGE "GTK-TESTSUITE"> GOBJECT-SIGNALS :IN GOBJECT-SUITE GET-TEST SETF ...) :STACK #(0 MAKE-INSTANCE GTK-BUTTON NIL (SB-INT:SFUNCTION NIL NULL) NIL NULL :IN 21424 CERROR 19128 GET-TEST ...) :NAME-BUFFER #("\0" "GTK-BUTTONNCEG-FUN-TOPLEVEL\0\0\0\0") :DEPRECATED-STUFF NIL :SKIP-UNTIL NIL) NIL)
14: (SB-FASL::LOAD-AS-FASL #<SB-SYS:FD-STREAM for "file /gnu/store/3147aza1waksp76pllkifskyym4wmqvg-sbcl-cl-cffi-gtk-0.11.2-1.29443c5/lib/sbcl/test/rtest-gobject-signals.fasl" {1002D94E93}> NIL NIL)
15: ((FLET SB-FASL::THUNK :IN LOAD))
16: (SB-FASL::CALL-WITH-LOAD-BINDINGS #<CLOSURE (FLET SB-FASL::THUNK :IN LOAD) {7FFFF6E067CB}> #<SB-SYS:FD-STREAM for "file /gnu/store/3147aza1waksp76pllkifskyym4wmqvg-sbcl-cl-cffi-gtk-0.11.2-1.29443c5/lib/sbcl/test/rtest-gobject-signals.fasl" {1002D94E93}>)
17: ((FLET SB-FASL::LOAD-STREAM :IN LOAD) #<SB-SYS:FD-STREAM for "file /gnu/store/3147aza1waksp76pllkifskyym4wmqvg-sbcl-cl-cffi-gtk-0.11.2-1.29443c5/lib/sbcl/test/rtest-gobject-signals.fasl" {1002D94E93}> T)
18: (LOAD #P"/gnu/store/3147aza1waksp76pllkifskyym4wmqvg-sbcl-cl-cffi-gtk-0.11.2-1.29443c5/lib/sbcl/test/rtest-gobject-signals.fasl" :VERBOSE NIL :PRINT NIL :IF-DOES-NOT-EXIST T :EXTERNAL-FORMAT :DEFAULT)
19: (UIOP/UTILITY:CALL-WITH-MUFFLED-CONDITIONS #<CLOSURE (LAMBDA NIL :IN UIOP/LISP-BUILD:LOAD*) {1002D938EB}> ("Overwriting already existing readtable ~S." #(#:FINALIZERS-OFF-WARNING :ASDF-FINALIZERS)))
20: ((SB-PCL::EMF ASDF/ACTION:PERFORM) #<unused argument> #<unused argument> #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "cl-cffi-gtk-test" "rtest-gobject-signals">)
21: ((LAMBDA NIL :IN ASDF/ACTION:CALL-WHILE-VISITING-ACTION))
22: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS (ASDF/LISP-ACTION:LOAD-OP ASDF/LISP-ACTION:CL-SOURCE-FILE)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "cl-cffi-gtk-test" "rtest-gobject-signals">) [fast-method]
23: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS :AROUND (T T)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "cl-cffi-gtk-test" "rtest-gobject-signals">) [fast-method]
24: ((:METHOD ASDF/PLAN:PERFORM-PLAN (T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {1002325373}>) [fast-method]
25: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
26: ((:METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {1002325373}>) [fast-method]
27: ((:METHOD ASDF/OPERATE:OPERATE (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)) #<ASDF/LISP-ACTION:TEST-OP > #<ASDF/SYSTEM:SYSTEM "cl-cffi-gtk"> :PLAN-CLASS NIL :PLAN-OPTIONS NIL) [fast-method]
28: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> #<ASDF/LISP-ACTION:TEST-OP > #<ASDF/SYSTEM:SYSTEM "cl-cffi-gtk">)
29: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
30: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) #<ASDF/LISP-ACTION:TEST-OP > #<ASDF/SYSTEM:SYSTEM "cl-cffi-gtk">) [fast-method]
31: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> ASDF/LISP-ACTION:TEST-OP "cl-cffi-gtk")
32: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
33: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:TEST-OP "cl-cffi-gtk") [fast-method]
34: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<CLOSURE (LAMBDA NIL :IN ASDF/OPERATE:OPERATE) {10021BAA2B}> :OVERRIDE T :KEY NIL :OVERRIDE-CACHE T :OVERRIDE-FORCING NIL)
35: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
36: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<CLOSURE (LAMBDA NIL :IN ASDF/OPERATE:OPERATE) {10041D7B0B}> :OVERRIDE NIL :KEY NIL :OVERRIDE-CACHE NIL :OVERRIDE-FORCING NIL)
37: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:TEST-OP "cl-cffi-gtk") [fast-method]
38: (ASDF/OPERATE:TEST-SYSTEM "cl-cffi-gtk")
39: (SB-INT:SIMPLE-EVAL-IN-LEXENV (ASDF/OPERATE:TEST-SYSTEM "cl-cffi-gtk") #<NULL-LEXENV>)
40: (EVAL (ASDF/OPERATE:TEST-SYSTEM "cl-cffi-gtk"))
41: (SB-IMPL::PROCESS-EVAL/LOAD-OPTIONS ((:EVAL . "(require :asdf)") (:EVAL . #<(SIMPLE-ARRAY CHARACTER (344)) (let ((*package* (find-package :asdf))) (load "/gnu/store/3147aza1waksp76pllkifskyym4wmqvg-sbcl-cl-cffi-gtk-0.11.2-1.29443c5/share/common-lisp/sbcl-source/cl-cffi-gtk/gtk/cl-cffi-gtk.asd") (load "/gnu... {1001C2D0BF}>) (:EVAL . "(asdf:test-system \"cl-cffi-gtk\")") (:QUIT)))
42: (SB-IMPL::TOPLEVEL-INIT)
43: ((FLET SB-UNIX::BODY :IN SB-EXT:SAVE-LISP-AND-DIE))
44: ((FLET "WITHOUT-INTERRUPTS-BODY-27" :IN SB-EXT:SAVE-LISP-AND-DIE))
45: ((LABELS SB-IMPL::RESTART-LISP :IN SB-EXT:SAVE-LISP-AND-DIE))
; compiling (TEST G-SIGNAL-HAS-HANDLER-PENDING ...)

; /gnu/store/3147aza1waksp76pllkifskyym4wmqvg-sbcl-cl-cffi-gtk-0.11.2-1.29443c5/lib/sbcl/test/rtest-gobject-signals-tmpX2JYJDQE.fasl written
; compilation finished in 0:00:00.002
CORRUPTION WARNING in SBCL pid 17(tid 0x7ffff7ff41c0):
Memory fault at (nil) (pc=0x7ffff1339339, sp=0x7ffff6e05b90)
The integrity of this image is possibly compromised.
Continuing with fingers crossed.
Unhandled SB-SYS:MEMORY-FAULT-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING
                                                 {10005585B3}>:
  Unhandled memory fault at #x0.

Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {10005585B3}>
0: (SB-DEBUG::DEBUGGER-DISABLED-HOOK #<SB-SYS:MEMORY-FAULT-ERROR {1002DA6433}> #<unused argument> :QUIT T)
1: (SB-DEBUG::RUN-HOOK SB-EXT:*INVOKE-DEBUGGER-HOOK* #<SB-SYS:MEMORY-FAULT-ERROR {1002DA6433}>)
2: (INVOKE-DEBUGGER #<SB-SYS:MEMORY-FAULT-ERROR {1002DA6433}>)
3: (ERROR SB-SYS:MEMORY-FAULT-ERROR :ADDRESS 0)
4: (SB-SYS:MEMORY-FAULT-ERROR #<unused argument> #.(SB-SYS:INT-SAP #X00000000))
5: ("foreign function: call_into_lisp")
6: ("foreign function: funcall2")
7: ("foreign function: handle_memory_fault_emulation_trap")
8: ("foreign function: handle_trap")
9: ("foreign function: #x41ABC3")
10: (GOBJECT::CALL-GOBJECT-CONSTRUCTOR "GtkButton" NIL NIL NIL)
11: (GOBJECT::CREATE-GOBJECT-FROM-CLASS #<GOBJECT-CLASS GTK:GTK-BUTTON> NIL)
12: ((:METHOD MAKE-INSTANCE (GOBJECT-CLASS)) #<GOBJECT-CLASS GTK:GTK-BUTTON>) [fast-method]
13: (SB-FASL::LOAD-FASL-GROUP #S(SB-FASL::FASL-INPUT :STREAM #<SB-SYS:FD-STREAM for "file /gnu/store/3147aza1waksp76pllkifskyym4wmqvg-sbcl-cl-cffi-gtk-0.11.2-1.29443c5/lib/sbcl/test/rtest-gobject-signals.fasl" {1002D94E93}> :TABLE #(65 SET *PACKAGE* "GTK-TESTSUITE" #<PACKAGE "IT.BESE.FIVEAM"> MAKE-SUITE #<PACKAGE "GTK-TESTSUITE"> GOBJECT-SIGNALS :IN GOBJECT-SUITE GET-TEST SETF ...) :STACK #(0 MAKE-INSTANCE GTK-BUTTON NIL (SB-INT:SFUNCTION NIL NULL) NIL NULL :IN 21424 CERROR 19128 GET-TEST ...) :NAME-BUFFER #("\0" "GTK-BUTTONNCEG-FUN-TOPLEVEL\0\0\0\0") :DEPRECATED-STUFF NIL :SKIP-UNTIL NIL) NIL)
14: (SB-FASL::LOAD-AS-FASL #<SB-SYS:FD-STREAM for "file /gnu/store/3147aza1waksp76pllkifskyym4wmqvg-sbcl-cl-cffi-gtk-0.11.2-1.29443c5/lib/sbcl/test/rtest-gobject-signals.fasl" {1002D94E93}> NIL NIL)
15: ((FLET SB-FASL::THUNK :IN LOAD))
16: (SB-FASL::CALL-WITH-LOAD-BINDINGS #<CLOSURE (FLET SB-FASL::THUNK :IN LOAD) {7FFFF6E067CB}> #<SB-SYS:FD-STREAM for "file /gnu/store/3147aza1waksp76pllkifskyym4wmqvg-sbcl-cl-cffi-gtk-0.11.2-1.29443c5/lib/sbcl/test/rtest-gobject-signals.fasl" {1002D94E93}>)
17: ((FLET SB-FASL::LOAD-STREAM :IN LOAD) #<SB-SYS:FD-STREAM for "file /gnu/store/3147aza1waksp76pllkifskyym4wmqvg-sbcl-cl-cffi-gtk-0.11.2-1.29443c5/lib/sbcl/test/rtest-gobject-signals.fasl" {1002D94E93}> T)
18: (LOAD #P"/gnu/store/3147aza1waksp76pllkifskyym4wmqvg-sbcl-cl-cffi-gtk-0.11.2-1.29443c5/lib/sbcl/test/rtest-gobject-signals.fasl" :VERBOSE NIL :PRINT NIL :IF-DOES-NOT-EXIST T :EXTERNAL-FORMAT :DEFAULT)
19: (UIOP/UTILITY:CALL-WITH-MUFFLED-CONDITIONS #<CLOSURE (LAMBDA NIL :IN UIOP/LISP-BUILD:LOAD*) {1002D938EB}> ("Overwriting already existing readtable ~S." #(#:FINALIZERS-OFF-WARNING :ASDF-FINALIZERS)))
20: ((SB-PCL::EMF ASDF/ACTION:PERFORM) #<unused argument> #<unused argument> #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "cl-cffi-gtk-test" "rtest-gobject-signals">)
21: ((LAMBDA NIL :IN ASDF/ACTION:CALL-WHILE-VISITING-ACTION))
22: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS (ASDF/LISP-ACTION:LOAD-OP ASDF/LISP-ACTION:CL-SOURCE-FILE)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "cl-cffi-gtk-test" "rtest-gobject-signals">) [fast-method]
23: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS :AROUND (T T)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "cl-cffi-gtk-test" "rtest-gobject-signals">) [fast-method]
24: ((:METHOD ASDF/PLAN:PERFORM-PLAN (T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {1002325373}>) [fast-method]
25: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
26: ((:METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {1002325373}>) [fast-method]
27: ((:METHOD ASDF/OPERATE:OPERATE (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)) #<ASDF/LISP-ACTION:TEST-OP > #<ASDF/SYSTEM:SYSTEM "cl-cffi-gtk"> :PLAN-CLASS NIL :PLAN-OPTIONS NIL) [fast-method]
28: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> #<ASDF/LISP-ACTION:TEST-OP > #<ASDF/SYSTEM:SYSTEM "cl-cffi-gtk">)
29: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
30: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) #<ASDF/LISP-ACTION:TEST-OP > #<ASDF/SYSTEM:SYSTEM "cl-cffi-gtk">) [fast-method]
31: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> ASDF/LISP-ACTION:TEST-OP "cl-cffi-gtk")
32: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
33: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:TEST-OP "cl-cffi-gtk") [fast-method]
34: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<CLOSURE (LAMBDA NIL :IN ASDF/OPERATE:OPERATE) {10021BAA2B}> :OVERRIDE T :KEY NIL :OVERRIDE-CACHE T :OVERRIDE-FORCING NIL)
35: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
36: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<CLOSURE (LAMBDA NIL :IN ASDF/OPERATE:OPERATE) {10041D7B0B}> :OVERRIDE NIL :KEY NIL :OVERRIDE-CACHE NIL :OVERRIDE-FORCING NIL)
37: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:TEST-OP "cl-cffi-gtk") [fast-method]
38: (ASDF/OPERATE:TEST-SYSTEM "cl-cffi-gtk")
39: (SB-INT:SIMPLE-EVAL-IN-LEXENV (ASDF/OPERATE:TEST-SYSTEM "cl-cffi-gtk") #<NULL-LEXENV>)
40: (EVAL (ASDF/OPERATE:TEST-SYSTEM "cl-cffi-gtk"))
41: (SB-IMPL::PROCESS-EVAL/LOAD-OPTIONS ((:EVAL . "(require :asdf)") (:EVAL . #<(SIMPLE-ARRAY CHARACTER (344)) (let ((*package* (find-package :asdf))) (load "/gnu/store/3147aza1waksp76pllkifskyym4wmqvg-sbcl-cl-cffi-gtk-0.11.2-1.29443c5/share/common-lisp/sbcl-source/cl-cffi-gtk/gtk/cl-cffi-gtk.asd") (load "/gnu... {1001C2D0BF}>) (:EVAL . "(asdf:test-system \"cl-cffi-gtk\")") (:QUIT)))
42: (SB-IMPL::TOPLEVEL-INIT)
43: ((FLET SB-UNIX::BODY :IN SB-EXT:SAVE-LISP-AND-DIE))
44: ((FLET "WITHOUT-INTERRUPTS-BODY-27" :IN SB-EXT:SAVE-LISP-AND-DIE))
45: ((LABELS SB-IMPL::RESTART-LISP :IN SB-EXT:SAVE-LISP-AND-DIE))

Can anyone reproduce?

Connect the signals to the protocol of a class

If you would have:

dialog.glade

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
  <requires lib="gtk+" version="3.20"/>
  <object class="GtkDialog" id="dialog">
    <property name="can_focus">False</property>
    <property name="type_hint">dialog</property>
    <child>
      <placeholder/>
    </child>
    <child internal-child="vbox">
      <object class="GtkBox">
        <property name="can_focus">False</property>
        <property name="orientation">vertical</property>
        <property name="spacing">2</property>
        <child internal-child="action_area">
          <object class="GtkButtonBox">
            <property name="can_focus">False</property>
            <property name="layout_style">end</property>
            <child>
              <object class="GtkButton" id="cancel">
                <property name="label">gtk-cancel</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="use_stock">True</property>
              </object>
              <packing>
                <property name="expand">True</property>
                <property name="fill">True</property>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="apply">
                <property name="label">gtk-apply</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="use_stock">True</property>
              </object>
              <packing>
                <property name="expand">True</property>
                <property name="fill">True</property>
                <property name="position">1</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">False</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkBox">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="orientation">vertical</property>
            <property name="spacing">5</property>
            <child>
              <object class="GtkLabel" id="label">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="label" translatable="yes">label</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button">
                <property name="label">gtk-yes</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="use_stock">True</property>
                <signal name="clicked" handler="saludo" swapped="no"/>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">1</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="padding">5</property>
            <property name="position">1</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

and this piece of code:

(ql:quickload :cl-cffi-gtk)

(defpackage :aplicacion
  (:use :gtk :gdk :gdk-pixbuf :gobject
	:glib :gio :pango :cairo :common-lisp))

(in-package :aplicacion)

(defclass beer ()
  ((widget :initarg :widget :initform nil :accessor widget)
   (boton :initarg :boton :initform nil :accessor boton)))

(defgeneric cheers (beer))

(defmethod cheers ((instance beer))
  (format t "Click!~%"))

(defmethod initialize-instance :after ((instance beer) &key)
  (let ((builder (make-instance 'gtk-builder)))
    (gtk-builder-add-from-file builder "dialog.glade")
    (setf (widget instance) (gtk-builder-get-object builder "dialog"))
    (setf (boton instance) (gtk-builder-get-object builder "button")))
  (g-signal-connect (widget instance) "destroy" (lambda (msg) (declare (ignore msg)) (leave-gtk-main)))
  (g-signal-connect (boton instance) "clicked" (lambda (msg) (declare (ignore msg) (cheers instance)))))

(within-main-loop
 (let ((app (make-instance 'beer)))
   (gtk-widget-show-all (widget app))))

How would you connect the "clicked" signal to the cheers function of the class' protocol without actually using anonymous functions (just like the gtk-builder-connect-signals function to the package does)?

g-action: No applicable method: G-BOXED-OPAQUE-POINTER

I'd like to create a GAction:
https://developer.gnome.org/gio/stable/GSimpleAction.html

I did this:

(gio:g-simple-action-new  "foo" glib:+g-variant-type-any+ )

which raised

There is no applicable method for the generic function
  #<STANDARD-GENERIC-FUNCTION GOBJECT::G-BOXED-OPAQUE-POINTER (1)>
when called with arguments
  ("*").
   [Condition of type SB-PCL::NO-APPLICABLE-METHOD-ERROR]

Backtrace:
 0: ((:METHOD NO-APPLICABLE-METHOD (T)) #<STANDARD-GENERIC-FUNCTION GOBJECT::G-BOXED-OPAQUE-POINTER (1)> "*") [fast-method]
 1: (SB-PCL::CALL-NO-APPLICABLE-METHOD #<STANDARD-GENERIC-FUNCTION GOBJECT::G-BOXED-OPAQUE-POINTER (1)> ("*"))
 2: ((:METHOD CFFI:TRANSLATE-TO-FOREIGN (T GOBJECT::BOXED-OPAQUE-FOREIGN-TYPE)) "*" #<GOBJECT::BOXED-OPAQUE-FOREIGN-TYPE {1004035383}>) [fast-method]
 3: ((:METHOD GOBJECT::BOXED-SET-G-VALUE (T GOBJECT::G-BOXED-OPAQUE-WRAPPER-INFO T)) #.(SB-SYS:INT-SAP #X7F093C11A708) #S(GOBJECT::G-BOXED-OPAQUE-WRAPPER-INFO :NAME GLIB:G-VARIANT-TYPE :TYPE "GVariantType..
 4: (GOBJECT::CALL-GOBJECT-CONSTRUCTOR "GSimpleAction" ("parameter-type" "name") ("*" "foo") (NIL NIL))
 5: (GOBJECT::CREATE-GOBJECT-FROM-CLASS #<GOBJECT:GOBJECT-CLASS GIO:G-SIMPLE-ACTION> (:NAME "foo" :PARAMETER-TYPE "*"))
 6: ((:METHOD MAKE-INSTANCE (GOBJECT:GOBJECT-CLASS)) #<GOBJECT:GOBJECT-CLASS GIO:G-SIMPLE-ACTION> :NAME "foo" :PARAMETER-TYPE "*") [fast-method]
 7: (SB-INT:SIMPLE-EVAL-IN-LEXENV (GIO:G-SIMPLE-ACTION-NEW "foo" GLIB:+G-VARIANT-TYPE-ANY+) #<NULL-LEXENV>)
 8: (EVAL (GIO:G-SIMPLE-ACTION-NEW "foo" GLIB:+G-VARIANT-TYPE-ANY+))
 9: ((LAMBDA NIL :IN SLYNK-MREPL::MREPL-EVAL-1))
 --more--

Am I doing something wrong? Bug?

munmap_chunk(): invalid pointer

Nyxt crashes when loading web pages, see
atlas-engineer/nyxt#1251 (comment):

<INFO> [13:55:44] Loading "https://startpage.com/".
munmap_chunk(): invalid pointer
Unhandled SB-INT:SIMPLE-PROGRAM-ERROR in thread #<SB-THREAD:THREAD "cl-cffi-gtk main thread" RUNNING
                                                   {100780E733}>:
  invalid number of arguments: 1

Backtrace for: #<SB-THREAD:THREAD "cl-cffi-gtk main thread" RUNNING {100780E733}>
0: ((LAMBDA (NYXT::WEB-VIEW USER-DATA) :IN FFI-BUFFER-MAKE) #<CL-WEBKIT2:WEBKIT-WEB-VIEW {100F882A53}>) [external]
1: (GOBJECT::CALL-WITH-RESTARTS #<FUNCTION (LAMBDA (NYXT::WEB-VIEW USER-DATA) :IN FFI-BUFFER-MAKE) {5222560B}> (#<CL-WEBKIT2:WEBKIT-WEB-VIEW {100F882A53}>))
2: ((LAMBDA (GOBJECT::CLOSURE GOBJECT::RETURN-VALUE GOBJECT::COUNT-OF-ARGS GOBJECT::ARGS GOBJECT::INVOCATION-HINT GOBJECT::MARSHAL-DATA) :IN "/gnu/store/rackncfj42yzd9v3gk2pyhlnaqgfwgq3-sbcl-cl-cffi-gtk-0.11.2-3.c4d5396/share/common-lisp/sbcl/cl-cffi-gtk/gobject/gobject.signals.lisp") #.(SB-SYS:INT-SAP #X7F33602F3990) #.(SB-SYS:INT-SAP #X7F336F316200) 1 #.(SB-SYS:INT-SAP #X7F336F3162B0) #<unused argument> #<unused argument>)
3: ((LAMBDA (SB-ALIEN::ARGS-POINTER SB-ALIEN::RESULT-POINTER FUNCTION) :IN "/gnu/store/rackncfj42yzd9v3gk2pyhlnaqgfwgq3-sbcl-cl-cffi-gtk-0.11.2-3.c4d5396/share/common-lisp/sbcl/cl-cffi-gtk/gobject/gobject.signals.lisp") #<unavailable argument> #<unavailable argument> #<unavailable argument>)
4: ("foreign function: funcall_alien_callback")
5: ("foreign function: callback_wrapper_trampoline")
6: ("foreign function: #x5010086B")
7: ((LAMBDA NIL :IN GTK:ENSURE-GTK-MAIN))
8: ((LAMBDA NIL :IN BORDEAUX-THREADS::BINDING-DEFAULT-SPECIALS))
9: ((FLET SB-UNIX::BODY :IN SB-THREAD::RUN))
10: ((FLET "WITHOUT-INTERRUPTS-BODY-11" :IN SB-THREAD::RUN))
11: ((FLET SB-UNIX::BODY :IN SB-THREAD::RUN))
12: ((FLET "WITHOUT-INTERRUPTS-BODY-4" :IN SB-THREAD::RUN))
13: (SB-THREAD::RUN)
14: ("foreign function: call_into_lisp")
15: ("foreign function: funcall1")

This does not happen on e9a46df.

The crash occurs with c4d5396, so I guess the issue was introduced in just one of the last few commits.

Any idea?

How to add context menu actions?

This might be more of a GTK question than a Common Lisp question, but allow me to post here, just in case.
I'm trying to create a custom context menu in WebKitGTK (using cl-webkit).

A simple attempt:

; Helper to populate the browser "context-menu-entries" slot:
(defun make-context-menu-entries ()
	(let ((foo-action (gio:g-simple-action-new
										 "foo"
										 (glib:g-variant-type-new glib:+g-variant-type-maybe+))))

		(gobject:g-signal-connect
		 foo-action "activate"
		 (lambda (action parameter)
			 (declare (ignore action parameter))
			 (log:info "foo action")))

		(gio:g-simple-action-set-enabled foo-action t)

		(list :foo
					(webkit:webkit-context-menu-item-new-from-gaction
					 foo-action
					 "Do foo"
					 (cffi:null-pointer)))))

; Initialize the web view:
; ...
(gobject:g-signal-connect (gtk-object buffer) "context-menu"

	 (lambda (web-view context-menu event hit-test-result)
		 (declare (ignore web-view event hit-test-result))

		 (webkit:webkit-context-menu-append
			context-menu
			(getf (context-menu-entries *browser*) :foo))
		 ;; Return nil to show the context menu.
		 nil))

It works and shows "Do foo" in the context menu; sadly, it's greyed out.
It seems that g-simple-action-set-enabled does not do what I
think it does.

Any clue what I'm missing?

C-v hangs cl-webkit view

With cl-webkit 79ad41996a1bd7fc8e53fe8d168e8f2030603b14, pressing "C-v" in a web view input field hangs the window (it can only be force-killed).

Also see atlas-engineer/nyxt#593.

I can only reproduce this issue on February 2020 Quickdist.

With Guix which hash its own versioning of Common Lisp libraries, the issue does not happen.
cl-webkit is at the same commit, however cl-cffi-gtk is at commit 29443c5.

Any clue what could be wrong?

If not cl-cffi-gtk, maybe another library?

:free-from-foreign shouldn't have a default value.

The right values for :free-from-foreign and :free-to-foreign are likely always up to the specific function contract. Failure to get this right will either leak memory, or, worse, cause memory corruption (by double free mostly) because the Lisp isn't supposed to e.g. touch the nodes in a GList.

Thus, having found at least one incorrect value, we'll have to check each current one, specify a value if none was given, and set the default :initform to something like (error ...) to ensure that a developer will have to think about this.

Thread-safety issues in gobject

As I have been working on a GTK backend for McCLIM, I have had regular deadlocks. As I have been investigating the root cause of these deadlocks, I believe I understand what is going on. However, a fix is complicated which is why I'm opening this issue so that I fill in some of the banks in my understanding before I start working on this.

The deadlock happens because I am creating gobject instances in one thread (in this case the repl thread). This results in *foreign-gobjects-lock* being held. While this lock is being held, it then tries to acquire *gobject-gc-hooks-lock*. However, this second lock is already held by the GTK thread.

Now, while *gobject-gc-hooks-lock* was held by the GTK thread, the finaliser kicked in, and the first thing the finaliser tries to do is to acquire *foreign-gobjects-lock* which is already held by the repl thread, resulting in a deadlock.

The simplest workaround I can think of, which I haven't tried yet, is to merge these two locks into a single one. This should fix this most common cause of this issue. However, it's not a proper solution since the issue could happen with any lock being held while the finaliser is run. *gobject-gc-hooks-lock* just happens to be the most common one, since it's used very often.

The ideal solution would be to get rid of the lock in the finaliser. This is where I am not able to suggest a solution since I don't fully understand the architecture.

Another issue I have noted is that a lot of the global variables that control these things are accessed without holding any locks. This can read to corrupt data (especially on non-Intel architectures that has a much more relaxed cache guarantees).

Have these issues been discussed in the past?

Transparent window drawing issue on Linux

I have been trying, without success, to create a transparent window which appears supported per http://www.crategus.com/books/cl-cffi-gtk/pages/gtk_class_gtk-window.html and http://www.crategus.com/books/cl-cffi-gtk/pages/gtk_fun_gtk-widget-opacity.html. The problem is that the window is drawn completely opaque on my desktop. However, when I switched from my desktop to a laptop the same trivial window creation code worked perfectly:

(defun simple-overlay ()
   (within-main-loop
     (let ((window (make-instance 'gtk-window
                                  :type :toplevel
                                  :title "Test"
 				 :opacity 0.5
                                  :default-width 250
                                  :border-width 12)))
       ;; answers true on both systems...
       ;;(print (gtk-widget-is-composited window))
       ;; Connect a handler for the signal "destroy" to window.
       (g-signal-connect window "destroy"
                         (lambda (widget)
                           (declare (ignore widget))
                           (leave-gtk-main)))
       (gtk-widget-show-all window))))

After a bit of digging, the issue appears to be related to my desktop having an nVidia GPU, and as a result running the proprietary nVidia drivers with XOrg rather than Wayland on Linux. I've found several references to similar issues when running this combination of card/driver/display server with other software. The only workaround I've found so far appears to be to manually draw transparent widgets offscreen and then copy them onscreen.

It is entirely possible (probable?) that this is not a cl-cffi-gtk specific bug (possibly a GTK bug/limitation?) but regardless of where the issue resides, if it can't be resolved it would be nice if the issue, and any workaround, was documented in cl-cffi-gtk. It is at least a notable caveat for a rather common video configuration on Linux.

Properly reference class types in tests

C.f. #18 - the tests can fail if the classes haven't been initialised - the proper way might be to have a fixture that calls g-type-class-ref and -unref around the tests which use e.g. GtkButton without creating an instance before looking at signals and so on, obviously that would be a bit more logic for not a lot of gain, but it would be strictly more safe than relying on the GC not removing that class too early (although some comments in GLib/GObject seem to indicate that the instantiated classes shouldn't disappear again, "static types").

GIO TLS missing

Working with cl-webkit, I need to register GTlsCertificateFlags to receive the load-failed-with-tls-errors signal. Sadly cl-cffi-gtk does not have it.

I've registered it this way:

(define-g-flags "GTlsCertificateFlags" g-tls-certificate-flags
  (:export t
   :type-initializer "g_tls_client_connection_get_validation_flags")
  (:g-tls-certificate-unknown-ca 1)
  (:g-tls-certificate-bad-identity 2)
  (:g-tls-certificate-not-activated 4)
  (:g-tls-certificate-expired 8)
  (:g-tls-certificate-revoked 16)
  (:g-tls-certificate-insecure 32)
  (:g-tls-certificate-generic-error 64)
  (:g-tls-certificate-validate-all 128))

Can we add it to cl-cffi-gtk?

Microsoft Windows Freezing Fix?

Has there been any attempt to determine and patch the aforementioned freezing with window movement in Microsoft Windows? I realize that Windows is a closed source system that costs money to purchase. As unfortunate as that is, cl-cffi-gtk can't claim to be cross platform in the same way the original library is. Is it a matter of no developers having Windows? Is it a matter of SBCL not playing nice with threads on Windows? Would some payment for a patch be required?

compile-bundle-op hangs the program after ~10 minutes

When running Next from the Guix build, it hangs after 10 minutes (in my experience, it varies from 250s to 600s).

Turns out that if I use the cl-cffi-gtk (source) dependency instead of the sbcl-cl-cffi-gtk dependency, I fix the hang.
In Guix, sbcl-cl-cffi-gtk is a pre-build done using ASDF's compile-bundle-op. So it may be that this build operation breaks cl-cffi-gtk somehow.

I haven't tested without a cl-webkit webview, so it's also possible that cl-webkit interferes here. Not that I can build Next with sbcl-cl-webkit and it works fine.

See
atlas-engineer/nyxt#680 for a discussion.

Backporting commits.

Should:

Non-exhaustive. It's actually quite a long list of small fixes over the time.

Actually might be easier to compare before after side by side and make new commits if things changed.

Probably not:

  • GStreamer
  • OpenGL things

As a user I want to have a graphical debugger interface,

because I don't want to rely on Slime or the native interface when I don't have the terminal open.

Should be "really easy." Unfortunately it's not though. Needs likely to have another main loop open and at least would allow you to select a restart without any input. N.b. the CL standard is pretty bad with regards to streams as main input, so either that would need some hacks around providing textual input, or support from the underlying Lisp implementation!

Can't use positive Response ID's in GtkDialog

gtk-response-type is defined as a foreign enum with fixed negative values.
But GTK Docs says all positive values or allowed and are reserved to the user.
The way gtk-response-type is implemented in gtk/gtk.dialog.lisp prevents this.
You get an error when setting response ID or if one is returned not within scope of:
"... is not defined as a value for enum type #<CFFI::FOREIGN-ENUM GTK:GTK-RESPONSE-TYPE>."
For example, in a signal handler for a custom widget in a dialog:

(defun preferencs->apply (widget)
  (declare (ignore widget))
  (format t "Applying Preferencs~%!")
  (gtk-dialog-response (get-handle :preferences :dialog) 1)

Errors when selecting the button associated with this callback.

Is there a way to define it so we can still use the enum technique on responses and when passing, but also allow user defined values?

Might require the defcfun function being used indirectly...
like

(defcfun ("gtk_dialog_response" %gtk-dialog-response) :void
  (dialog (g-object gtk-dialog))
  (response-id :int))

(defun gtk-dialog-response (dialog response-id)
  (%gtk-dialog-response
   dialog
   (case response-id
     (:none -1)
     (:reject -2)
     (:accept -3)
     (:delete-event -4)
     (:ok -5)
     (:cancel -6)
     (:close -7)
     (:yes -8)
     (:no -9)
     (:apply -10)
     (:help -11)
     (t response-id))))

(export 'gtk-dialog-response)

(defcfun ("gtk_dialog_run" %gtk-dialog-run) :int
  (dialog (g-object gtk-dialog)))

(defun gtk-dialog-run (dialog)
  (let ((response (%gtk-dialog-run dialog)))
    (case response
      (-1 :none)
      (-2 :reject)
      (-3 :accept)
      (-4 :delete-event)
      (-5 :ok)
      (-6 :cancel)
      (-7 :close)
      (-8 :yes)
      (-9 :no)
      (-10 :apply)
      (-11 :help)
      (t response))))

(export 'gtk-dialog-run)

There are other functions with the same problem.

Save-lisp-and-die doesn't work for me with this package.

I made a simple 2048 game with this package (nice one, btw). While for all "console" scripts save-lisp-and-die works fine, here it just produces a script which does absolutely nothing. Maybe this is a well-known issue? I can even send my whole code for further investigation.

Failed to build for Quicklisp dist

Building with SBCL 2.0.9.5-442f54894 / ASDF 3.3.1 for quicklisp dist creation.

Commit id e9a46df

cl-cffi-gtk-demo-gdk fails to build with the following error:

Unhandled SB-SYS:MEMORY-FAULT-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING {100E970993}>: Unhandled memory fault at #x18.

cl-cffi-gtk-demo-gtk fails to build with the following error:

Unhandled SB-SYS:MEMORY-FAULT-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING {100E950103}>: Unhandled memory fault at #x18.

cl-cffi-gtk-test fails to build with the following error:

Unhandled SB-SYS:MEMORY-FAULT-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING {1001A50103}>: Unhandled memory fault at #x18.

Full log here

As a developer I want to easily inspect widgets in Slime,

in order to make my life easier.

Imagine having a GtkWindow subclass instance and you'd like to see it in Slime.

Also be able to travel up the widget hierarchy, if any.

Could be achieved by a global hotkey when a widget is focused, or under the mouse cursor. Or possibly establish a global popup menu?

Project status Jun 2019

@Ferada - are you still active here? I haven't checked in a while, and there is activity at the original repo. I know you've made a lot of fixes - are they merged upstream? Thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.