2

我需要输入控件在收到焦点时自动选择所有文本。如果您运行代码并按 Tab 在两个控件之间切换焦点,则会自动选择控件中的所有文本。使用鼠标选择另一个控件时,我需要相同的行为。我的问题是:用鼠标单击条目控件时会发出什么 GTK 事件?

import Graphics.UI.Gtk

main :: IO ()
main = do
  initGUI

  vbox   <- vBoxNew False 4
  window <- windowNew
  set window [ containerBorderWidth := 8,
               containerChild := vbox ]

  mkEntry "Entry 1" vbox
  mkEntry "Entry 2" vbox

  onDestroy window mainQuit
  widgetShowAll window
  mainGUI


mkEntry :: String -> VBox -> IO Entry
mkEntry txt vbox = do
  entry <- entryNew
  entrySetText entry txt
  boxPackStart vbox entry PackNatural 0
  -- selects all text when tabbing into the control
  entry `on` entryActivate $ do editableSelectRegion entry 0 (-1)
  return entry
4

1 回答 1

1

主要问题是单击本身导致条目选择被 GTK+ 本身更改。我得到了这个工作

  1. 用作focusInEvent触发器
  2. 一旦一切都充分“平静下来”,就在空闲回调中更改选择

放在一起:

-- selects all text when tabbing into the control
on entry focusInEvent $ do
    liftIO $ flip idleAdd priorityDefaultIdle $ do
        editableSelectRegion entry 0 (-1)
        return False
    return True
于 2015-05-07T12:45:50.087 回答