X-Git-Url: http://git.tuebingen.mpg.de/?p=gsu.git;a=blobdiff_plain;f=gui;h=34f732e27bacc9646710efb0c11eef09659a2ce4;hp=2d3e270371a8db341052455eda1fdc7891dcb563;hb=d0aaa237127d4466766d1aa92e62f4466c2e908d;hpb=82c0b7aa776ecb2250ebd8ae6f797298d62497fd diff --git a/gui b/gui index 2d3e270..34f732e 100644 --- a/gui +++ b/gui @@ -1,4 +1,6 @@ #!/bin/bash +# Copyright (C) 2006 Andre Noll +# Licensed under the LGPL, version 3. See COPYING and COPYING.LESSER. if [[ "$(type -t _gsu_setup)" != "function" ]]; then gsu_dir=${gsu_dir:-${BASH_SOURCE[0]%/*}} @@ -22,6 +24,19 @@ _get_geometry() result="$y $x" } +_set_dialog_ret() +{ + local ec="$1" + + case "$ec" in + 0) ret=$GSU_SUCCESS;; + 1) ret=1;; # cancelled + *) + result="dialog exit code $ec" + ret=-$E_GSU_DIALOG + esac +} + # Open a dialog box which asks the user to input a text # # Usage: gsu_input_box @@ -37,12 +52,7 @@ gsu_inputbox() _get_geometry g="$result" result="$(dialog --inputbox "$text" $g "$init" 3>&1 1>&2 2>&3 3>&-)" - if (($? != 0)); then - ret=-$E_GSU_DIALOG - result='inputbox' - return - fi - ret=$GSU_SUCCESS + _set_dialog_ret $? } # Show the given file in a text box @@ -59,8 +69,8 @@ gsu_textbox() ret=-$E_GSU_DIALOG result='textbox' - dialog --textbox "$file" $g || return - ret=$GSU_SUCCESS + dialog --textbox "$file" $g + _set_dialog_ret $? } # Show a message in a text box @@ -70,15 +80,14 @@ gsu_textbox() # This is like gsu_textbox() but the text is passed as a string. gsu_msgbox() { + local tmp + # Some versions of dialog segfault if the text is too long. Hence we # always use a temporary file. - local tmp="$(mktemp gsu_msgbox.XXXXXXXXXX)" - - if (($? != 0)); then - ret=-$E_GSU_MKTEMP - result='temp file for textbox' - return - fi + gsu_make_tempfile 'gsu_msgbox.XXXXXXXXXX' + (($ret < 0)) && return + tmp="$result" + trap "rm -f $tmp" EXIT echo "$1" > "$tmp" gsu_textbox "$tmp" rm -f "$tmp" # ignore errors @@ -97,13 +106,7 @@ _gsu_menu() opts+=" $i $num" done result="$(dialog --menu "$gsu_banner_txt ($header)" $opts 3>&1 1>&2 2>&3 3>&-)" - case $? in - 0) ret=$GSU_SUCCESS;; - 1) ret=1;; # cancelled - *) - result="menu error $ret" - ret=-$E_GSU_DIALOG - esac + _set_dialog_ret $? } _get_level()