diff --git a/src/GLib/gtype.jl b/src/GLib/gtype.jl
index ab0bd20b..4aa931b1 100644
--- a/src/GLib/gtype.jl
+++ b/src/GLib/gtype.jl
@@ -15,6 +15,8 @@ immutable GParamSpec
owner_type::GType
end
+GVariant = Void
+
const fundamental_types = (
#(:name, Ctype, JuliaType, g_value_fn)
(:invalid, Void, Void, :error),
@@ -38,7 +40,7 @@ const fundamental_types = (
(:GBoxed, Ptr{GBoxed}, GBoxed, :boxed),
(:GParam, Ptr{GParamSpec}, Ptr{GParamSpec},:param),
(:GObject, Ptr{GObject}, GObject, :object),
- #(:GVariant, Ptr{GVariant}, GVariant, :variant),
+ (:GVariant, Ptr{GVariant}, GVariant, :variant),
)
# NOTE: in general do not cache ids, except for these fundamental values
g_type_from_name(name::Symbol) = ccall((:g_type_from_name,libgobject),GType,(Ptr{Uint8},),name)
diff --git a/src/application.jl b/src/application.jl
index 114a6ef1..8be57126 100644
--- a/src/application.jl
+++ b/src/application.jl
@@ -1,4 +1,35 @@
if gtk_version == 3
+
+@Giface GAction Gtk.libgio g_action
+@Giface GActionGroup Gtk.libgio g_action_group
+
+### GActionMap ###
+
+@Giface GActionMap Gtk.libgio g_action_map
+
+push!(action_map::GActionMap, action::GAction) =
+ ccall((:g_action_map_add_action, libgio), Void, (Ptr{GObject}, Ptr{GObject}), action_map, action)
+
+splice!(action_map::GActionMap, action_name::String) =
+ ccall((:g_action_map_remove_action, libgio), Void, (Ptr{GObject}, Ptr{Uint8}), action_map, bytestring(action_name))
+
+lookup(action_map::GActionMap, action_name::String) =
+ ccall((:g_action_map_lookup_action, libgio), Ptr{GObject}, (Ptr{GObject}, Ptr{Uint8}), action_map, bytestring(action_name))
+
+### GApplication
+
+@Gtype GApplication Gtk.libgio g_application
+
+### GSimpleAction ###
+
+@Gtype GSimpleAction Gtk.libgio g_simple_action
+GSimpleActionLeaf(name::String) = GSimpleActionLeaf(
+ ccall((:g_simple_action_new, libgio), Ptr{GObject}, (Ptr{Uint8}, Ptr{Void}), bytestring(name), C_NULL) )
+
+
+
+### GtkApplication ###
+
@gtktype GtkApplication
GtkApplicationLeaf(id::String, flags) = GtkApplicationLeaf(
ccall((:gtk_application_new, libgtk), Ptr{GObject}, (Ptr{Uint8}, Cuint), bytestring(id), flags) )
@@ -13,12 +44,31 @@ function splice!(app::GtkApplication, win::GtkWindow)
app
end
-app_menu(app::GtkApplication, app_menu::GObject) =
- ccall((:gtk_application_new, libgtk), Void, (Ptr{GObject}, Ptr{GObject}), app, app_menu)
+add_accelerator(app::GtkApplication, accelerator::String, action_name::String, parameter=C_NULL) =
+ ccall((:gtk_application_add_accelerator, libgtk), Void, (Ptr{GObject}, Ptr{Uint8}, Ptr{Uint8}, Ptr{Uint8}),
+ app, bytestring(accelerator), bytestring(action_name), parameter)
+
+
+remove_accelerator(app::GtkApplication, action_name::String, parameter=C_NULL) =
+ ccall((:gtk_application_remove_accelerator, libgtk), Void, (Ptr{GObject}, Ptr{Uint8}, Ptr{Uint8}),
+ bytestring(action_name), parameter)
+
+set_menubar(app::GtkApplication, menubar::GObject) =
+ ccall((:gtk_application_set_menubar, libgtk), Void, (Ptr{GObject}, Ptr{GObject}), app, menubar)
+
+set_app_menu(app::GtkApplication, app_menu::GObject) =
+ ccall((:gtk_application_set_app_menu, libgtk), Void, (Ptr{GObject}, Ptr{GObject}), app, app_menu)
+
+run(app::GtkApplication) =
+ ccall((:g_application_run, libgio), Cint, (Ptr{GObject}, Cint, Ptr{Uint8}), app, 0, C_NULL)
+
+### GtkApplicationWindow ###
@gtktype GtkApplicationWindow
GtkApplicationWindowLeaf(app::GtkApplication) = GtkApplicationWindowLeaf(
ccall((:gtk_application_window_new, libgtk), Ptr{GObject}, (Ptr{GObject},), app) )
+
+
else
type GtkApplication end
type GtkApplicationWindow end
diff --git a/src/events.jl b/src/events.jl
index a1998153..c1e01685 100644
--- a/src/events.jl
+++ b/src/events.jl
@@ -17,9 +17,9 @@ function __init__()
# if g_main_depth > 0, a glib main-loop is already running,
# so we don't need to start a new one
- if ccall((:g_main_depth,GLib.libglib),Cint,()) == 0
- global gtk_main_task = @schedule gtk_main()
- end
+ #if ccall((:g_main_depth,GLib.libglib),Cint,()) == 0
+ # global gtk_main_task = @schedule gtk_main()
+ #end
end
diff --git a/src/lists.jl b/src/lists.jl
index 1ae58839..ecf250d6 100644
--- a/src/lists.jl
+++ b/src/lists.jl
@@ -439,7 +439,8 @@ function selected(selection::GtkTreeSelection)
if !ret
error("No selection of GtkTreeSelection")
end
- convert(GtkTreeModel, model[]), iter[]
+ #convert(GtkTreeModel, model[]), iter[]
+ model[], iter[]
end
length(selection::GtkTreeSelection) =
diff --git a/test/gtkapplication_tests.jl b/test/gtkapplication_tests.jl
new file mode 100644
index 00000000..767194c1
--- /dev/null
+++ b/test/gtkapplication_tests.jl
@@ -0,0 +1,68 @@
+using Gtk, Gtk.ShortNames, Gtk.GConstants
+
+app = @GtkApplication("org.julia.example", GApplicationFlags.FLAGS_NONE)
+
+const builderstr =
+ """
+
+
+ """
+
+signal_connect(app,"activate") do a, args...
+ w = Gtk.@GtkApplicationWindow(a)
+ G_.title(w, "GtkApplication Test App" )
+ G_.default_size(w, 400,400)
+ builder = @GtkBuilder(buffer=builderstr)
+
+ menubar = G_.object(builder,"menubar")
+ appmenu = G_.object(builder,"appmenu")
+
+ Gtk.set_menubar(app, menubar)
+ Gtk.set_app_menu(app, appmenu)
+
+ ls=@ListStore(Int32,Bool)
+ push!(ls,(33,true))
+ tv=@TreeView(TreeModel(ls))
+ r1=@CellRendererText()
+ r2=@CellRendererToggle()
+ c1=@TreeViewColumn("A", r1,{"text" => 0})
+ c2=@TreeViewColumn("B", r2,{"active" => 1})
+ push!(tv,c1)
+ push!(tv,c2)
+ push!(w, tv)
+
+ quitAction = Gtk.@GSimpleAction("quit")
+ signal_connect(quitAction, :activate) do widget...
+ exit()
+ end
+ push!( Gtk.GActionMap(a), Gtk.GAction(quitAction) )
+
+ Gtk.add_accelerator(a, "q", "app.quit")
+
+ showall(w)
+end
+
+Gtk.run(app) # enters main loop
+