Fix #8034 - structs as ctor properties - need adding as default properties.
authorAlan <alan@roojs.com>
Wed, 14 Feb 2024 09:57:24 +0000 (17:57 +0800)
committerAlan <alan@roojs.com>
Wed, 14 Feb 2024 09:57:24 +0000 (17:57 +0800)
src/Palete/Gtk.vala

index e29f259..4827b2b 100644 (file)
@@ -75,10 +75,7 @@ namespace Palete {
                    //return typeof(this.comments[ns][what]) == 'undefined' ?  '' : this.comments[ns][what];
                }
 
-                       // does not handle implements...
-               public override GirObject? getClass(string ename)
-               {
-
+               public GirObject? loadGir (string ename) {
                        var es = ename.split(".");
                        if (es.length < 2) {
                                return null;
@@ -87,39 +84,33 @@ namespace Palete {
                        if (gir == null) {
                                return null;
                        }
-                       return gir.classes.get(es[1]);
-               
+                       return gir;
+                       
                }
+
+                       // does not handle implements...
+               public override GirObject? getClass(string ename)
+               {
+                       var es = ename.split(".");
+                       var gir = this.loadGir(ename);
+                       return gir  == null ? null : gir.classes.get(es[1]);
                
+               }
+                
                public  GirObject? getDelegate(string ename) 
                {
                        var es = ename.split(".");
-                       if (es.length < 2) {
-                               return null;
-                       }
-                       var gir = Gir.factory(this.project,es[0]);
-                       if (gir == null) {
-                               return null;
-                       }
-                       return gir.delegates.get(es[1]);
-               
+                       var gir = this.loadGir(ename);
+                       return gir  == null ? null : gir.delegates.get(es[1]);
                }
-
+               
                public  GirObject? getClassOrEnum(string ename)
                {
-
                        var es = ename.split(".");
-                       if (es.length < 2) {
-                               return null;
-                       }
-                       var gir = Gir.factory(this.project,es[0]);
-                       if (gir.classes.has_key(es[1])) {
-                               return gir.classes.get(es[1]);
-                       }
-                       if (gir.consts.has_key(es[1])) {
-                               return  gir.consts.get(es[1]);
-                       }
-                       return null;
+                       var gir = this.loadGir(ename);
+                       return gir  == null ? null : 
+                                       (gir.classes.has_key(es[1]) ?  gir.classes.get(es[1]) : gir.consts.get(es[1]) );
+                
                }
 
 
@@ -457,10 +448,14 @@ namespace Palete {
                           // GLib.debug("adding property from ctor : %s, %s, %s  [%s]", cname , prop.name, prop.type, sub == null ? "-" : sub.nodetype);
  
                            if (sub != null) { // can't add child classes here...
-                           
+                               if (sub.nodetype == "Struct") {
+                                       this.node_defaults.get(cname).set(prop.name, new JsRender.NodeProp.raw(prop.name, prop.type, ""));
+                                               continue;
+                               }
                                    GLib.debug("skipping ctor argument proprty is an object");
                                    continue;
                            }
+                            
                            sub = this.getDelegate(prop.type);
                             if (sub != null) { // can't add child classes here...
                                this.node_defaults.get(cname).set(prop.name, new JsRender.NodeProp.raw(prop.name, prop.type, sub.sig));