Skip to content

Commit aa7db99

Browse files
authored
Merge pull request #31 from talex5/menu
Add a popup menu
2 parents 8030cda + a894f3d commit aa7db99

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

gtk/gtk_ui.ml

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,24 @@ open Eio_trace
33
let ( ==> ) signal callback =
44
ignore (signal ~callback : GtkSignal.id)
55

6+
let ui_xml = {|
7+
<ui>
8+
<popup name='PopupMenu'>
9+
<menuitem action='viewport-set-start' />
10+
<menuitem action='viewport-set-duration' />
11+
</popup>
12+
</ui>
13+
|}
14+
615
let create ~title tracefile =
16+
let actions = GAction.action_group ~name:"main" () in
17+
let ui = GAction.ui_manager () in
18+
ui#insert_action_group actions 0;
19+
let _id : GAction.ui_id = ui#add_ui_from_string ui_xml; in
20+
721
let window = GWindow.window () in
22+
window#add_accel_group ui#get_accel_group;
23+
824
window#set_title title;
925
window#event#connect#delete ==> (fun _ -> GMain.quit (); true);
1026
let table = GPack.table ~rows:3 ~columns:2 ~homogeneous:false ~packing:window#add () in
@@ -96,6 +112,14 @@ let create ~title tracefile =
96112
)
97113
in
98114

115+
GAction.add_action "viewport-set-start" actions
116+
~label:"Set start time..."
117+
~callback:(fun _a -> show_start ());
118+
119+
GAction.add_action "viewport-set-duration" actions
120+
~label:"Set duration..."
121+
~callback:(fun _a -> show_duration ());
122+
99123
window#event#connect#key_press ==> (fun ev ->
100124
let keyval = GdkEvent.Key.keyval ev in
101125
if keyval = GdkKeysyms._F5 then (
@@ -140,13 +164,20 @@ let create ~title tracefile =
140164
| _ -> false
141165
);
142166

167+
let menu = ui#get_widget "/PopupMenu" in
168+
let menu = new GMenu.menu (Gobject.try_cast menu#as_widget "GtkMenu") in
169+
GtkMenuProps.Menu.attach_to_widget menu#as_menu window#as_widget;
170+
143171
let drag_start = ref None in
144172
area#event#connect#button_press ==> (fun ev ->
145173
match GdkEvent.get_type ev, GdkEvent.Button.button ev with
146174
| `BUTTON_PRESS, 1 ->
147175
let start_t = View.time_of_x v (GdkEvent.Button.x ev) in
148176
drag_start := Some (start_t, v.scroll_y +. GdkEvent.Button.y ev);
149-
true;
177+
true
178+
| `BUTTON_PRESS, (3 as button) ->
179+
menu#popup ~button ~time:(GdkEvent.Button.time ev);
180+
true
150181
| _ -> false
151182
);
152183

0 commit comments

Comments
 (0)