From 5fc417c46a9287f61994dd21d5a8729404e5a7e5 Mon Sep 17 00:00:00 2001 From: coloursofnoise <53288101+coloursofnoise@users.noreply.github.com> Date: Tue, 24 Nov 2020 23:25:33 -0800 Subject: [PATCH 01/11] Attempt at updating Clang scripts --- gen/gtk_auto_gen.jl | 6 +-- gen/gtk_consts_gen.jl | 26 ++++----- gen/gtk_get_set_gen.jl | 118 ++++++++++++++++++++--------------------- gen/gtk_list_gen.jl | 36 ++++++------- 4 files changed, 93 insertions(+), 93 deletions(-) diff --git a/gen/gtk_auto_gen.jl b/gen/gtk_auto_gen.jl index 83965441..c0eb4e2d 100644 --- a/gen/gtk_auto_gen.jl +++ b/gen/gtk_auto_gen.jl @@ -1,6 +1,6 @@ #!/usr/bin/env julia -import Clang, Clang.cindex +using Clang include("gtk_list_gen.jl") include("gtk_get_set_gen.jl") include("gtk_consts_gen.jl") @@ -37,10 +37,10 @@ let gtk_version = 3 if args[end] == '\n' args = args[1:end-1] end - args = ASCIIString[split(args,' ')...,cppargs...] + args = ascii.([split(args,' '); cppargs]) global gtk_h, gtk_macro_h cd(Sys.BINDIR) do - gtk_h = cindex.parse_header(header, diagnostics=true, args=args, flags=0x41) + gtk_h = parse_header(header, args=args, flags=0x41) |> getcursor end gboxpath = "gbox$(gtk_version)" gconstspath = "gconsts$(gtk_version)" diff --git a/gen/gtk_consts_gen.jl b/gen/gtk_consts_gen.jl index 286c2763..42f5b30f 100644 --- a/gen/gtk_consts_gen.jl +++ b/gen/gtk_consts_gen.jl @@ -3,11 +3,11 @@ function gen_consts(body, gtk_h) exports = Expr(:export) push!(body.args,exports) - tdecls = cindex.search(gtk_h, cindex.TypedefDecl) + tdecls = search(gtk_h, Clang.CXCursor_TypedefDecl) for tdecl in tdecls - ctype = cindex.getCanonicalType(cindex.getCursorType(tdecl)) - if isa(ctype,cindex.Enum) - name = cindex.spelling(tdecl) + ctype = canonical(type(tdecl)) + if isa(ctype, Enum) + name = spelling(tdecl) m = match(r"^(G\w+)$", name) if m === nothing continue @@ -16,13 +16,13 @@ function gen_consts(body, gtk_h) push!(exports.args, name) consts = Expr(:block) push!(body.args, Expr(:toplevel, Expr(:module, false, name, consts))) - children = cindex.children(cindex.getTypeDeclaration(ctype)) + children = children(typedecl(ctype)) mask = true - c1 = cindex.spelling(children[1]) + c1 = spelling(children[1]) splitc1 = split(c1,'_') prefix = length(splitc1) for child in children - c2 = cindex.spelling(child) + c2 = spelling(child) if !endswith(c2,"_MASK") mask = false end @@ -44,7 +44,7 @@ function gen_consts(body, gtk_h) lprefix += length(splitc1[i])+1 end for child in children - decl = cindex.spelling(child) + decl = spelling(child) if mask shortdecl = decl[lprefix:end-5] else @@ -63,13 +63,13 @@ function gen_consts(body, gtk_h) count += 1 end end - mdecls = cindex.search(gtk_h, cindex.MacroDefinition) + mdecls = search(gtk_h, Clang.CXCursor_MacroDefinition) for mdecl in mdecls - name = cindex.spelling(mdecl) + name = spelling(mdecl) if occursin(r"^G\w*[A-Za-z]$", name) - tokens = cindex.tokenize(mdecl) - if length(tokens) == 3 && isa(tokens[2], cindex.Literal) - tok2 = Clang.wrap_c.handle_macro_exprn(tokens, 2)[1] + tokens = tokenize(mdecl) + if length(tokens) == 3 && isa(tokens[2], Literal) + tok2 = Clang.handle_macro_exprn(tokens, 2)[1] tok2 = replace(tok2, "\$", "\\\$") push!(body.args, Expr(:const, Expr(:(=), Symbol(name), Meta.parse(tok2)))) else diff --git a/gen/gtk_get_set_gen.jl b/gen/gtk_get_set_gen.jl index 4c9022da..2fb1e2bc 100644 --- a/gen/gtk_get_set_gen.jl +++ b/gen/gtk_get_set_gen.jl @@ -124,31 +124,31 @@ const GtkBoxedMap = Set{Symbol}([ :GtkWidgetPath, ]) cl_to_jl = Dict( - cindex.VoidType => :Nothing, - cindex.BoolType => :Bool, - cindex.Char_U => :UInt8, - cindex.UChar => :Cuchar, - cindex.Char16 => :UInt16, - cindex.Char32 => :UInt32, - cindex.UShort => :UInt16, - cindex.UInt => :UInt32, - cindex.ULong => :Culong, - cindex.ULongLong => :Culonglong, - cindex.Char_S => :UInt8, - cindex.SChar => :UInt8, - cindex.WChar => :Char, - cindex.Short => :Int16, - cindex.IntType => :Cint, - cindex.Long => :Clong, - cindex.LongLong => :Clonglong, - cindex.Float => :Cfloat, - cindex.Double => :Cdouble, - cindex.LongDouble => :Float64, - cindex.Enum => :Cint, - cindex.UInt128 => :UInt128, - cindex.FirstBuiltin => :Nothing, + CLVoid => :Nothing, + CLBool => :Bool, + CLChar_U => :UInt8, + CLUChar => :Cuchar, + CLChar16 => :UInt16, + CLChar32 => :UInt32, + CLUShort => :UInt16, + CLUInt => :UInt32, + CLULong => :Culong, + CLULongLong => :Culonglong, + CLChar_S => :UInt8, + CLSChar => :UInt8, + CLWChar => :Char, + CLShort => :Int16, + CLInt => :Cint, + CLLong => :Clong, + CLLongLong => :Clonglong, + CLFloat => :Cfloat, + CLDouble => :Cdouble, + CLLongDouble => :Float64, + CLEnum => :Cint, + CLUInt128 => :UInt128, + CLFirstBuiltin => :Nothing, ) -c_typdef_to_jl = Dict{ASCIIString,Any}( +c_typdef_to_jl = Dict{String,Any}( "va_list" => :Nothing, "size_t" => :Csize_t, "ptrdiff_t" => :Cptrdiff_t, @@ -188,7 +188,7 @@ for typsym in values(c_typdef_to_jl) push!(reserved_names, typsym) end end -const gtklibname = Dict{ASCIIString,Any}( +const gtklibname = Dict{String,Any}( "gtk" => :(Gtk.libgtk), "gdk" => :(Gtk.libgdk), "gobject" => :(Gtk.GLib.libgobject), @@ -197,27 +197,27 @@ const gtklibname = Dict{ASCIIString,Any}( "deprecated" => nothing, ) -g_type_to_jl(ctype::cindex.Invalid) = :Nothing -g_type_to_jl(ctype::cindex.Unexposed) = :Nothing -function g_type_to_jl(ctype::cindex.Pointer) - typ = g_type_to_jl(cindex.pointee_type(ctype)) +g_type_to_jl(ctype::CLInvalid) = :Nothing +g_type_to_jl(ctype::CLUnexposed) = :Nothing +function g_type_to_jl(ctype::CLPointer) + typ = g_type_to_jl(pointee_type(ctype)) if typ == :Nothing return :(Ptr{Nothing}) end :(Ptr{$typ}) end -function g_type_to_jl(ctype::cindex.Typedef) - decl = cindex.getTypeDeclaration(ctype) - if isa(decl,cindex.NoDeclFound) +function g_type_to_jl(ctype::CLTypedef) + decl = typedecl(ctype) + if isa(decl,CLNoDeclFound) return :Nothing end - typname = cindex.spelling(decl) + typname = spelling(decl) if typname in keys(c_typdef_to_jl) return c_typdef_to_jl[typname] end - decl = g_type_to_jl(cindex.getTypedefDeclUnderlyingType(decl)) + decl = g_type_to_jl(underlying_type(decl)) if decl === :Nothing || decl === :Nothing - return g_type_to_jl(cindex.getCanonicalType(ctype)) + return g_type_to_jl(canonical(ctype)) end decl end @@ -229,14 +229,14 @@ function g_get_gtype(ctype) if is_gbool(ctype) return :Bool end - if !isa(ctype, cindex.Pointer) + if !isa(ctype, CLPointer) return :Nothing end - arg1ty = cindex.pointee_type(ctype) - if !isa(arg1ty, cindex.Typedef) + arg1ty = pointee_type(ctype) + if !isa(arg1ty, CLTypedef) return :Nothing end - arg1ty = Symbol(cindex.spelling(cindex.getTypeDeclaration(arg1ty))) + arg1ty = Symbol(spelling(typedecl(arg1ty))) if !(arg1ty in GtkTypeMap) return :Nothing end @@ -244,44 +244,44 @@ function g_get_gtype(ctype) end function is_gstring(ctype) - if !isa(ctype, cindex.Pointer) + if !isa(ctype, CLPointer) return false end - ctype = cindex.pointee_type(ctype) - if cindex.isConstQualifiedType(ctype) == 0 + ctype = pointee_type(ctype) + if isconst(ctype) == 0 return false end - ctypedecl = cindex.getTypeDeclaration(ctype) - if cindex.spelling(ctypedecl) != "gchar" + ctypedecl = typedecl(ctype) + if spelling(ctypedecl) != "gchar" return false end true end function is_gbool(ctype) - ctypedecl = cindex.getTypeDeclaration(ctype) - if cindex.spelling(ctypedecl) != "gboolean" + ctypedecl = typedecl(ctype) + if spelling(ctypedecl) != "gboolean" return false end true end function gen_get_set(body, gtk_h) - fdecls = cindex.search(gtk_h, cindex.FunctionDecl) + fdecls = search(gtk_h, Clang.CXCursor_FunctionDecl) exports = Set{Symbol}([:default_icon_list, :position]) export_stmt = Expr(:export) push!(body.args,export_stmt) count = 0 for fdecl in fdecls - fargs = cindex.search(fdecl, cindex.ParmDecl) + fargs = search(fdecl, Clang.CXCursor_ParmDecl) if length(fargs) < 1 continue end - arg1ty = g_get_gtype(cindex.getCursorType(fargs[1])) + arg1ty = g_get_gtype(type(fargs[1])) if arg1ty === :Nothing continue end - spell = cindex.spelling(fdecl) + spell = spelling(fdecl) if startswith(spell,"gtk_test_") || startswith(spell,"_") continue end @@ -290,26 +290,26 @@ function gen_get_set(body, gtk_h) continue end method_name = Symbol(m.captures[2]) - header_file = cindex.cu_file(fdecl) + header_file = filename(fdecl) libname = gtklibname[basename(splitdir(header_file)[1])] if libname == nothing continue end - rettype = g_type_to_jl(cindex.return_type(fdecl)) - argnames = [Symbol(cindex.name(arg)) for arg in fargs] + rettype = g_type_to_jl(return_type(fdecl)) + argnames = [Symbol(name(arg)) for arg in fargs] for i = 1:length(argnames) if argnames[i] == method_name || argnames[i] in reserved_names argnames[i] = Symbol(string(argnames[i],'_')) end end - argtypes = [g_type_to_jl(cindex.getCursorType(arg)) for arg in fargs] + argtypes = [g_type_to_jl(type(arg)) for arg in fargs] @assert length(argnames) == length(argtypes) if any(argtypes .== :Nothing) || any(argtypes .== :Nothing) continue end if m.captures[1] == "get" fbody = :( ccall(($(QuoteNode(Symbol(spell))),$libname),$rettype,($(argtypes...),),$(argnames...)) ) - gtype = g_get_gtype(cindex.return_type(fdecl)) + gtype = g_get_gtype(return_type(fdecl)) if gtype != :Nothing fbody = :( convert($gtype, $fbody) ) end @@ -318,15 +318,15 @@ function gen_get_set(body, gtk_h) multiret = false last_inarg = 1 for i = 2:length(argnames) - atype = cindex.getCursorType(fargs[i]) - if !isa(atype, cindex.Pointer) || is_gstring(atype) + atype = type(fargs[i]) + if !isa(atype, CLPointer) || is_gstring(atype) last_inarg = i end end for i = 2:length(argnames) - atype = cindex.getCursorType(fargs[i]) + atype = type(fargs[i]) if i > last_inarg - atype = cindex.getPointeeType(atype) + atype = pointee_type(atype) T = g_type_to_jl(atype) if T !== :Nothing && T !== :Nothing && T != :(Gtk.GObject) retval = argnames[i] diff --git a/gen/gtk_list_gen.jl b/gen/gtk_list_gen.jl index fe4336a1..440dcfe0 100644 --- a/gen/gtk_list_gen.jl +++ b/gen/gtk_list_gen.jl @@ -1,33 +1,33 @@ import Gtk import Gtk.GLib: g_type, g_type_from_name, g_isa, GObject, get_fn_ptr -import Clang, Clang.cindex +import Clang function gen_g_type_lists(gtk_h) replacelist = Dict{Symbol,Symbol}( :GVariant => :nothing, :GType => :g_gtype, ) - tdecls = cindex.search(gtk_h, cindex.TypedefDecl) + tdecls = search(gtk_h, Clang.CXCursor_TypedefDecl) leafs = Tuple{Symbol,Expr}[] ifaces = Tuple{Symbol,Expr}[] boxes = Tuple{Symbol,Expr}[] gpointers = Tuple{Symbol,Expr}[] for tdecl in tdecls - ty = cindex.getTypedefDeclUnderlyingType(tdecl) - if isa(ty,cindex.Pointer) - ty = cindex.getPointeeType(ty) + ty = underlying_type(tdecl) + if isa(ty, CLPointer) + ty = pointee_type(ty) isptr = true else isptr = false end - sdecl = cindex.getTypeDeclaration(cindex.getCanonicalType(ty)) - isa(sdecl, cindex.StructDecl) || continue - typname = cindex.spelling(tdecl) + sdecl = typedecl(canonical(ty)) + isa(sdecl, CLStructDecl) || continue + typname = spelling(tdecl) if endswith(typname,"Iface")||endswith(typname,"Class")||endswith(typname,"Private") continue end typname = Symbol(typname) - header_file = cindex.cu_file(tdecl) + header_file = filename(tdecl) libname = get(gtklibname,basename(splitdir(header_file)[1]),nothing) libname == nothing && continue if typname in keys(replacelist) @@ -36,7 +36,7 @@ function gen_g_type_lists(gtk_h) else symname = Symbol(join([lowercase(s) for s in split(string(typname), r"(?=[A-Z])")],"_")) end - gtyp = g_type(typname, libname, symname) + gtyp = g_type(typname, libname, symname, Gtk) if gtyp == 0 gtyp = g_type_from_name(typname) if gtyp != 0 && !(gtyp in Gtk.GLib.fundamental_ids) @@ -50,21 +50,21 @@ function gen_g_type_lists(gtk_h) elseif gtyp == 0 || g_isa(gtyp, g_type_from_name(:GBoxed)) unref_fn = Symbol(string(symname,:_free)) has_ref_fn = false - if get_fn_ptr(unref_fn, libname) == C_NULL + if get_fn_ptr(unref_fn, libname, Gtk) == C_NULL unref_fn = Symbol(string(symname,:_unref)) - if get_fn_ptr(unref_fn, libname) == C_NULL + if get_fn_ptr(unref_fn, libname, Gtk) == C_NULL unref_fn = nothing ref_fn = nothing else has_ref_fn = true ref_fn_sym = Symbol(string(symname,:_ref)) - @assert get_fn_ptr(ref_fn_sym, libname) != C_NULL + @assert get_fn_ptr(ref_fn_sym, libname, Gtk) != C_NULL ref_fn = :(ccall(($(QuoteNode(ref_fn_sym)),$libname),Nothing,(Ptr{Nothing},),ref)) end else ref_fn = nothing end - if length(cindex.children(sdecl)) == 0 || has_ref_fn || isptr + if length(children(sdecl)) == 0 || has_ref_fn || isptr # Opaque box if unref_fn === nothing println("WARNING: couldn't detect gc characteristics of $symname") @@ -93,14 +93,14 @@ function gen_g_type_lists(gtk_h) valid = true paramlist = Expr(:block) ex = Expr(:type, false, typname, paramlist) - for cu in cindex.children(sdecl) - name = cindex.spelling(cu) + for cu in children(sdecl) + name = spelling(cu) if isempty(name) name = gensym() end - jtyp = g_type_to_jl(cindex.getCursorType(cu)) + jtyp = g_type_to_jl(type(cu)) if jtyp === :Nothing - jtyp = " < $(cindex.getCursorType(cu)) >" + jtyp = " < $(type(cu)) >" valid = false end push!(paramlist.args, Expr(:(::), Symbol(name), jtyp)) From b47730773d1c0d5050e2c10bb7ba910c6b67ad31 Mon Sep 17 00:00:00 2001 From: coloursofnoise <53288101+coloursofnoise@users.noreply.github.com> Date: Sat, 26 Dec 2020 01:35:45 -0800 Subject: [PATCH 02/11] Continue updating gen scripts Use BinaryBuilder packages for header file locations --- gen/gtk_auto_gen.jl | 111 +++++++++++++++++++++--------------------- gen/gtk_consts_gen.jl | 8 +-- gen/gtk_list_gen.jl | 6 ++- src/GLib/gtype.jl | 2 +- src/Gtk.jl | 3 +- 5 files changed, 66 insertions(+), 64 deletions(-) diff --git a/gen/gtk_auto_gen.jl b/gen/gtk_auto_gen.jl index c0eb4e2d..4d9f32c1 100644 --- a/gen/gtk_auto_gen.jl +++ b/gen/gtk_auto_gen.jl @@ -1,6 +1,9 @@ #!/usr/bin/env julia using Clang +using GTK3_jll, GTK3_jll.Glib_jll, GTK3_jll.gdk_pixbuf_jll +using Serialization + include("gtk_list_gen.jl") include("gtk_get_set_gen.jl") include("gtk_consts_gen.jl") @@ -19,72 +22,68 @@ function without_linenums!(ex::Expr) ex end -gtk_libpaths = ("/opt/local", "/usr/lib") + +const LIBGTK3_INCLUDE = joinpath(dirname(GTK3_jll.libgtk3_path), "..", "include", "gtk-3.0", "gtk") |> normpath +const DEPENDENCIES = vcat([readdir(joinpath(dep, "..", "include");join=true) for dep in vcat(GTK3_jll.PATH_list, dirname(Glib_jll.libglib_path))]...) .|> normpath +const gtk_h = joinpath(LIBGTK3_INCLUDE, "gtk.h") toplevels = Any[] -cppargs = [] let gtk_version = 3 - header = gtk_libdir = "" - for pth in gtk_libpaths - header = joinpath(pth,"..","include","gtk-$gtk_version.0","gtk","gtk.h") - if isfile(header) - gtk_libdir = pth - break - end - end - isfile(header) || error("gtk.h not found, please specify path") - args = read(`pkg-config --cflags gtk+-$gtk_version.0`, String) - if args[end] == '\n' - args = args[1:end-1] - end - args = ascii.([split(args,' '); cppargs]) - global gtk_h, gtk_macro_h - cd(Sys.BINDIR) do - gtk_h = parse_header(header, args=args, flags=0x41) |> getcursor - end - gboxpath = "gbox$(gtk_version)" - gconstspath = "gconsts$(gtk_version)" - cachepath = "gtk$(gtk_version)" + global trans_unit, root_cursor + # parse headers + cd(Sys.BINDIR) do + global trans_unit = parse_header(gtk_h, + args=["-I", joinpath(LIBGTK3_INCLUDE, "..")], + includes=vcat(LIBGTK3_INCLUDE, CLANG_INCLUDE, DEPENDENCIES), + flags=0x41) + end - g_types = gen_g_type_lists(gtk_h) - for z in g_types - for (s, ex) in z - without_linenums!(ex) - end - end + root_cursor = getcursor(trans_unit) + + gboxpath = "gbox$(gtk_version)" + gconstspath = "gconsts$(gtk_version)" + cachepath = "gtk$(gtk_version)" - body = Expr(:block, - Expr(:import, :., :., :Gtk), - Expr(:import, :., :., :Gtk, :GObject), + g_types = gen_g_type_lists(root_cursor) + for z in g_types + for (s, ex) in z + without_linenums!(ex) + end + end + + body = Expr(:block, + Expr(:import, :., :., :Gtk), + Expr(:import, :., :., :Gtk, :GObject), ) + gbox = Expr(:toplevel,Expr(:module, true, :GAccessor, body)) - count_fcns = gen_get_set(body, gtk_h) - println("Generated $gboxpath with $count_fcns function definitions") + count_fcns = gen_get_set(body, root_cursor) + println("Generated $gboxpath with $count_fcns function definitions") without_linenums!(gbox) - + body = Expr(:block) gconsts = Expr(:toplevel,Expr(:module, true, :GConstants, body)) - count_consts = gen_consts(body, gtk_h) - println("Generated $gconstspath with $count_consts constants") - without_linenums!(gconsts) - - open(joinpath(splitdir(@__FILE__)[1], gboxpath), "w") do cache - Base.println(cache,"quote") - Base.show_unquoted(cache, gbox) - println(cache) - Base.println(cache,"end") - end - open(joinpath(splitdir(@__FILE__)[1], gconstspath), "w") do cache - Base.println(cache,"quote") - Base.show_unquoted(cache, gconsts) - println(cache) - Base.println(cache,"end") + count_consts = gen_consts(body, root_cursor) + println("Generated $gconstspath with $count_consts constants") + without_linenums!(gconsts) + + open(joinpath(splitdir(@__FILE__)[1], gboxpath), "w") do cache + Base.println(cache,"quote") + Base.show_unquoted(cache, gbox) + println(cache) + Base.println(cache,"end") end - ser_version = Base.Serializer.ser_version - open(joinpath(splitdir(@__FILE__)[1], "$(cachepath)_julia_ser$(ser_version)"), "w") do cache - serialize(cache, gbox) - serialize(cache, gconsts) + open(joinpath(splitdir(@__FILE__)[1], gconstspath), "w") do cache + Base.println(cache,"quote") + Base.show_unquoted(cache, gconsts) + println(cache) + Base.println(cache,"end") end - push!(toplevels,(gbox,gconsts,g_types,gtk_h)) + ser_version = Serialization.ser_version + open(joinpath(splitdir(@__FILE__)[1], "$(cachepath)_julia_ser$(ser_version)"), "w") do cache + serialize(cache, gbox) + serialize(cache, gconsts) + end + push!(toplevels, (gbox, gconsts, g_types, gtk_h)) end -toplevels +toplevels \ No newline at end of file diff --git a/gen/gtk_consts_gen.jl b/gen/gtk_consts_gen.jl index 42f5b30f..4ade3f5d 100644 --- a/gen/gtk_consts_gen.jl +++ b/gen/gtk_consts_gen.jl @@ -2,11 +2,11 @@ function gen_consts(body, gtk_h) count = 0 exports = Expr(:export) push!(body.args,exports) - + tdecls = search(gtk_h, Clang.CXCursor_TypedefDecl) for tdecl in tdecls ctype = canonical(type(tdecl)) - if isa(ctype, Enum) + if isa(ctype, CLEnum) name = spelling(tdecl) m = match(r"^(G\w+)$", name) if m === nothing @@ -16,7 +16,7 @@ function gen_consts(body, gtk_h) push!(exports.args, name) consts = Expr(:block) push!(body.args, Expr(:toplevel, Expr(:module, false, name, consts))) - children = children(typedecl(ctype)) + children = Clang.children(typedecl(ctype)) mask = true c1 = spelling(children[1]) splitc1 = split(c1,'_') @@ -50,7 +50,7 @@ function gen_consts(body, gtk_h) else shortdecl = decl[lprefix:end] end - jldecl = Expr(:const, Expr(:(=), Symbol(decl), Expr(:call, :(Main.Base.convert), :(Main.Base.Int32), cindex.value(child)))) + jldecl = Expr(:const, Expr(:(=), Symbol(decl), Expr(:call, :(Main.Base.convert), :(Main.Base.Int32), value(child)))) if occursin(r"^[A-Za-z]", shortdecl) push!(consts.args, Expr(:const, Expr(:(=), Symbol(shortdecl), jldecl))) else diff --git a/gen/gtk_list_gen.jl b/gen/gtk_list_gen.jl index 440dcfe0..cf0f1928 100644 --- a/gen/gtk_list_gen.jl +++ b/gen/gtk_list_gen.jl @@ -6,7 +6,7 @@ function gen_g_type_lists(gtk_h) replacelist = Dict{Symbol,Symbol}( :GVariant => :nothing, :GType => :g_gtype, - ) + ) tdecls = search(gtk_h, Clang.CXCursor_TypedefDecl) leafs = Tuple{Symbol,Expr}[] ifaces = Tuple{Symbol,Expr}[] @@ -20,6 +20,7 @@ function gen_g_type_lists(gtk_h) else isptr = false end + sdecl = typedecl(canonical(ty)) isa(sdecl, CLStructDecl) || continue typname = spelling(tdecl) @@ -29,13 +30,14 @@ function gen_g_type_lists(gtk_h) typname = Symbol(typname) header_file = filename(tdecl) libname = get(gtklibname,basename(splitdir(header_file)[1]),nothing) - libname == nothing && continue + libname === nothing && continue if typname in keys(replacelist) symname = replacelist[typname] symname == :nothing && continue else symname = Symbol(join([lowercase(s) for s in split(string(typname), r"(?=[A-Z])")],"_")) end + gtyp = g_type(typname, libname, symname, Gtk) if gtyp == 0 gtyp = g_type_from_name(typname) diff --git a/src/GLib/gtype.jl b/src/GLib/gtype.jl index e0403e77..53f08348 100644 --- a/src/GLib/gtype.jl +++ b/src/GLib/gtype.jl @@ -107,7 +107,7 @@ end end function g_type(name::Symbol, lib, symname::Symbol, cm) if name in keys(gtype_wrappers) - return g_type(gtype_wrappers[name], cm) + return g_type(gtype_wrappers[name]) end fnptr = get_fn_ptr(string(symname, "_get_type"), lib, cm) if fnptr != C_NULL diff --git a/src/Gtk.jl b/src/Gtk.jl index 073381a0..251be14e 100644 --- a/src/Gtk.jl +++ b/src/Gtk.jl @@ -10,6 +10,7 @@ using GTK3_jll, Glib_jll, Xorg_xkeyboard_config_jll, gdk_pixbuf_jll, adwaita_ico using Pkg.Artifacts const libgdk = libgdk3 const libgtk = libgtk3 +const libgdk_pixbuf = libgdkpixbuf const suffix = :Leaf @@ -145,7 +146,7 @@ let cachedir = joinpath(splitdir(@__FILE__)[1], "..", "gen") if isfile(fastgtkcache) && true open(fastgtkcache) do cache while !eof(cache) - Core.eval(deserialize(cache)) + Core.eval(Gtk, deserialize(cache)) end end else From 021923e43bb9477c65e0519852e15542db11c546 Mon Sep 17 00:00:00 2001 From: coloursofnoise <53288101+coloursofnoise@users.noreply.github.com> Date: Mon, 28 Dec 2020 16:14:31 -0800 Subject: [PATCH 03/11] Fix Clang gen scripts, temporarily removing need for GI script --- gen/gtk_auto_gen.jl | 72 ++++++++++++++++++++++-------------------- gen/gtk_consts_gen.jl | 9 +++--- gen/gtk_get_set_gen.jl | 13 ++++---- gen/gtk_list_gen.jl | 3 +- 4 files changed, 51 insertions(+), 46 deletions(-) diff --git a/gen/gtk_auto_gen.jl b/gen/gtk_auto_gen.jl index 4d9f32c1..c22fd663 100644 --- a/gen/gtk_auto_gen.jl +++ b/gen/gtk_auto_gen.jl @@ -1,43 +1,47 @@ -#!/usr/bin/env julia - using Clang -using GTK3_jll, GTK3_jll.Glib_jll, GTK3_jll.gdk_pixbuf_jll -using Serialization +using GTK3_jll +import Serialization include("gtk_list_gen.jl") include("gtk_get_set_gen.jl") include("gtk_consts_gen.jl") function without_linenums!(ex::Expr) - linenums_filter(x,ex) = true - linenums_filter(x::LineNumberNode,ex) = false - linenums_filter(x::Expr,ex) = x.head !== :line - linenums_filter(x::Nothing,ex) = ex.head !== :block - filter!((x)->linenums_filter(x,ex), ex.args) - for arg in ex.args - if isa(arg,Expr) - without_linenums!(arg) - end - end - ex + linenums_filter(x,ex) = true + linenums_filter(x::LineNumberNode,ex) = false + linenums_filter(x::Expr,ex) = x.head !== :line + linenums_filter(x::Nothing,ex) = ex.head !== :block + filter!((x)->linenums_filter(x,ex), ex.args) + for arg in ex.args + if isa(arg,Expr) + without_linenums!(arg) + end + end + ex end +# If there is an error about missing some std headers, e.g. fatal error: 'time.h' file not found, +# set this to `stdlib/include/on/your/specific/platform` (see https://github.com/JuliaInterop/Clang.jl) +const STD_INCLUDE = "" const LIBGTK3_INCLUDE = joinpath(dirname(GTK3_jll.libgtk3_path), "..", "include", "gtk-3.0", "gtk") |> normpath -const DEPENDENCIES = vcat([readdir(joinpath(dep, "..", "include");join=true) for dep in vcat(GTK3_jll.PATH_list, dirname(Glib_jll.libglib_path))]...) .|> normpath +const SOURCES = vcat(GTK3_jll.PATH_list, GTK3_jll.LIBPATH_list) +const DEPENDENCIES = vcat([readdir(dep; join=true) for dep in joinpath.(SOURCES, "..", "include") if isdir(dep)]...) .|> normpath +# glibconfig.h +const ADDITIONAL = vcat([joinpath.(readdir(dep; join=true), "include") for dep in joinpath.(SOURCES, "..", "lib") if isdir(dep)]...) .|> normpath const gtk_h = joinpath(LIBGTK3_INCLUDE, "gtk.h") toplevels = Any[] let gtk_version = 3 - global trans_unit, root_cursor + global trans_unit, root_cursor # parse headers cd(Sys.BINDIR) do global trans_unit = parse_header(gtk_h, - args=["-I", joinpath(LIBGTK3_INCLUDE, "..")], - includes=vcat(LIBGTK3_INCLUDE, CLANG_INCLUDE, DEPENDENCIES), + args=["-I", joinpath(LIBGTK3_INCLUDE, ".."), "-I$(STD_INCLUDE)"], + includes=vcat(LIBGTK3_INCLUDE, CLANG_INCLUDE, DEPENDENCIES, ADDITIONAL), flags=0x41) end - + root_cursor = getcursor(trans_unit) gboxpath = "gbox$(gtk_version)" @@ -52,37 +56,37 @@ let gtk_version = 3 end body = Expr(:block, - Expr(:import, :., :., :Gtk), - Expr(:import, :., :., :Gtk, :GObject), - ) + Meta.parse("import ..Gtk"), + Meta.parse("import ..Gtk.GObject"), + ) - gbox = Expr(:toplevel,Expr(:module, true, :GAccessor, body)) + gbox = Expr(:toplevel,Expr(:module, true, :GAccessor, body)) count_fcns = gen_get_set(body, root_cursor) println("Generated $gboxpath with $count_fcns function definitions") - without_linenums!(gbox) + without_linenums!(gbox) - body = Expr(:block) - gconsts = Expr(:toplevel,Expr(:module, true, :GConstants, body)) + body = Expr(:block) + gconsts = Expr(:toplevel,Expr(:module, true, :GConstants, body)) count_consts = gen_consts(body, root_cursor) println("Generated $gconstspath with $count_consts constants") without_linenums!(gconsts) - open(joinpath(splitdir(@__FILE__)[1], gboxpath), "w") do cache + open(joinpath(dirname(@__FILE__), gboxpath), "w") do cache Base.println(cache,"quote") Base.show_unquoted(cache, gbox) println(cache) Base.println(cache,"end") - end - open(joinpath(splitdir(@__FILE__)[1], gconstspath), "w") do cache + end + open(joinpath(dirname(@__FILE__), gconstspath), "w") do cache Base.println(cache,"quote") Base.show_unquoted(cache, gconsts) println(cache) Base.println(cache,"end") - end + end ser_version = Serialization.ser_version - open(joinpath(splitdir(@__FILE__)[1], "$(cachepath)_julia_ser$(ser_version)"), "w") do cache - serialize(cache, gbox) - serialize(cache, gconsts) + open(joinpath(dirname(@__FILE__), "$(cachepath)_julia_ser$(ser_version)"), "w") do cache + Serialization.serialize(cache, gbox) + Serialization.serialize(cache, gconsts) end push!(toplevels, (gbox, gconsts, g_types, gtk_h)) end diff --git a/gen/gtk_consts_gen.jl b/gen/gtk_consts_gen.jl index 4ade3f5d..d64ed215 100644 --- a/gen/gtk_consts_gen.jl +++ b/gen/gtk_consts_gen.jl @@ -3,7 +3,7 @@ function gen_consts(body, gtk_h) exports = Expr(:export) push!(body.args,exports) - tdecls = search(gtk_h, Clang.CXCursor_TypedefDecl) + tdecls = Clang.search(gtk_h, Clang.CXCursor_TypedefDecl) for tdecl in tdecls ctype = canonical(type(tdecl)) if isa(ctype, CLEnum) @@ -63,14 +63,15 @@ function gen_consts(body, gtk_h) count += 1 end end - mdecls = search(gtk_h, Clang.CXCursor_MacroDefinition) + + mdecls = Clang.search(gtk_h, Clang.CXCursor_MacroDefinition) for mdecl in mdecls name = spelling(mdecl) if occursin(r"^G\w*[A-Za-z]$", name) tokens = tokenize(mdecl) - if length(tokens) == 3 && isa(tokens[2], Literal) + if length(tokens) == 2 && isa(tokens[2], Literal) tok2 = Clang.handle_macro_exprn(tokens, 2)[1] - tok2 = replace(tok2, "\$", "\\\$") + tok2 = replace(tok2, "\$"=>"\\\$") push!(body.args, Expr(:const, Expr(:(=), Symbol(name), Meta.parse(tok2)))) else #println("Skipping: ", name, " = ", [tokens...]) diff --git a/gen/gtk_get_set_gen.jl b/gen/gtk_get_set_gen.jl index 2fb1e2bc..cc5c0528 100644 --- a/gen/gtk_get_set_gen.jl +++ b/gen/gtk_get_set_gen.jl @@ -124,8 +124,8 @@ const GtkBoxedMap = Set{Symbol}([ :GtkWidgetPath, ]) cl_to_jl = Dict( - CLVoid => :Nothing, - CLBool => :Bool, + CLVoid => :Nothing, + CLBool => :Bool, CLChar_U => :UInt8, CLUChar => :Cuchar, CLChar16 => :UInt16, @@ -138,7 +138,7 @@ cl_to_jl = Dict( CLSChar => :UInt8, CLWChar => :Char, CLShort => :Int16, - CLInt => :Cint, + CLInt => :Cint, CLLong => :Clong, CLLongLong => :Clonglong, CLFloat => :Cfloat, @@ -155,6 +155,7 @@ c_typdef_to_jl = Dict{String,Any}( "GError" => :(Gtk.GError), "GdkRectangle" => :(Gtk.GdkRectangle), "GdkPoint" => :(Gtk.GdkPoint), + "GdkRGBA" => :(Gtk.GdkRGBA), "GdkEventAny" => :(Gtk.GdkEventAny), "GdkEventButton" => :(Gtk.GdkEventButton), "GdkEventScroll" => :(Gtk.GdkEventScroll), @@ -267,13 +268,13 @@ function is_gbool(ctype) end function gen_get_set(body, gtk_h) - fdecls = search(gtk_h, Clang.CXCursor_FunctionDecl) + fdecls = Clang.search(gtk_h, Clang.CXCursor_FunctionDecl) exports = Set{Symbol}([:default_icon_list, :position]) export_stmt = Expr(:export) push!(body.args,export_stmt) count = 0 for fdecl in fdecls - fargs = search(fdecl, Clang.CXCursor_ParmDecl) + fargs = Clang.search(fdecl, Clang.CXCursor_ParmDecl) if length(fargs) < 1 continue end @@ -292,7 +293,7 @@ function gen_get_set(body, gtk_h) method_name = Symbol(m.captures[2]) header_file = filename(fdecl) libname = gtklibname[basename(splitdir(header_file)[1])] - if libname == nothing + if libname === nothing continue end rettype = g_type_to_jl(return_type(fdecl)) diff --git a/gen/gtk_list_gen.jl b/gen/gtk_list_gen.jl index cf0f1928..b0d3bfbe 100644 --- a/gen/gtk_list_gen.jl +++ b/gen/gtk_list_gen.jl @@ -1,13 +1,12 @@ import Gtk import Gtk.GLib: g_type, g_type_from_name, g_isa, GObject, get_fn_ptr -import Clang function gen_g_type_lists(gtk_h) replacelist = Dict{Symbol,Symbol}( :GVariant => :nothing, :GType => :g_gtype, ) - tdecls = search(gtk_h, Clang.CXCursor_TypedefDecl) + tdecls = Clang.search(gtk_h, Clang.CXCursor_TypedefDecl) leafs = Tuple{Symbol,Expr}[] ifaces = Tuple{Symbol,Expr}[] boxes = Tuple{Symbol,Expr}[] From e0e5477141e7b391f2f6006397cbbb095b08f0e5 Mon Sep 17 00:00:00 2001 From: coloursofnoise <53288101+coloursofnoise@users.noreply.github.com> Date: Mon, 28 Dec 2020 16:36:10 -0800 Subject: [PATCH 04/11] Fix gen script indentation --- gen/gtk_auto_gen.jl | 38 +++++++++++++++++++------------------- gen/gtk_consts_gen.jl | 2 +- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/gen/gtk_auto_gen.jl b/gen/gtk_auto_gen.jl index c22fd663..7cf264a2 100644 --- a/gen/gtk_auto_gen.jl +++ b/gen/gtk_auto_gen.jl @@ -33,7 +33,7 @@ const gtk_h = joinpath(LIBGTK3_INCLUDE, "gtk.h") toplevels = Any[] let gtk_version = 3 - global trans_unit, root_cursor + global trans_unit, root_cursor # parse headers cd(Sys.BINDIR) do global trans_unit = parse_header(gtk_h, @@ -43,48 +43,48 @@ let gtk_version = 3 end root_cursor = getcursor(trans_unit) - + gboxpath = "gbox$(gtk_version)" gconstspath = "gconsts$(gtk_version)" cachepath = "gtk$(gtk_version)" - + g_types = gen_g_type_lists(root_cursor) for z in g_types for (s, ex) in z without_linenums!(ex) end end - + body = Expr(:block, - Meta.parse("import ..Gtk"), - Meta.parse("import ..Gtk.GObject"), - ) - - gbox = Expr(:toplevel,Expr(:module, true, :GAccessor, body)) + Meta.parse("import ..Gtk"), + Meta.parse("import ..Gtk.GObject"), + ) + + gbox = Expr(:toplevel,Expr(:module, true, :GAccessor, body)) count_fcns = gen_get_set(body, root_cursor) println("Generated $gboxpath with $count_fcns function definitions") - without_linenums!(gbox) - - body = Expr(:block) - gconsts = Expr(:toplevel,Expr(:module, true, :GConstants, body)) + without_linenums!(gbox) + + body = Expr(:block) + gconsts = Expr(:toplevel,Expr(:module, true, :GConstants, body)) count_consts = gen_consts(body, root_cursor) println("Generated $gconstspath with $count_consts constants") without_linenums!(gconsts) - - open(joinpath(dirname(@__FILE__), gboxpath), "w") do cache + + open(joinpath(@__DIR__, gboxpath), "w") do cache Base.println(cache,"quote") Base.show_unquoted(cache, gbox) println(cache) Base.println(cache,"end") - end - open(joinpath(dirname(@__FILE__), gconstspath), "w") do cache + end + open(joinpath(@__DIR__, gconstspath), "w") do cache Base.println(cache,"quote") Base.show_unquoted(cache, gconsts) println(cache) Base.println(cache,"end") - end + end ser_version = Serialization.ser_version - open(joinpath(dirname(@__FILE__), "$(cachepath)_julia_ser$(ser_version)"), "w") do cache + open(joinpath(@__DIR__, "$(cachepath)_julia_ser$(ser_version)"), "w") do cache Serialization.serialize(cache, gbox) Serialization.serialize(cache, gconsts) end diff --git a/gen/gtk_consts_gen.jl b/gen/gtk_consts_gen.jl index d64ed215..41fbfcdf 100644 --- a/gen/gtk_consts_gen.jl +++ b/gen/gtk_consts_gen.jl @@ -63,7 +63,7 @@ function gen_consts(body, gtk_h) count += 1 end end - + mdecls = Clang.search(gtk_h, Clang.CXCursor_MacroDefinition) for mdecl in mdecls name = spelling(mdecl) From 4250a22db02afab278af3ae3d1955adcf84520dd Mon Sep 17 00:00:00 2001 From: coloursofnoise <53288101+coloursofnoise@users.noreply.github.com> Date: Fri, 1 Jan 2021 01:22:20 -0800 Subject: [PATCH 05/11] Account for some system-dependent consts. Add GtkRequisition type. --- gen/gtk_consts_gen.jl | 13 +++++++++++++ gen/gtk_get_set_gen.jl | 3 ++- src/gtktypes.jl | 5 +++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/gen/gtk_consts_gen.jl b/gen/gtk_consts_gen.jl index 41fbfcdf..b68c7773 100644 --- a/gen/gtk_consts_gen.jl +++ b/gen/gtk_consts_gen.jl @@ -1,3 +1,12 @@ +const PLATFORM_SPECIFIC = Dict{String, Any}( + "G_DIR_SEPARATOR" => :(Sys.iswindows() ? '\\' : '/'), + "G_DIR_SEPARATOR_S" => :(Sys.iswindows() ? "\\" : "/"), + "G_SEARCHPATH_SEPARATOR" => :(Sys.iswindows() ? ';' : ':'), + "G_SEARCHPATH_SEPARATOR_S" => :(Sys.iswindows() ? ";" : ":"), + "G_MODULE_SUFFIX" => :(Sys.iswindows() ? "dll" : "so"), #For "most" Unices and Linux this is "so". + "G_PID_FORMAT" => :(Sys.iswindows() ? "p" : "i"), #Incorrectly stated as only "i" in Glib reference. +) + function gen_consts(body, gtk_h) count = 0 exports = Expr(:export) @@ -68,6 +77,10 @@ function gen_consts(body, gtk_h) for mdecl in mdecls name = spelling(mdecl) if occursin(r"^G\w*[A-Za-z]$", name) + if haskey(PLATFORM_SPECIFIC, name) + push!(body.args, Expr(:const, Expr(:(=), Symbol(name), PLATFORM_SPECIFIC[name]))) + continue + end tokens = tokenize(mdecl) if length(tokens) == 2 && isa(tokens[2], Literal) tok2 = Clang.handle_macro_exprn(tokens, 2)[1] diff --git a/gen/gtk_get_set_gen.jl b/gen/gtk_get_set_gen.jl index cc5c0528..d3d38ce4 100644 --- a/gen/gtk_get_set_gen.jl +++ b/gen/gtk_get_set_gen.jl @@ -162,6 +162,7 @@ c_typdef_to_jl = Dict{String,Any}( "GdkEventKey" => :(Gtk.GdkEventKey), "GdkEventMotion" => :(Gtk.GdkEventMotion), "GdkEventCrossing" => :(Gtk.GdkEventCrossing), + "GtkRequisition" => :(Gtk.GtkRequisition), "GtkTextIter" => :(Gtk.GtkTextIter), "GtkTreeIter" => :(Gtk.GtkTreeIter), "GList" => :(Gtk._GList{Nothing}), @@ -329,7 +330,7 @@ function gen_get_set(body, gtk_h) if i > last_inarg atype = pointee_type(atype) T = g_type_to_jl(atype) - if T !== :Nothing && T !== :Nothing && T != :(Gtk.GObject) + if T !== :Nothing && T != :(Gtk.GObject) retval = argnames[i] pushfirst!(fbody.args, :( $retval = Gtk.mutable($T) )) retval = :( $retval[] ) diff --git a/src/gtktypes.jl b/src/gtktypes.jl index 6ee0a041..765b304f 100644 --- a/src/gtktypes.jl +++ b/src/gtktypes.jl @@ -127,6 +127,11 @@ end @gtktype GtkCssProvider @gtktype GtkStyleContext +struct GtkRequisition + width::Int32 + height::Int32 + GtkRequisition(width, height) = new(width, height) +end if libgtk_version >= v"3.16.0" @gtktype_custom_symname GtkGLArea gtk_gl_area From cde488313722f246d89f042a1eed7fc690da2e85 Mon Sep 17 00:00:00 2001 From: coloursofnoise <53288101+coloursofnoise@users.noreply.github.com> Date: Fri, 1 Jan 2021 03:05:19 -0800 Subject: [PATCH 06/11] Ignore duplicate method declarations --- gen/gtk_get_set_gen.jl | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/gen/gtk_get_set_gen.jl b/gen/gtk_get_set_gen.jl index d3d38ce4..e9f2f518 100644 --- a/gen/gtk_get_set_gen.jl +++ b/gen/gtk_get_set_gen.jl @@ -268,6 +268,16 @@ function is_gbool(ctype) true end +function isduplicatedef(expr, name, arg1ty, argcount) + if expr.head == :function + fargs = expr.args[1].args + return fargs[1] == name && + fargs[2].args[2] == arg1ty && + length(fargs[2:end]) == argcount + end + false +end + function gen_get_set(body, gtk_h) fdecls = Clang.search(gtk_h, Clang.CXCursor_FunctionDecl) exports = Set{Symbol}([:default_icon_list, :position]) @@ -354,13 +364,17 @@ function gen_get_set(body, gtk_h) push!(fargnames, argnames[i]) end fbody.args[end] = Expr(:return,fbody.args[end]) - push!(body.args, Expr(:function, Expr(:call, method_name, Expr(:(::),argnames[1],arg1ty), fargnames...), fbody)) + if !any(ex -> isduplicatedef(ex, method_name, arg1ty, length(fargnames)+1), body.args) + push!(body.args, Expr(:function, Expr(:call, method_name, Expr(:(::),argnames[1],arg1ty), fargnames...), fbody)) + end elseif m.captures[1] == "set" fbody = Expr(:block, :( ccall(($(QuoteNode(Symbol(spell))),$libname),$rettype,($(argtypes...),),$(argnames...)) ), Expr(:return, argnames[1]) ) - push!(body.args, Expr(:function, Expr(:call, method_name, Expr(:(::),argnames[1],arg1ty), argnames[2:end]...), fbody)) + if !any(ex -> isduplicatedef(ex, method_name, arg1ty, length(argnames)), body.args) + push!(body.args, Expr(:function, Expr(:call, method_name, Expr(:(::),argnames[1],arg1ty), argnames[2:end]...), fbody)) + end else @assert false end From 16aa3fb68f9318c33a702fe1a186d64db05e3ac9 Mon Sep 17 00:00:00 2001 From: coloursofnoise <53288101+coloursofnoise@users.noreply.github.com> Date: Fri, 1 Jan 2021 14:52:01 -0800 Subject: [PATCH 07/11] Fix indentation again in gen scripts --- gen/gtk_auto_gen.jl | 134 ++++++++++++++++++++++---------------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/gen/gtk_auto_gen.jl b/gen/gtk_auto_gen.jl index 7cf264a2..d5a920d3 100644 --- a/gen/gtk_auto_gen.jl +++ b/gen/gtk_auto_gen.jl @@ -7,17 +7,17 @@ include("gtk_get_set_gen.jl") include("gtk_consts_gen.jl") function without_linenums!(ex::Expr) - linenums_filter(x,ex) = true - linenums_filter(x::LineNumberNode,ex) = false - linenums_filter(x::Expr,ex) = x.head !== :line - linenums_filter(x::Nothing,ex) = ex.head !== :block - filter!((x)->linenums_filter(x,ex), ex.args) - for arg in ex.args - if isa(arg,Expr) - without_linenums!(arg) - end - end - ex + linenums_filter(x,ex) = true + linenums_filter(x::LineNumberNode,ex) = false + linenums_filter(x::Expr,ex) = x.head !== :line + linenums_filter(x::Nothing,ex) = ex.head !== :block + filter!((x)->linenums_filter(x,ex), ex.args) + for arg in ex.args + if isa(arg,Expr) + without_linenums!(arg) + end + end + ex end # If there is an error about missing some std headers, e.g. fatal error: 'time.h' file not found, @@ -33,61 +33,61 @@ const gtk_h = joinpath(LIBGTK3_INCLUDE, "gtk.h") toplevels = Any[] let gtk_version = 3 - global trans_unit, root_cursor - # parse headers - cd(Sys.BINDIR) do - global trans_unit = parse_header(gtk_h, - args=["-I", joinpath(LIBGTK3_INCLUDE, ".."), "-I$(STD_INCLUDE)"], - includes=vcat(LIBGTK3_INCLUDE, CLANG_INCLUDE, DEPENDENCIES, ADDITIONAL), - flags=0x41) - end - - root_cursor = getcursor(trans_unit) - - gboxpath = "gbox$(gtk_version)" - gconstspath = "gconsts$(gtk_version)" - cachepath = "gtk$(gtk_version)" - - g_types = gen_g_type_lists(root_cursor) - for z in g_types - for (s, ex) in z - without_linenums!(ex) - end - end - - body = Expr(:block, - Meta.parse("import ..Gtk"), - Meta.parse("import ..Gtk.GObject"), - ) - - gbox = Expr(:toplevel,Expr(:module, true, :GAccessor, body)) - count_fcns = gen_get_set(body, root_cursor) - println("Generated $gboxpath with $count_fcns function definitions") - without_linenums!(gbox) - - body = Expr(:block) - gconsts = Expr(:toplevel,Expr(:module, true, :GConstants, body)) - count_consts = gen_consts(body, root_cursor) - println("Generated $gconstspath with $count_consts constants") - without_linenums!(gconsts) - - open(joinpath(@__DIR__, gboxpath), "w") do cache - Base.println(cache,"quote") - Base.show_unquoted(cache, gbox) - println(cache) - Base.println(cache,"end") - end - open(joinpath(@__DIR__, gconstspath), "w") do cache - Base.println(cache,"quote") - Base.show_unquoted(cache, gconsts) - println(cache) - Base.println(cache,"end") - end - ser_version = Serialization.ser_version - open(joinpath(@__DIR__, "$(cachepath)_julia_ser$(ser_version)"), "w") do cache - Serialization.serialize(cache, gbox) - Serialization.serialize(cache, gconsts) - end - push!(toplevels, (gbox, gconsts, g_types, gtk_h)) + global trans_unit, root_cursor + # parse headers + cd(Sys.BINDIR) do + global trans_unit = parse_header(gtk_h, + args=["-I", joinpath(LIBGTK3_INCLUDE, ".."), "-I$(STD_INCLUDE)"], + includes=vcat(LIBGTK3_INCLUDE, CLANG_INCLUDE, DEPENDENCIES, ADDITIONAL), + flags=0x41) + end + + root_cursor = getcursor(trans_unit) + + gboxpath = "gbox$(gtk_version)" + gconstspath = "gconsts$(gtk_version)" + cachepath = "gtk$(gtk_version)" + + g_types = gen_g_type_lists(root_cursor) + for z in g_types + for (s, ex) in z + without_linenums!(ex) + end + end + + body = Expr(:block, + Meta.parse("import ..Gtk"), + Meta.parse("import ..Gtk.GObject"), + ) + + gbox = Expr(:toplevel,Expr(:module, true, :GAccessor, body)) + count_fcns = gen_get_set(body, root_cursor) + println("Generated $gboxpath with $count_fcns function definitions") + without_linenums!(gbox) + + body = Expr(:block) + gconsts = Expr(:toplevel,Expr(:module, true, :GConstants, body)) + count_consts = gen_consts(body, root_cursor) + println("Generated $gconstspath with $count_consts constants") + without_linenums!(gconsts) + + open(joinpath(@__DIR__, gboxpath), "w") do cache + Base.println(cache,"quote") + Base.show_unquoted(cache, gbox) + println(cache) + Base.println(cache,"end") + end + open(joinpath(@__DIR__, gconstspath), "w") do cache + Base.println(cache,"quote") + Base.show_unquoted(cache, gconsts) + println(cache) + Base.println(cache,"end") + end + ser_version = Serialization.ser_version + open(joinpath(@__DIR__, "$(cachepath)_julia_ser$(ser_version)"), "w") do cache + Serialization.serialize(cache, gbox) + Serialization.serialize(cache, gconsts) + end + push!(toplevels, (gbox, gconsts, g_types, gtk_h)) end toplevels \ No newline at end of file From 99c2721e37e02dadea8a6f8e1cfb19299cb8bf12 Mon Sep 17 00:00:00 2001 From: coloursofnoise <53288101+coloursofnoise@users.noreply.github.com> Date: Fri, 1 Jan 2021 15:00:07 -0800 Subject: [PATCH 08/11] Final formatting fix --- gen/gtk_auto_gen.jl | 134 ++++++++++++++++++++++---------------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/gen/gtk_auto_gen.jl b/gen/gtk_auto_gen.jl index d5a920d3..96cce1cc 100644 --- a/gen/gtk_auto_gen.jl +++ b/gen/gtk_auto_gen.jl @@ -7,17 +7,17 @@ include("gtk_get_set_gen.jl") include("gtk_consts_gen.jl") function without_linenums!(ex::Expr) - linenums_filter(x,ex) = true - linenums_filter(x::LineNumberNode,ex) = false - linenums_filter(x::Expr,ex) = x.head !== :line - linenums_filter(x::Nothing,ex) = ex.head !== :block - filter!((x)->linenums_filter(x,ex), ex.args) - for arg in ex.args - if isa(arg,Expr) - without_linenums!(arg) - end - end - ex + linenums_filter(x,ex) = true + linenums_filter(x::LineNumberNode,ex) = false + linenums_filter(x::Expr,ex) = x.head !== :line + linenums_filter(x::Nothing,ex) = ex.head !== :block + filter!((x)->linenums_filter(x,ex), ex.args) + for arg in ex.args + if isa(arg,Expr) + without_linenums!(arg) + end + end + ex end # If there is an error about missing some std headers, e.g. fatal error: 'time.h' file not found, @@ -33,61 +33,61 @@ const gtk_h = joinpath(LIBGTK3_INCLUDE, "gtk.h") toplevels = Any[] let gtk_version = 3 - global trans_unit, root_cursor - # parse headers - cd(Sys.BINDIR) do - global trans_unit = parse_header(gtk_h, - args=["-I", joinpath(LIBGTK3_INCLUDE, ".."), "-I$(STD_INCLUDE)"], - includes=vcat(LIBGTK3_INCLUDE, CLANG_INCLUDE, DEPENDENCIES, ADDITIONAL), - flags=0x41) - end - - root_cursor = getcursor(trans_unit) - - gboxpath = "gbox$(gtk_version)" - gconstspath = "gconsts$(gtk_version)" - cachepath = "gtk$(gtk_version)" - - g_types = gen_g_type_lists(root_cursor) - for z in g_types - for (s, ex) in z - without_linenums!(ex) - end - end - - body = Expr(:block, - Meta.parse("import ..Gtk"), - Meta.parse("import ..Gtk.GObject"), - ) - - gbox = Expr(:toplevel,Expr(:module, true, :GAccessor, body)) - count_fcns = gen_get_set(body, root_cursor) - println("Generated $gboxpath with $count_fcns function definitions") - without_linenums!(gbox) - - body = Expr(:block) - gconsts = Expr(:toplevel,Expr(:module, true, :GConstants, body)) - count_consts = gen_consts(body, root_cursor) - println("Generated $gconstspath with $count_consts constants") - without_linenums!(gconsts) - - open(joinpath(@__DIR__, gboxpath), "w") do cache - Base.println(cache,"quote") - Base.show_unquoted(cache, gbox) - println(cache) - Base.println(cache,"end") - end - open(joinpath(@__DIR__, gconstspath), "w") do cache - Base.println(cache,"quote") - Base.show_unquoted(cache, gconsts) - println(cache) - Base.println(cache,"end") - end - ser_version = Serialization.ser_version - open(joinpath(@__DIR__, "$(cachepath)_julia_ser$(ser_version)"), "w") do cache - Serialization.serialize(cache, gbox) - Serialization.serialize(cache, gconsts) - end - push!(toplevels, (gbox, gconsts, g_types, gtk_h)) + global trans_unit, root_cursor + # parse headers + cd(Sys.BINDIR) do + global trans_unit = parse_header(gtk_h, + args=["-I", joinpath(LIBGTK3_INCLUDE, ".."), "-I$(STD_INCLUDE)"], + includes=vcat(LIBGTK3_INCLUDE, CLANG_INCLUDE, DEPENDENCIES, ADDITIONAL), + flags=0x41) + end + + root_cursor = getcursor(trans_unit) + + gboxpath = "gbox$(gtk_version)" + gconstspath = "gconsts$(gtk_version)" + cachepath = "gtk$(gtk_version)" + + g_types = gen_g_type_lists(root_cursor) + for z in g_types + for (s, ex) in z + without_linenums!(ex) + end + end + + body = Expr(:block, + Meta.parse("import ..Gtk"), + Meta.parse("import ..Gtk.GObject"), + ) + + gbox = Expr(:toplevel,Expr(:module, true, :GAccessor, body)) + count_fcns = gen_get_set(body, root_cursor) + println("Generated $gboxpath with $count_fcns function definitions") + without_linenums!(gbox) + + body = Expr(:block) + gconsts = Expr(:toplevel,Expr(:module, true, :GConstants, body)) + count_consts = gen_consts(body, root_cursor) + println("Generated $gconstspath with $count_consts constants") + without_linenums!(gconsts) + + open(joinpath(@__DIR__, gboxpath), "w") do cache + Base.println(cache,"quote") + Base.show_unquoted(cache, gbox) + println(cache) + Base.println(cache,"end") + end + open(joinpath(@__DIR__, gconstspath), "w") do cache + Base.println(cache,"quote") + Base.show_unquoted(cache, gconsts) + println(cache) + Base.println(cache,"end") + end + ser_version = Serialization.ser_version + open(joinpath(@__DIR__, "$(cachepath)_julia_ser$(ser_version)"), "w") do cache + Serialization.serialize(cache, gbox) + Serialization.serialize(cache, gconsts) + end + push!(toplevels, (gbox, gconsts, g_types, gtk_h)) end toplevels \ No newline at end of file From f6de43755ab26d7f5a8cf1233b322fc449d1a663 Mon Sep 17 00:00:00 2001 From: coloursofnoise <53288101+coloursofnoise@users.noreply.github.com> Date: Fri, 1 Jan 2021 17:42:35 -0800 Subject: [PATCH 09/11] Apply suggestions from code review. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Mosè Giordano --- gen/gtk_auto_gen.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gen/gtk_auto_gen.jl b/gen/gtk_auto_gen.jl index 96cce1cc..ddd17466 100644 --- a/gen/gtk_auto_gen.jl +++ b/gen/gtk_auto_gen.jl @@ -24,7 +24,7 @@ end # set this to `stdlib/include/on/your/specific/platform` (see https://github.com/JuliaInterop/Clang.jl) const STD_INCLUDE = "" -const LIBGTK3_INCLUDE = joinpath(dirname(GTK3_jll.libgtk3_path), "..", "include", "gtk-3.0", "gtk") |> normpath +const LIBGTK3_INCLUDE = joinpath(GTK3_jll.artifact_dir, "include", "gtk-3.0", "gtk") const SOURCES = vcat(GTK3_jll.PATH_list, GTK3_jll.LIBPATH_list) const DEPENDENCIES = vcat([readdir(dep; join=true) for dep in joinpath.(SOURCES, "..", "include") if isdir(dep)]...) .|> normpath # glibconfig.h @@ -90,4 +90,4 @@ let gtk_version = 3 end push!(toplevels, (gbox, gconsts, g_types, gtk_h)) end -toplevels \ No newline at end of file +toplevels From fc95fa67f086a6b967598237730651d3add77da9 Mon Sep 17 00:00:00 2001 From: coloursofnoise <53288101+coloursofnoise@users.noreply.github.com> Date: Sun, 3 Jan 2021 03:32:49 -0800 Subject: [PATCH 10/11] Run generator scripts --- gen/gbox3 | 138 +++++++++++++++++++++++++---------------- gen/gconsts3 | 140 +++++++++++++++++++++++++++++++++--------- gen/gtk3_julia_ser10 | Bin 0 -> 584136 bytes gen/gtk_consts_gen.jl | 4 +- 4 files changed, 197 insertions(+), 85 deletions(-) create mode 100644 gen/gtk3_julia_ser10 diff --git a/gen/gbox3 b/gen/gbox3 index 17f7b9e2..0d7e6bc5 100644 --- a/gen/gbox3 +++ b/gen/gbox3 @@ -2,8 +2,7 @@ quote $(Expr(:toplevel, :(module GAccessor import ..Gtk import ..Gtk.GObject - - export group, icon_pixbuf, iter_at_position, from_icon_name, path_at_pos, style_property, use_stock, scale_factor, minimum_key_length, pulse_step, buildable_property, mark, show_preview_entry, start_position, pango_context, object_name, child_visible, preferred_size, max_content_width, level_indentation, transient_for, pixels_with_length, cursor_on_cell, line_count, request_mode, monospace, from_pixbuf, current_item, section_type, has_origin, active, cell_at_position, orientation, tab_label_text, sort_indicator, documenters, sort_func, display_name, activatable, child_secondary, tab_vborder, options, inline_completion, activate_on_single_click, background, ellipsize, has_resize_grip, digits, junction_sides, icon_gicon, create_folders, size_of_row, tab_pos, attributes, show_arrow, path, qdata_full, shadow_type, event_window, font_family, realized, row_separator_func, default_left_margin, has_tooltip, sort_order, nth_page, tooltip_row, complete, accept_label, program_name, kinetic_scrolling, device_enabled, description, hover_expand, max_content_height, invisible_char, drop_index, width_chars, startup_id, upper_stepper_sensitivity, item_column, tooltip_window, preferred_width, image_position, action_widget, capture_button_press, menu_label, default_bottom_margin, track_motion, property, data_full, justify, inner_border, progress_pulse_step, focus_on_map, iter_at_line_offset, halign, background_rgba, destroy_count_func, icon_tooltip_markup, window_type, serialize_formats, use_alpha, inconsistent, tab_hborder, file, homogeneous, max_width_chars, modal, extra_widget, baseline_position, ellipsize_mode, default_icon, targets, font_name, item_at_pos, byte_length, iter_at_mark, vadjustment, value_as_int, focus_visible, deletable, parent, direction, width, tooltip_context, predicted_presentation_time, from_animation, inline_selection, indices, application_info, sensitive, margin_top, flags, data_with_length, text_orientation, attached_to, tearoff_state, current_folder_file, license, size_request, left_margin, hscroll_policy, draw_value, for_attach_widget, opacity, ancestor, single_line_mode, toplevel, selection, modified, preferred_height, column, numeric, bits_per_sample, title, submenu, progress_fraction, fixed_size, fixed_width, label_widget, deserialize_formats, render_icon_surface, label_fill, current_icon_drag_source, search_position_func, meta_marshal, cursor_visible, focus_siblings, do_overwrite_confirmation, step_increment, focus_hadjustment, is_important, top_margin, placeholder_text, toolbar_style, show_tips, line_wrap, flippable, child_non_homogeneous, border_color, font_face, stock_id, website, end_line, preferred_width_for_height, preferred_height_for_width, default_widget, receives_default, font_size, resize_toplevel, visible_rect, uri, pixels_below_lines, urgency_hint, icon_name, yalign, mnemonic_widget, cursor_locations, keep_below, justification, focus_from_sibling, attach_widget, alignment, uri_display, pixels_above_lines, current_page, valign, destroy_with_parent, margin_right, text_column, child_packing, text_alignment, popup_single_match, presentation_time, items, uris, button, search_equal_func, char_count, completion, bin_window, end_position, aligned_area, expanded, row_spacing, select_function, siblings, style_context, range_rect, placement, icon_tooltip_text, resizable, slider_size_fixed, min_content_height, image, n_pages, stock, margin_bottom, vscroll_policy, default, type_hint, gravity, alternative_button_order, default_response, iter_at_line, background_area, model, accel_group, added, cursor, parent_window, default_right_margin, is_locked, font, adjustment, option, max_length, center_widget, layout, menu, can_default, right_margin, area, translator_credits, filename, visual, current_uri, state, storage_type, short_name, from_resource, header_bar, selected_rows, iter_location, show_not_found, accept_focus, target, expander_column, depth, preview_text, child1, slice, clipboard, action_area, default_sort_func, cell_data_func, show_border, website_label, cell_area, lines, bounds, can_create_tags, from_stock, response_sensitive, user_data, pixbuf, lower_stepper_sensitivity, allocation, headers_clickable, sizing, logo_icon_name, n_items, handle_window, from_file, slider_range, min_slider_size, hscrollbar, accel_path, action_target, sort_type, icon_from_gicon, copy_target_list, rules_hint, application, line_wrap_mode, window, icon_size, double_buffered, priority, hide_titlebar_when_maximized, icon_activatable, iter_at_child_anchor, bottom_margin, icon_from_file, visible_func, show_hidden, internal_child, deleted, reserve_toggle_size, no_show_all, vscrollbar, markup_column, visibility, input_purpose, hexpand_set, upper, preview_file, monitor, use_underline, rowstride, accessible, choice, tooltip_item, text_area, wide_handle, markup_with_mnemonic, valuesv, tooltip_cell, groups, icon_from_icon_name, frame_clock, label, objects, action, from_surface, reorderable, proxy, sibling_index, xalign, row_drag_data, sort_column_id, hexpand, data, indices_with_depth, arrow_tooltip_markup, default_icon_list, vexpand, nth_item, string_from_iter, drag_dest_row, interactive_debugging, use_size, propagate_natural_width, default_size, has_user_ref_count, update_policy, hover_selection, support_multidevice, proxy_menu_item, length, overwrite_mode, format, resize_mode, action_name, type_from_name, use_preview_label, tooltip_markup, events, wrap_mode, start_iter, text_size_group, page_increment, wrap, item_width, iter_at_line_index, margin_left, settings, filenames, copyright, version, height, text, filter, detailed_action_name, mode, wmclass, child, object_type, icon_drag_source, columns, layout_offsets, start_line, fill_level, allocated_width, focus_vadjustment, iter_first, relief, snap_to_ticks, fraction, mapped, radio, preview_widget, resize_grip_area, editable, show_expanders, item_orientation, enable_search, debug_updates, font_options, composite_name, gicon, match_func, select_multiple, show_style, input_hints, chars, inverted, icon_from_pixbuf, pixbuf_column, context_id, role, reserve_indicator, child_requisition, clickable, tab_reorderable, qdata, icon_at_pos, alternative_button_order_from_array, restrict_to_fill_level, tabs, keep_above, icon, children, current_name, hadjustment, action_target_value, has_alpha, authors, filter_func, icon_set, pixels, device_events, expand, wrap_license, decorated, requisition, policy, cell_allocation, widget, max_width, selectable, visible_vertical, n_channels, current_path_string, drag_dest_item, increments, overwrite, skip_taskbar_hint, item_row, rgba, frame_counter, limit, cursor_hadjustment, relief_style, current_folder, preview_uri, value, headers_visible, show_private, edit_widget, icon_widget, use_markup, pointer, show_size, marshal, has_selection, position, visible, scale, accepts_tab, buffer, text_length, drop_highlight_item, private_hint, response_for_widget, cell_rect, column_drag_function, applications, min_content_width, style, visible_column, popup_completion, use_font, refresh_interval, margin_end, label_align, column_spacing, allocated_baseline, has_window, left_gravity, x_offset, icon_from_stock, titlebar, value_pos, vexpand_set, fit_model, dest_row_at_pos, app_paintable, cancel_label, search_column, background_color, range, menu_label_text, focus_cell, completion_prefix, border_width, allocated_size, draw_sensitive, default_geometry, valign_with_baseline, column_types, insert, data_type, option_group, selected_items, color, scrollable, path_for_child, iter_from_string, logo, indent, round_digits, action_group, border_window_size, state_flags, visible_range, selection_mode, text_with_mnemonic, overlay_scrolling, spacing, edited_cell, cells, local_only, grid_lines, files, active_text, mnemonic_keyval, object, icon_list, default_attributes, auto_startup_notification, use_drag_window, line_yrange, iter_at_offset, section, modifier_mask, modify_func, rubber_banding, always_show_image, artists, item_index, margin, fixed_height_from_font, activates_default, column_type, lower, clip, message_area, item_padding, from_gicon, selected, has_frame, geometry_hints, screen, animation, comments, show_tabs, child2, minimum_increment, tag_table, search_entry, mime_type, disabled, cell_data, focus_chain, icon_factory, tooltip_column, preview_widget_active, dest_item_at_pos, colorspace, frame_time, from_icon_set, end_iter, name, icon_stock, focus_on_click, widget_for_response, extensions, license_type, show_events, line_at_y, ppd_name, icon_storage_type, track_visited_links, target_list, can_focus, iter, visible_horizontal, tab_label, font_map, page_size, min_width, reallocate_redraws, font_desc, mime_types, group_name, display, padding, content_area, size, propagate_natural_height, paste_target_list, template_child, skip_pager_hint, n_columns, margin_start, allocated_height, default_top_margin, preview_filename, icon_area, enable_tree_lines, app_info, translation_domain, selection_bound, render_icon_pixbuf, mnemonic_modifier, iter_at_location, age, mnemonics_visible, pixels_inside_wrap, redraw_on_allocate, show_icons, displayed_row, icon_sensitive, tooltip_text, angle, fixed_height_mode, focus, paper_sizes, preferred_height_and_baseline_for_width, pixel_size, root_window, pattern, content_type, current_folder_uri, show_fill_level, draw, show_text, selection_bounds, tree_view, entry, visited, arrow_tooltip_text, tab_detachable, right_justified, focus_child, markup, border + export group, icon_pixbuf, iter_at_position, from_icon_name, path_at_pos, style_property, use_stock, scale_factor, minimum_key_length, pulse_step, buildable_property, mark, show_preview_entry, start_position, pango_context, object_name, child_visible, preferred_size, max_content_width, level_indentation, transient_for, pixels_with_length, cursor_on_cell, line_count, request_mode, monospace, language, from_pixbuf, current_item, section_type, has_origin, active, cell_at_position, orientation, tab_label_text, sort_indicator, documenters, sort_func, display_name, activatable, child_secondary, tab_vborder, options, inline_completion, activate_on_single_click, background, ellipsize, has_resize_grip, digits, junction_sides, icon_gicon, create_folders, size_of_row, tab_pos, attributes, show_arrow, path, qdata_full, shadow_type, event_window, font_family, realized, row_separator_func, default_left_margin, has_tooltip, sort_order, nth_page, tooltip_row, complete, accept_label, program_name, kinetic_scrolling, device_enabled, description, hover_expand, max_content_height, invisible_char, drop_index, width_chars, startup_id, upper_stepper_sensitivity, item_column, tooltip_window, preferred_width, image_position, action_widget, capture_button_press, menu_label, default_bottom_margin, track_motion, property, data_full, justify, inner_border, progress_pulse_step, focus_on_map, iter_at_line_offset, halign, background_rgba, destroy_count_func, icon_tooltip_markup, window_type, serialize_formats, use_alpha, inconsistent, tab_hborder, file, homogeneous, max_width_chars, modal, extra_widget, baseline_position, ellipsize_mode, default_icon, targets, font_name, item_at_pos, byte_length, iter_at_mark, vadjustment, value_as_int, focus_visible, font_features, deletable, parent, direction, width, tooltip_context, predicted_presentation_time, from_animation, inline_selection, indices, application_info, sensitive, margin_top, flags, data_with_length, text_orientation, attached_to, tearoff_state, current_folder_file, license, size_request, left_margin, hscroll_policy, draw_value, for_attach_widget, opacity, ancestor, single_line_mode, toplevel, selection, modified, preferred_height, column, numeric, bits_per_sample, title, submenu, progress_fraction, fixed_size, fixed_width, label_widget, deserialize_formats, render_icon_surface, label_fill, current_icon_drag_source, search_position_func, meta_marshal, cursor_visible, focus_siblings, do_overwrite_confirmation, step_increment, focus_hadjustment, is_important, top_margin, placeholder_text, toolbar_style, show_tips, line_wrap, flippable, child_non_homogeneous, border_color, font_face, stock_id, website, end_line, preferred_width_for_height, preferred_height_for_width, default_widget, receives_default, font_size, resize_toplevel, visible_rect, uri, pixels_below_lines, urgency_hint, icon_name, yalign, mnemonic_widget, cursor_locations, keep_below, justification, focus_from_sibling, attach_widget, alignment, uri_display, pixels_above_lines, current_page, valign, destroy_with_parent, margin_right, text_column, child_packing, text_alignment, popup_single_match, presentation_time, items, uris, button, search_equal_func, char_count, completion, bin_window, end_position, aligned_area, expanded, row_spacing, select_function, siblings, style_context, range_rect, placement, icon_tooltip_text, resizable, slider_size_fixed, min_content_height, image, n_pages, stock, margin_bottom, vscroll_policy, default, type_hint, gravity, alternative_button_order, default_response, iter_at_line, background_area, model, accel_group, cursor, parent_window, default_right_margin, is_locked, font, adjustment, option, max_length, center_widget, layout, menu, can_default, right_margin, area, translator_credits, filename, visual, current_uri, state, storage_type, short_name, from_resource, header_bar, selected_rows, iter_location, show_not_found, accept_focus, target, expander_column, depth, preview_text, child1, slice, clipboard, action_area, default_sort_func, cell_data_func, show_border, website_label, cell_area, lines, bounds, can_create_tags, from_stock, response_sensitive, user_data, pixbuf, lower_stepper_sensitivity, allocation, headers_clickable, sizing, logo_icon_name, n_items, handle_window, from_file, slider_range, min_slider_size, hscrollbar, accel_path, action_target, sort_type, icon_from_gicon, copy_target_list, rules_hint, application, line_wrap_mode, window, icon_size, double_buffered, priority, hide_titlebar_when_maximized, icon_activatable, iter_at_child_anchor, bottom_margin, icon_from_file, visible_func, show_hidden, internal_child, deleted, reserve_toggle_size, no_show_all, vscrollbar, markup_column, visibility, input_purpose, hexpand_set, upper, preview_file, monitor, use_underline, rowstride, accessible, choice, tooltip_item, text_area, wide_handle, markup_with_mnemonic, valuesv, tooltip_cell, groups, icon_from_icon_name, frame_clock, label, objects, action, from_surface, reorderable, proxy, sibling_index, xalign, row_drag_data, sort_column_id, hexpand, data, indices_with_depth, arrow_tooltip_markup, level, default_icon_list, vexpand, nth_item, string_from_iter, drag_dest_row, interactive_debugging, use_size, propagate_natural_width, default_size, has_user_ref_count, update_policy, hover_selection, support_multidevice, proxy_menu_item, length, overwrite_mode, format, resize_mode, action_name, type_from_name, use_preview_label, tooltip_markup, events, wrap_mode, start_iter, text_size_group, page_increment, wrap, item_width, iter_at_line_index, margin_left, settings, filenames, copyright, version, height, text, filter, detailed_action_name, mode, wmclass, child, object_type, icon_drag_source, columns, layout_offsets, start_line, fill_level, allocated_width, focus_vadjustment, iter_first, relief, snap_to_ticks, fraction, mapped, radio, preview_widget, resize_grip_area, editable, show_expanders, item_orientation, enable_search, debug_updates, font_options, composite_name, gicon, match_func, select_multiple, show_style, input_hints, chars, inverted, icon_from_pixbuf, pixbuf_column, context_id, role, reserve_indicator, child_requisition, clickable, tab_reorderable, qdata, icon_at_pos, alternative_button_order_from_array, restrict_to_fill_level, tabs, keep_above, icon, children, current_name, hadjustment, action_target_value, has_alpha, authors, filter_func, icon_set, pixels, device_events, expand, wrap_license, decorated, requisition, policy, cell_allocation, widget, max_width, selectable, visible_vertical, n_channels, current_path_string, drag_dest_item, increments, overwrite, skip_taskbar_hint, item_row, rgba, frame_counter, limit, cursor_hadjustment, relief_style, current_folder, preview_uri, value, headers_visible, show_private, edit_widget, icon_widget, use_markup, pointer, show_size, marshal, has_selection, position, visible, scale, accepts_tab, buffer, text_length, drop_highlight_item, private_hint, response_for_widget, cell_rect, column_drag_function, applications, min_content_width, style, visible_column, popup_completion, use_font, refresh_interval, margin_end, label_align, column_spacing, allocated_baseline, has_window, left_gravity, x_offset, icon_from_stock, titlebar, value_pos, vexpand_set, fit_model, dest_row_at_pos, app_paintable, cancel_label, search_column, background_color, range, menu_label_text, focus_cell, completion_prefix, border_width, allocated_size, draw_sensitive, default_geometry, valign_with_baseline, column_types, insert, data_type, option_group, selected_items, color, scrollable, path_for_child, iter_from_string, logo, indent, round_digits, action_group, border_window_size, state_flags, visible_range, selection_mode, text_with_mnemonic, overlay_scrolling, spacing, edited_cell, cells, local_only, grid_lines, files, active_text, mnemonic_keyval, object, icon_list, default_attributes, auto_startup_notification, use_drag_window, line_yrange, iter_at_offset, section, modifier_mask, modify_func, rubber_banding, always_show_image, artists, item_index, margin, fixed_height_from_font, activates_default, column_type, lower, clip, message_area, item_padding, from_gicon, selected, has_frame, geometry_hints, screen, animation, comments, show_tabs, child2, minimum_increment, tag_table, search_entry, mime_type, disabled, cell_data, focus_chain, icon_factory, tooltip_column, preview_widget_active, dest_item_at_pos, colorspace, frame_time, from_icon_set, end_iter, name, icon_stock, focus_on_click, widget_for_response, extensions, license_type, show_events, line_at_y, ppd_name, icon_storage_type, track_visited_links, target_list, can_focus, iter, visible_horizontal, tab_label, font_map, page_size, min_width, reallocate_redraws, font_desc, mime_types, group_name, display, padding, content_area, size, propagate_natural_height, paste_target_list, template_child, skip_pager_hint, n_columns, margin_start, allocated_height, default_top_margin, preview_filename, icon_area, enable_tree_lines, app_info, translation_domain, selection_bound, render_icon_pixbuf, mnemonic_modifier, iter_at_location, age, mnemonics_visible, pixels_inside_wrap, redraw_on_allocate, show_icons, displayed_row, icon_sensitive, tooltip_text, angle, fixed_height_mode, focus, paper_sizes, preferred_height_and_baseline_for_width, pixel_size, root_window, pattern, content_type, current_folder_uri, show_fill_level, draw, show_text, selection_bounds, tree_view, entry, visited, arrow_tooltip_text, tab_detachable, right_justified, focus_child, markup, border function marshal(closure::Gtk.GClosure, marshal_) ccall((:g_closure_set_marshal, Gtk.GLib.libgobject), Nothing, (Ptr{Gtk.GClosure}, Ptr{Nothing}), closure, marshal_) return closure @@ -43,22 +42,22 @@ $(Expr(:toplevel, :(module GAccessor return show_events_ end function frame_counter(timings::Gtk.GdkFrameTimings) - return ccall((:gdk_frame_timings_get_frame_counter, Gtk.libgdk), Clong, (Ptr{Gtk.GdkFrameTimings},), timings) + return ccall((:gdk_frame_timings_get_frame_counter, Gtk.libgdk), Clonglong, (Ptr{Gtk.GdkFrameTimings},), timings) end function complete(timings::Gtk.GdkFrameTimings) return convert(Bool, ccall((:gdk_frame_timings_get_complete, Gtk.libgdk), Cint, (Ptr{Gtk.GdkFrameTimings},), timings)) end function frame_time(timings::Gtk.GdkFrameTimings) - return ccall((:gdk_frame_timings_get_frame_time, Gtk.libgdk), Clong, (Ptr{Gtk.GdkFrameTimings},), timings) + return ccall((:gdk_frame_timings_get_frame_time, Gtk.libgdk), Clonglong, (Ptr{Gtk.GdkFrameTimings},), timings) end function presentation_time(timings::Gtk.GdkFrameTimings) - return ccall((:gdk_frame_timings_get_presentation_time, Gtk.libgdk), Clong, (Ptr{Gtk.GdkFrameTimings},), timings) + return ccall((:gdk_frame_timings_get_presentation_time, Gtk.libgdk), Clonglong, (Ptr{Gtk.GdkFrameTimings},), timings) end function refresh_interval(timings::Gtk.GdkFrameTimings) - return ccall((:gdk_frame_timings_get_refresh_interval, Gtk.libgdk), Clong, (Ptr{Gtk.GdkFrameTimings},), timings) + return ccall((:gdk_frame_timings_get_refresh_interval, Gtk.libgdk), Clonglong, (Ptr{Gtk.GdkFrameTimings},), timings) end function predicted_presentation_time(timings::Gtk.GdkFrameTimings) - return ccall((:gdk_frame_timings_get_predicted_presentation_time, Gtk.libgdk), Clong, (Ptr{Gtk.GdkFrameTimings},), timings) + return ccall((:gdk_frame_timings_get_predicted_presentation_time, Gtk.libgdk), Clonglong, (Ptr{Gtk.GdkFrameTimings},), timings) end function debug_updates(setting::Bool) ccall((:gdk_window_set_debug_updates, Gtk.libgdk), Nothing, (Cint,), setting) @@ -89,7 +88,7 @@ $(Expr(:toplevel, :(module GAccessor return ccall((:gdk_pixbuf_get_rowstride, Gtk.libgdk_pixbuf), Cint, (Ptr{Gtk.GObject},), pixbuf) end function byte_length(pixbuf::Gtk.GdkPixbuf) - return ccall((:gdk_pixbuf_get_byte_length, Gtk.libgdk_pixbuf), Culong, (Ptr{Gtk.GObject},), pixbuf) + return ccall((:gdk_pixbuf_get_byte_length, Gtk.libgdk_pixbuf), Culonglong, (Ptr{Gtk.GObject},), pixbuf) end function pixels_with_length(pixbuf::Gtk.GdkPixbuf) length = Gtk.mutable(UInt32) @@ -175,11 +174,16 @@ $(Expr(:toplevel, :(module GAccessor ccall((:gtk_widget_get_preferred_height_and_baseline_for_width, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Cint, Ptr{Cint}, Ptr{Cint}, Ptr{Cint}, Ptr{Cint}), widget, width, minimum_height, natural_height, minimum_baseline, natural_baseline) return (minimum_height[], natural_height[], minimum_baseline[], natural_baseline[]) end - function preferred_size(widget::Gtk.GtkWidget, minimum_size, natural_size) - return ccall((:gtk_widget_get_preferred_size, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Nothing}, Ptr{Nothing}), widget, minimum_size, natural_size) + function preferred_size(widget::Gtk.GtkWidget) + natural_size = Gtk.mutable(Gtk.GtkRequisition) + minimum_size = Gtk.mutable(Gtk.GtkRequisition) + ccall((:gtk_widget_get_preferred_size, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Gtk.GtkRequisition}, Ptr{Gtk.GtkRequisition}), widget, minimum_size, natural_size) + return (minimum_size[], natural_size[]) end - function child_requisition(widget::Gtk.GtkWidget, requisition) - return ccall((:gtk_widget_get_child_requisition, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Nothing}), widget, requisition) + function child_requisition(widget::Gtk.GtkWidget) + requisition = Gtk.mutable(Gtk.GtkRequisition) + ccall((:gtk_widget_get_child_requisition, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Gtk.GtkRequisition}), widget, requisition) + return requisition[] end function accel_path(widget::Gtk.GtkWidget, accel_path_, accel_group) ccall((:gtk_widget_set_accel_path, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{UInt8}, Ptr{Gtk.GObject}), widget, accel_path_, accel_group) @@ -348,8 +352,10 @@ $(Expr(:toplevel, :(module GAccessor ccall((:gtk_widget_get_clip, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Gtk.GdkRectangle}), widget, clip_) return clip_[] end - function requisition(widget::Gtk.GtkWidget, requisition_) - return ccall((:gtk_widget_get_requisition, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Nothing}), widget, requisition_) + function requisition(widget::Gtk.GtkWidget) + requisition_ = Gtk.mutable(Gtk.GtkRequisition) + ccall((:gtk_widget_get_requisition, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Gtk.GtkRequisition}), widget, requisition_) + return requisition_[] end function size_request(widget::Gtk.GtkWidget, width, height) ccall((:gtk_widget_set_size_request, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Cint, Cint), widget, width, height) @@ -387,7 +393,7 @@ $(Expr(:toplevel, :(module GAccessor return convert(Gtk.GtkWidget, ccall((:gtk_widget_get_toplevel, Gtk.libgtk), Ptr{Gtk.GObject}, (Ptr{Gtk.GObject},), widget)) end function ancestor(widget::Gtk.GtkWidget, widget_type) - return convert(Gtk.GtkWidget, ccall((:gtk_widget_get_ancestor, Gtk.libgtk), Ptr{Gtk.GObject}, (Ptr{Gtk.GObject}, Culong), widget, widget_type)) + return convert(Gtk.GtkWidget, ccall((:gtk_widget_get_ancestor, Gtk.libgtk), Ptr{Gtk.GObject}, (Ptr{Gtk.GObject}, Culonglong), widget, widget_type)) end function visual(widget::Gtk.GtkWidget) return ccall((:gtk_widget_get_visual, Gtk.libgtk), Ptr{Nothing}, (Ptr{Gtk.GObject},), widget) @@ -588,7 +594,7 @@ $(Expr(:toplevel, :(module GAccessor return ccall((:gtk_widget_get_modifier_mask, Gtk.libgtk), Cint, (Ptr{Gtk.GObject}, Cint), widget, intent) end function template_child(widget::Gtk.GtkWidget, widget_type, name) - return convert(Gtk.GObject, ccall((:gtk_widget_get_template_child, Gtk.libgtk), Ptr{Gtk.GObject}, (Ptr{Gtk.GObject}, Culong, Ptr{UInt8}), widget, widget_type, name)) + return convert(Gtk.GObject, ccall((:gtk_widget_get_template_child, Gtk.libgtk), Ptr{Gtk.GObject}, (Ptr{Gtk.GObject}, Culonglong, Ptr{UInt8}), widget, widget_type, name)) end function action_group(widget::Gtk.GtkWidget, prefix) return ccall((:gtk_widget_get_action_group, Gtk.libgtk), Ptr{Nothing}, (Ptr{Gtk.GObject}, Ptr{UInt8}), widget, prefix) @@ -1442,7 +1448,7 @@ $(Expr(:toplevel, :(module GAccessor return ccall((:gtk_tree_model_get_n_columns, Gtk.libgtk), Cint, (Ptr{Gtk.GObject},), tree_model) end function column_type(tree_model::Gtk.GtkTreeModel, index_) - return ccall((:gtk_tree_model_get_column_type, Gtk.libgtk), Culong, (Ptr{Gtk.GObject}, Cint), tree_model, index_) + return ccall((:gtk_tree_model_get_column_type, Gtk.libgtk), Culonglong, (Ptr{Gtk.GObject}, Cint), tree_model, index_) end function iter(tree_model::Gtk.GtkTreeModel) path = Gtk.mutable(Gtk.GtkTreePath) @@ -1465,7 +1471,7 @@ $(Expr(:toplevel, :(module GAccessor return (convert(Gtk.GtkTreePath, ccall((:gtk_tree_model_get_path, Gtk.libgtk), Ptr{Gtk.GtkTreePath}, (Ptr{Gtk.GObject}, Ptr{Gtk.GtkTreeIter}), tree_model, iter)), iter[]) end function value(tree_model::Gtk.GtkTreeModel, iter, column, value_) - return ccall((:gtk_tree_model_get_value, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ref{Gtk.GtkTreeIter}, Cint, Ptr{Nothing}), tree_model, iter, column, value_) + return ccall((:gtk_tree_model_get_value, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Gtk.GtkTreeIter}, Cint, Ptr{Nothing}), tree_model, iter, column, value_) end function request_mode(cell::Gtk.GtkCellRenderer) return ccall((:gtk_cell_renderer_get_request_mode, Gtk.libgtk), Cint, (Ptr{Gtk.GObject},), cell) @@ -1494,8 +1500,11 @@ $(Expr(:toplevel, :(module GAccessor ccall((:gtk_cell_renderer_get_preferred_width_for_height, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Gtk.GObject}, Cint, Ptr{Cint}, Ptr{Cint}), cell, widget, height, minimum_width, natural_width) return (minimum_width[], natural_width[]) end - function preferred_size(cell::Gtk.GtkCellRenderer, widget, minimum_size, natural_size) - return ccall((:gtk_cell_renderer_get_preferred_size, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Gtk.GObject}, Ptr{Nothing}, Ptr{Nothing}), cell, widget, minimum_size, natural_size) + function preferred_size(cell::Gtk.GtkCellRenderer, widget) + natural_size = Gtk.mutable(Gtk.GtkRequisition) + minimum_size = Gtk.mutable(Gtk.GtkRequisition) + ccall((:gtk_cell_renderer_get_preferred_size, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Gtk.GObject}, Ptr{Gtk.GtkRequisition}, Ptr{Gtk.GtkRequisition}), cell, widget, minimum_size, natural_size) + return (minimum_size[], natural_size[]) end function aligned_area(cell::Gtk.GtkCellRenderer, widget, flags) aligned_area_ = Gtk.mutable(Gtk.GdkRectangle) @@ -1876,7 +1885,7 @@ $(Expr(:toplevel, :(module GAccessor return convert(Bool, ccall((:gtk_editable_get_editable, Gtk.libgtk), Cint, (Ptr{Gtk.GObject},), editable_)) end function column_types(list_store::Gtk.GtkListStore, n_columns, types) - ccall((:gtk_list_store_set_column_types, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Cint, Ptr{Culong}), list_store, n_columns, types) + ccall((:gtk_list_store_set_column_types, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Cint, Ptr{Culonglong}), list_store, n_columns, types) return list_store end function value(list_store::Gtk.GtkListStore, iter, column, value_) @@ -1892,7 +1901,7 @@ $(Expr(:toplevel, :(module GAccessor return filter end function modify_func(filter::Gtk.GtkTreeModelFilter, n_columns, types, func, data, destroy) - ccall((:gtk_tree_model_filter_set_modify_func, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Cint, Ptr{Culong}, Ptr{Nothing}, Ptr{Nothing}, Ptr{Nothing}), filter, n_columns, types, func, data, destroy) + ccall((:gtk_tree_model_filter_set_modify_func, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Cint, Ptr{Culonglong}, Ptr{Nothing}, Ptr{Nothing}, Ptr{Nothing}), filter, n_columns, types, func, data, destroy) return filter end function visible_column(filter::Gtk.GtkTreeModelFilter, column) @@ -2613,7 +2622,7 @@ $(Expr(:toplevel, :(module GAccessor end function type_from_name(builder::Gtk.GtkBuilder) type_name = Gtk.mutable(UInt8) - return (ccall((:gtk_builder_get_type_from_name, Gtk.libgtk), Culong, (Ptr{Gtk.GObject}, Ptr{UInt8}), builder, type_name), type_name[]) + return (ccall((:gtk_builder_get_type_from_name, Gtk.libgtk), Culonglong, (Ptr{Gtk.GObject}, Ptr{UInt8}), builder, type_name), type_name[]) end function application(builder::Gtk.GtkBuilder, application_) ccall((:gtk_builder_set_application, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Nothing}), builder, application_) @@ -2799,7 +2808,7 @@ $(Expr(:toplevel, :(module GAccessor return convert(Gtk.GtkTreePath, ccall((:gtk_cell_view_get_displayed_row, Gtk.libgtk), Ptr{Gtk.GtkTreePath}, (Ptr{Gtk.GObject},), cell_view)) end function background_rgba(cell_view::Gtk.GtkCellView, rgba) - ccall((:gtk_cell_view_set_background_rgba, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Nothing}), cell_view, rgba) + ccall((:gtk_cell_view_set_background_rgba, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Gtk.GdkRGBA}), cell_view, rgba) return cell_view end function draw_sensitive(cell_view::Gtk.GtkCellView) @@ -2816,9 +2825,10 @@ $(Expr(:toplevel, :(module GAccessor ccall((:gtk_cell_view_set_fit_model, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Cint), cell_view, fit_model_) return cell_view end - function size_of_row(cell_view::Gtk.GtkCellView, requisition) + function size_of_row(cell_view::Gtk.GtkCellView) + requisition = Gtk.mutable(Gtk.GtkRequisition) path = Gtk.mutable(Gtk.GtkTreePath) - return (convert(Bool, ccall((:gtk_cell_view_get_size_of_row, Gtk.libgtk), Cint, (Ptr{Gtk.GObject}, Ptr{Gtk.GtkTreePath}, Ptr{Nothing}), cell_view, path, requisition)), path[]) + return (convert(Bool, ccall((:gtk_cell_view_get_size_of_row, Gtk.libgtk), Cint, (Ptr{Gtk.GObject}, Ptr{Gtk.GtkTreePath}, Ptr{Gtk.GtkRequisition}), cell_view, path, requisition)), path[], requisition[]) end function background_color(cell_view::Gtk.GtkCellView, color) ccall((:gtk_cell_view_set_background_color, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Nothing}), cell_view, color) @@ -2887,8 +2897,14 @@ $(Expr(:toplevel, :(module GAccessor function reserve_indicator(menu_item::Gtk.GtkMenuItem) return convert(Bool, ccall((:gtk_menu_item_get_reserve_indicator, Gtk.libgtk), Cint, (Ptr{Gtk.GObject},), menu_item)) end + function rgba(chooser::Gtk.GtkColorChooser) + color = Gtk.mutable(Gtk.GdkRGBA) + ccall((:gtk_color_chooser_get_rgba, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Gtk.GdkRGBA}), chooser, color) + return color[] + end function rgba(chooser::Gtk.GtkColorChooser, color) - return ccall((:gtk_color_chooser_get_rgba, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Nothing}), chooser, color) + ccall((:gtk_color_chooser_set_rgba, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Gtk.GdkRGBA}), chooser, color) + return chooser end function use_alpha(chooser::Gtk.GtkColorChooser) return convert(Bool, ccall((:gtk_color_chooser_get_use_alpha, Gtk.libgtk), Cint, (Ptr{Gtk.GObject},), chooser)) @@ -3291,6 +3307,23 @@ $(Expr(:toplevel, :(module GAccessor function font_map(fontchooser::Gtk.GtkFontChooser) return ccall((:gtk_font_chooser_get_font_map, Gtk.libgtk), Ptr{Nothing}, (Ptr{Gtk.GObject},), fontchooser) end + function level(fontchooser::Gtk.GtkFontChooser, level_) + ccall((:gtk_font_chooser_set_level, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Cint), fontchooser, level_) + return fontchooser + end + function level(fontchooser::Gtk.GtkFontChooser) + return ccall((:gtk_font_chooser_get_level, Gtk.libgtk), Cint, (Ptr{Gtk.GObject},), fontchooser) + end + function font_features(fontchooser::Gtk.GtkFontChooser) + return ccall((:gtk_font_chooser_get_font_features, Gtk.libgtk), Ptr{UInt8}, (Ptr{Gtk.GObject},), fontchooser) + end + function language(fontchooser::Gtk.GtkFontChooser) + return ccall((:gtk_font_chooser_get_language, Gtk.libgtk), Ptr{UInt8}, (Ptr{Gtk.GObject},), fontchooser) + end + function language(fontchooser::Gtk.GtkFontChooser, language_) + ccall((:gtk_font_chooser_set_language, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{UInt8}), fontchooser, language_) + return fontchooser + end function style(provider::Gtk.GtkStyleProvider) path = Gtk.mutable(Gtk.GtkWidgetPath) return (ccall((:gtk_style_provider_get_style, Gtk.libgtk), Ptr{Nothing}, (Ptr{Gtk.GObject}, Ptr{Gtk.GtkWidgetPath}), provider, path), path[]) @@ -3378,14 +3411,20 @@ $(Expr(:toplevel, :(module GAccessor function junction_sides(context::Gtk.GtkStyleContext) return ccall((:gtk_style_context_get_junction_sides, Gtk.libgtk), Cint, (Ptr{Gtk.GObject},), context) end - function color(context::Gtk.GtkStyleContext, state, color_) - return ccall((:gtk_style_context_get_color, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Cint, Ptr{Nothing}), context, state, color_) + function color(context::Gtk.GtkStyleContext, state) + color_ = Gtk.mutable(Gtk.GdkRGBA) + ccall((:gtk_style_context_get_color, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Cint, Ptr{Gtk.GdkRGBA}), context, state, color_) + return color_[] end - function background_color(context::Gtk.GtkStyleContext, state, color) - return ccall((:gtk_style_context_get_background_color, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Cint, Ptr{Nothing}), context, state, color) + function background_color(context::Gtk.GtkStyleContext, state) + color = Gtk.mutable(Gtk.GdkRGBA) + ccall((:gtk_style_context_get_background_color, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Cint, Ptr{Gtk.GdkRGBA}), context, state, color) + return color[] end - function border_color(context::Gtk.GtkStyleContext, state, color) - return ccall((:gtk_style_context_get_border_color, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Cint, Ptr{Nothing}), context, state, color) + function border_color(context::Gtk.GtkStyleContext, state) + color = Gtk.mutable(Gtk.GdkRGBA) + ccall((:gtk_style_context_get_border_color, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Cint, Ptr{Gtk.GdkRGBA}), context, state, color) + return color[] end function font(context::Gtk.GtkStyleContext, state) return ccall((:gtk_style_context_get_font, Gtk.libgtk), Ptr{Nothing}, (Ptr{Gtk.GObject}, Cint), context, state) @@ -4116,31 +4155,22 @@ $(Expr(:toplevel, :(module GAccessor function mime_type(info::Gtk.GtkRecentInfo) return ccall((:gtk_recent_info_get_mime_type, Gtk.libgtk), Ptr{UInt8}, (Ptr{Gtk.GtkRecentInfo},), info) end - function added(info::Gtk.GtkRecentInfo) - return ccall((:gtk_recent_info_get_added, Gtk.libgtk), Clong, (Ptr{Gtk.GtkRecentInfo},), info) - end - function modified(info::Gtk.GtkRecentInfo) - return ccall((:gtk_recent_info_get_modified, Gtk.libgtk), Clong, (Ptr{Gtk.GtkRecentInfo},), info) - end - function visited(info::Gtk.GtkRecentInfo) - return ccall((:gtk_recent_info_get_visited, Gtk.libgtk), Clong, (Ptr{Gtk.GtkRecentInfo},), info) - end function private_hint(info::Gtk.GtkRecentInfo) return convert(Bool, ccall((:gtk_recent_info_get_private_hint, Gtk.libgtk), Cint, (Ptr{Gtk.GtkRecentInfo},), info)) end function application_info(info::Gtk.GtkRecentInfo, app_name) - time_ = Gtk.mutable(Clong) + time_ = Gtk.mutable(Cint) count = Gtk.mutable(UInt32) app_exec = Gtk.mutable(Ptr{UInt8}) - return (convert(Bool, ccall((:gtk_recent_info_get_application_info, Gtk.libgtk), Cint, (Ptr{Gtk.GtkRecentInfo}, Ptr{UInt8}, Ptr{Ptr{UInt8}}, Ptr{UInt32}, Ptr{Clong}), info, app_name, app_exec, count, time_)), app_exec[], count[], time_[]) + return (convert(Bool, ccall((:gtk_recent_info_get_application_info, Gtk.libgtk), Cint, (Ptr{Gtk.GtkRecentInfo}, Ptr{UInt8}, Ptr{Ptr{UInt8}}, Ptr{UInt32}, Ptr{Cint}), info, app_name, app_exec, count, time_)), app_exec[], count[], time_[]) end function applications(info::Gtk.GtkRecentInfo) - length = Gtk.mutable(Culong) - return (ccall((:gtk_recent_info_get_applications, Gtk.libgtk), Ptr{Ptr{UInt8}}, (Ptr{Gtk.GtkRecentInfo}, Ptr{Culong}), info, length), length[]) + length = Gtk.mutable(Culonglong) + return (ccall((:gtk_recent_info_get_applications, Gtk.libgtk), Ptr{Ptr{UInt8}}, (Ptr{Gtk.GtkRecentInfo}, Ptr{Culonglong}), info, length), length[]) end function groups(info::Gtk.GtkRecentInfo) - length = Gtk.mutable(Culong) - return (ccall((:gtk_recent_info_get_groups, Gtk.libgtk), Ptr{Ptr{UInt8}}, (Ptr{Gtk.GtkRecentInfo}, Ptr{Culong}), info, length), length[]) + length = Gtk.mutable(Culonglong) + return (ccall((:gtk_recent_info_get_groups, Gtk.libgtk), Ptr{Ptr{UInt8}}, (Ptr{Gtk.GtkRecentInfo}, Ptr{Culonglong}), info, length), length[]) end function icon(info::Gtk.GtkRecentInfo, size) return convert(Gtk.GdkPixbuf, ccall((:gtk_recent_info_get_icon, Gtk.libgtk), Ptr{Gtk.GObject}, (Ptr{Gtk.GtkRecentInfo}, Cint), info, size)) @@ -4231,8 +4261,8 @@ $(Expr(:toplevel, :(module GAccessor return ccall((:gtk_recent_chooser_get_items, Gtk.libgtk), Ptr{Gtk._GList{Nothing}}, (Ptr{Gtk.GObject},), chooser) end function uris(chooser::Gtk.GtkRecentChooser) - length = Gtk.mutable(Culong) - return (ccall((:gtk_recent_chooser_get_uris, Gtk.libgtk), Ptr{Ptr{UInt8}}, (Ptr{Gtk.GObject}, Ptr{Culong}), chooser, length), length[]) + length = Gtk.mutable(Culonglong) + return (ccall((:gtk_recent_chooser_get_uris, Gtk.libgtk), Ptr{Ptr{UInt8}}, (Ptr{Gtk.GObject}, Ptr{Culonglong}), chooser, length), length[]) end function filter(chooser::Gtk.GtkRecentChooser, filter_) ccall((:gtk_recent_chooser_set_filter, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Ptr{Nothing}), chooser, filter_) @@ -4924,7 +4954,7 @@ $(Expr(:toplevel, :(module GAccessor return (ccall((:gtk_tree_selection_get_selected_rows, Gtk.libgtk), Ptr{Gtk._GList{Nothing}}, (Ptr{Gtk.GObject}, Ptr{Ptr{Gtk.GObject}}), selection, model), convert(Gtk.GtkTreeModel, model[])) end function column_types(tree_store::Gtk.GtkTreeStore, n_columns, types) - ccall((:gtk_tree_store_set_column_types, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Cint, Ptr{Culong}), tree_store, n_columns, types) + ccall((:gtk_tree_store_set_column_types, Gtk.libgtk), Nothing, (Ptr{Gtk.GObject}, Cint, Ptr{Culonglong}), tree_store, n_columns, types) return tree_store end function value(tree_store::Gtk.GtkTreeStore, iter, column, value_) @@ -4936,10 +4966,10 @@ $(Expr(:toplevel, :(module GAccessor return tree_store end function object_type(path::Gtk.GtkWidgetPath, pos) - return ccall((:gtk_widget_path_iter_get_object_type, Gtk.libgtk), Culong, (Ptr{Gtk.GtkWidgetPath}, Cint), path, pos) + return ccall((:gtk_widget_path_iter_get_object_type, Gtk.libgtk), Culonglong, (Ptr{Gtk.GtkWidgetPath}, Cint), path, pos) end function object_type(path::Gtk.GtkWidgetPath, pos, type_) - ccall((:gtk_widget_path_iter_set_object_type, Gtk.libgtk), Nothing, (Ptr{Gtk.GtkWidgetPath}, Cint, Culong), path, pos, type_) + ccall((:gtk_widget_path_iter_set_object_type, Gtk.libgtk), Nothing, (Ptr{Gtk.GtkWidgetPath}, Cint, Culonglong), path, pos, type_) return path end function object_name(path::Gtk.GtkWidgetPath, pos) @@ -4970,7 +5000,7 @@ $(Expr(:toplevel, :(module GAccessor return path end function object_type(path::Gtk.GtkWidgetPath) - return ccall((:gtk_widget_path_get_object_type, Gtk.libgtk), Culong, (Ptr{Gtk.GtkWidgetPath},), path) + return ccall((:gtk_widget_path_get_object_type, Gtk.libgtk), Culonglong, (Ptr{Gtk.GtkWidgetPath},), path) end begin function default_icon_list() diff --git a/gen/gconsts3 b/gen/gconsts3 index 48439166..796150bf 100644 --- a/gen/gconsts3 +++ b/gen/gconsts3 @@ -1,6 +1,6 @@ quote $(Expr(:toplevel, :(module GConstants - export GUserDirectory, GFormatSizeFlags, GThreadError, GOnceStatus, GBookmarkFileError, GChecksumType, GConvertError, GDateDMY, GDateWeekday, GDateMonth, GTimeType, GFileError, GFileTest, GTraverseFlags, GTraverseType, GHookFlagMask, GIOCondition, GUnicodeType, GUnicodeBreakType, GUnicodeScript, GNormalizeMode, GIOError, GIOChannelError, GIOStatus, GSeekType, GIOFlags, GKeyFileError, GKeyFileFlags, GMarkupError, GMarkupParseFlags, GMarkupCollectType, GVariantClass, GVariantParseError, GLogLevelFlags, GLogWriterOutput, GOptionFlags, GOptionArg, GOptionError, GRegexError, GRegexCompileFlags, GRegexMatchFlags, GErrorType, GTokenType, GShellError, GSliceConfig, GSpawnError, GSpawnFlags, GAsciiType, GTestTrapFlags, GTestSubprocessFlags, GTestLogType, GTestFileType, GThreadPriority, GTypeDebugFlags, GTypeFundamentalFlags, GTypeFlags, GParamFlags, GSignalFlags, GConnectFlags, GSignalMatchType, GBindingFlags, GAppInfoCreateFlags, GConverterFlags, GConverterResult, GDataStreamByteOrder, GDataStreamNewlineType, GFileAttributeType, GFileAttributeInfoFlags, GFileAttributeStatus, GFileQueryInfoFlags, GFileCreateFlags, GFileMeasureFlags, GMountMountFlags, GMountUnmountFlags, GDriveStartFlags, GDriveStartStopType, GFileCopyFlags, GFileMonitorFlags, GFileType, GFilesystemPreviewType, GFileMonitorEvent, GIOErrorEnum, GAskPasswordFlags, GPasswordSave, GMountOperationResult, GOutputStreamSpliceFlags, GIOStreamSpliceFlags, GEmblemOrigin, GResolverError, GResolverRecordType, GResourceError, GResourceFlags, GResourceLookupFlags, GSocketFamily, GSocketType, GSocketMsgFlags, GSocketProtocol, GZlibCompressorFormat, GUnixSocketAddressType, GBusType, GBusNameOwnerFlags, GBusNameWatcherFlags, GDBusProxyFlags, GDBusError, GDBusConnectionFlags, GDBusCapabilityFlags, GDBusCallFlags, GDBusMessageType, GDBusMessageFlags, GDBusMessageHeaderField, GDBusPropertyInfoFlags, GDBusSubtreeFlags, GDBusServerFlags, GDBusSignalFlags, GDBusSendMessageFlags, GCredentialsType, GDBusMessageByteOrder, GApplicationFlags, GTlsError, GTlsCertificateFlags, GTlsAuthenticationMode, GTlsRehandshakeMode, GTlsPasswordFlags, GTlsInteractionResult, GDBusInterfaceSkeletonFlags, GDBusObjectManagerClientFlags, GTlsDatabaseVerifyFlags, GTlsDatabaseLookupFlags, GTlsCertificateRequestFlags, GIOModuleScopeFlags, GSocketClientEvent, GSocketListenerEvent, GTestDBusFlags, GSubprocessFlags, GNotificationPriority, GNetworkConnectivity, GModuleFlags, GSettingsBindFlags, GdkByteOrder, GdkModifierType, GdkModifierIntent, GdkStatus, GdkGrabStatus, GdkGrabOwnership, GdkEventMask, GdkGLError, GdkWindowTypeHint, GdkAxisUse, GdkAxisFlags, GdkInputSource, GdkInputMode, GdkDeviceType, GdkDragAction, GdkDragCancelReason, GdkDragProtocol, GdkDeviceToolType, GdkFilterReturn, GdkEventType, GdkVisibilityState, GdkTouchpadGesturePhase, GdkScrollDirection, GdkNotifyType, GdkCrossingMode, GdkPropertyState, GdkWindowState, GdkSettingAction, GdkOwnerChange, GdkFrameClockPhase, GdkWindowWindowClass, GdkWindowType, GdkWindowAttributesType, GdkWindowHints, GdkWMDecoration, GdkWMFunction, GdkGravity, GdkAnchorHints, GdkWindowEdge, GdkFullscreenMode, GdkSeatCapabilities, GdkSubpixelLayout, GdkPixbufAlphaMode, GdkColorspace, GdkPixbufError, GdkInterpType, GdkPixbufRotation, GdkCursorType, GdkDevicePadFeature, GdkPropMode, GdkVisualType, GtkAlign, GtkArrowType, GtkBaselinePosition, GtkDeleteType, GtkDirectionType, GtkIconSize, GtkSensitivityType, GtkTextDirection, GtkJustification, GtkMenuDirectionType, GtkMessageType, GtkMovementStep, GtkScrollStep, GtkOrientation, GtkPackType, GtkPositionType, GtkReliefStyle, GtkScrollType, GtkSelectionMode, GtkShadowType, GtkStateType, GtkToolbarStyle, GtkWrapMode, GtkSortType, GtkIMPreeditStyle, GtkIMStatusStyle, GtkPackDirection, GtkPrintPages, GtkPageSet, GtkNumberUpLayout, GtkPageOrientation, GtkPrintQuality, GtkPrintDuplex, GtkUnit, GtkTreeViewGridLines, GtkDragResult, GtkSizeGroupMode, GtkSizeRequestMode, GtkScrollablePolicy, GtkStateFlags, GtkRegionFlags, GtkJunctionSides, GtkBorderStyle, GtkLevelBarMode, GtkInputPurpose, GtkInputHints, GtkPropagationPhase, GtkEventSequenceState, GtkPanDirection, GtkPopoverConstraint, GtkAccelFlags, GtkWidgetHelpType, GtkApplicationInhibitFlags, GtkResizeMode, GtkWindowType, GtkWindowPosition, GtkDialogFlags, GtkResponseType, GtkLicense, GtkArrowPlacement, GtkTreeModelFlags, GtkCellRendererState, GtkCellRendererMode, GtkTreeViewColumnSizing, GtkTextSearchFlags, GtkTargetFlags, GtkImageType, GtkEntryIconPosition, GtkTreeViewDropPosition, GtkAssistantPageType, GtkButtonBoxStyle, GtkBuilderError, GtkCalendarDisplayOptions, GtkCellRendererAccelMode, GtkCssSectionType, GtkCssProviderError, GtkDebugFlag, GtkDestDefaults, GtkFileFilterFlags, GtkFileChooserAction, GtkFileChooserConfirmation, GtkFileChooserError, GtkStyleContextPrintFlags, GtkIconLookupFlags, GtkIconThemeError, GtkIconViewDropPosition, GtkButtonsType, GtkButtonRole, GtkNotebookTab, GtkPadActionType, GtkPlacesOpenFlags, GtkPrintStatus, GtkPrintOperationResult, GtkPrintOperationAction, GtkPrintError, GtkRecentManagerError, GtkRecentFilterFlags, GtkRecentSortType, GtkRecentChooserError, GtkRevealerTransitionType, GtkCornerType, GtkPolicyType, GtkShortcutType, GtkStackTransitionType, GtkSpinButtonUpdatePolicy, GtkSpinType, GtkTextBufferTargetInfo, GtkTextWindowType, GtkTextViewLayer, GtkTextExtendSelection, GtkToolbarSpaceStyle, GtkToolPaletteDragTargets, GtkRcFlags, GtkRcTokenType, GtkPathPriorityType, GtkPathType, GtkExpanderStyle, GtkAttachOptions, GtkUIManagerItemType + export GUserDirectory, GFormatSizeFlags, GThreadError, GOnceStatus, GBookmarkFileError, GChecksumType, GConvertError, GDateDMY, GDateWeekday, GDateMonth, GTimeType, GFileError, GFileTest, GTraverseFlags, GTraverseType, GHookFlagMask, GIOCondition, GUnicodeType, GUnicodeBreakType, GUnicodeScript, GNormalizeMode, GIOError, GIOChannelError, GIOStatus, GSeekType, GIOFlags, GKeyFileError, GKeyFileFlags, GMarkupError, GMarkupParseFlags, GMarkupCollectType, GVariantClass, GVariantParseError, GLogLevelFlags, GLogWriterOutput, GOptionFlags, GOptionArg, GOptionError, GRegexError, GRegexCompileFlags, GRegexMatchFlags, GErrorType, GTokenType, GShellError, GSliceConfig, GSpawnError, GSpawnFlags, GAsciiType, GNumberParserError, GTestTrapFlags, GTestSubprocessFlags, GTestResult, GTestLogType, GTestFileType, GWin32OSType, GThreadPriority, GTypeDebugFlags, GTypeFundamentalFlags, GTypeFlags, GParamFlags, GSignalFlags, GConnectFlags, GSignalMatchType, GBindingFlags, GAppInfoCreateFlags, GConverterFlags, GConverterResult, GDataStreamByteOrder, GDataStreamNewlineType, GFileAttributeType, GFileAttributeInfoFlags, GFileAttributeStatus, GFileQueryInfoFlags, GFileCreateFlags, GFileMeasureFlags, GMountMountFlags, GMountUnmountFlags, GDriveStartFlags, GDriveStartStopType, GFileCopyFlags, GFileMonitorFlags, GFileType, GFilesystemPreviewType, GFileMonitorEvent, GIOErrorEnum, GAskPasswordFlags, GPasswordSave, GMountOperationResult, GOutputStreamSpliceFlags, GIOStreamSpliceFlags, GEmblemOrigin, GResolverError, GResolverRecordType, GResourceError, GResourceFlags, GResourceLookupFlags, GSocketFamily, GSocketType, GSocketMsgFlags, GSocketProtocol, GZlibCompressorFormat, GUnixSocketAddressType, GBusType, GBusNameOwnerFlags, GBusNameWatcherFlags, GDBusProxyFlags, GDBusError, GDBusConnectionFlags, GDBusCapabilityFlags, GDBusCallFlags, GDBusMessageType, GDBusMessageFlags, GDBusMessageHeaderField, GDBusPropertyInfoFlags, GDBusSubtreeFlags, GDBusServerFlags, GDBusSignalFlags, GDBusSendMessageFlags, GCredentialsType, GDBusMessageByteOrder, GApplicationFlags, GTlsError, GTlsCertificateFlags, GTlsAuthenticationMode, GTlsRehandshakeMode, GTlsPasswordFlags, GTlsInteractionResult, GDBusInterfaceSkeletonFlags, GDBusObjectManagerClientFlags, GTlsDatabaseVerifyFlags, GTlsDatabaseLookupFlags, GTlsCertificateRequestFlags, GIOModuleScopeFlags, GSocketClientEvent, GSocketListenerEvent, GTestDBusFlags, GSubprocessFlags, GNotificationPriority, GNetworkConnectivity, GModuleFlags, GResolverNameLookupFlags, GSettingsBindFlags, GdkByteOrder, GdkModifierType, GdkModifierIntent, GdkStatus, GdkGrabStatus, GdkGrabOwnership, GdkEventMask, GdkGLError, GdkWindowTypeHint, GdkAxisUse, GdkAxisFlags, GdkInputSource, GdkInputMode, GdkDeviceType, GdkDragAction, GdkDragCancelReason, GdkDragProtocol, GdkDeviceToolType, GdkFilterReturn, GdkEventType, GdkVisibilityState, GdkTouchpadGesturePhase, GdkScrollDirection, GdkNotifyType, GdkCrossingMode, GdkPropertyState, GdkWindowState, GdkSettingAction, GdkOwnerChange, GdkFrameClockPhase, GdkWindowWindowClass, GdkWindowType, GdkWindowAttributesType, GdkWindowHints, GdkWMDecoration, GdkWMFunction, GdkGravity, GdkAnchorHints, GdkWindowEdge, GdkFullscreenMode, GdkSeatCapabilities, GdkSubpixelLayout, GdkPixbufAlphaMode, GdkColorspace, GdkPixbufError, GdkInterpType, GdkPixbufRotation, GdkCursorType, GdkDevicePadFeature, GdkPropMode, GdkVisualType, GtkAlign, GtkArrowType, GtkBaselinePosition, GtkDeleteType, GtkDirectionType, GtkIconSize, GtkSensitivityType, GtkTextDirection, GtkJustification, GtkMenuDirectionType, GtkMessageType, GtkMovementStep, GtkScrollStep, GtkOrientation, GtkPackType, GtkPositionType, GtkReliefStyle, GtkScrollType, GtkSelectionMode, GtkShadowType, GtkStateType, GtkToolbarStyle, GtkWrapMode, GtkSortType, GtkIMPreeditStyle, GtkIMStatusStyle, GtkPackDirection, GtkPrintPages, GtkPageSet, GtkNumberUpLayout, GtkPageOrientation, GtkPrintQuality, GtkPrintDuplex, GtkUnit, GtkTreeViewGridLines, GtkDragResult, GtkSizeGroupMode, GtkSizeRequestMode, GtkScrollablePolicy, GtkStateFlags, GtkRegionFlags, GtkJunctionSides, GtkBorderStyle, GtkLevelBarMode, GtkInputPurpose, GtkInputHints, GtkPropagationPhase, GtkEventSequenceState, GtkPanDirection, GtkPopoverConstraint, GtkAccelFlags, GtkWidgetHelpType, GtkApplicationInhibitFlags, GtkResizeMode, GtkWindowType, GtkWindowPosition, GtkDialogFlags, GtkResponseType, GtkLicense, GtkArrowPlacement, GtkTreeModelFlags, GtkCellRendererState, GtkCellRendererMode, GtkTreeViewColumnSizing, GtkTextSearchFlags, GtkTargetFlags, GtkImageType, GtkEntryIconPosition, GtkTreeViewDropPosition, GtkAssistantPageType, GtkButtonBoxStyle, GtkBuilderError, GtkCalendarDisplayOptions, GtkCellRendererAccelMode, GtkCssSectionType, GtkCssProviderError, GtkDebugFlag, GtkDestDefaults, GtkEventControllerScrollFlags, GtkFileFilterFlags, GtkFileChooserAction, GtkFileChooserConfirmation, GtkFileChooserError, GtkFontChooserLevel, GtkStyleContextPrintFlags, GtkIconLookupFlags, GtkIconThemeError, GtkIconViewDropPosition, GtkButtonsType, GtkButtonRole, GtkNotebookTab, GtkPadActionType, GtkPlacesOpenFlags, GtkPrintStatus, GtkPrintOperationResult, GtkPrintOperationAction, GtkPrintError, GtkRecentManagerError, GtkRecentFilterFlags, GtkRecentSortType, GtkRecentChooserError, GtkRevealerTransitionType, GtkCornerType, GtkPolicyType, GtkShortcutType, GtkStackTransitionType, GtkSpinButtonUpdatePolicy, GtkSpinType, GtkTextBufferTargetInfo, GtkTextWindowType, GtkTextViewLayer, GtkTextExtendSelection, GtkToolbarSpaceStyle, GtkToolPaletteDragTargets, GtkRcFlags, GtkRcTokenType, GtkPathPriorityType, GtkPathType, GtkExpanderStyle, GtkAttachOptions, GtkUIManagerItemType $(Expr(:toplevel, :(baremodule GUserDirectory const DIRECTORY_DESKTOP = const G_USER_DIRECTORY_DESKTOP = Main.Base.convert(Main.Base.Int32, 0) const DIRECTORY_DOCUMENTS = const G_USER_DIRECTORY_DOCUMENTS = Main.Base.convert(Main.Base.Int32, 1) @@ -16,6 +16,7 @@ $(Expr(:toplevel, :(module GConstants const DEFAULT = const G_FORMAT_SIZE_DEFAULT = Main.Base.convert(Main.Base.Int32, 0) const LONG_FORMAT = const G_FORMAT_SIZE_LONG_FORMAT = Main.Base.convert(Main.Base.Int32, 1) const IEC_UNITS = const G_FORMAT_SIZE_IEC_UNITS = Main.Base.convert(Main.Base.Int32, 2) + const BITS = const G_FORMAT_SIZE_BITS = Main.Base.convert(Main.Base.Int32, 4) end))) $(Expr(:toplevel, :(baremodule GThreadError const AGAIN = const G_THREAD_ERROR_AGAIN = Main.Base.convert(Main.Base.Int32, 0) @@ -40,6 +41,7 @@ $(Expr(:toplevel, :(module GConstants const SHA1 = const G_CHECKSUM_SHA1 = Main.Base.convert(Main.Base.Int32, 1) const SHA256 = const G_CHECKSUM_SHA256 = Main.Base.convert(Main.Base.Int32, 2) const SHA512 = const G_CHECKSUM_SHA512 = Main.Base.convert(Main.Base.Int32, 3) + const SHA384 = const G_CHECKSUM_SHA384 = Main.Base.convert(Main.Base.Int32, 4) end))) $(Expr(:toplevel, :(baremodule GConvertError const NO_CONVERSION = const G_CONVERT_ERROR_NO_CONVERSION = Main.Base.convert(Main.Base.Int32, 0) @@ -49,6 +51,7 @@ $(Expr(:toplevel, :(module GConstants const BAD_URI = const G_CONVERT_ERROR_BAD_URI = Main.Base.convert(Main.Base.Int32, 4) const NOT_ABSOLUTE_PATH = const G_CONVERT_ERROR_NOT_ABSOLUTE_PATH = Main.Base.convert(Main.Base.Int32, 5) const NO_MEMORY = const G_CONVERT_ERROR_NO_MEMORY = Main.Base.convert(Main.Base.Int32, 6) + const EMBEDDED_NUL = const G_CONVERT_ERROR_EMBEDDED_NUL = Main.Base.convert(Main.Base.Int32, 7) end))) $(Expr(:toplevel, :(baremodule GDateDMY const DAY = const G_DATE_DAY = Main.Base.convert(Main.Base.Int32, 0) @@ -363,6 +366,17 @@ $(Expr(:toplevel, :(module GConstants const NEWA = const G_UNICODE_SCRIPT_NEWA = Main.Base.convert(Main.Base.Int32, 135) const OSAGE = const G_UNICODE_SCRIPT_OSAGE = Main.Base.convert(Main.Base.Int32, 136) const TANGUT = const G_UNICODE_SCRIPT_TANGUT = Main.Base.convert(Main.Base.Int32, 137) + const MASARAM_GONDI = const G_UNICODE_SCRIPT_MASARAM_GONDI = Main.Base.convert(Main.Base.Int32, 138) + const NUSHU = const G_UNICODE_SCRIPT_NUSHU = Main.Base.convert(Main.Base.Int32, 139) + const SOYOMBO = const G_UNICODE_SCRIPT_SOYOMBO = Main.Base.convert(Main.Base.Int32, 140) + const ZANABAZAR_SQUARE = const G_UNICODE_SCRIPT_ZANABAZAR_SQUARE = Main.Base.convert(Main.Base.Int32, 141) + const DOGRA = const G_UNICODE_SCRIPT_DOGRA = Main.Base.convert(Main.Base.Int32, 142) + const GUNJALA_GONDI = const G_UNICODE_SCRIPT_GUNJALA_GONDI = Main.Base.convert(Main.Base.Int32, 143) + const HANIFI_ROHINGYA = const G_UNICODE_SCRIPT_HANIFI_ROHINGYA = Main.Base.convert(Main.Base.Int32, 144) + const MAKASAR = const G_UNICODE_SCRIPT_MAKASAR = Main.Base.convert(Main.Base.Int32, 145) + const MEDEFAIDRIN = const G_UNICODE_SCRIPT_MEDEFAIDRIN = Main.Base.convert(Main.Base.Int32, 146) + const OLD_SOGDIAN = const G_UNICODE_SCRIPT_OLD_SOGDIAN = Main.Base.convert(Main.Base.Int32, 147) + const SOGDIAN = const G_UNICODE_SCRIPT_SOGDIAN = Main.Base.convert(Main.Base.Int32, 148) end))) $(Expr(:toplevel, :(baremodule GNormalizeMode const DEFAULT = const G_NORMALIZE_DEFAULT = Main.Base.convert(Main.Base.Int32, 0) @@ -723,6 +737,10 @@ $(Expr(:toplevel, :(module GConstants const UPPER = const G_ASCII_UPPER = Main.Base.convert(Main.Base.Int32, 512) const XDIGIT = const G_ASCII_XDIGIT = Main.Base.convert(Main.Base.Int32, 1024) end))) + $(Expr(:toplevel, :(baremodule GNumberParserError + const INVALID = const G_NUMBER_PARSER_ERROR_INVALID = Main.Base.convert(Main.Base.Int32, 0) + const OUT_OF_BOUNDS = const G_NUMBER_PARSER_ERROR_OUT_OF_BOUNDS = Main.Base.convert(Main.Base.Int32, 1) + end))) $(Expr(:toplevel, :(baremodule GTestTrapFlags const SILENCE_STDOUT = const G_TEST_TRAP_SILENCE_STDOUT = Main.Base.convert(Main.Base.Int32, 128) const SILENCE_STDERR = const G_TEST_TRAP_SILENCE_STDERR = Main.Base.convert(Main.Base.Int32, 256) @@ -733,6 +751,12 @@ $(Expr(:toplevel, :(module GConstants const STDOUT = const G_TEST_SUBPROCESS_INHERIT_STDOUT = Main.Base.convert(Main.Base.Int32, 2) const STDERR = const G_TEST_SUBPROCESS_INHERIT_STDERR = Main.Base.convert(Main.Base.Int32, 4) end))) + $(Expr(:toplevel, :(baremodule GTestResult + const SUCCESS = const G_TEST_RUN_SUCCESS = Main.Base.convert(Main.Base.Int32, 0) + const SKIPPED = const G_TEST_RUN_SKIPPED = Main.Base.convert(Main.Base.Int32, 1) + const FAILURE = const G_TEST_RUN_FAILURE = Main.Base.convert(Main.Base.Int32, 2) + const INCOMPLETE = const G_TEST_RUN_INCOMPLETE = Main.Base.convert(Main.Base.Int32, 3) + end))) $(Expr(:toplevel, :(baremodule GTestLogType const NONE = const G_TEST_LOG_NONE = Main.Base.convert(Main.Base.Int32, 0) const ERROR = const G_TEST_LOG_ERROR = Main.Base.convert(Main.Base.Int32, 1) @@ -751,6 +775,11 @@ $(Expr(:toplevel, :(module GConstants const DIST = const G_TEST_DIST = Main.Base.convert(Main.Base.Int32, 0) const BUILT = const G_TEST_BUILT = Main.Base.convert(Main.Base.Int32, 1) end))) + $(Expr(:toplevel, :(baremodule GWin32OSType + const ANY = const G_WIN32_OS_ANY = Main.Base.convert(Main.Base.Int32, 0) + const WORKSTATION = const G_WIN32_OS_WORKSTATION = Main.Base.convert(Main.Base.Int32, 1) + const SERVER = const G_WIN32_OS_SERVER = Main.Base.convert(Main.Base.Int32, 2) + end))) $(Expr(:toplevel, :(baremodule GThreadPriority const LOW = const G_THREAD_PRIORITY_LOW = Main.Base.convert(Main.Base.Int32, 0) const NORMAL = const G_THREAD_PRIORITY_NORMAL = Main.Base.convert(Main.Base.Int32, 1) @@ -998,6 +1027,7 @@ $(Expr(:toplevel, :(module GConstants const NEED_DOMAIN = const G_ASK_PASSWORD_NEED_DOMAIN = Main.Base.convert(Main.Base.Int32, 4) const SAVING_SUPPORTED = const G_ASK_PASSWORD_SAVING_SUPPORTED = Main.Base.convert(Main.Base.Int32, 8) const ANONYMOUS_SUPPORTED = const G_ASK_PASSWORD_ANONYMOUS_SUPPORTED = Main.Base.convert(Main.Base.Int32, 16) + const TCRYPT = const G_ASK_PASSWORD_TCRYPT = Main.Base.convert(Main.Base.Int32, 32) end))) $(Expr(:toplevel, :(baremodule GPasswordSave const NEVER = const G_PASSWORD_SAVE_NEVER = Main.Base.convert(Main.Base.Int32, 0) @@ -1053,7 +1083,7 @@ $(Expr(:toplevel, :(module GConstants const INVALID = const G_SOCKET_FAMILY_INVALID = Main.Base.convert(Main.Base.Int32, 0) const UNIX = const G_SOCKET_FAMILY_UNIX = Main.Base.convert(Main.Base.Int32, 1) const IPV4 = const G_SOCKET_FAMILY_IPV4 = Main.Base.convert(Main.Base.Int32, 2) - const IPV6 = const G_SOCKET_FAMILY_IPV6 = Main.Base.convert(Main.Base.Int32, 10) + const IPV6 = const G_SOCKET_FAMILY_IPV6 = Main.Base.convert(Main.Base.Int32, 23) end))) $(Expr(:toplevel, :(baremodule GSocketType const INVALID = const G_SOCKET_TYPE_INVALID = Main.Base.convert(Main.Base.Int32, 0) @@ -1096,6 +1126,7 @@ $(Expr(:toplevel, :(module GConstants const NONE = const G_BUS_NAME_OWNER_FLAGS_NONE = Main.Base.convert(Main.Base.Int32, 0) const ALLOW_REPLACEMENT = const G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT = Main.Base.convert(Main.Base.Int32, 1) const REPLACE = const G_BUS_NAME_OWNER_FLAGS_REPLACE = Main.Base.convert(Main.Base.Int32, 2) + const DO_NOT_QUEUE = const G_BUS_NAME_OWNER_FLAGS_DO_NOT_QUEUE = Main.Base.convert(Main.Base.Int32, 4) end))) $(Expr(:toplevel, :(baremodule GBusNameWatcherFlags const NONE = const G_BUS_NAME_WATCHER_FLAGS_NONE = Main.Base.convert(Main.Base.Int32, 0) @@ -1243,6 +1274,8 @@ $(Expr(:toplevel, :(module GConstants const SEND_ENVIRONMENT = const G_APPLICATION_SEND_ENVIRONMENT = Main.Base.convert(Main.Base.Int32, 16) const NON_UNIQUE = const G_APPLICATION_NON_UNIQUE = Main.Base.convert(Main.Base.Int32, 32) const CAN_OVERRIDE_APP_ID = const G_APPLICATION_CAN_OVERRIDE_APP_ID = Main.Base.convert(Main.Base.Int32, 64) + const ALLOW_REPLACEMENT = const G_APPLICATION_ALLOW_REPLACEMENT = Main.Base.convert(Main.Base.Int32, 128) + const REPLACE = const G_APPLICATION_REPLACE = Main.Base.convert(Main.Base.Int32, 256) end))) $(Expr(:toplevel, :(baremodule GTlsError const UNAVAILABLE = const G_TLS_ERROR_UNAVAILABLE = Main.Base.convert(Main.Base.Int32, 0) @@ -1252,6 +1285,7 @@ $(Expr(:toplevel, :(module GConstants const HANDSHAKE = const G_TLS_ERROR_HANDSHAKE = Main.Base.convert(Main.Base.Int32, 4) const CERTIFICATE_REQUIRED = const G_TLS_ERROR_CERTIFICATE_REQUIRED = Main.Base.convert(Main.Base.Int32, 5) const EOF = const G_TLS_ERROR_EOF = Main.Base.convert(Main.Base.Int32, 6) + const INAPPROPRIATE_FALLBACK = const G_TLS_ERROR_INAPPROPRIATE_FALLBACK = Main.Base.convert(Main.Base.Int32, 7) end))) $(Expr(:toplevel, :(baremodule GTlsCertificateFlags const UNKNOWN_CA = const G_TLS_CERTIFICATE_UNKNOWN_CA = Main.Base.convert(Main.Base.Int32, 1) @@ -1354,6 +1388,11 @@ $(Expr(:toplevel, :(module GConstants const LOCAL = const G_MODULE_BIND_LOCAL = Main.Base.convert(Main.Base.Int32, 2) const MASK = const G_MODULE_BIND_MASK = Main.Base.convert(Main.Base.Int32, 3) end))) + $(Expr(:toplevel, :(baremodule GResolverNameLookupFlags + const DEFAULT = const G_RESOLVER_NAME_LOOKUP_FLAGS_DEFAULT = Main.Base.convert(Main.Base.Int32, 0) + const IPV4_ONLY = const G_RESOLVER_NAME_LOOKUP_FLAGS_IPV4_ONLY = Main.Base.convert(Main.Base.Int32, 1) + const IPV6_ONLY = const G_RESOLVER_NAME_LOOKUP_FLAGS_IPV6_ONLY = Main.Base.convert(Main.Base.Int32, 2) + end))) $(Expr(:toplevel, :(baremodule GSettingsBindFlags const DEFAULT = const G_SETTINGS_BIND_DEFAULT = Main.Base.convert(Main.Base.Int32, 0) const GET = const G_SETTINGS_BIND_GET = Main.Base.convert(Main.Base.Int32, 1) @@ -1456,7 +1495,7 @@ $(Expr(:toplevel, :(module GConstants const SMOOTH_SCROLL = const GDK_SMOOTH_SCROLL_MASK = Main.Base.convert(Main.Base.Int32, 8388608) const TOUCHPAD_GESTURE = const GDK_TOUCHPAD_GESTURE_MASK = Main.Base.convert(Main.Base.Int32, 16777216) const TABLET_PAD = const GDK_TABLET_PAD_MASK = Main.Base.convert(Main.Base.Int32, 33554432) - const ALL_EVENTS = const GDK_ALL_EVENTS_MASK = Main.Base.convert(Main.Base.Int32, 16777214) + const ALL_EVENTS = const GDK_ALL_EVENTS_MASK = Main.Base.convert(Main.Base.Int32, 67108862) end))) $(Expr(:toplevel, :(baremodule GdkGLError const NOT_AVAILABLE = const GDK_GL_ERROR_NOT_AVAILABLE = Main.Base.convert(Main.Base.Int32, 0) @@ -1666,6 +1705,14 @@ $(Expr(:toplevel, :(module GConstants const BELOW = const GDK_WINDOW_STATE_BELOW = Main.Base.convert(Main.Base.Int32, 64) const FOCUSED = const GDK_WINDOW_STATE_FOCUSED = Main.Base.convert(Main.Base.Int32, 128) const TILED = const GDK_WINDOW_STATE_TILED = Main.Base.convert(Main.Base.Int32, 256) + const TOP_TILED = const GDK_WINDOW_STATE_TOP_TILED = Main.Base.convert(Main.Base.Int32, 512) + const TOP_RESIZABLE = const GDK_WINDOW_STATE_TOP_RESIZABLE = Main.Base.convert(Main.Base.Int32, 1024) + const RIGHT_TILED = const GDK_WINDOW_STATE_RIGHT_TILED = Main.Base.convert(Main.Base.Int32, 2048) + const RIGHT_RESIZABLE = const GDK_WINDOW_STATE_RIGHT_RESIZABLE = Main.Base.convert(Main.Base.Int32, 4096) + const BOTTOM_TILED = const GDK_WINDOW_STATE_BOTTOM_TILED = Main.Base.convert(Main.Base.Int32, 8192) + const BOTTOM_RESIZABLE = const GDK_WINDOW_STATE_BOTTOM_RESIZABLE = Main.Base.convert(Main.Base.Int32, 16384) + const LEFT_TILED = const GDK_WINDOW_STATE_LEFT_TILED = Main.Base.convert(Main.Base.Int32, 32768) + const LEFT_RESIZABLE = const GDK_WINDOW_STATE_LEFT_RESIZABLE = Main.Base.convert(Main.Base.Int32, 65536) end))) $(Expr(:toplevel, :(baremodule GdkSettingAction const NEW = const GDK_SETTING_ACTION_NEW = Main.Base.convert(Main.Base.Int32, 0) @@ -2253,6 +2300,8 @@ $(Expr(:toplevel, :(module GConstants const UPPERCASE_SENTENCES = const GTK_INPUT_HINT_UPPERCASE_SENTENCES = Main.Base.convert(Main.Base.Int32, 64) const INHIBIT_OSK = const GTK_INPUT_HINT_INHIBIT_OSK = Main.Base.convert(Main.Base.Int32, 128) const VERTICAL_WRITING = const GTK_INPUT_HINT_VERTICAL_WRITING = Main.Base.convert(Main.Base.Int32, 256) + const EMOJI = const GTK_INPUT_HINT_EMOJI = Main.Base.convert(Main.Base.Int32, 512) + const NO_EMOJI = const GTK_INPUT_HINT_NO_EMOJI = Main.Base.convert(Main.Base.Int32, 1024) end))) $(Expr(:toplevel, :(baremodule GtkPropagationPhase const NONE = const GTK_PHASE_NONE = Main.Base.convert(Main.Base.Int32, 0) @@ -2339,6 +2388,7 @@ $(Expr(:toplevel, :(module GConstants const LGPL_2_1_ONLY = const GTK_LICENSE_LGPL_2_1_ONLY = Main.Base.convert(Main.Base.Int32, 11) const LGPL_3_0_ONLY = const GTK_LICENSE_LGPL_3_0_ONLY = Main.Base.convert(Main.Base.Int32, 12) const AGPL_3_0 = const GTK_LICENSE_AGPL_3_0 = Main.Base.convert(Main.Base.Int32, 13) + const AGPL_3_0_ONLY = const GTK_LICENSE_AGPL_3_0_ONLY = Main.Base.convert(Main.Base.Int32, 14) end))) $(Expr(:toplevel, :(baremodule GtkArrowPlacement const BOTH = const GTK_ARROWS_BOTH = Main.Base.convert(Main.Base.Int32, 0) @@ -2491,6 +2541,14 @@ $(Expr(:toplevel, :(module GConstants const DROP = const GTK_DEST_DEFAULT_DROP = Main.Base.convert(Main.Base.Int32, 4) const ALL = const GTK_DEST_DEFAULT_ALL = Main.Base.convert(Main.Base.Int32, 7) end))) + $(Expr(:toplevel, :(baremodule GtkEventControllerScrollFlags + const NONE = const GTK_EVENT_CONTROLLER_SCROLL_NONE = Main.Base.convert(Main.Base.Int32, 0) + const VERTICAL = const GTK_EVENT_CONTROLLER_SCROLL_VERTICAL = Main.Base.convert(Main.Base.Int32, 1) + const HORIZONTAL = const GTK_EVENT_CONTROLLER_SCROLL_HORIZONTAL = Main.Base.convert(Main.Base.Int32, 2) + const DISCRETE = const GTK_EVENT_CONTROLLER_SCROLL_DISCRETE = Main.Base.convert(Main.Base.Int32, 4) + const KINETIC = const GTK_EVENT_CONTROLLER_SCROLL_KINETIC = Main.Base.convert(Main.Base.Int32, 8) + const BOTH_AXES = const GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES = Main.Base.convert(Main.Base.Int32, 3) + end))) $(Expr(:toplevel, :(baremodule GtkFileFilterFlags const FILENAME = const GTK_FILE_FILTER_FILENAME = Main.Base.convert(Main.Base.Int32, 1) const URI = const GTK_FILE_FILTER_URI = Main.Base.convert(Main.Base.Int32, 2) @@ -2514,6 +2572,13 @@ $(Expr(:toplevel, :(module GConstants const ALREADY_EXISTS = const GTK_FILE_CHOOSER_ERROR_ALREADY_EXISTS = Main.Base.convert(Main.Base.Int32, 2) const INCOMPLETE_HOSTNAME = const GTK_FILE_CHOOSER_ERROR_INCOMPLETE_HOSTNAME = Main.Base.convert(Main.Base.Int32, 3) end))) + $(Expr(:toplevel, :(baremodule GtkFontChooserLevel + const FAMILY = const GTK_FONT_CHOOSER_LEVEL_FAMILY = Main.Base.convert(Main.Base.Int32, 0) + const STYLE = const GTK_FONT_CHOOSER_LEVEL_STYLE = Main.Base.convert(Main.Base.Int32, 1) + const SIZE = const GTK_FONT_CHOOSER_LEVEL_SIZE = Main.Base.convert(Main.Base.Int32, 2) + const VARIATIONS = const GTK_FONT_CHOOSER_LEVEL_VARIATIONS = Main.Base.convert(Main.Base.Int32, 4) + const FEATURES = const GTK_FONT_CHOOSER_LEVEL_FEATURES = Main.Base.convert(Main.Base.Int32, 8) + end))) $(Expr(:toplevel, :(baremodule GtkStyleContextPrintFlags const NONE = const GTK_STYLE_CONTEXT_PRINT_NONE = Main.Base.convert(Main.Base.Int32, 0) const RECURSE = const GTK_STYLE_CONTEXT_PRINT_RECURSE = Main.Base.convert(Main.Base.Int32, 1) @@ -2816,36 +2881,54 @@ $(Expr(:toplevel, :(module GConstants const G_GINT32_MODIFIER = "" const G_GINT32_FORMAT = "i" const G_GUINT32_FORMAT = "u" - const G_GINT64_MODIFIER = "l" - const G_GINT64_FORMAT = "li" - const G_GUINT64_FORMAT = "lu" + const G_GINT64_MODIFIER = "ll" + const G_GINT64_FORMAT = "lli" + const G_GUINT64_FORMAT = "llu" const GLIB_SIZEOF_VOID_P = 8 - const GLIB_SIZEOF_LONG = 8 + const GLIB_SIZEOF_LONG = 4 const GLIB_SIZEOF_SIZE_T = 8 const GLIB_SIZEOF_SSIZE_T = 8 - const G_GSIZE_MODIFIER = "l" - const G_GSSIZE_MODIFIER = "l" - const G_GSIZE_FORMAT = "lu" - const G_GSSIZE_FORMAT = "li" - const G_POLLFD_FORMAT = "%d" - const G_GINTPTR_MODIFIER = "l" - const G_GINTPTR_FORMAT = "li" - const G_GUINTPTR_FORMAT = "lu" + const G_GSIZE_MODIFIER = "ll" + const G_GSSIZE_MODIFIER = "ll" + const G_GSIZE_FORMAT = "llu" + const G_GSSIZE_FORMAT = "lli" + const G_POLLFD_FORMAT = "%#llx" + const G_GINTPTR_MODIFIER = "ll" + const G_GINTPTR_FORMAT = "lli" + const G_GUINTPTR_FORMAT = "llu" const GLIB_MAJOR_VERSION = 2 - const GLIB_MINOR_VERSION = 50 - const GLIB_MICRO_VERSION = 3 - const G_VA_COPY_AS_ARRAY = 1 + const GLIB_MINOR_VERSION = 59 + const GLIB_MICRO_VERSION = 0 const G_HAVE_ISO_VARARGS = 1 const G_HAVE_GNUC_VARARGS = 1 const G_HAVE_GROWING_STACK = 0 - const G_HAVE_GNUC_VISIBILITY = 1 - const G_MODULE_SUFFIX = "so" - const G_PID_FORMAT = "i" + const G_MODULE_SUFFIX = if Sys.iswindows() + "dll" + else + "so" + end + const G_PID_FORMAT = if Sys.iswindows() + "p" + else + "i" + end const GLIB_SYSDEF_AF_UNIX = 1 const GLIB_SYSDEF_AF_INET = 2 const GLIB_SYSDEF_MSG_OOB = 1 const GLIB_SYSDEF_MSG_PEEK = 2 const GLIB_SYSDEF_MSG_DONTROUTE = 4 + const G_DIR_SEPARATOR = Base.Filesystem.path_separator[1] + const G_DIR_SEPARATOR_S = Base.Filesystem.path_separator + const G_SEARCHPATH_SEPARATOR = if Sys.iswindows() + ';' + else + ':' + end + const G_SEARCHPATH_SEPARATOR_S = if Sys.iswindows() + ";" + else + ":" + end const G_E = 2.718281828459045 const G_PI = 3.141592653589793 const G_LITTLE_ENDIAN = 1234 @@ -2855,15 +2938,12 @@ $(Expr(:toplevel, :(module GConstants const G_DATE_BAD_JULIAN = UInt32(0) const G_DATE_BAD_DAY = UInt32(0) const G_DATE_BAD_YEAR = UInt32(0) - const G_DIR_SEPARATOR = '/' - const G_DIR_SEPARATOR_S = "/" - const G_SEARCHPATH_SEPARATOR = ':' - const G_SEARCHPATH_SEPARATOR_S = ":" const G_PRIORITY_DEFAULT = 0 const G_PRIORITY_HIGH_IDLE = 100 const G_PRIORITY_DEFAULT_IDLE = 200 const G_PRIORITY_LOW = 300 const G_UNICHAR_MAX_DECOMPOSITION_LENGTH = 18 + const G_WIN32_MSG_HANDLE = 19981206 const G_KEY_FILE_DESKTOP_GROUP = "Desktop Entry" const G_KEY_FILE_DESKTOP_KEY_TYPE = "Type" const G_KEY_FILE_DESKTOP_KEY_VERSION = "Version" @@ -2886,9 +2966,6 @@ $(Expr(:toplevel, :(module GConstants const G_KEY_FILE_DESKTOP_KEY_URL = "URL" const G_KEY_FILE_DESKTOP_KEY_DBUS_ACTIVATABLE = "DBusActivatable" const G_KEY_FILE_DESKTOP_KEY_ACTIONS = "Actions" - const G_KEY_FILE_DESKTOP_KEY_GETTEXT_DOMAIN = "X-GNOME-Gettext-Domain" - const G_KEY_FILE_DESKTOP_KEY_FULLNAME = "X-GNOME-FullName" - const G_KEY_FILE_DESKTOP_KEY_KEYWORDS = "Keywords" const G_KEY_FILE_DESKTOP_TYPE_APPLICATION = "Application" const G_KEY_FILE_DESKTOP_TYPE_LINK = "Link" const G_KEY_FILE_DESKTOP_TYPE_DIRECTORY = "Directory" @@ -2897,6 +2974,7 @@ $(Expr(:toplevel, :(module GConstants const G_CSET_a_2_z = "abcdefghijklmnopqrstuvwxyz" const G_CSET_DIGITS = "0123456789" const G_STR_DELIMITERS = "_-|> <." + const G_TEST_OPTION_ISOLATE_DIRS = "isolate_dirs" const G_USEC_PER_SEC = 1000000 const G_URI_RESERVED_CHARS_GENERIC_DELIMITERS = ":/?#[]@" const G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS = "!\$&'()*+,;=" @@ -2907,6 +2985,7 @@ $(Expr(:toplevel, :(module GConstants const G_ALLOCATOR_NODE = 3 const G_SIGNAL_FLAGS_MASK = Float32(0x1f) const G_SIGNAL_MATCH_MASK = Float32(0x03) + const G_DRIVE_IDENTIFIER_KIND_UNIX_DEVICE = "unix-device" const G_FILE_ATTRIBUTE_STANDARD_TYPE = "standard::type" const G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN = "standard::is-hidden" const G_FILE_ATTRIBUTE_STANDARD_IS_BACKUP = "standard::is-backup" @@ -2968,6 +3047,8 @@ $(Expr(:toplevel, :(module GConstants const G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT = "unix::is-mountpoint" const G_FILE_ATTRIBUTE_DOS_IS_ARCHIVE = "dos::is-archive" const G_FILE_ATTRIBUTE_DOS_IS_SYSTEM = "dos::is-system" + const G_FILE_ATTRIBUTE_DOS_IS_MOUNTPOINT = "dos::is-mountpoint" + const G_FILE_ATTRIBUTE_DOS_REPARSE_POINT_TAG = "dos::reparse-point-tag" const G_FILE_ATTRIBUTE_OWNER_USER = "owner::user" const G_FILE_ATTRIBUTE_OWNER_USER_REAL = "owner::user-real" const G_FILE_ATTRIBUTE_OWNER_GROUP = "owner::group" @@ -2987,6 +3068,7 @@ $(Expr(:toplevel, :(module GConstants const G_FILE_ATTRIBUTE_TRASH_ITEM_COUNT = "trash::item-count" const G_FILE_ATTRIBUTE_TRASH_ORIG_PATH = "trash::orig-path" const G_FILE_ATTRIBUTE_TRASH_DELETION_DATE = "trash::deletion-date" + const G_FILE_ATTRIBUTE_RECENT_MODIFIED = "recent::modified" const G_VOLUME_MONITOR_EXTENSION_POINT_NAME = "gio-volume-monitor" const G_NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME = "gio-native-volume-monitor" const G_NETWORK_MONITOR_EXTENSION_POINT_NAME = "gio-network-monitor" @@ -3013,7 +3095,7 @@ $(Expr(:toplevel, :(module GConstants const GDK_PARENT_RELATIVE = Int32(1) const GDK_MAX_TIMECOORD_AXES = 128 const GDK_PIXBUF_FEATURES_H = 1 - const GDK_PIXBUF_VERSION = "2.36.5" + const GDK_PIXBUF_VERSION = "2.39.3" const GDK_KEY_VoidSymbol = Float32(0x000fffff) const GDK_KEY_BackSpace = 0xff08 const GDK_KEY_Tab = 0xff09 diff --git a/gen/gtk3_julia_ser10 b/gen/gtk3_julia_ser10 new file mode 100644 index 0000000000000000000000000000000000000000..61930f130aa3193a1aeed471854f25dc520f9992 GIT binary patch literal 584136 zcmd4436yQwSsvEsy{cRD8@r!+)YO_@!1}~#n{Uo(SB!pY7*C>fn+^V`&b^G1A zx46T5uS8mAGOQJbMI1u{#DTTwU;>elA&4+0#&}qO%nFIfa%>huge|ZG&O$L@Fy#CH zJ^lYad+&3q-UG50v|inN&)MJp{&D|%`n)fC*ZR_Z_uY4`s#fQd$zG``AG}*n0U-yPb$CK$CzpXyg{@?kh=kl8+{Y|y< z^m}%mAMDOQ>xa+bMZLitdcImdm`)bQ)y8mlGTuHO-q~5~SC@wK!F0Pn-#(tqhV$WM zTwU0oPL8(uH{<@%pxQX@&kyY{stdFE$!M^BJe?d5rt_0(Z7~~c&*s2cZO(T4_-enu zJD*IeD@Vie@Mv+geRFWKJsOM;=7-h#@nXb39~@U#b{50YUVlfvZ0V>!y;)tE9Zqhe zg~6@i;P&=lJfEIWv;C>SxOLngA56BZ?_rm*6tzRynSmp8{+NN1-xm0 zFr5zewr9f+4ywyX{X6Et@qGLCa1XdHvnaNQ<2|(2XA-vN)Bboi#NXTd)Elrh7|rl| zP+@y>VRtcwthT}B?qD>k)H5=hfzP@a2oaY`zWI4yv`I$#^n5?(Yt&)e(R% z`UjwuX|__>#Ji@{7^HCoCLubAVtamaJgC+W`?KxIba*fvS3QtByfvsUQHx4y8~BAs ze_`I=*&g+G2BU4}=K^rz-Q&ICZl8p+u{YUW9O37K>8x7gFZUPY-D-1hI6EHoPYjV8 z+*lv)0*x09t3Wmx@AV;)4Qk`o&Sbhbm{u#3V*)&@E)U0+h9f9AQ~98M&48Gi4aWx% z`R-^4jalF6@7^Sx9Pd?Y=+N+(C3KNGJRQ)#w-2VnC%3B=!U_ei*8B7Mbhxva)6=YH{VDxmiFCYL z|METbc6)yTX>QC8`+Lws7QrS=m9=Gzk03dy9rXNYI6A3T(d-CF_o^#+(e`X`+@BK1 zcnb)zI|pe$D7tcPC8dpxW%i zK^)_4B-&~dR(LS&9~o&~z6tf44|lg`yVD7{93NB{_FzN11K1FWa1UZ1;L9P4s@go9 z+=Au9HS|IM6=@ZRgWbxl%!DN4b2B^J5Xvo31x){`bdwQ_b zudYBI^XcToI1Q^YtkaGha){)y4M|2BFV6)jP9oLt4`m+J|Cts~uZq_O+oxYgey{>eR6o45L-#b6uuGQ?k7 zhHK~9@h90K%pQ7xw)O__IP9!?FhY8KZErX=uC!Vq5sPP#n0$Il=>}5T4=y zust6l^qElDM<6p%;ga=kV8gz4g`Fx|ztlfIhEp>S56Alx_*JX>aN)-CVf4q<^8ToQ zfZwya$#`;!Ts1j*hoRblx9aa60@{31ZOsS$DKrYE1wU6^brHijyls~43J{=CI12WD zHV9Q4()(OEG!6omgs{@Sk(^NUxMZC;YXk+j zy1I{g>o{4(XT$v=9L}X+)Yhl;tog5u5r3w`T^I#C`!>6bK6$xnc|M%ue^zFT9Wv(X zvbVZ@7%m&_`aYtu4d)x?-$uHdCgxce0q5H^m8(z;1PGJg%obCmE0B+Q4jhiE2OY6& zh#==+dp222@vHl1kN}u*Mqmtf^9V{u&IJKugfL{10;i)FjLK3f0*^ea9@?91li$5P zh0;?RvOgpf=Ddr1CiEPEjCCKvAkTs@6wF}=L*QJn5A9xuIytX)31NG8aLB>W#QZJN z^qoGrVq|QP4`o$|I4~3z-0dm+)!IIS?lIfU117+a;mM?j*fh?A+%`mS?3p=R<*bif z{>tsa4xBua8&JDVFRvaBf;ZlU6w9iB_|AMnZp=6#idZIIS`l7?`3{iq%(m?p7Jwb^X?P2h^C5ZIomb}<)1gn?5HHbv!Zxcm7jRDF-IMJ@aw=;qXLeD&6YHpt#sj2m zh@}pOl`8UamK6fc%>jhPZ>_dWxUj}wT`_Xw^v=q?+R{d~#_h0_H-K{6rd=Lwe+N3^ z&^mqO#GnU5rC36`&7p%mh;?_H*3BSSMEKrde`4*;CdII2qzT9j_`87O%JJkF@!J|U z6ml0?anm0zlMkO&OTava3QCVG3j+A`x3=hfGdy(4*GJy>JYFeasf zE2qY5tVC=9muDlSl`t4eJlU=AD2A+*f~nKrWll`0733U9P-fM#8UAcp@=dl;UAU#) z?21=l$|#NMtsr~j%;>@X2&woOx&^V@gvO+Vmz+TW<}uHSr+BO5lF~ZqgU$N!H+FXxs_%mngs@XATaiXYzasXm?!r-a^Qs zF{HJX9>x!o#k^W#@4d0xAA8%~WW{t1Eiv9JJkT0($_&r9M|u7#1v6ujuxMyiwc(6_ zY#M}91l*)xL@A;fCBeU8jAKTCYL7(IbXIO0+6@sEcv1Zj4lj+PF!%T9L z;|UG=Xi(zvZMNvDXR?~=qSa2)aL#3y_mGqyQa*0RtgKi)_NQ+ES_;b58iqW_JCptt zI&Cvq?*C;cgfI%bz=J!Rj$#mjp$JgfByP((TbtyrnSme~&9d=sy&Zy%)Q*_9gQ7WQ z9P7p-@mT$eQzr~qOo9%C7|Kt#soAP$houj}X_7%ClKJ)i$kTS&5Ii%(I+KCHh}hAL zCK#s&7YnN~K4j|=DN{x9=y5nffbS& z)v{__&NZqDbY4Y5j!^`h9VQ6o% z!0-xoyN@~p%m!nMA<{VHOphMIp&;lYp`l28`*1+Rgge6{9xz_wci7P}vv$9;Z4--; zaY3o8Ej@s_5V~Xda#4>*oJLvDE@~Mxf@8lj!axl*kqS--DKa1;3xcrWZ03^#8jo{F zHpY`}RyByWTDSg-jRvj_!w{$L>)haQL_ORZj*k~8%q*sGala2Vax^xzs>5w|1zT$B%4Q6r=ZH#vKeo$m?{$@pUp!z zjYZica$`DRpUsk7M%H=<^w z#WDIu!+RctTr|aqFow7~gYu9=KSK2c5~ex^)d)c9HU$<_DC@aWTu7-Y{8c?OFh=%Z zs!05ybGt0x3mk=6e*E`k>Xh@}M%=zaVae@r5eVsX@CK&vL0G2MMb=5q9Zb}{Km?I<@MD6606*{JIb>C)cEVj@kgJl4GA0qn)V1nee`C zY8$Th!#zNR!2k-#QP-|6+W3IRjZWC%j2zt)7buhsr|`hNDJl$ueOSyGzIHx=*WA5H zsel{w^-y0qhU;3M_VKYK?cAD$TeR&gLJv}!Q5VQ z(U|0kAt53u(lErQF+uWG8=g}!4j6-8Dl*W3&Um$TUju-#d(Vb()=jAPyg$21xdf*w ztE|WfCeQ>bC~n!PMRO3ae`JJ5!+CYZj$S3ln4lnYv&8|bTJXrg6q7LJV>4M!w~YWU zx+Kqb5c#*6ry1U&Y!dv-^ODW4y9IXMVlfy#B2v8r*3$N?jrPIa6;vl3r-E}5aE&;V2iOZhfyA2 z!FBBe%puh{k(80j*dTx*GKzORk7E)C_#PT@Y|~^C#o{Z$%eoq^nJ;pKY_9ydVdm-` z>$WSA5}VQMs!LL%@76&xQS6NE>{U>%vhuicvp*19RAaI$teFh^k;qw~sDrVQ^F0u!uNWK=XA z<3=}rAbl{Hpkjv!tozYX)EuC*$f`Vho0egUgYX$c_z29Lu2CXp=YmWeutVz$emqGk zM*f_;v~I>ICi<|gQ;o|+S~KHnQb*3fswEmEQCl?sh`B==z@a9@b6yyNlH%FsuGngv z5wA_#c{sdn%F0_#?+m9F9=(90{uNGAbb5T5TntV68O)?sD^9=Isu99j2Fvtccy${0 zjWFYZ*{^lX&zX`Rx(;s)%FL`GMiw+Nd(kD~G!0Ce-7`6~t-5h)idhg-^AmG(55dJ_ zFoFm`(@GeSqn>O^Z`DO|Cv22f$2T~8IaVY=Aa!8bb?MNs!I_eZz;C-6n&;B2)ANH9=D@7d*=Tn#A+Pv~7UHE37Or0H`u z?8}@x!#jrZ<%Uo%_-7hkS4&hHs8C0q%_w8!vH(?ij$l%I49E=KO`d_AkUS*f6^BIj z_|*lc)$H4#w~*xkQFblNUC=BdEDT++rC^HCrbzKdc4RzT??Vs9SO`kio?V5H=i=9n zFg0RqVHJf-(s5uR-7v)iOpj9C8ZmE(FwapL1!D~PFpcjwoNij7YeF% zC@r}Rn#$g^DT3*$8CSa@0IM9FAErf)kN4~ZtVuv*QR=FhYb2Y5z$i&ZN{cx;njABQ zhc&9wnDWvR1Ha-77#Ys+gQ&m3XdntZosWE&=DcXCagB!;?CT&Ao)<;FP3B>W!M@@u&?`>m;0F}66#>3_)|gk|Vjry~z>jsm<8w6Rw{TkyM*7r7N3>U-sV2Ig_w_#uvlRqld63 zJA*Lu>rmVh5=0cLSnyyFjc}MktFF&>s6e_z8LU~40VXKPGnJnZ(|l2ceeE)$D2)b` zGh(m5Y!nO&d3c@;WAa(`T8g4(S&a2taDF}vx||3awa(eJ4K>pVYNOWgLRIE4HA>~J zs_@v6vQ3doZc_?*kv*v#A5gcQBcecY$>)8Be`qbsj)r*EGV~DMgVR8Ad{=bwgL}_Q zUTC}vzXOj{T{N|3J2gYuy>m-c2qVu;1rroYY5mHzb1*EM;$1s`qjD+fwR6u^E2sfs zo^XKQVD%NPyLz})ll(KYXyvf6Yie5Ra9jizW15Xnv)#Ekj`V2M6NSZ%X0 zxyv`|ztXBWhFDvNMfDsb_Q^@;!KyNZmw1wW50GDuMoM*-q!kpq(Y0q()i=1}E<%5} zg50J)=aHNjl;^VV7by>UhHkneI$*583x*qXD%2TbwalZiK)<%z0F&sqFths804F|( zO|&AsuJxE?=+S@Lsz>|+Q_c6%@^+xL=$dESb)!{@1oW)C5x+@yFG3f0^W2U4Pb*R+ zQ}!{5@OHKI6jqtgyNyXND}%Utuy>Q4D2IRZ2!89sXpf@Z-pwGR>cwj5I;sfu|3sdi z{>w^&w!ewnUP022h&Yokx%l+n&9~EJ&9nA9=>;{O#|e)gJo`R*A>Nob~ZBJkVXMAa_bel0@^dQz`xMsQrU(dB^0jQM1EDyjG)1$@uGTUUd-vI z`?oXXf6Hy#1qQ;Ru=`=}=9loE1Z68)K^`JBW;Dj88_ELmRa?fdxGfG%n~^{ENtDNA z&H3vxNb9TTPk}HL|Lcd&r_A>;>;N%6^3LunI<}niBM(L_`Kgoc5dI4j(j2hh%8H$5 z2PVX`qt|wJZk`#zdsgLzow(|X~T?F4&@4(-NM@7&RRb^lgd3D5iJ&$Q`76$7s*&& zH>F)aRsi5LoOAE5?5YEVeC0=u7N%NiM@;a3G?>!kuvbKAjdGeP2s3pB&+H| zzi{I-Vt?@_)Ky+b-bCDwa)kTL#F%2~&=0CPadu)j(f?ZDglzTwuYQJUa}A z&Bw+sVldMQyzS|!!S!>q^45F{3RS|-_H9-3ZSHQnHO=`rE;qVW@(d&p=h%H5d=90#D>>*8EbQ& zh6wW`rSK{ZNC2YZw%yp&imU$VCYUWG@F=mI5)7xyMn|b&iUlCdPN=afEKMboY^6~B zd*h1l4XQA+aW|;W->82#kBT^x>{23w8wfy3Y41} z;c3=-btwU)-dOVOLZ4o0^vO)eNsw#c={d8YWK%3n&8pVJgvZY6kxq$c2#EKcQmtfr zjufY7=2i8h-~f8&@L9HUsOv{GWjTpTuvCPIz&6J$_2Wwo5TBW$E(W3H7B_9{AGFjJ zJb@9HCVR$|qe|d-x$)(WBCqOY9FGWj5e0J3bVhR$ZQm%gz2xdr$lA8l64hMtW_YKc zqtL`N;^@@;u>5mfhkR+&tuWEXuTrY0Ql-Zw_ZEnkh4p=g;`*7T`in^|DZ@0G9zJsa z!Z)1m!L~k5-O}{ zvt6#AU#j;b_MZ3b;Tu=0_?A3-*92|!vdmb(F@+|}KhY}mvKDd_C1=&4PAou&KAdO4 ztvgn1kouMNhIF;~ldh`52F03UN4e6?-<_)171f?_RnPz27PZ_?FCkFc+IulrCxx_51{@wq|K0^gW#IKkmg?_k zGlwQvC#lTbe)bV>`uMdo{fF{OFO|L8baJExG8q{PZKy6hJ-_)(SY~_;g57k2Exe-s z#ieW7MQ}!Fw2hO&5M}5!it?<3ptt&Hk3SrZ^)D^ezrf6e@bXKZC4A#pIxgfN=YzJ_ zUxnW#T>>HKDII%xq+^YR?5b-rm4h~=dxO>yDXp{#3Z-yZ39+6>ZE>_<~Dvl4K_h#-ZHAcaqJnjGhz@W{&rU$gEPlx6ee2P4q_357YL))=1G zkaNqaq__YK{D;K}xujSkql{1?GoGTDih`RzDhTzWSpwvi0A>l2wnb9akDY?0hm$N7 zAa-I&!sGc%cLE77Y$SNysQQRk90> zyEF9B0z=q!qmL%Y(j>DvqA7mx6kL5#lB)vDPFzWVW+0|})|oJ~?3PO}=|qSMhgqJk zMt+H_j54E(TvG7%){Q#vR4to!V%K>N>tX1dEI`GU9yCjE#E}Kpz@RI$@pzS1bn$Zi zECejwrrqsXlJ1X4;$L^yApiOVH!a8tXYvA{N>C8>#Hi_jeYt=2S4{D@y&ufuw+25anou5vz z(+;f@M-m-rkU-bL%#a%WK*7xTOgg*FBS%l1?9#FV^T;U}`sEZuC1{}>5hBg6x94ql9~dnPSi+XM2!U2i5OZePdl&khK1$w^n)xn z4@BIUpLb`5*5jK7n(nw2T_=(xLLw<3>_k!hKNd{u0&P6;n8MoOHz1oZzbgCyI5oe~%C{ijv z_gPMdzcEQu0i2>KmkvvGL|6k|C;vgRq@(r2MVvv0_Yb&wdEzn1s-h34b>O=vz$i*;-N z`_I&U8DB^Op?x=3)t!N#EFchbuGOl0b!KM45`OOe^*OvTIr#wnaPGa@#G1Hgu&ti= z(6&sqgzlYUs^vF(LLFHc&MpA3{#9}#Vlp3??R*8kakDMd5iC+mRn~AdfOT`2P};Bn zX)|-C>owqLhZv8b!aF*~;NR>yX!Rd(Z)^wf2X_Di&_W03nT)HJ$jAxZH8O|O;W7s> zWVuC_f%6%%$(1Y&awNfzPfeL?BQd_=(;>3pl;9oEq_#IjE|GJTxjW=mV_jFA*3yJq z7p>(h6YODCS+#9U7sh2ZafDMxA&6{8qTD`>|Zldt(3%Q0pSKKZa2s*r?W;Nwf zCsGn}9B#dn!r7@p2@imc`L4;P&eR3KYWCW_BJCf&3v~+^ia*PDm~^Xahhrxh|Ltto zLJ}kd@9E$gLHeIqFNAZz_&l(zR#q!^b7K&uc9k;WAYq!HD=`+6#?U}4I@H2Hls6aL zgJI4=^gVD+Uvn?BN5ZF$K~pdzZ4+d>^w;QsXFWy`cK{cYwhnJw>mX@!a z|CRDJw|pp;&MaV$A?6Tayh9%pi(!16#e8}2Yi+QTpyhi-Rct~?eqZ&EmXsiBRlRvbL9LTAngL(#m%j@qLM7$Qc3F#S&) zL!q_UB#1I|-qyXK%)IF=lwtgMDX(5iqqNjycEZ6Lr`NcPya2@J0Y%jY2ks21vyc$G zR(tNz8Cj^$G>UGdlHshQGvfG?d@L_WBerI^c-p2tI|~SS>wlY9iTa!GQ#iEs$k}4j z3K|9R0rnXn-A#$wwZnsI#h!KDO>06Z(Hb1$_7_0E647ns3f#J`xq#T;f?m)s4IQn^sdw_1cciX-_SydBhj3 zm^ODk08ns`0a{zyVQ<#(C%nu2Rxu>tQxKLT(6NIx(SIhQ$H;&ULFPmq_$iMC` z7x(&vSG3neWs#|{UnT{+@o`FWM^cc2{?BJpi^n4~GOc1RN1V;v5d+Oeo5!==cg$sc zaV(fXK{tbOuWt&be$ScMks*{6)gG5hhkJJ>rPMT^hlyJ!x`yzm{f?~IzJo{1D$ zL>Hu(tGK%JQfR!57l}Y9OF(ef)U-~86nw9Yk;G4!1nIES0A+~|^Bk&mojOTwsC8F5 z=9!%!ooK+FNH2YLFRC149hteQB%4FXiL?)8rrG@r+6(0$==mEt6r|2sB-AZ0@_b?6 z*32t+h=VFJyzn7J-!N150w|_qqJZBXYjN$K7z?fx$E|;SEchJ?I0@q0s=xIh@8HEb zOXJ0J^V_McKyM;nO5g<={Zr6TJ|Vwx+G?QKf1yi zN!WNXhsL}=A=Lt=f>b3UB2OXe7E0b%AY%(xk<4*Lh+AHmrbWpSAlx-2ekq}sNnFDX zI){I``NMGVyqjJ7*J~-aQ2?$OLs?h8-JFZWD?7DAk=-CJ8{G(K>rVqwRF3v5%P1Bg zM87sa_Ne%xL3&+E%cNr?Eps^NqK1;91$gm>PSadM=?WMXg_nWMOE68!FC5muoUXSOIB)FbPr;=0TpGvg-w_-K70nPHS?+$)X4mC!Q&> zroCDH1?wrxEPzuib)Iku{UK}}{2D50zm#Vv1_6$|^SSu+{N{V<61wYjEz6yGv~M9! zolV?I#A9m+Lnm|Fv_242ly7@?PTpoU84!tYKQP&K|bR;8J^6nO^Gh8<1JT7vPC@gpp z<#QA^U3D#!;t=w=zik#ul}!-PN;xUv8XLYVk3DA zYzYXhhVm0E(lzoAxF?IRO7fm&6BbKOhQFX|%IPj8q*_>=nx&4nO8B?&?GW<0EQ7*E zMS5ipKdwKzUjHyrh=2HzECc5cylbp~2tN`Aq=}1=5qB{%f3&moE0U2nF#Fp-6-;K>{Mz?Ia0>HaV7u zo>QB==Ly^2l;wL3mg>;k#^qVKLfV;?)@gwZ;`x7)$Z%;IouNY)hmrcCdAedGncGI} z80+`<9hPL|u|HdXid3flH?gSF-~tkCX2CP*RoLq7Fa;W@gzQ9zuc!~iw!0h+rc8Y> z5>_7U$I-F~wr=ZX=n7Yo7@!?LY>RB0<4s(x8;h=z!l`rCN}y zffyv%SgWed%GW^R27?;wJwV-Y7;L{ijgqeev z{XOGRh8guB7=`XZ09wBpdX*0Z-%Z(jL;KG{p}4oZ8-+lYWGoG-z*zl`jjk+dklk3q z)mdDDYp`T3L>9iB+O4X6HGEoNP&>0vmQ2%M+b1)!B`qxhQXU;>Q^)YF4=ljhL?)CH zuH_#j4aZx&>qR4buQ6uP{wC@g=_8*;h=a*ZY=kZZjP>(y&xP&<=q^EWn6NqP{0>k3 zd$a2yuX_p~$y}+;_gp4_jrZ_jlq?60FIpQ9k1Fb18cy6+OsFCjUBbJ}8Iz=qAPv^tf-yR8tHTGhNaKQZcBrO^J_W>+m&TXdm-w zbllZ43BwYWuHHV{9rb7CvK;rFqH5Fr!rXqj<^HlyIi1wQMmq`R`Lhox231Wv!C<2= z4txD~H|igvsO&y4N{N*_OVi27ozG^NRy|p!ud_0@MFNkReyjj13rPTWaBw9(x6=ez zKjVrr33MC0z5y4O<4$zyd#W~SC)+*7@W`2v*1yoCk*Y978VhPEDI~SD6gDJT)=D_S zZzo6S_{8JR+R1d+cxuUPPfoLB2eFVxV8n0739TE^-}^RU7hG-<`R)mg9j zxIiAK`q4e?i2EHCEyM`lT7tU*$P#ydvKD285-|s|2(eH$2v;S{0jTr;_1EU9tA8@9 zW_BvTvxbYwaSu37B%4n^nGg02Fv5?zgBgCtaPIEkht&Te#Fbu$A^y$v^; zX6Ul#0BO38`v<6spHhuVWEBv0B1@w5WNDP$sQQtDq4^GEsIrqio~p(4U@+c2xtBZ@ z;C13jLL{DIh}}r~y?aO!ZI(H<#oAN&Brl7ETEQVg*hNq_GyNU|Hkyt(1R#QAh`f(#dPb^ho=U+L1dBm@;k=n|0N2NMcaK-q~a ziIl7^gR~oE58OrUdy*n(s>*Ue2?_30Jjr&5;Aeu z2DuxFueghdC<8N*cr+dyO~%7re?a3sVy=L(6LS(LF_*;Ijjr2wVWx60e)JU%YtP?*H8S$f# zb>gO4Ihgiu4d*A>>PEF{f03;-%7GN|V}E}Nc19_7+My|qbe1kL5iN z{`Wd^)?c$#f9+QNH=5Mau2pr2Omg_KI~^eGgkI<=BfBTZ2YG*#j7Jm4^%P(`zkncb zTWbdSR;UFfkRVA3Jjeu=)^gET78Jr~y_pe+v{RD#-e7k!#nmhKDwr3rDSC2aT8WQ{ zQusR93ySb31s{8QdPW1j;9glnG^3)my_hE!u$_?}fv+1q|9e4umPS}olruCb8d9Ah zrl7a!ff6@Czp?(ur_!dKris-BaEc%8VkI(C8i`B+Xfv&9i5|@dpk;n@jvzUW z&0~Bf8Tqivwh@y9#r{}9v5WhhBtH(AyUVGImke8+7@=t^28hMH59L*>{_Xp!^Mk3_ zqoZeD<5d`+#8xsEb4+%$7oLK z>iKB8Kx&3lP-sSgSU-k)-Q`M#xTJ}BpMv-mm=3nl?H;cLhGSMi%Zz8WMu&a8(ap

Yy`ymbJqx^%l_YXDRs4s)$jhaz(m&4yZzAryL{d$*u9ED3IBFv2XT9P*S6&^Hom7Q)~c z7MMHL$=Tir+|+#e=zU+YWC6Pn*E}@Zed89zl>o~P|KU*SEyNanr-_t z9sXsQAieF{;SfPx>y;aewva%BLVH%Wg_}A#o6-OxJ)08#Iq?%G5N(R^XU|J%t&=8Y zN=J&Ks?(x0J^tOD^6#|P$OTiRHOU22`Ha!{L3jyUz0ewC@l@u2PvE14$~dr2XIvl6 z>csk|@7e>{+f5oCz?FBDtBSg4Ou_!w6*eNr6T2-a`treavN+Cbx?C8mqfVSI@QZ*@ zXrW*Dr1HE(hPj{j?1i`&FEFt)7<8yKF=Zs(*7T*k)K1YfE{Pk3yzpVC<$?+Xcn){2*>F;gW2WUy_cJZZauvaFQ;A;0ijo zaiv;67(!O=Xv9g}g0T+HA|v+(vHxJcKh+wq>88oToam+3CegbGx~ZmIANlsCQqua! zJi1uyfaod%&5cD8C-Et821{vdDN4Aszia@R3l7RdR^9+6reA4O_LQ~+-x?q%+F2an zyut%TRP~~B^yd9+ruLt1ll7k(Gu<2ZN0S55=ZX&1cq@NeZ9rX)C*#=w>$nqxG#z+( zkY--TYsUPu>I!4;^JRRJ&HFtNCi2?&Yu;Pmycl4RaXa)@2Y)5gr~3Jec$5T`T8Pdz zB7nO*({(^mtITA2(edo@G1U>QKQ^*v?P{H zn`H&KS`}L%yRG2=Z5}6i0Gdlu#!`mn@Gv;@G%;zsV}wZoc4GByI(+{;FJA0h9ZqNL z-<-nc#Qj>T09gt-5RPC@W7K?LPCJYF90hFNzI_U@|83)QoPce@H!sk+I;OQI{i9j6 zHXhtI4FhALB8qDg0@UH4 zPp1kXj5bVMWw8mK-pP=bQEge!RE~>p)dl$ax6p@gHDN%yA}uxc?)<#79dbX|T!^Xb zBR6jlgy*&nN?@{K@8umP>%lWX>tBbbr2;jzkn-V8cx2iUyv(%5Z*yd@<2^gAVPLtV zM&5^Wj16@J6T>2$wLhJqNK6AG_myWAV3qP|B6-nBgGl>6CD;^)^>1JF4I0W?u~e(} z<=Nz`35m!HkWS58y>f}-pkv06RzJi3(0$mEF3z_bbnQ-#Pu$_gWuA;Y=4qfuxiUe zq+&@HXWHq?M@!aV^A6(=>g@(Xg!eqcf`e_MqDU2^N(|B?-ADU>JI|e6uv8b+%d@04fswaY&z6*|5y))`={MUpNcvC4M5H^5?pG^+s?vFTxDSlqu{*)uW?68CcGn`Ox$ ztACAsOO`oI?qaL!2s=bD51+LQUd+ps8EpQEyerwi9HLvjfx0|BUf*IbA`oH})Pk@i z+iEFV^csM2$`!h%1-!AO6D_bQFkw8j&PJMLt^PF6fut&hJcAceWzSH~iZU?e48pL5 zRUE|x^uE9sObR+Iw0g;nIqThgE{hnB6i+M3oWwBTBCx{{ze&9 zwTdu}$(Q~8oCyXfq~`NMe~KT|>fL!^4I#m}jyY4S;Xj(t@D^Z7X1T$Bz(&$*U`veh zV}8ULYFWkhN3dm_)D@a5^4jf=Qai0;`&MG@?gCMe4*1tTdX$hueQgFqnzUNVk$3I`#{OJ zE0zDfrpi|dorv$efjfGv97C%6F@rsrVpe!QIXJ*!d$hhX8-aPm=_QnSva__VU1G2g_sTq_vT~W_mtx535Q`zwAn5qFnL%?3m){l9P0O*b zrvpAWdBhE>HDOLtMsNjSN@h8y87a92mvEL1y{=zPl6CH3x1 zP99q)as)n7?FPP1{5+ZGr)2Ux*ATcd8jVZi;c^QZc3D2hV;R zjKq(_wS9ANg7wJ+FL{kdQ-^*uA3;JAm0TAiAh6-PtzTh1o(mHCKm_RlXmzc%e%D&$ z0FctH7(I`B`G)&^!in=; zD)22oPm}P}?^HR150MC1?aNB4uf2nPdqbeDxRhA6-V015M1iT3NBEq)wl85TWtIxA zp9CrfqtWoVu_r3ZmNXgW^$jlSJfZ>%0uHgD;B?~QujP4I8RO*pem-;LI(eW1)&sxD zPjuG|-$s*Pz>2`d4zJ(9)rA@O zXXFHC=8?r7<%T`}Iy-n3IVzFEKklw5?&S?VX+c$BMF1jJJfKcote|L0OS-d}@~Zto zmJi{;h!6Yo5+fljxeBrI<@E=y@|1}ciYW}$-<#LtC0de`bN0feI5}<8?@P$E`kL1_ zBvnA9q?AjO1u!Qs53GyK>dVwn(}#4w*cL}jx%k0!vewkN=~ z`!&G$S6QYM4DC9id>Z>#a7QGa%{|mQnkg?jpJ9b{KI=%T4XjYwy-BjVnJrcGQs)qg z%@cGIDoznJPj;8oEACIk<2*h^QBG0izp^Ny#|2L}p2NE9}}6=e1r zS^|+~3&*^Xa`WL3KqdgB1Nr2Bj|6iZX(ZLAd@H>&Ri=wU37X{N9qDptiLh@{gaPJ8 zlCWwE6Xr*Kq}`ZA9MgvXBu=w%+AAf`&ssGwI6EQ?0{xB{-+R;e9@xX7syNnh&&sZ> zc4jH9#+iD-sp0+|1(#01u}79XXD%#t)=L+H<}H?oI(>h^DqF16I)8bPcB#0jlrEJu z;keLh)#Dds4Ki+;G%YlpywK>)8y*ud_y%By4iWKyv(V`5ySwIr-@|fAj&UL$vaMp8 zm;jxMhtPB<9&7^<4~ygDd%^?1r!x=PR;wO=bt)c0)17#*4JaP!@1mUbG&W&&!)cqC z&2a|caEt|1SUO|Q3~pD7Ow-jx{kAM4F%Ys4{b=56Xj7@H2Pj$vE2-bb&W%0@p|t2J zVlWh+=mw(GvyyJQx~SiFDpvHPomqJ>W@U{A7pKt`v*kqV3WM?UIUUp_-DFr&x&dISEp4DKKUmKBS*vW@Mv*#O8r10^$3sfmQZ%1^|daJnJo19`1;{w zg4J$?m}W>hKE^x}|J0L!oJ&+klVGk|BRhsAAAP3}~ihm)fT?&um! z=;qQ)BE=PPynr((@jzC4WJ`e_Ubsv^>MtX0!o|>p$@-`e_BUCkxCH8$vOmtUR0D!3>o6%N4N|&bQq<^Sum?kg2r%tr z)Z>!U@X44?hxIByo&j|I-|533XdWYZY^9pK)=c1*;aEM2fC?OVK*T{3P#YU7H|n1) zu>os59FF#?-r&x0f4o;M;XLIRs^jgg46**+Nb%q_{zb9JZsknIUFZ(+7FwF0 zh6GfHA_dSLB8%{6X2r@-M5mMizC!q-<`H-vDyauf-N009fT|E_FRPpf4Jh_-gWn+% zgKCL(xrjEa4S3pTaly-%(C2yA&)#c}-_Z>1A;%+rCsEc^QPDvCad;8asBxv$3buaX z2oat^kKy3g1rSV!24UX?7=exip!yRLiu!XXL2$@?;Gy=t+R#bLmblVvj;YLRN5k1f z5-H>d{v3A=&`Rq*ARnX|yJ`jg%;fen{(C9- zNGZXH_S<}hANOsFD{FlltP_Mz$pXYH)s&j?hY!@hj~-gsbZ-6tF6TM^Fi7MNwMJ-k z)u!#uyZK=al+%?AP;N{i704==6e#HR(lv#5f7CxsmpTxpWYoWAgZg zX@jb-T&o|v=D4cw=Omv#=-3=5lu>h7*EAU|j>cl9Q09=bNx0l!=Y%?Lvg+|ZPFyPQ z0xqmUn*vuYqoz&69Cpy(`WCLQkl_Ox1=y#c%f11pCQF#+;L=D8MNh&SkCQZ8Qb{sx zdJ!_EDHUD>o1ZcD6`YHLxCmx`_8;I6PIb%1l z-TZ6ttT_1oAEsr*lvNw_Q&*Cd;tC0?p48;6&5_`^aX$Od)HYAsF}q@iI>)H$XVGh$ zVt;-TJuwvK)~WrB$cVs{D^7L8fH#LYTKNP?xNV=2N`@bxCEo!kKF!3M-uSNk$M>o$ zK{nc`IB!hKhK}Y8QaO7cTxfg_T}9X3$gGA}JH14-)21M+yOXk;WGFdne<(2c;&R*} zBfP3-yi%yiI>m!l>5KbP&bwLnRd@D9rfyRdZ~cB4?-i>7$C=5?Irm+{wsX38$H}F- zh(LH9pFM*W83_8N>H@Flr{@v8&5zkpO$T4Tzy-a91yr&<7a}W*gp3$r;zkl({e5uc zCdZbGFzR1G)^!Qo z>*rg3vZe-hf2obD!@=<2kgi(gK?f&xfwtur137g>o0Fc4ZRx)?dA7^w1NBsKh;CU9 zi36)>-_pk6pRJDGYj?)O$dZ=%8oirb>gLTDiL*}p zp-r)~ANzP4FV(UcBnjoJws`Rh%{}8zgk1hjw=ICGKSl$|_(0!l70U!Q*_blM($amu6@G5XZ6Ic zOw4fWUs!(_X>5}I@ROp1HdMUfQ#+c<+)&|_7xR%td_x-IWa99g?r$wdlHZ4``W-K6 zUf6XF%3|dhBnoouXYYX2%_yL7lNG}Lf0;Fx=yD+R%Y=PBAme(5CXi;!_J?<1O${2= zNb{q1L~V$&9gkW?8B^qPn8nKCmG17IYG-SIsSet$zirBq;~=cEbxD|&tqmGJiTkOn zH0{d3%CFN)i<9eUO>wfv@>BHAugB7K>lEGpT90Jb68e@KBF%!GY1=`3EvUR|na9xj0hVJJ_xJFDeLc4CLMQ(ZtlPQ=> zIl+GkQOa6*h~5;hop@2PC>E}nD6#*gSE%-4p|*ilqP39Ig0*8D>|vnp<%DW}rA3

=9Awv1p(@cGUfX5f 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 z%0A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

!r=tPwmKf=Y~0OuAbxBZW*zZ3$KsCY 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 :(Sys.iswindows() ? '\\' : '/'), - "G_DIR_SEPARATOR_S" => :(Sys.iswindows() ? "\\" : "/"), + "G_DIR_SEPARATOR" => :(Base.Filesystem.path_separator[1]), + "G_DIR_SEPARATOR_S" => :(Base.Filesystem.path_separator), "G_SEARCHPATH_SEPARATOR" => :(Sys.iswindows() ? ';' : ':'), "G_SEARCHPATH_SEPARATOR_S" => :(Sys.iswindows() ? ";" : ":"), "G_MODULE_SUFFIX" => :(Sys.iswindows() ? "dll" : "so"), #For "most" Unices and Linux this is "so". From 9fd2f4174618b920bdc37b359125057c5c62a9f1 Mon Sep 17 00:00:00 2001 From: coloursofnoise <53288101+coloursofnoise@users.noreply.github.com> Date: Sun, 3 Jan 2021 04:31:10 -0800 Subject: [PATCH 11/11] Run generator scripts with stdlib include --- gen/gbox3 | 15 ++++++++++++--- gen/gtk3_julia_ser10 | Bin 584136 -> 584497 bytes 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/gen/gbox3 b/gen/gbox3 index 0d7e6bc5..d85d01e1 100644 --- a/gen/gbox3 +++ b/gen/gbox3 @@ -2,7 +2,7 @@ quote $(Expr(:toplevel, :(module GAccessor import ..Gtk import ..Gtk.GObject - export group, icon_pixbuf, iter_at_position, from_icon_name, path_at_pos, style_property, use_stock, scale_factor, minimum_key_length, pulse_step, buildable_property, mark, show_preview_entry, start_position, pango_context, object_name, child_visible, preferred_size, max_content_width, level_indentation, transient_for, pixels_with_length, cursor_on_cell, line_count, request_mode, monospace, language, from_pixbuf, current_item, section_type, has_origin, active, cell_at_position, orientation, tab_label_text, sort_indicator, documenters, sort_func, display_name, activatable, child_secondary, tab_vborder, options, inline_completion, activate_on_single_click, background, ellipsize, has_resize_grip, digits, junction_sides, icon_gicon, create_folders, size_of_row, tab_pos, attributes, show_arrow, path, qdata_full, shadow_type, event_window, font_family, realized, row_separator_func, default_left_margin, has_tooltip, sort_order, nth_page, tooltip_row, complete, accept_label, program_name, kinetic_scrolling, device_enabled, description, hover_expand, max_content_height, invisible_char, drop_index, width_chars, startup_id, upper_stepper_sensitivity, item_column, tooltip_window, preferred_width, image_position, action_widget, capture_button_press, menu_label, default_bottom_margin, track_motion, property, data_full, justify, inner_border, progress_pulse_step, focus_on_map, iter_at_line_offset, halign, background_rgba, destroy_count_func, icon_tooltip_markup, window_type, serialize_formats, use_alpha, inconsistent, tab_hborder, file, homogeneous, max_width_chars, modal, extra_widget, baseline_position, ellipsize_mode, default_icon, targets, font_name, item_at_pos, byte_length, iter_at_mark, vadjustment, value_as_int, focus_visible, font_features, deletable, parent, direction, width, tooltip_context, predicted_presentation_time, from_animation, inline_selection, indices, application_info, sensitive, margin_top, flags, data_with_length, text_orientation, attached_to, tearoff_state, current_folder_file, license, size_request, left_margin, hscroll_policy, draw_value, for_attach_widget, opacity, ancestor, single_line_mode, toplevel, selection, modified, preferred_height, column, numeric, bits_per_sample, title, submenu, progress_fraction, fixed_size, fixed_width, label_widget, deserialize_formats, render_icon_surface, label_fill, current_icon_drag_source, search_position_func, meta_marshal, cursor_visible, focus_siblings, do_overwrite_confirmation, step_increment, focus_hadjustment, is_important, top_margin, placeholder_text, toolbar_style, show_tips, line_wrap, flippable, child_non_homogeneous, border_color, font_face, stock_id, website, end_line, preferred_width_for_height, preferred_height_for_width, default_widget, receives_default, font_size, resize_toplevel, visible_rect, uri, pixels_below_lines, urgency_hint, icon_name, yalign, mnemonic_widget, cursor_locations, keep_below, justification, focus_from_sibling, attach_widget, alignment, uri_display, pixels_above_lines, current_page, valign, destroy_with_parent, margin_right, text_column, child_packing, text_alignment, popup_single_match, presentation_time, items, uris, button, search_equal_func, char_count, completion, bin_window, end_position, aligned_area, expanded, row_spacing, select_function, siblings, style_context, range_rect, placement, icon_tooltip_text, resizable, slider_size_fixed, min_content_height, image, n_pages, stock, margin_bottom, vscroll_policy, default, type_hint, gravity, alternative_button_order, default_response, iter_at_line, background_area, model, accel_group, cursor, parent_window, default_right_margin, is_locked, font, adjustment, option, max_length, center_widget, layout, menu, can_default, right_margin, area, translator_credits, filename, visual, current_uri, state, storage_type, short_name, from_resource, header_bar, selected_rows, iter_location, show_not_found, accept_focus, target, expander_column, depth, preview_text, child1, slice, clipboard, action_area, default_sort_func, cell_data_func, show_border, website_label, cell_area, lines, bounds, can_create_tags, from_stock, response_sensitive, user_data, pixbuf, lower_stepper_sensitivity, allocation, headers_clickable, sizing, logo_icon_name, n_items, handle_window, from_file, slider_range, min_slider_size, hscrollbar, accel_path, action_target, sort_type, icon_from_gicon, copy_target_list, rules_hint, application, line_wrap_mode, window, icon_size, double_buffered, priority, hide_titlebar_when_maximized, icon_activatable, iter_at_child_anchor, bottom_margin, icon_from_file, visible_func, show_hidden, internal_child, deleted, reserve_toggle_size, no_show_all, vscrollbar, markup_column, visibility, input_purpose, hexpand_set, upper, preview_file, monitor, use_underline, rowstride, accessible, choice, tooltip_item, text_area, wide_handle, markup_with_mnemonic, valuesv, tooltip_cell, groups, icon_from_icon_name, frame_clock, label, objects, action, from_surface, reorderable, proxy, sibling_index, xalign, row_drag_data, sort_column_id, hexpand, data, indices_with_depth, arrow_tooltip_markup, level, default_icon_list, vexpand, nth_item, string_from_iter, drag_dest_row, interactive_debugging, use_size, propagate_natural_width, default_size, has_user_ref_count, update_policy, hover_selection, support_multidevice, proxy_menu_item, length, overwrite_mode, format, resize_mode, action_name, type_from_name, use_preview_label, tooltip_markup, events, wrap_mode, start_iter, text_size_group, page_increment, wrap, item_width, iter_at_line_index, margin_left, settings, filenames, copyright, version, height, text, filter, detailed_action_name, mode, wmclass, child, object_type, icon_drag_source, columns, layout_offsets, start_line, fill_level, allocated_width, focus_vadjustment, iter_first, relief, snap_to_ticks, fraction, mapped, radio, preview_widget, resize_grip_area, editable, show_expanders, item_orientation, enable_search, debug_updates, font_options, composite_name, gicon, match_func, select_multiple, show_style, input_hints, chars, inverted, icon_from_pixbuf, pixbuf_column, context_id, role, reserve_indicator, child_requisition, clickable, tab_reorderable, qdata, icon_at_pos, alternative_button_order_from_array, restrict_to_fill_level, tabs, keep_above, icon, children, current_name, hadjustment, action_target_value, has_alpha, authors, filter_func, icon_set, pixels, device_events, expand, wrap_license, decorated, requisition, policy, cell_allocation, widget, max_width, selectable, visible_vertical, n_channels, current_path_string, drag_dest_item, increments, overwrite, skip_taskbar_hint, item_row, rgba, frame_counter, limit, cursor_hadjustment, relief_style, current_folder, preview_uri, value, headers_visible, show_private, edit_widget, icon_widget, use_markup, pointer, show_size, marshal, has_selection, position, visible, scale, accepts_tab, buffer, text_length, drop_highlight_item, private_hint, response_for_widget, cell_rect, column_drag_function, applications, min_content_width, style, visible_column, popup_completion, use_font, refresh_interval, margin_end, label_align, column_spacing, allocated_baseline, has_window, left_gravity, x_offset, icon_from_stock, titlebar, value_pos, vexpand_set, fit_model, dest_row_at_pos, app_paintable, cancel_label, search_column, background_color, range, menu_label_text, focus_cell, completion_prefix, border_width, allocated_size, draw_sensitive, default_geometry, valign_with_baseline, column_types, insert, data_type, option_group, selected_items, color, scrollable, path_for_child, iter_from_string, logo, indent, round_digits, action_group, border_window_size, state_flags, visible_range, selection_mode, text_with_mnemonic, overlay_scrolling, spacing, edited_cell, cells, local_only, grid_lines, files, active_text, mnemonic_keyval, object, icon_list, default_attributes, auto_startup_notification, use_drag_window, line_yrange, iter_at_offset, section, modifier_mask, modify_func, rubber_banding, always_show_image, artists, item_index, margin, fixed_height_from_font, activates_default, column_type, lower, clip, message_area, item_padding, from_gicon, selected, has_frame, geometry_hints, screen, animation, comments, show_tabs, child2, minimum_increment, tag_table, search_entry, mime_type, disabled, cell_data, focus_chain, icon_factory, tooltip_column, preview_widget_active, dest_item_at_pos, colorspace, frame_time, from_icon_set, end_iter, name, icon_stock, focus_on_click, widget_for_response, extensions, license_type, show_events, line_at_y, ppd_name, icon_storage_type, track_visited_links, target_list, can_focus, iter, visible_horizontal, tab_label, font_map, page_size, min_width, reallocate_redraws, font_desc, mime_types, group_name, display, padding, content_area, size, propagate_natural_height, paste_target_list, template_child, skip_pager_hint, n_columns, margin_start, allocated_height, default_top_margin, preview_filename, icon_area, enable_tree_lines, app_info, translation_domain, selection_bound, render_icon_pixbuf, mnemonic_modifier, iter_at_location, age, mnemonics_visible, pixels_inside_wrap, redraw_on_allocate, show_icons, displayed_row, icon_sensitive, tooltip_text, angle, fixed_height_mode, focus, paper_sizes, preferred_height_and_baseline_for_width, pixel_size, root_window, pattern, content_type, current_folder_uri, show_fill_level, draw, show_text, selection_bounds, tree_view, entry, visited, arrow_tooltip_text, tab_detachable, right_justified, focus_child, markup, border + export group, icon_pixbuf, iter_at_position, from_icon_name, path_at_pos, style_property, use_stock, scale_factor, minimum_key_length, pulse_step, buildable_property, mark, show_preview_entry, start_position, pango_context, object_name, child_visible, preferred_size, max_content_width, level_indentation, transient_for, pixels_with_length, cursor_on_cell, line_count, request_mode, monospace, language, from_pixbuf, current_item, section_type, has_origin, active, cell_at_position, orientation, tab_label_text, sort_indicator, documenters, sort_func, display_name, activatable, child_secondary, tab_vborder, options, inline_completion, activate_on_single_click, background, ellipsize, has_resize_grip, digits, junction_sides, icon_gicon, create_folders, size_of_row, tab_pos, attributes, show_arrow, path, qdata_full, shadow_type, event_window, font_family, realized, row_separator_func, default_left_margin, has_tooltip, sort_order, nth_page, tooltip_row, complete, accept_label, program_name, kinetic_scrolling, device_enabled, description, hover_expand, max_content_height, invisible_char, drop_index, width_chars, startup_id, upper_stepper_sensitivity, item_column, tooltip_window, preferred_width, image_position, action_widget, capture_button_press, menu_label, default_bottom_margin, track_motion, property, data_full, justify, inner_border, progress_pulse_step, focus_on_map, iter_at_line_offset, halign, background_rgba, destroy_count_func, icon_tooltip_markup, window_type, serialize_formats, use_alpha, inconsistent, tab_hborder, file, homogeneous, max_width_chars, modal, extra_widget, baseline_position, ellipsize_mode, default_icon, targets, font_name, item_at_pos, byte_length, iter_at_mark, vadjustment, value_as_int, focus_visible, font_features, deletable, parent, direction, width, tooltip_context, predicted_presentation_time, from_animation, inline_selection, indices, application_info, sensitive, margin_top, flags, data_with_length, text_orientation, attached_to, tearoff_state, current_folder_file, license, size_request, left_margin, hscroll_policy, draw_value, for_attach_widget, opacity, ancestor, single_line_mode, toplevel, selection, modified, preferred_height, column, numeric, bits_per_sample, title, submenu, progress_fraction, fixed_size, fixed_width, label_widget, deserialize_formats, render_icon_surface, label_fill, current_icon_drag_source, search_position_func, meta_marshal, cursor_visible, focus_siblings, do_overwrite_confirmation, step_increment, focus_hadjustment, is_important, top_margin, placeholder_text, toolbar_style, show_tips, line_wrap, flippable, child_non_homogeneous, border_color, font_face, stock_id, website, end_line, preferred_width_for_height, preferred_height_for_width, default_widget, receives_default, font_size, resize_toplevel, visible_rect, uri, pixels_below_lines, urgency_hint, icon_name, yalign, mnemonic_widget, cursor_locations, keep_below, justification, focus_from_sibling, attach_widget, alignment, uri_display, pixels_above_lines, current_page, valign, destroy_with_parent, margin_right, text_column, child_packing, text_alignment, popup_single_match, presentation_time, items, uris, button, search_equal_func, char_count, completion, bin_window, end_position, aligned_area, expanded, row_spacing, select_function, siblings, style_context, range_rect, placement, icon_tooltip_text, resizable, slider_size_fixed, min_content_height, image, n_pages, stock, margin_bottom, vscroll_policy, default, type_hint, gravity, alternative_button_order, default_response, iter_at_line, background_area, model, accel_group, added, cursor, parent_window, default_right_margin, is_locked, font, adjustment, option, max_length, center_widget, layout, menu, can_default, right_margin, area, translator_credits, filename, visual, current_uri, state, storage_type, short_name, from_resource, header_bar, selected_rows, iter_location, show_not_found, accept_focus, target, expander_column, depth, preview_text, child1, slice, clipboard, action_area, default_sort_func, cell_data_func, show_border, website_label, cell_area, lines, bounds, can_create_tags, from_stock, response_sensitive, user_data, pixbuf, lower_stepper_sensitivity, allocation, headers_clickable, sizing, logo_icon_name, n_items, handle_window, from_file, slider_range, min_slider_size, hscrollbar, accel_path, action_target, sort_type, icon_from_gicon, copy_target_list, rules_hint, application, line_wrap_mode, window, icon_size, double_buffered, priority, hide_titlebar_when_maximized, icon_activatable, iter_at_child_anchor, bottom_margin, icon_from_file, visible_func, show_hidden, internal_child, deleted, reserve_toggle_size, no_show_all, vscrollbar, markup_column, visibility, input_purpose, hexpand_set, upper, preview_file, monitor, use_underline, rowstride, accessible, choice, tooltip_item, text_area, wide_handle, markup_with_mnemonic, valuesv, tooltip_cell, groups, icon_from_icon_name, frame_clock, label, objects, action, from_surface, reorderable, proxy, sibling_index, xalign, row_drag_data, sort_column_id, hexpand, data, indices_with_depth, arrow_tooltip_markup, level, default_icon_list, vexpand, nth_item, string_from_iter, drag_dest_row, interactive_debugging, use_size, propagate_natural_width, default_size, has_user_ref_count, update_policy, hover_selection, support_multidevice, proxy_menu_item, length, overwrite_mode, format, resize_mode, action_name, type_from_name, use_preview_label, tooltip_markup, events, wrap_mode, start_iter, text_size_group, page_increment, wrap, item_width, iter_at_line_index, margin_left, settings, filenames, copyright, version, height, text, filter, detailed_action_name, mode, wmclass, child, object_type, icon_drag_source, columns, layout_offsets, start_line, fill_level, allocated_width, focus_vadjustment, iter_first, relief, snap_to_ticks, fraction, mapped, radio, preview_widget, resize_grip_area, editable, show_expanders, item_orientation, enable_search, debug_updates, font_options, composite_name, gicon, match_func, select_multiple, show_style, input_hints, chars, inverted, icon_from_pixbuf, pixbuf_column, context_id, role, reserve_indicator, child_requisition, clickable, tab_reorderable, qdata, icon_at_pos, alternative_button_order_from_array, restrict_to_fill_level, tabs, keep_above, icon, children, current_name, hadjustment, action_target_value, has_alpha, authors, filter_func, icon_set, pixels, device_events, expand, wrap_license, decorated, requisition, policy, cell_allocation, widget, max_width, selectable, visible_vertical, n_channels, current_path_string, drag_dest_item, increments, overwrite, skip_taskbar_hint, item_row, rgba, frame_counter, limit, cursor_hadjustment, relief_style, current_folder, preview_uri, value, headers_visible, show_private, edit_widget, icon_widget, use_markup, pointer, show_size, marshal, has_selection, position, visible, scale, accepts_tab, buffer, text_length, drop_highlight_item, private_hint, response_for_widget, cell_rect, column_drag_function, applications, min_content_width, style, visible_column, popup_completion, use_font, refresh_interval, margin_end, label_align, column_spacing, allocated_baseline, has_window, left_gravity, x_offset, icon_from_stock, titlebar, value_pos, vexpand_set, fit_model, dest_row_at_pos, app_paintable, cancel_label, search_column, background_color, range, menu_label_text, focus_cell, completion_prefix, border_width, allocated_size, draw_sensitive, default_geometry, valign_with_baseline, column_types, insert, data_type, option_group, selected_items, color, scrollable, path_for_child, iter_from_string, logo, indent, round_digits, action_group, border_window_size, state_flags, visible_range, selection_mode, text_with_mnemonic, overlay_scrolling, spacing, edited_cell, cells, local_only, grid_lines, files, active_text, mnemonic_keyval, object, icon_list, default_attributes, auto_startup_notification, use_drag_window, line_yrange, iter_at_offset, section, modifier_mask, modify_func, rubber_banding, always_show_image, artists, item_index, margin, fixed_height_from_font, activates_default, column_type, lower, clip, message_area, item_padding, from_gicon, selected, has_frame, geometry_hints, screen, animation, comments, show_tabs, child2, minimum_increment, tag_table, search_entry, mime_type, disabled, cell_data, focus_chain, icon_factory, tooltip_column, preview_widget_active, dest_item_at_pos, colorspace, frame_time, from_icon_set, end_iter, name, icon_stock, focus_on_click, widget_for_response, extensions, license_type, show_events, line_at_y, ppd_name, icon_storage_type, track_visited_links, target_list, can_focus, iter, visible_horizontal, tab_label, font_map, page_size, min_width, reallocate_redraws, font_desc, mime_types, group_name, display, padding, content_area, size, propagate_natural_height, paste_target_list, template_child, skip_pager_hint, n_columns, margin_start, allocated_height, default_top_margin, preview_filename, icon_area, enable_tree_lines, app_info, translation_domain, selection_bound, render_icon_pixbuf, mnemonic_modifier, iter_at_location, age, mnemonics_visible, pixels_inside_wrap, redraw_on_allocate, show_icons, displayed_row, icon_sensitive, tooltip_text, angle, fixed_height_mode, focus, paper_sizes, preferred_height_and_baseline_for_width, pixel_size, root_window, pattern, content_type, current_folder_uri, show_fill_level, draw, show_text, selection_bounds, tree_view, entry, visited, arrow_tooltip_text, tab_detachable, right_justified, focus_child, markup, border function marshal(closure::Gtk.GClosure, marshal_) ccall((:g_closure_set_marshal, Gtk.GLib.libgobject), Nothing, (Ptr{Gtk.GClosure}, Ptr{Nothing}), closure, marshal_) return closure @@ -4155,14 +4155,23 @@ $(Expr(:toplevel, :(module GAccessor function mime_type(info::Gtk.GtkRecentInfo) return ccall((:gtk_recent_info_get_mime_type, Gtk.libgtk), Ptr{UInt8}, (Ptr{Gtk.GtkRecentInfo},), info) end + function added(info::Gtk.GtkRecentInfo) + return ccall((:gtk_recent_info_get_added, Gtk.libgtk), Clonglong, (Ptr{Gtk.GtkRecentInfo},), info) + end + function modified(info::Gtk.GtkRecentInfo) + return ccall((:gtk_recent_info_get_modified, Gtk.libgtk), Clonglong, (Ptr{Gtk.GtkRecentInfo},), info) + end + function visited(info::Gtk.GtkRecentInfo) + return ccall((:gtk_recent_info_get_visited, Gtk.libgtk), Clonglong, (Ptr{Gtk.GtkRecentInfo},), info) + end function private_hint(info::Gtk.GtkRecentInfo) return convert(Bool, ccall((:gtk_recent_info_get_private_hint, Gtk.libgtk), Cint, (Ptr{Gtk.GtkRecentInfo},), info)) end function application_info(info::Gtk.GtkRecentInfo, app_name) - time_ = Gtk.mutable(Cint) + time_ = Gtk.mutable(Clonglong) count = Gtk.mutable(UInt32) app_exec = Gtk.mutable(Ptr{UInt8}) - return (convert(Bool, ccall((:gtk_recent_info_get_application_info, Gtk.libgtk), Cint, (Ptr{Gtk.GtkRecentInfo}, Ptr{UInt8}, Ptr{Ptr{UInt8}}, Ptr{UInt32}, Ptr{Cint}), info, app_name, app_exec, count, time_)), app_exec[], count[], time_[]) + return (convert(Bool, ccall((:gtk_recent_info_get_application_info, Gtk.libgtk), Cint, (Ptr{Gtk.GtkRecentInfo}, Ptr{UInt8}, Ptr{Ptr{UInt8}}, Ptr{UInt32}, Ptr{Clonglong}), info, app_name, app_exec, count, time_)), app_exec[], count[], time_[]) end function applications(info::Gtk.GtkRecentInfo) length = Gtk.mutable(Culonglong) diff --git a/gen/gtk3_julia_ser10 b/gen/gtk3_julia_ser10 index 61930f130aa3193a1aeed471854f25dc520f9992..4f8c0e5a485a14840ad064218fc2d1aefdb86916 100644 GIT binary patch delta 9390 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 VppS|^YWisC6LGonROEQa{{ndVW=H@4 delta 9075 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 Q>CZra0kajy0{__g|0_YzPXGV_