0

When I start my application I want to set the focus on a certain button. Currently I need to hit tab once to have the button focused.

The wxwidgets documents mention a SetFocus method (link) which doesn't seem to be available in wxhaskell?

Then I found MoveBeforeInTabOrder (link) but again, I didn't find it in wxhaskell.

A maintainer of wxhaskell mentioned it is a 'fairly complete GUI binding' in 2009 so am I just missing something here or is it bad luck?

Here is my minimal example:

module Main where

import Graphics.UI.WX
import Graphics.UI.WXCore

main :: IO ()
main = start hello

hello :: IO ()
hello = do
  f <- frame []
  test <- button f [ text := "button" ]
  set f [ layout := widget test ]
Community
  • 1
  • 1
somesoaccount
  • 1,267
  • 15
  • 37

1 Answers1

1

The wx library has a focusOn function that allows you to focus on a control.

It is a re-export of wxcore's windowSetFocus. The type is a bit misleading: it says Window a, but it works for buttons because they are windows too.

The following works (note I only added the last line):

module Main where

import Graphics.UI.WX
import Graphics.UI.WXCore

main :: IO ()
main = start hello

hello :: IO ()
hello = do
  f <- frame []
  test <- button f [ text := "button" ]
  set f [ layout := widget test ]
  focusOn test                          -- Here!
Ivan Perez
  • 582
  • 2
  • 17