From c5c5ddb909934d50baad87d3628ca753c1d4f5ed Mon Sep 17 00:00:00 2001 From: Tobias Knopp Date: Sat, 2 Aug 2014 22:52:43 +0200 Subject: [PATCH 1/5] Add test file for GtkApplication --- src/application.jl | 10 +++++-- src/events.jl | 6 ++-- test/gtkapplication_tests.jl | 54 ++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 test/gtkapplication_tests.jl diff --git a/src/application.jl b/src/application.jl index 114a6ef1..8c42435d 100644 --- a/src/application.jl +++ b/src/application.jl @@ -13,8 +13,14 @@ 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) +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) @gtktype GtkApplicationWindow GtkApplicationWindowLeaf(app::GtkApplication) = GtkApplicationWindowLeaf( diff --git a/src/events.jl b/src/events.jl index 64704cb7..bb80631d 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/test/gtkapplication_tests.jl b/test/gtkapplication_tests.jl new file mode 100644 index 00000000..4c81a058 --- /dev/null +++ b/test/gtkapplication_tests.jl @@ -0,0 +1,54 @@ +using Gtk, Gtk.ShortNames, Gtk.GConstants + +app = @GtkApplication("org.julia.example", GApplicationFlags.FLAGS_NONE) + +const builderstr = + """ + + + File + + Quit + app.quit + + + + Help + + + +
+ + New + app.new + + + Quit + app.quit + +
+
+
""" + +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) + + #quitIt = G_.object(builder, "menu_item_quit") + #signal_connect(quitIt, :activate) do widget + # exit() + #end + + showall(w) +end + +Gtk.run(app) # enters main loop + From efda568d566cf5fe71e123144518ba15ec98acdf Mon Sep 17 00:00:00 2001 From: Tobias Knopp Date: Sun, 3 Aug 2014 15:58:37 +0200 Subject: [PATCH 2/5] Add some support for GActions --- src/application.jl | 29 +++++++++++++++++++++++++++++ src/lists.jl | 3 ++- test/gtkapplication_tests.jl | 19 ++++++++++++++++++- 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/src/application.jl b/src/application.jl index 8c42435d..6ae04a62 100644 --- a/src/application.jl +++ b/src/application.jl @@ -1,4 +1,29 @@ 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) + +### 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) ) @@ -22,9 +47,13 @@ set_app_menu(app::GtkApplication, app_menu::GObject) = 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/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 index 4c81a058..b264b6b7 100644 --- a/test/gtkapplication_tests.jl +++ b/test/gtkapplication_tests.jl @@ -41,7 +41,24 @@ signal_connect(app,"activate") do a, args... 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) ) + #quitIt = G_.object(builder, "menu_item_quit") #signal_connect(quitIt, :activate) do widget # exit() From dac461b380b3b94221917dd3ddf7561be399a4ab Mon Sep 17 00:00:00 2001 From: Tobias Knopp Date: Sun, 3 Aug 2014 21:42:42 +0200 Subject: [PATCH 3/5] Fake gvariant implementation --- src/GLib/gtype.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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) From 02e1b41094e250c0cde6eb43f9f8f681f1653f52 Mon Sep 17 00:00:00 2001 From: Tobias Knopp Date: Sun, 3 Aug 2014 22:03:18 +0200 Subject: [PATCH 4/5] Add support for adding accelerators --- src/application.jl | 9 +++++++++ test/gtkapplication_tests.jl | 5 +---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/application.jl b/src/application.jl index 6ae04a62..ac556082 100644 --- a/src/application.jl +++ b/src/application.jl @@ -38,6 +38,15 @@ function splice!(app::GtkApplication, win::GtkWindow) app end +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) diff --git a/test/gtkapplication_tests.jl b/test/gtkapplication_tests.jl index b264b6b7..767194c1 100644 --- a/test/gtkapplication_tests.jl +++ b/test/gtkapplication_tests.jl @@ -59,10 +59,7 @@ signal_connect(app,"activate") do a, args... end push!( Gtk.GActionMap(a), Gtk.GAction(quitAction) ) - #quitIt = G_.object(builder, "menu_item_quit") - #signal_connect(quitIt, :activate) do widget - # exit() - #end + Gtk.add_accelerator(a, "q", "app.quit") showall(w) end From 57c8b08ae084f26d1f50d5e98965f5db1cd751ae Mon Sep 17 00:00:00 2001 From: Tobias Knopp Date: Mon, 4 Aug 2014 23:13:58 +0200 Subject: [PATCH 5/5] add further GActionMap functions --- src/application.jl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/application.jl b/src/application.jl index ac556082..8be57126 100644 --- a/src/application.jl +++ b/src/application.jl @@ -10,6 +10,12 @@ if gtk_version == 3 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