Vala doesn't currently support extension methods.  I'm not sure if it
ever will.  There have been some discussions, but TBH I think we all
have some mixed feelings—I know I do.

In Vala, you don't create aliases like you do with typedef in C, you
subclass.  So, you could do something like

        [Compact, CCode (cname = "xcb_connection_t")]
        public class Icccm : Xcb.Icccm { ... }

However, people with an Xcb.Icccm may have to cast to your subclass—once
that's done, it should work as expected (you can call methods of either
class).

The other option is to use static methods.  Remember, you can nest
namespaces, so you can do something like

        namespace Icccm {
          public static void foo (Xcb.Icccm self);
        }


-Evan


On Tue, 2013-12-17 at 23:50 +0100, rastersoft wrote:
> Hi all:
> 
> I'm working on the XCB VAPI files, and I have a problem. XCB is 
> subdivided in several parts: the core X protocol, utility functions and 
> extensions.
> 
> The core protocol creates a compact class, Connection, which represents 
> a xcb_connection_t structure, and all the functions for the XCB core 
> protocol are inside as methods of the Connection compact class.
> 
> Now I'm starting to implement several extensions and utility functions, 
> like ICCCM and Composite. The problem is that they are a collection of 
> functions that receives a xcb_connection_t structure as first parameter, 
> just like the core protocol ones. That means that they are like methods 
> of the Connection class. The problem is that they belongs to a different 
> library, which can be compiled or not in a project, so I think that I 
> should not add these extension methods inside the Connection class.
> 
> So the question is: is possible to create a VAPI file that depends of 
> another, and which adds methods to a class defined in that VAPI file?
> 
> If it is not possible, is there a way of doing an "alias" of a compact 
> class? This is: for the ICCCM methods, define an Icccm compact class 
> with a constructor that receives a Connection object, and what it does 
> is to create an alias of that Connection object under the type Icccm, so 
> all the ICCCM methods whould be inside that compact class.
> 
> (I tried to do that with:
> 
>      [Compact]
>      [CCode (cname = "xcb_connection_t", cprefix = "xcb_icccm_", 
> ref_function = "", unref_function = "")]
>      public class Icccm {
>          [CCode (cname = "xcb_connect")]
>          public Icccm (Connection conn) {
>              this = conn;
>          }
>      }
> 
> but returned an error)
> 
> Thanks.
> 

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
vala-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to