Проверка, нажата ли кнопка «control» в lablgtk2 - PullRequest
2 голосов
/ 29 июня 2011

У меня много проблем с методом test_modifier в lablgtk2.Я могу проверить Shift, но это не очень полезно для моих целей.Всякий раз, когда я проверяю, нажата ли кнопка управления и другая кнопка, ничего не происходит.Я также попробовал это:

view#event#connect#key_press ~callback:(fun ev -> 
   let m = GdkEvent.Key.state ev in
     let k = GdkEvent.Key.keyval ev in
        if (m = [`CONTROL] && k = _F) then
          ...

Это работало некоторое время, а затем остановилось.Что не так с приведенным выше кодом, что он не будет ничего делать?Как правильно проверить нажатие клавиши управления в lablgtk2?

1 Ответ

3 голосов
/ 01 июля 2011

Может быть несколько модификаторов одновременно, поэтому сравнение с [`CONTROL] недопустимо.

let pr fmt = Printf.ksprintf print_endline fmt

let button label packing f =
  let b = GButton.button ~label ~packing () in
  let _ = b#connect#clicked ~callback:f in
  ()

let () =
  let locale = GtkMain.Main.init () in
  let window = GWindow.window ~title:"test" ~border_width:10 () in
  let _ = window#connect#destroy ~callback:GMain.quit in
  let mainbox = GPack.vbox ~packing:window#add () in
  button "quit" mainbox#pack window#destroy;

  let _ = window#event#connect#key_press ~callback:begin fun ev ->
   let m = GdkEvent.Key.state ev in
   let k = GdkEvent.Key.keyval ev in
   if (List.mem `CONTROL m && k = GdkKeysyms._F) then pr "WOO HOO";
   if (List.mem `CONTROL m && k = GdkKeysyms._f) then pr "woo hoo";
   false
  end in
  window#event#add [`KEY_PRESS];
  window#show ();
  GMain.main ()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...