diff options
Diffstat (limited to 'scripts/xdg-settings.in')
-rw-r--r-- | scripts/xdg-settings.in | 78 |
1 files changed, 66 insertions, 12 deletions
diff --git a/scripts/xdg-settings.in b/scripts/xdg-settings.in index fb621a9..d4d0da0 100644 --- a/scripts/xdg-settings.in +++ b/scripts/xdg-settings.in @@ -107,21 +107,26 @@ desktop_file_to_binary() # This function is hard-coded for text/html but it could be adapted if needed. fix_local_desktop_file() { + if test -z "$2" ; then + MIME="text/html" + else + MIME="$2" + fi apps="${XDG_DATA_HOME:-$HOME/.local/share}/applications" # No local desktop file? [ ! -f "$apps/$1" ] && return - MIME="`grep "^MimeType=" "$apps/$1" | cut -d= -f 2-`" - case "$MIME" in - text/html\;*|*\;text/html\;*|*\;text/html\;|*\;text/html) - # Already has text/html? Great! + MIMETYPES="`grep "^MimeType=" "$apps/$1" | cut -d= -f 2-`" + case "$MIMETYPES" in + $MIME\;*|*\;$MIME\;*|*\;$MIME\;|*\;$MIME) + # Already has the mime-type? Great! return 0 ;; esac - # Add text/html to the list + # Add the mime-type to the list temp="`mktemp "$apps/$1.XXXXXX"`" || return grep -v "^MimeType=" "$apps/$1" >> "$temp" - echo "MimeType=text/html;$MIME" >> "$temp" + echo "MimeType=$MIME;$MIMETYPES" >> "$temp" oldlines="`wc -l < "$apps/$1"`" newlines="`wc -l < "$temp"`" @@ -155,22 +160,32 @@ xdg_mime_fixup() get_browser_mime() { + if test -z "$1" ; then + MIME="text/html" + else + MIME="$1" + fi xdg_mime_fixup - xdg-mime query default text/html + xdg-mime query default "$MIME" } set_browser_mime() { xdg_mime_fixup - orig="`get_browser_mime`" + if test -z "$2" ; then + MIME="text/html" + else + MIME="$2" + fi + orig="`get_browser_mime $MIME`" # Fixing the local desktop file can actually change the default browser all # by itself, so we fix it only after querying to find the current default. - fix_local_desktop_file "$1" || return + fix_local_desktop_file "$1" "$MIME" || return mkdir -p "${XDG_DATA_HOME:-$HOME/.local/share}/applications" - xdg-mime default "$1" text/html || return + xdg-mime default "$1" "$MIME" || return if [ x"`get_browser_mime`" != x"$1" ]; then # Put back the original value - xdg-mime default "$orig" text/html + xdg-mime default "$orig" "$MIME" exit_failure_operation_failed fi } @@ -340,6 +355,45 @@ set_browser_gnome() } # }}} GNOME +# {{{ GNOME 3.x + +get_browser_gnome3() +{ + get_browser_mime "x-scheme-handler/http" +} + +check_browser_gnome3() +{ + desktop="$1" + check="`desktop_file_to_binary "$1"`" + if [ -z "$check" ]; then + echo no + exit_success + fi + # Check HTTP and HTTPS, but not about: and unknown:. + for protocol in http https; do + browser="`get_browser_mime "x-scheme-handler/$protocol"`" + if [ x"$browser" != x"$desktop" ]; then + echo no + exit_success + fi + done + echo yes + exit_success +} + +set_browser_gnome3() +{ + binary="`desktop_file_to_binary "$1"`" + [ "$binary" ] || exit_failure_file_missing + set_browser_mime "$1" || return + + # Set the default browser. + for protocol in http https about unknown; do + set_browser_mime "$1" "x-scheme-handler/$protocol" || return + done +} +# }}} GNOME 3.x # {{{ xfce get_browser_xfce() @@ -549,7 +603,7 @@ fi detectDE case "$DE" in - kde|gnome|xfce) + kde|gnome*|xfce) dispatch_specific "$@" ;; |