Date: Fri, 25 Jun 2004 15:16:19 +0200 (CEST) Message-Id: <20040625.151619.39159832.andrieu at ijm.jussieu.fr> To: md5i at cs.cmu.edu, shoh at miritek.com Cc: lablgtk at kaba.or.jp Subject: Re: (repost) How to use different modifier in menu? From: Olivier Andrieu In-Reply-To: <87n02sqtni.fsf at cs.cmu.edu> References: <002601c45a45$7f740650$1501a8c0 at hama> <87n02sqtni.fsf@cs.cmu.edu> Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Fri_Jun_25_15_16_19_2004_336)--" Content-Transfer-Encoding: 7bit ----Next_Part(Fri_Jun_25_15_16_19_2004_336)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Michael Welsh Duggan [Thu, 24 Jun 2004]: > "SooHyoung Oh" writes: > > > What I want is the following menu > > > > "File" > > ---- > > "Open" -> "O" > > "Some Job" -> "F10" (no modifier, Function 10) > > "The other job" -> "K" (no modifier) > > "Quit" -> "Q" > > > > I'd like to use Shift-O for file opening and > > Control-Q for quit. > > > > Does anyone have LablGtk example code for using different modifier in menu? > > > > The following appears to work: > > open GMain > open GdkKeysyms > > let main () = > let window = GWindow.window ~border_width:10 () in > let _ = window#connect#destroy ~callback:Main.quit in > let accel_group = GtkData.AccelGroup.create () in > let () = window #add_accel_group accel_group in > let menu = GMenu.menu_bar ~packing:window#add () in > let file_item = GMenu.menu_item ~label:"File" ~packing:menu#append () in > let file_menu = GMenu.menu ~packing:file_item#set_submenu () in > let open_item = GMenu.menu_item ~label:"Open" ~packing:file_menu#append () in > let () = open_item#add_accelerator ~group:accel_group > ~modi:[`SHIFT] ~flags:[`VISIBLE] _O in > let job1 = GMenu.menu_item ~label:"Some Job" ~packing:file_menu#append () in > let () = job1#add_accelerator ~group:accel_group ~flags:[`VISIBLE] _F10 in > let job2 = GMenu.menu_item ~label:"The other job" > ~packing:file_menu#append () in > let () = job2#add_accelerator ~group:accel_group ~flags:[`VISIBLE] _K in > let quit = GMenu.menu_item ~label:"Quit" ~packing:file_menu#append () in > let () = quit#add_accelerator ~group:accel_group ~modi:[`CONTROL] > ~flags:[`VISIBLE] _Q in > let () = window#show () in > Main.main () > > let _ = main () Alternatively, with GTK 2.4, you can use action-based menus. Here's what it would look like. ----Next_Part(Fri_Jun_25_15_16_19_2004_336)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="action.ml" let ui_info = "\ \ \ \ \ \ \ \ " let activate ac = Printf.printf "Action '%s' activated\n" ac#name ; flush stdout let make_manager window = let ui_m = GAction.ui_manager () in let group = GAction.action_group ~name:"Actions" () in let callback = activate in GAction.add_actions group [ GAction.add_action "File" ~label:"_File" ; GAction.add_action "Open" ~stock:`OPEN ~accel:"O" ~callback ; GAction.add_action "Some Job" ~label:"Job 1" ~accel:"F10" ~callback ; GAction.add_action "The other job" ~label:"Job 2" ~accel:"K" ~callback ; GAction.add_action "Quit" ~stock:`QUIT ~accel:"O" ~callback ; ] ; ui_m#insert_action_group group 0 ; window#add_accel_group ui_m#get_accel_group ; ui_m#add_ui_from_string ui_info ; ui_m let main = let w = GWindow.window () in w#connect#destroy GMain.quit ; let box = GPack.vbox ~packing:w#add () in let ui_m = make_manager w in box#pack (ui_m#get_widget "/MenuBar") ; w#show () ; GMain.main () ----Next_Part(Fri_Jun_25_15_16_19_2004_336)----