Modal dialogs lock the window's input until they are closed
This commit is contained in:
parent
a2c0ff5f4c
commit
bdc1109bcf
@ -119,6 +119,7 @@ func (window *window) handleKeyPress (
|
||||
event xevent.KeyPressEvent,
|
||||
) {
|
||||
if window.child == nil { return }
|
||||
if window.hasModal { return }
|
||||
|
||||
keyEvent := *event.KeyPressEvent
|
||||
key, numberPad := window.backend.keycodeToKey(keyEvent.Detail, keyEvent.State)
|
||||
@ -180,6 +181,7 @@ func (window *window) handleButtonPress (
|
||||
event xevent.ButtonPressEvent,
|
||||
) {
|
||||
if window.child == nil { return }
|
||||
if window.hasModal { return }
|
||||
|
||||
buttonEvent := *event.ButtonPressEvent
|
||||
if buttonEvent.Detail >= 4 && buttonEvent.Detail <= 7 {
|
||||
|
@ -24,6 +24,9 @@ type window struct {
|
||||
onClose func ()
|
||||
skipChildDrawCallback bool
|
||||
|
||||
modalParent *window
|
||||
hasModal bool
|
||||
|
||||
theme theme.Theme
|
||||
config config.Config
|
||||
|
||||
@ -217,6 +220,8 @@ func (window *window) NewModal (width, height int) (elements.Window, error) {
|
||||
window.backend.connection,
|
||||
modal.xWindow.Id,
|
||||
[]string { "_NET_WM_STATE_MODAL" })
|
||||
modal.modalParent = window
|
||||
window.hasModal = true
|
||||
return modal, err
|
||||
}
|
||||
|
||||
@ -249,6 +254,10 @@ func (window *window) Hide () {
|
||||
|
||||
func (window *window) Close () {
|
||||
if window.onClose != nil { window.onClose() }
|
||||
if window.modalParent != nil {
|
||||
// we are a modal dialog, so unlock the parent
|
||||
window.modalParent.hasModal = false
|
||||
}
|
||||
window.Hide()
|
||||
window.Adopt(nil)
|
||||
delete(window.backend.windows, window.xWindow.Id)
|
||||
|
Reference in New Issue
Block a user