mirror of
https://git.pwmt.org/pwmt/zathura.git
synced 2025-02-27 17:34:38 +01:00
Merge branch 'release/0.5.0'
This commit is contained in:
commit
1001473ce8
44 changed files with 408 additions and 350 deletions
20
.clang-format
Normal file
20
.clang-format
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
---
|
||||||
|
Language: Cpp
|
||||||
|
AlignConsecutiveAssignments: true
|
||||||
|
AlignConsecutiveDeclarations: true
|
||||||
|
AlignOperands: true
|
||||||
|
AllowShortBlocksOnASingleLine: false
|
||||||
|
AllowShortFunctionsOnASingleLine: false
|
||||||
|
AllowShortIfStatementsOnASingleLine: false
|
||||||
|
AllowShortLoopsOnASingleLine: false
|
||||||
|
AlwaysBreakAfterDefinitionReturnType: All
|
||||||
|
BreakBeforeBraces: Linux
|
||||||
|
ContinuationIndentWidth: 2
|
||||||
|
ColumnLimit: 120
|
||||||
|
ForEachMacros: ['GIRARA_LIST_FOREACH']
|
||||||
|
IndentWidth: 2
|
||||||
|
PointerAlignment: Left
|
||||||
|
TabWidth: 2
|
||||||
|
IndentCaseLabels: true
|
||||||
|
...
|
||||||
|
|
|
@ -44,12 +44,12 @@ test:archlinux:
|
||||||
except:
|
except:
|
||||||
- tags
|
- tags
|
||||||
|
|
||||||
# Debian 10 (Buster)
|
# Debian 11 (bullseye)
|
||||||
build:debian-buster:
|
build:debian-bullseye:
|
||||||
tags:
|
tags:
|
||||||
- pwmt
|
- pwmt
|
||||||
stage: build
|
stage: build
|
||||||
image: registry.pwmt.org/pwmt/gitlab-runner-images/debian:buster
|
image: registry.pwmt.org/pwmt/gitlab-runner-images/debian:bullseye
|
||||||
script:
|
script:
|
||||||
- meson subprojects update
|
- meson subprojects update
|
||||||
- mkdir -p build && cd build
|
- mkdir -p build && cd build
|
||||||
|
@ -64,11 +64,11 @@ build:debian-buster:
|
||||||
except:
|
except:
|
||||||
- tags
|
- tags
|
||||||
|
|
||||||
test:debian-buster:
|
test:debian-bullseye:
|
||||||
tags:
|
tags:
|
||||||
- pwmt
|
- pwmt
|
||||||
stage: test
|
stage: test
|
||||||
image: registry.pwmt.org/pwmt/gitlab-runner-images/debian:buster
|
image: registry.pwmt.org/pwmt/gitlab-runner-images/debian:bullseye
|
||||||
script:
|
script:
|
||||||
- cd build
|
- cd build
|
||||||
- ninja test
|
- ninja test
|
||||||
|
@ -76,16 +76,16 @@ test:debian-buster:
|
||||||
<<: *girara_cache
|
<<: *girara_cache
|
||||||
policy: pull
|
policy: pull
|
||||||
dependencies:
|
dependencies:
|
||||||
- build:debian-buster
|
- build:debian-bullseye
|
||||||
except:
|
except:
|
||||||
- tags
|
- tags
|
||||||
|
|
||||||
# Ubuntu 18.04 LTS (Bionic Beaver)
|
# Debian 12 (bookworm)
|
||||||
build:ubuntu-bionic:
|
build:debian-bookworm:
|
||||||
tags:
|
tags:
|
||||||
- pwmt
|
- pwmt
|
||||||
stage: build
|
stage: build
|
||||||
image: registry.pwmt.org/pwmt/gitlab-runner-images/ubuntu:bionic
|
image: registry.pwmt.org/pwmt/gitlab-runner-images/debian:bookworm
|
||||||
script:
|
script:
|
||||||
- meson subprojects update
|
- meson subprojects update
|
||||||
- mkdir -p build && cd build
|
- mkdir -p build && cd build
|
||||||
|
@ -100,11 +100,11 @@ build:ubuntu-bionic:
|
||||||
except:
|
except:
|
||||||
- tags
|
- tags
|
||||||
|
|
||||||
test:ubuntu-bionic:
|
test:debian-bookworm:
|
||||||
tags:
|
tags:
|
||||||
- pwmt
|
- pwmt
|
||||||
stage: test
|
stage: test
|
||||||
image: registry.pwmt.org/pwmt/gitlab-runner-images/ubuntu:bionic
|
image: registry.pwmt.org/pwmt/gitlab-runner-images/debian:bookworm
|
||||||
script:
|
script:
|
||||||
- cd build
|
- cd build
|
||||||
- ninja test
|
- ninja test
|
||||||
|
@ -112,16 +112,16 @@ test:ubuntu-bionic:
|
||||||
<<: *girara_cache
|
<<: *girara_cache
|
||||||
policy: pull
|
policy: pull
|
||||||
dependencies:
|
dependencies:
|
||||||
- build:ubuntu-bionic
|
- build:debian-bookworm
|
||||||
except:
|
except:
|
||||||
- tags
|
- tags
|
||||||
|
|
||||||
# Ubuntu 19.10 (Eoan Ermine)
|
# Ubuntu 20.04 LTS (Focal)
|
||||||
build:ubuntu-eoan:
|
build:ubuntu-focal:
|
||||||
tags:
|
tags:
|
||||||
- pwmt
|
- pwmt
|
||||||
stage: build
|
stage: build
|
||||||
image: registry.pwmt.org/pwmt/gitlab-runner-images/ubuntu:eoan
|
image: registry.pwmt.org/pwmt/gitlab-runner-images/ubuntu:focal
|
||||||
script:
|
script:
|
||||||
- meson subprojects update
|
- meson subprojects update
|
||||||
- mkdir -p build && cd build
|
- mkdir -p build && cd build
|
||||||
|
@ -136,11 +136,11 @@ build:ubuntu-eoan:
|
||||||
except:
|
except:
|
||||||
- tags
|
- tags
|
||||||
|
|
||||||
test:ubuntu-eoan:
|
test:ubuntu-focal:
|
||||||
tags:
|
tags:
|
||||||
- pwmt
|
- pwmt
|
||||||
stage: test
|
stage: test
|
||||||
image: registry.pwmt.org/pwmt/gitlab-runner-images/ubuntu:eoan
|
image: registry.pwmt.org/pwmt/gitlab-runner-images/ubuntu:focal
|
||||||
script:
|
script:
|
||||||
- cd build
|
- cd build
|
||||||
- ninja test
|
- ninja test
|
||||||
|
@ -148,6 +148,43 @@ test:ubuntu-eoan:
|
||||||
<<: *girara_cache
|
<<: *girara_cache
|
||||||
policy: pull
|
policy: pull
|
||||||
dependencies:
|
dependencies:
|
||||||
- build:ubuntu-eoan
|
- build:ubuntu-focal
|
||||||
except:
|
except:
|
||||||
- tags
|
- tags
|
||||||
|
|
||||||
|
# Ubuntu 22.04 LTS (jammy)
|
||||||
|
build:ubuntu-jammy:
|
||||||
|
tags:
|
||||||
|
- pwmt
|
||||||
|
stage: build
|
||||||
|
image: registry.pwmt.org/pwmt/gitlab-runner-images/ubuntu:jammy
|
||||||
|
script:
|
||||||
|
- meson subprojects update
|
||||||
|
- mkdir -p build && cd build
|
||||||
|
- meson --force-fallback-for=girara ..
|
||||||
|
- ninja
|
||||||
|
cache:
|
||||||
|
<<: *girara_cache
|
||||||
|
artifacts:
|
||||||
|
expire_in: 1 day
|
||||||
|
paths:
|
||||||
|
- build
|
||||||
|
except:
|
||||||
|
- tags
|
||||||
|
|
||||||
|
test:ubuntu-jammy:
|
||||||
|
tags:
|
||||||
|
- pwmt
|
||||||
|
stage: test
|
||||||
|
image: registry.pwmt.org/pwmt/gitlab-runner-images/ubuntu:jammy
|
||||||
|
script:
|
||||||
|
- cd build
|
||||||
|
- ninja test
|
||||||
|
cache:
|
||||||
|
<<: *girara_cache
|
||||||
|
policy: pull
|
||||||
|
dependencies:
|
||||||
|
- build:ubuntu-jammy
|
||||||
|
except:
|
||||||
|
- tags
|
||||||
|
|
||||||
|
|
|
@ -12,11 +12,11 @@ The following dependencies are required:
|
||||||
* `gtk3` (>= 3.22)
|
* `gtk3` (>= 3.22)
|
||||||
* `glib` (>= 2.50)
|
* `glib` (>= 2.50)
|
||||||
* `girara` (>= 0.3.7)
|
* `girara` (>= 0.3.7)
|
||||||
|
* `libmagic` from file(1): for mime-type detection
|
||||||
|
|
||||||
The following dependencies are optional:
|
The following dependencies are optional:
|
||||||
|
|
||||||
* `sqlite3` (>= 3.6.23): splite3 database backend
|
* `sqlite3` (>= 3.6.23): splite3 database backend
|
||||||
* `libmagic` from file(1): for mime-type detection
|
|
||||||
* `libsynctex` from TeXLive (>= 1.19): SyncTeX support
|
* `libsynctex` from TeXLive (>= 1.19): SyncTeX support
|
||||||
* `libseccomp`: sandbox support
|
* `libseccomp`: sandbox support
|
||||||
|
|
||||||
|
|
|
@ -72,14 +72,14 @@ fish_completion = configure_file(
|
||||||
|
|
||||||
bash_comp = dependency('bash-completion', required: false)
|
bash_comp = dependency('bash-completion', required: false)
|
||||||
if bash_comp.found()
|
if bash_comp.found()
|
||||||
bash_compdir = bash_comp.get_pkgconfig_variable('completionsdir')
|
bash_compdir = bash_comp.get_variable(pkgconfig: 'completionsdir')
|
||||||
else
|
else
|
||||||
bash_compdir = join_paths(datadir, 'bash-completion', 'completions')
|
bash_compdir = join_paths(datadir, 'bash-completion', 'completions')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
fish_comp = dependency('fish', required: false)
|
fish_comp = dependency('fish', required: false)
|
||||||
if fish_comp.found()
|
if fish_comp.found()
|
||||||
fish_compdir = fish_comp.get_pkgconfig_variable('completionsdir')
|
fish_compdir = fish_comp.get_variable(pkgconfig: 'completionsdir')
|
||||||
else
|
else
|
||||||
fish_compdir = join_paths(datadir, 'fish', 'vendor_completions.d')
|
fish_compdir = join_paths(datadir, 'fish', 'vendor_completions.d')
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -967,6 +967,9 @@ zathura
|
||||||
* printing
|
* printing
|
||||||
* bookmarks and history
|
* bookmarks and history
|
||||||
|
|
||||||
|
The strict sandbox mode is still experimental with some libc implementations.
|
||||||
|
Currently supported and tested libc implementations: glibc
|
||||||
|
|
||||||
No feature regressions are expected when using normal sandbox mode.
|
No feature regressions are expected when using normal sandbox mode.
|
||||||
|
|
||||||
When running under WSL, the default is "none" since seccomp is not supported in
|
When running under WSL, the default is "none" since seccomp is not supported in
|
||||||
|
|
11
meson.build
11
meson.build
|
@ -1,5 +1,5 @@
|
||||||
project('zathura', 'c',
|
project('zathura', 'c',
|
||||||
version: '0.4.9',
|
version: '0.5.0',
|
||||||
meson_version: '>=0.56',
|
meson_version: '>=0.56',
|
||||||
default_options: ['c_std=c11', 'warning_level=3'],
|
default_options: ['c_std=c11', 'warning_level=3'],
|
||||||
)
|
)
|
||||||
|
@ -44,8 +44,9 @@ gthread = dependency('gthread-2.0', version: '>=2.50')
|
||||||
gmodule = dependency('gmodule-no-export-2.0', version: '>=2.50')
|
gmodule = dependency('gmodule-no-export-2.0', version: '>=2.50')
|
||||||
gtk3 = dependency('gtk+-3.0', version: '>=3.22')
|
gtk3 = dependency('gtk+-3.0', version: '>=3.22')
|
||||||
cairo = dependency('cairo')
|
cairo = dependency('cairo')
|
||||||
|
magic = cc.find_library('magic', required: true)
|
||||||
|
|
||||||
build_dependencies = [libm, girara, glib, gio, gthread, gmodule, gtk3, cairo]
|
build_dependencies = [libm, girara, glib, gio, gthread, gmodule, gtk3, cairo, magic]
|
||||||
|
|
||||||
if host_machine.system() == 'darwin'
|
if host_machine.system() == 'darwin'
|
||||||
gtk_mac_integration = dependency('gtk-mac-integration-gtk3')
|
gtk_mac_integration = dependency('gtk-mac-integration-gtk3')
|
||||||
|
@ -77,7 +78,6 @@ flags = cc.get_supported_arguments(flags)
|
||||||
additional_sources = []
|
additional_sources = []
|
||||||
sqlite = dependency('sqlite3', version: '>=3.6.23', required: get_option('sqlite'))
|
sqlite = dependency('sqlite3', version: '>=3.6.23', required: get_option('sqlite'))
|
||||||
synctex = dependency('synctex', version: '>=1.19', required: get_option('synctex'))
|
synctex = dependency('synctex', version: '>=1.19', required: get_option('synctex'))
|
||||||
magic = cc.find_library('magic', required: get_option('magic'))
|
|
||||||
seccomp = dependency('libseccomp', required: get_option('seccomp'))
|
seccomp = dependency('libseccomp', required: get_option('seccomp'))
|
||||||
|
|
||||||
if sqlite.found()
|
if sqlite.found()
|
||||||
|
@ -94,11 +94,6 @@ if synctex.found()
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if magic.found()
|
|
||||||
build_dependencies += magic
|
|
||||||
defines += '-DWITH_MAGIC'
|
|
||||||
endif
|
|
||||||
|
|
||||||
if seccomp.found()
|
if seccomp.found()
|
||||||
build_dependencies += seccomp
|
build_dependencies += seccomp
|
||||||
defines += '-DWITH_SECCOMP'
|
defines += '-DWITH_SECCOMP'
|
||||||
|
|
|
@ -8,11 +8,6 @@ option('synctex',
|
||||||
value: 'auto',
|
value: 'auto',
|
||||||
description: 'SyncTeX integration'
|
description: 'SyncTeX integration'
|
||||||
)
|
)
|
||||||
option('magic',
|
|
||||||
type: 'feature',
|
|
||||||
value: 'auto',
|
|
||||||
description: 'magic-based MIME type detection'
|
|
||||||
)
|
|
||||||
option('seccomp',
|
option('seccomp',
|
||||||
type: 'feature',
|
type: 'feature',
|
||||||
value: 'auto',
|
value: 'auto',
|
||||||
|
|
4
po/ar.po
4
po/ar.po
|
@ -7,9 +7,9 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
|
||||||
"Last-Translator: abouzakaria kov <zakariakov@gmail.com>\n"
|
"Last-Translator: abouzakaria kov <zakariakov@gmail.com>\n"
|
||||||
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Language-Team: Arabic (http://www.transifex.com/pwmt/zathura/language/ar/)\n"
|
"Language-Team: Arabic (http://www.transifex.com/pwmt/zathura/language/ar/)\n"
|
||||||
"Language: ar\n"
|
"Language: ar\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|
4
po/ca.po
4
po/ca.po
|
@ -8,8 +8,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
||||||
"Language-Team: Catalan (http://www.transifex.com/pwmt/zathura/language/ca/)\n"
|
"Language-Team: Catalan (http://www.transifex.com/pwmt/zathura/language/ca/)\n"
|
||||||
"Language: ca\n"
|
"Language: ca\n"
|
||||||
|
|
4
po/cs.po
4
po/cs.po
|
@ -7,8 +7,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
||||||
"Language-Team: Czech (http://www.transifex.com/pwmt/zathura/language/cs/)\n"
|
"Language-Team: Czech (http://www.transifex.com/pwmt/zathura/language/cs/)\n"
|
||||||
"Language: cs\n"
|
"Language: cs\n"
|
||||||
|
|
4
po/de.po
4
po/de.po
|
@ -8,8 +8,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-02-13 19:17+0100\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
||||||
"Language-Team: German (http://www.transifex.com/pwmt/zathura/language/de/)\n"
|
"Language-Team: German (http://www.transifex.com/pwmt/zathura/language/de/)\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
|
|
4
po/el.po
4
po/el.po
|
@ -8,8 +8,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
||||||
"Language-Team: Greek (http://www.transifex.com/pwmt/zathura/language/el/)\n"
|
"Language-Team: Greek (http://www.transifex.com/pwmt/zathura/language/el/)\n"
|
||||||
"Language: el\n"
|
"Language: el\n"
|
||||||
|
|
6
po/eo.po
6
po/eo.po
|
@ -7,9 +7,9 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
"Last-Translator: norbux <manelsales@ono.com>, 2012\n"
|
||||||
"Language-Team: Esperanto (http://www.transifex.com/pwmt/zathura/language/"
|
"Language-Team: Esperanto (http://www.transifex.com/pwmt/zathura/language/"
|
||||||
"eo/)\n"
|
"eo/)\n"
|
||||||
"Language: eo\n"
|
"Language: eo\n"
|
||||||
|
|
25
po/es.po
25
po/es.po
|
@ -6,8 +6,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
||||||
"Language-Team: Spanish (http://www.transifex.com/pwmt/zathura/language/es/)\n"
|
"Language-Team: Spanish (http://www.transifex.com/pwmt/zathura/language/es/)\n"
|
||||||
"Language: es\n"
|
"Language: es\n"
|
||||||
|
@ -32,9 +32,9 @@ msgid ""
|
||||||
"completely view and navigate through documents without using a mouse."
|
"completely view and navigate through documents without using a mouse."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Zathura es un visor de documentos altamente personalizable y funcional. "
|
"Zathura es un visor de documentos altamente personalizable y funcional. "
|
||||||
"Proporciona una interfaz ligera y minimalista, fácil de usar, pensada para ser"
|
"Proporciona una interfaz ligera y minimalista, fácil de usar, pensada para "
|
||||||
" utilizada con teclado. Zathura posibilita ver y navegar por documentos sin "
|
"ser utilizada con teclado. Zathura posibilita ver y navegar por documentos "
|
||||||
"necesidad de utilizar el ratón."
|
"sin necesidad de utilizar el ratón."
|
||||||
|
|
||||||
#: data/org.pwmt.zathura.appdata.xml.in:17
|
#: data/org.pwmt.zathura.appdata.xml.in:17
|
||||||
msgid ""
|
msgid ""
|
||||||
|
@ -447,8 +447,8 @@ msgstr "Mostrar el nombre del archivo en el título de la ventana"
|
||||||
|
|
||||||
#: zathura/config.c:277
|
#: zathura/config.c:277
|
||||||
msgid "Use ~ instead of $HOME in the filename in the window title"
|
msgid "Use ~ instead of $HOME in the filename in the window title"
|
||||||
msgstr "Mostrar ~ en lugar de $HOME en el nombre de archivo del título de la "
|
msgstr ""
|
||||||
"ventana"
|
"Mostrar ~ en lugar de $HOME en el nombre de archivo del título de la ventana"
|
||||||
|
|
||||||
#: zathura/config.c:279
|
#: zathura/config.c:279
|
||||||
msgid "Display the page number in the window title"
|
msgid "Display the page number in the window title"
|
||||||
|
@ -464,8 +464,8 @@ msgstr "Mostrar el nombre corto del archivo en la barra de estado"
|
||||||
|
|
||||||
#: zathura/config.c:285
|
#: zathura/config.c:285
|
||||||
msgid "Use ~ instead of $HOME in the filename in the statusbar"
|
msgid "Use ~ instead of $HOME in the filename in the statusbar"
|
||||||
msgstr "Mostrar ~ en lugar de $HOME en el nombre de archivo de la barra de "
|
msgstr ""
|
||||||
"estado"
|
"Mostrar ~ en lugar de $HOME en el nombre de archivo de la barra de estado"
|
||||||
|
|
||||||
#: zathura/config.c:287
|
#: zathura/config.c:287
|
||||||
msgid "Display (current page / total pages) as a percent in the statusbar"
|
msgid "Display (current page / total pages) as a percent in the statusbar"
|
||||||
|
@ -591,7 +591,8 @@ msgstr "Error al tratar de ejecutar xdg-open"
|
||||||
|
|
||||||
#: zathura/links.c:247
|
#: zathura/links.c:247
|
||||||
msgid "Opening external applications in strict sandbox mode is not permitted"
|
msgid "Opening external applications in strict sandbox mode is not permitted"
|
||||||
msgstr "La apertura de aplicaciones externas en modo sandbox estricto no está "
|
msgstr ""
|
||||||
|
"La apertura de aplicaciones externas en modo sandbox estricto no está "
|
||||||
"permitida"
|
"permitida"
|
||||||
|
|
||||||
#: zathura/links.c:280
|
#: zathura/links.c:280
|
||||||
|
@ -725,8 +726,8 @@ msgstr "[Sin nombre]"
|
||||||
|
|
||||||
#: zathura/zathura.c:837
|
#: zathura/zathura.c:837
|
||||||
msgid "Could not read file from stdin and write it to a temporary file."
|
msgid "Could not read file from stdin and write it to a temporary file."
|
||||||
msgstr "No se pudo leer el archivo desde stdin y escribirlo en un archivo "
|
msgstr ""
|
||||||
"temporal."
|
"No se pudo leer el archivo desde stdin y escribirlo en un archivo temporal."
|
||||||
|
|
||||||
#: zathura/zathura.c:857
|
#: zathura/zathura.c:857
|
||||||
msgid "Could not read file from GIO and copy it to a temporary file."
|
msgid "Could not read file from GIO and copy it to a temporary file."
|
||||||
|
|
|
@ -7,8 +7,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
||||||
"Language-Team: Spanish (Chile) (http://www.transifex.com/pwmt/zathura/"
|
"Language-Team: Spanish (Chile) (http://www.transifex.com/pwmt/zathura/"
|
||||||
"language/es_CL/)\n"
|
"language/es_CL/)\n"
|
||||||
|
|
4
po/et.po
4
po/et.po
|
@ -7,8 +7,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
||||||
"Language-Team: Estonian (http://www.transifex.com/pwmt/zathura/language/"
|
"Language-Team: Estonian (http://www.transifex.com/pwmt/zathura/language/"
|
||||||
"et/)\n"
|
"et/)\n"
|
||||||
|
|
4
po/fr.po
4
po/fr.po
|
@ -12,8 +12,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Benjamin Betti <benjamin@betti.me>\n"
|
"Last-Translator: Benjamin Betti <benjamin@betti.me>\n"
|
||||||
"Language-Team: French (http://www.transifex.com/pwmt/zathura/language/fr/)\n"
|
"Language-Team: French (http://www.transifex.com/pwmt/zathura/language/fr/)\n"
|
||||||
"Language: fr\n"
|
"Language: fr\n"
|
||||||
|
|
4
po/he.po
4
po/he.po
|
@ -6,8 +6,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
||||||
"Language-Team: Hebrew (http://www.transifex.com/pwmt/zathura/language/he/)\n"
|
"Language-Team: Hebrew (http://www.transifex.com/pwmt/zathura/language/he/)\n"
|
||||||
"Language: he\n"
|
"Language: he\n"
|
||||||
|
|
8
po/hr.po
8
po/hr.po
|
@ -6,8 +6,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
||||||
"Language-Team: Croatian (http://www.transifex.com/pwmt/zathura/language/"
|
"Language-Team: Croatian (http://www.transifex.com/pwmt/zathura/language/"
|
||||||
"hr/)\n"
|
"hr/)\n"
|
||||||
|
@ -15,8 +15,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||||
|
|
||||||
#: data/org.pwmt.zathura.appdata.xml.in:7 data/org.pwmt.zathura.desktop.in:5
|
#: data/org.pwmt.zathura.appdata.xml.in:7 data/org.pwmt.zathura.desktop.in:5
|
||||||
msgid "Zathura"
|
msgid "Zathura"
|
||||||
|
|
|
@ -8,8 +8,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
||||||
"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/pwmt/zathura/"
|
"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/pwmt/zathura/"
|
||||||
"language/id_ID/)\n"
|
"language/id_ID/)\n"
|
||||||
|
|
19
po/it.po
19
po/it.po
|
@ -11,8 +11,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Simone Dotto <simonedotto@protonmail.com>\n"
|
"Last-Translator: Simone Dotto <simonedotto@protonmail.com>\n"
|
||||||
"Language-Team: Italian (http://www.transifex.com/pwmt/zathura/language/it/)\n"
|
"Language-Team: Italian (http://www.transifex.com/pwmt/zathura/language/it/)\n"
|
||||||
"Language: it\n"
|
"Language: it\n"
|
||||||
|
@ -331,7 +331,7 @@ msgstr "Colore per evidenziare"
|
||||||
|
|
||||||
#: zathura/config.c:218
|
#: zathura/config.c:218
|
||||||
msgid "Foreground color for highlighting"
|
msgid "Foreground color for highlighting"
|
||||||
msgstr ""
|
msgstr "Colore di primo piano per l'evidenziazione"
|
||||||
|
|
||||||
#: zathura/config.c:220
|
#: zathura/config.c:220
|
||||||
msgid "Color for highlighting (active)"
|
msgid "Color for highlighting (active)"
|
||||||
|
@ -474,6 +474,7 @@ msgstr "Usa ~ al posto di $HOME nel nome del file nella barra di stato"
|
||||||
#: zathura/config.c:287
|
#: zathura/config.c:287
|
||||||
msgid "Display (current page / total pages) as a percent in the statusbar"
|
msgid "Display (current page / total pages) as a percent in the statusbar"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Mostra (pagina attuale / pagine totali) in percentuale nella barra di stato"
|
||||||
|
|
||||||
#: zathura/config.c:289
|
#: zathura/config.c:289
|
||||||
msgid "Enable synctex support"
|
msgid "Enable synctex support"
|
||||||
|
@ -489,7 +490,7 @@ msgstr "Abilita il servizio D-Bus"
|
||||||
|
|
||||||
#: zathura/config.c:293
|
#: zathura/config.c:293
|
||||||
msgid "Raise window on certain D-Bus commands"
|
msgid "Raise window on certain D-Bus commands"
|
||||||
msgstr ""
|
msgstr "Solleva la finestra in corrispondenza di certi comandi di D-Bus"
|
||||||
|
|
||||||
#: zathura/config.c:295
|
#: zathura/config.c:295
|
||||||
msgid "Save history at each page change"
|
msgid "Save history at each page change"
|
||||||
|
@ -587,7 +588,7 @@ msgstr "Mostra informazioni sulla versione"
|
||||||
|
|
||||||
#: zathura/config.c:516
|
#: zathura/config.c:516
|
||||||
msgid "Source config file"
|
msgid "Source config file"
|
||||||
msgstr ""
|
msgstr "File di configurazione sorgente"
|
||||||
|
|
||||||
#: zathura/links.c:233
|
#: zathura/links.c:233
|
||||||
msgid "Failed to run xdg-open."
|
msgid "Failed to run xdg-open."
|
||||||
|
@ -616,12 +617,12 @@ msgstr "Link: non valido"
|
||||||
#: zathura/links.c:305
|
#: zathura/links.c:305
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Copied page number: %d"
|
msgid "Copied page number: %d"
|
||||||
msgstr ""
|
msgstr "Copiata pagina numero: %d"
|
||||||
|
|
||||||
#: zathura/links.c:314
|
#: zathura/links.c:314
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Copied link: %s"
|
msgid "Copied link: %s"
|
||||||
msgstr ""
|
msgstr "Copiato il link: %s"
|
||||||
|
|
||||||
#: zathura/main.c:151
|
#: zathura/main.c:151
|
||||||
msgid "Reparents to window specified by xid (X11)"
|
msgid "Reparents to window specified by xid (X11)"
|
||||||
|
@ -681,7 +682,7 @@ msgstr "Avvia in una modalità non standard"
|
||||||
|
|
||||||
#: zathura/main.c:165
|
#: zathura/main.c:165
|
||||||
msgid "Bookmark to go to"
|
msgid "Bookmark to go to"
|
||||||
msgstr ""
|
msgstr "Segnalibro a cui andare"
|
||||||
|
|
||||||
#: zathura/main.c:166
|
#: zathura/main.c:166
|
||||||
msgid "Search for the given phrase and display results"
|
msgid "Search for the given phrase and display results"
|
||||||
|
@ -753,7 +754,7 @@ msgstr "Il documento non contiene alcuna pagina"
|
||||||
#: zathura/zathura.c:1371
|
#: zathura/zathura.c:1371
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "File already exists: %s. Use :write! to overwrite it."
|
msgid "File already exists: %s. Use :write! to overwrite it."
|
||||||
msgstr ""
|
msgstr "Il file esiste già: %s. Usa :write! per sovrascriverlo."
|
||||||
|
|
||||||
#: zathura/zathura.c:1380
|
#: zathura/zathura.c:1380
|
||||||
msgid "Failed to save document."
|
msgid "Failed to save document."
|
||||||
|
|
4
po/lt.po
4
po/lt.po
|
@ -7,8 +7,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
||||||
"Language-Team: Lithuanian (http://www.transifex.com/pwmt/zathura/language/"
|
"Language-Team: Lithuanian (http://www.transifex.com/pwmt/zathura/language/"
|
||||||
"lt/)\n"
|
"lt/)\n"
|
||||||
|
|
6
po/nl.po
6
po/nl.po
|
@ -7,8 +7,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 19:20+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Heimen Stoffels <vistausss@fastmail.com>\n"
|
"Last-Translator: Heimen Stoffels <vistausss@fastmail.com>\n"
|
||||||
"Language-Team: Dutch (http://www.transifex.com/pwmt/zathura/language/nl/)\n"
|
"Language-Team: Dutch (http://www.transifex.com/pwmt/zathura/language/nl/)\n"
|
||||||
"Language: nl\n"
|
"Language: nl\n"
|
||||||
|
@ -469,7 +469,7 @@ msgstr "~ gebruiken i.p.v. $HOME in de bestandsnaam in de statusbalk"
|
||||||
|
|
||||||
#: zathura/config.c:287
|
#: zathura/config.c:287
|
||||||
msgid "Display (current page / total pages) as a percent in the statusbar"
|
msgid "Display (current page / total pages) as a percent in the statusbar"
|
||||||
msgstr ""
|
msgstr "Huidige pagina/Totaalaantal in procenten tonen op statusbalk"
|
||||||
|
|
||||||
#: zathura/config.c:289
|
#: zathura/config.c:289
|
||||||
msgid "Enable synctex support"
|
msgid "Enable synctex support"
|
||||||
|
|
4
po/no.po
4
po/no.po
|
@ -7,8 +7,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
||||||
"Language-Team: Norwegian (http://www.transifex.com/pwmt/zathura/language/"
|
"Language-Team: Norwegian (http://www.transifex.com/pwmt/zathura/language/"
|
||||||
"no/)\n"
|
"no/)\n"
|
||||||
|
|
10
po/pl.po
10
po/pl.po
|
@ -8,17 +8,17 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
||||||
"Language-Team: Polish (http://www.transifex.com/pwmt/zathura/language/pl/)\n"
|
"Language-Team: Polish (http://www.transifex.com/pwmt/zathura/language/pl/)\n"
|
||||||
"Language: pl\n"
|
"Language: pl\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n"
|
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && "
|
||||||
"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n"
|
"(n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && "
|
||||||
"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
|
"n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
|
||||||
|
|
||||||
#: data/org.pwmt.zathura.appdata.xml.in:7 data/org.pwmt.zathura.desktop.in:5
|
#: data/org.pwmt.zathura.appdata.xml.in:7 data/org.pwmt.zathura.desktop.in:5
|
||||||
msgid "Zathura"
|
msgid "Zathura"
|
||||||
|
|
|
@ -8,8 +8,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Fernando Henrique <liquuid@gmail.com>\n"
|
"Last-Translator: Fernando Henrique <liquuid@gmail.com>\n"
|
||||||
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/pwmt/zathura/"
|
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/pwmt/zathura/"
|
||||||
"language/pt_BR/)\n"
|
"language/pt_BR/)\n"
|
||||||
|
|
10
po/ru.po
10
po/ru.po
|
@ -12,17 +12,17 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: AlexanderFilev <avfill@outlook.com>\n"
|
"Last-Translator: AlexanderFilev <avfill@outlook.com>\n"
|
||||||
"Language-Team: Russian (http://www.transifex.com/pwmt/zathura/language/ru/)\n"
|
"Language-Team: Russian (http://www.transifex.com/pwmt/zathura/language/ru/)\n"
|
||||||
"Language: ru\n"
|
"Language: ru\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||||
"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
|
"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || "
|
||||||
"%100>=11 && n%100<=14)? 2 : 3);\n"
|
"(n%100>=11 && n%100<=14)? 2 : 3);\n"
|
||||||
|
|
||||||
#: data/org.pwmt.zathura.appdata.xml.in:7 data/org.pwmt.zathura.desktop.in:5
|
#: data/org.pwmt.zathura.appdata.xml.in:7 data/org.pwmt.zathura.desktop.in:5
|
||||||
msgid "Zathura"
|
msgid "Zathura"
|
||||||
|
|
4
po/sv.po
4
po/sv.po
|
@ -7,8 +7,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
|
"Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
|
||||||
"Language-Team: Swedish (http://www.transifex.com/pwmt/zathura/language/sv/)\n"
|
"Language-Team: Swedish (http://www.transifex.com/pwmt/zathura/language/sv/)\n"
|
||||||
"Language: sv\n"
|
"Language: sv\n"
|
||||||
|
|
|
@ -7,8 +7,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
||||||
"Language-Team: Tamil (India) (http://www.transifex.com/pwmt/zathura/language/"
|
"Language-Team: Tamil (India) (http://www.transifex.com/pwmt/zathura/language/"
|
||||||
"ta_IN/)\n"
|
"ta_IN/)\n"
|
||||||
|
|
4
po/tr.po
4
po/tr.po
|
@ -12,8 +12,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-08 05:07+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Bunyamin Can Sahan\n"
|
"Last-Translator: Bunyamin Can Sahan\n"
|
||||||
"Language-Team: Turkish (http://www.transifex.com/pwmt/zathura/language/tr/)\n"
|
"Language-Team: Turkish (http://www.transifex.com/pwmt/zathura/language/tr/)\n"
|
||||||
"Language: tr\n"
|
"Language: tr\n"
|
||||||
|
|
|
@ -8,8 +8,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-02-12 12:54+0100\n"
|
"POT-Creation-Date: 2022-05-07 23:53+0200\n"
|
||||||
"PO-Revision-Date: 2022-01-06 14:12+0000\n"
|
"PO-Revision-Date: 2012-03-26 16:47+0000\n"
|
||||||
"Last-Translator: Юрій Яновський <lytvyn349@ukr.net>\n"
|
"Last-Translator: Юрій Яновський <lytvyn349@ukr.net>\n"
|
||||||
"Language-Team: Ukrainian (Ukraine) (http://www.transifex.com/pwmt/zathura/"
|
"Language-Team: Ukrainian (Ukraine) (http://www.transifex.com/pwmt/zathura/"
|
||||||
"language/uk_UA/)\n"
|
"language/uk_UA/)\n"
|
||||||
|
|
|
@ -1,46 +1,29 @@
|
||||||
/* SPDX-License-Identifier: Zlib */
|
/* SPDX-License-Identifier: Zlib */
|
||||||
|
|
||||||
#include "content-type.h"
|
#include "content-type.h"
|
||||||
|
#include "macros.h"
|
||||||
|
|
||||||
#include <girara/utils.h>
|
|
||||||
#ifdef WITH_MAGIC
|
|
||||||
#include <magic.h>
|
|
||||||
#else
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
#endif
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <glib.h>
|
|
||||||
#include <gio/gio.h>
|
#include <gio/gio.h>
|
||||||
|
#include <girara/utils.h>
|
||||||
|
#include <glib.h>
|
||||||
|
#include <magic.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
struct zathura_content_type_context_s
|
struct zathura_content_type_context_s {
|
||||||
{
|
|
||||||
#ifdef WITH_MAGIC
|
|
||||||
magic_t magic;
|
magic_t magic;
|
||||||
#else
|
|
||||||
void* magic;
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
zathura_content_type_context_t*
|
zathura_content_type_context_t*
|
||||||
zathura_content_type_new(void)
|
zathura_content_type_new(void)
|
||||||
{
|
{
|
||||||
zathura_content_type_context_t* context =
|
zathura_content_type_context_t* context = g_try_malloc0(sizeof(zathura_content_type_context_t));
|
||||||
g_try_malloc0(sizeof(zathura_content_type_context_t));
|
|
||||||
if (context == NULL) {
|
if (context == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WITH_MAGIC
|
|
||||||
/* creat magic cookie */
|
/* creat magic cookie */
|
||||||
static const int flags =
|
static const int flags = MAGIC_ERROR | MAGIC_MIME_TYPE | MAGIC_SYMLINK | MAGIC_NO_CHECK_APPTYPE | MAGIC_NO_CHECK_CDF |
|
||||||
MAGIC_ERROR |
|
MAGIC_NO_CHECK_ELF | MAGIC_NO_CHECK_ENCODING;
|
||||||
MAGIC_MIME_TYPE |
|
|
||||||
MAGIC_SYMLINK |
|
|
||||||
MAGIC_NO_CHECK_APPTYPE |
|
|
||||||
MAGIC_NO_CHECK_CDF |
|
|
||||||
MAGIC_NO_CHECK_ELF |
|
|
||||||
MAGIC_NO_CHECK_ENCODING;
|
|
||||||
magic_t magic = magic_open(flags);
|
magic_t magic = magic_open(flags);
|
||||||
if (magic == NULL) {
|
if (magic == NULL) {
|
||||||
girara_debug("failed creating the magic cookie");
|
girara_debug("failed creating the magic cookie");
|
||||||
|
@ -55,32 +38,22 @@ zathura_content_type_new(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
context->magic = magic;
|
context->magic = magic;
|
||||||
#endif
|
|
||||||
|
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
zathura_content_type_free(zathura_content_type_context_t* context)
|
zathura_content_type_free(zathura_content_type_context_t* context)
|
||||||
{
|
{
|
||||||
if (context == NULL) {
|
if (context != NULL && context->magic != NULL) {
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef WITH_MAGIC
|
|
||||||
if (context->magic != NULL) {
|
|
||||||
magic_close(context->magic);
|
magic_close(context->magic);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
g_free(context);
|
g_free(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Read a most GT_MAX_READ bytes before falling back to file. */
|
/** Read a most GT_MAX_READ bytes before falling back to file. */
|
||||||
static const size_t GT_MAX_READ = 1 << 16;
|
static const size_t GT_MAX_READ = 1 << 16;
|
||||||
|
|
||||||
#ifdef WITH_MAGIC
|
|
||||||
static char*
|
static char*
|
||||||
guess_type_magic(zathura_content_type_context_t* context, const char* path)
|
guess_type_magic(zathura_content_type_context_t* context, const char* path)
|
||||||
{
|
{
|
||||||
|
@ -108,62 +81,6 @@ guess_type_magic(zathura_content_type_context_t* context, const char* path)
|
||||||
return content_type;
|
return content_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char*
|
|
||||||
guess_type_file(const char* UNUSED(path))
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static char*
|
|
||||||
guess_type_magic(zathura_content_type_context_t* UNUSED(context),
|
|
||||||
const char* UNUSED(path))
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static char*
|
|
||||||
guess_type_file(const char* path)
|
|
||||||
{
|
|
||||||
/* g_spawn_async expects char** */
|
|
||||||
static char cmd_file[] = "file";
|
|
||||||
static char opt_b[] = "-b";
|
|
||||||
static char opt_mime_type[] = "--mime-type";
|
|
||||||
char* argv[] = { cmd_file, opt_b, opt_mime_type, g_strdup(path), NULL };
|
|
||||||
|
|
||||||
GError* error = NULL;
|
|
||||||
char* out = NULL;
|
|
||||||
int ret = 0;
|
|
||||||
const bool r = g_spawn_sync(NULL, argv, NULL,
|
|
||||||
G_SPAWN_SEARCH_PATH | G_SPAWN_STDERR_TO_DEV_NULL,
|
|
||||||
NULL, NULL, &out, NULL, &ret, &error);
|
|
||||||
g_free(argv[3]);
|
|
||||||
if (r == false) {
|
|
||||||
girara_warning("failed to execute command: %s", error->message);
|
|
||||||
g_error_free(error);
|
|
||||||
g_free(out);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (g_spawn_check_exit_status(ret, &error) == false) {
|
|
||||||
girara_warning("file failed: %s", error->message);
|
|
||||||
g_error_free(error);
|
|
||||||
g_free(out);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_strdelimit(out, "\n\r", '\0');
|
|
||||||
girara_debug("file detected filetype: %s", out);
|
|
||||||
|
|
||||||
char* content_type = g_content_type_from_mime_type(out);
|
|
||||||
if (content_type == NULL) {
|
|
||||||
girara_warning("failed to convert mime type to content type: %s", out);
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_free(out);
|
|
||||||
return content_type;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static char*
|
static char*
|
||||||
guess_type_glib(const char* path)
|
guess_type_glib(const char* path)
|
||||||
{
|
{
|
||||||
|
@ -216,21 +133,21 @@ guess_type_glib(const char* path)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int compare_content_types(const void* lhs, const void* rhs) {
|
static int
|
||||||
|
compare_content_types(const void* lhs, const void* rhs)
|
||||||
|
{
|
||||||
return g_strcmp0(lhs, rhs);
|
return g_strcmp0(lhs, rhs);
|
||||||
}
|
}
|
||||||
|
|
||||||
char*
|
char*
|
||||||
zathura_content_type_guess(zathura_content_type_context_t* context,
|
zathura_content_type_guess(zathura_content_type_context_t* context, const char* path,
|
||||||
const char* path,
|
|
||||||
const girara_list_t* supported_content_types)
|
const girara_list_t* supported_content_types)
|
||||||
{
|
{
|
||||||
/* try libmagic first */
|
/* try libmagic first */
|
||||||
char *content_type = guess_type_magic(context, path);
|
char* content_type = guess_type_magic(context, path);
|
||||||
if (content_type != NULL) {
|
if (content_type != NULL) {
|
||||||
if (supported_content_types == NULL ||
|
if (supported_content_types == NULL ||
|
||||||
girara_list_find(supported_content_types, compare_content_types,
|
girara_list_find(supported_content_types, compare_content_types, content_type) != NULL) {
|
||||||
content_type) != NULL) {
|
|
||||||
return content_type;
|
return content_type;
|
||||||
}
|
}
|
||||||
girara_debug("content type '%s' not supported, trying again", content_type);
|
girara_debug("content type '%s' not supported, trying again", content_type);
|
||||||
|
@ -240,13 +157,11 @@ zathura_content_type_guess(zathura_content_type_context_t* context,
|
||||||
content_type = guess_type_glib(path);
|
content_type = guess_type_glib(path);
|
||||||
if (content_type != NULL) {
|
if (content_type != NULL) {
|
||||||
if (supported_content_types == NULL ||
|
if (supported_content_types == NULL ||
|
||||||
girara_list_find(supported_content_types, compare_content_types,
|
girara_list_find(supported_content_types, compare_content_types, content_type) != NULL) {
|
||||||
content_type) != NULL) {
|
|
||||||
return content_type;
|
return content_type;
|
||||||
}
|
}
|
||||||
girara_debug("content type '%s' not supported, trying again", content_type);
|
girara_debug("content type '%s' not supported", content_type);
|
||||||
g_free(content_type);
|
g_free(content_type);
|
||||||
}
|
}
|
||||||
/* and if libmagic is not available, try file as last resort */
|
return NULL;
|
||||||
return guess_type_file(path);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,9 @@
|
||||||
#ifndef ZATHURA_CONTENT_TYPE_H
|
#ifndef ZATHURA_CONTENT_TYPE_H
|
||||||
#define ZATHURA_CONTENT_TYPE_H
|
#define ZATHURA_CONTENT_TYPE_H
|
||||||
|
|
||||||
#include "types.h"
|
#include <girara/datastructures.h>
|
||||||
|
|
||||||
|
typedef struct zathura_content_type_context_s zathura_content_type_context_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create new context for content type detection.
|
* Create new context for content type detection.
|
||||||
|
@ -26,8 +28,7 @@ void zathura_content_type_free(zathura_content_type_context_t* context);
|
||||||
* @param path file name
|
* @param path file name
|
||||||
* @return content type of path, needs to freeed with g_free.
|
* @return content type of path, needs to freeed with g_free.
|
||||||
*/
|
*/
|
||||||
char* zathura_content_type_guess(zathura_content_type_context_t* context,
|
char* zathura_content_type_guess(zathura_content_type_context_t* context, const char* path,
|
||||||
const char* path,
|
|
||||||
const girara_list_t* supported_content_types);
|
const girara_list_t* supported_content_types);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -168,7 +168,7 @@ zathura_db_read_key_file_from_file(const char* path)
|
||||||
g_key_file_free(key_file);
|
g_key_file_free(key_file);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
g_strlcat(content, dummy_content, dummy_len + 1);
|
strcpy(content, dummy_content);
|
||||||
contentlen = dummy_len;
|
contentlen = dummy_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -265,8 +265,11 @@ sqlite_db_check_layout(sqlite3* session, const int database_version, const bool
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (new_db == true)
|
if (new_db == true) {
|
||||||
|
/* set version if initializing a new database */
|
||||||
|
sqlite3_exec(session, "PRAGMA user_version = " G_STRINGIFY(DATABASE_VERSION) ";", NULL, 0, NULL);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
|
#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
|
||||||
if (sqlite3_compileoption_used("SQLITE_OMIT_ALTERTABLE") == 1) {
|
if (sqlite3_compileoption_used("SQLITE_OMIT_ALTERTABLE") == 1) {
|
||||||
|
|
|
@ -260,6 +260,40 @@ handle_goto_page(zathura_t* zathura, GVariant* parameters,
|
||||||
g_dbus_method_invocation_return_value(invocation, result);
|
g_dbus_method_invocation_return_value(invocation, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
zathura_t* zathura;
|
||||||
|
girara_list_t** rectangles;
|
||||||
|
unsigned int page;
|
||||||
|
unsigned int number_of_pages;
|
||||||
|
} highlights_rect_data_t;
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
synctex_highlight_rects_impl(gpointer ptr)
|
||||||
|
{
|
||||||
|
highlights_rect_data_t* data = ptr;
|
||||||
|
|
||||||
|
synctex_highlight_rects(data->zathura, data->page, data->rectangles);
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i != data->number_of_pages; ++i) {
|
||||||
|
girara_list_free(data->rectangles[i]);
|
||||||
|
}
|
||||||
|
g_free(data->rectangles);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
synctex_highlight_rects_idle(zathura_t* zathura, girara_list_t** rectangles,
|
||||||
|
unsigned int page, unsigned number_of_pages)
|
||||||
|
{
|
||||||
|
highlights_rect_data_t* data = g_try_malloc0(sizeof(highlights_rect_data_t));
|
||||||
|
data->zathura = zathura;
|
||||||
|
data->rectangles = rectangles;
|
||||||
|
data->page = page;
|
||||||
|
data->number_of_pages = number_of_pages;
|
||||||
|
|
||||||
|
gdk_threads_add_idle(synctex_highlight_rects_impl, data);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
handle_highlight_rects(zathura_t* zathura, GVariant* parameters,
|
handle_highlight_rects(zathura_t* zathura, GVariant* parameters,
|
||||||
GDBusMethodInvocation* invocation)
|
GDBusMethodInvocation* invocation)
|
||||||
|
@ -357,26 +391,55 @@ handle_highlight_rects(zathura_t* zathura, GVariant* parameters,
|
||||||
}
|
}
|
||||||
g_variant_iter_free(secondary_iter);
|
g_variant_iter_free(secondary_iter);
|
||||||
|
|
||||||
synctex_highlight_rects(zathura, page, rectangles);
|
/* run synctex_highlight_rects in main thread when idle */
|
||||||
g_free(rectangles);
|
synctex_highlight_rects_idle(zathura, rectangles, page, number_of_pages);
|
||||||
|
|
||||||
GVariant* result = g_variant_new("(b)", true);
|
GVariant* result = g_variant_new("(b)", true);
|
||||||
g_dbus_method_invocation_return_value(invocation, result);
|
g_dbus_method_invocation_return_value(invocation, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
zathura_t* zathura;
|
||||||
|
gchar* input_file;
|
||||||
|
unsigned int line;
|
||||||
|
unsigned int column;
|
||||||
|
} view_data_t;
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
synctex_view_impl(gpointer ptr)
|
||||||
|
{
|
||||||
|
view_data_t* data = ptr;
|
||||||
|
|
||||||
|
synctex_view(data->zathura, data->input_file, data->line, data->column);
|
||||||
|
|
||||||
|
g_free(data->input_file);
|
||||||
|
g_free(data);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
handle_synctex_view(zathura_t* zathura, GVariant* parameters,
|
synctex_view_idle(zathura_t* zathura, gchar* input_file, unsigned int line, unsigned int column)
|
||||||
GDBusMethodInvocation* invocation)
|
{
|
||||||
|
view_data_t* data = g_try_malloc0(sizeof(view_data_t));
|
||||||
|
data->zathura = zathura;
|
||||||
|
data->input_file = input_file;
|
||||||
|
data->line = line;
|
||||||
|
data->column = column;
|
||||||
|
|
||||||
|
gdk_threads_add_idle(synctex_view_impl, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
handle_synctex_view(zathura_t* zathura, GVariant* parameters, GDBusMethodInvocation* invocation)
|
||||||
{
|
{
|
||||||
gchar* input_file = NULL;
|
gchar* input_file = NULL;
|
||||||
guint line = 0;
|
guint line = 0;
|
||||||
guint column = 0;
|
guint column = 0;
|
||||||
g_variant_get(parameters, "(suu)", &input_file, &line, &column);
|
g_variant_get(parameters, "(suu)", &input_file, &line, &column);
|
||||||
|
|
||||||
const bool ret = synctex_view(zathura, input_file, line, column);
|
synctex_view_idle(zathura, input_file, line, column);
|
||||||
g_free(input_file);
|
|
||||||
|
|
||||||
GVariant* result = g_variant_new("(b)", ret);
|
GVariant* result = g_variant_new("(b)", true);
|
||||||
g_dbus_method_invocation_return_value(invocation, result);
|
g_dbus_method_invocation_return_value(invocation, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -586,11 +649,10 @@ iterate_instances_call_synctex_view(const char* filename,
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
zathura_dbus_synctex_position(const char* filename, const char* input_file,
|
zathura_dbus_synctex_position(const char* filename, const char* input_file, int line, int column, pid_t hint)
|
||||||
int line, int column, pid_t hint)
|
|
||||||
{
|
{
|
||||||
if (filename == NULL || input_file == NULL || line < 0 || column < 0) {
|
if (filename == NULL || input_file == NULL || line < 0 || column < 0) {
|
||||||
return false;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return iterate_instances_call_synctex_view(filename, input_file, line, column, hint);
|
return iterate_instances_call_synctex_view(filename, input_file, line, column, hint);
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
#include <girara/utils.h>
|
#include <girara/utils.h>
|
||||||
|
|
||||||
typedef struct private_s {
|
typedef struct {
|
||||||
char* file_path;
|
char* file_path;
|
||||||
} ZathuraFileMonitorPrivate;
|
} ZathuraFileMonitorPrivate;
|
||||||
|
|
||||||
|
@ -21,21 +21,14 @@ enum {
|
||||||
PROP_FILE_PATH
|
PROP_FILE_PATH
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
|
||||||
RELOAD_FILE,
|
|
||||||
LAST_SIGNAL
|
|
||||||
};
|
|
||||||
|
|
||||||
static guint signals[LAST_SIGNAL] = { 0 };
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
finalize(GObject* object)
|
finalize(GObject* object)
|
||||||
{
|
{
|
||||||
ZathuraFileMonitor* file_monitor = ZATHURA_FILEMONITOR(object);
|
ZathuraFileMonitor* file_monitor = ZATHURA_FILEMONITOR(object);
|
||||||
ZathuraFileMonitorPrivate* private = zathura_filemonitor_get_instance_private(file_monitor);
|
ZathuraFileMonitorPrivate* priv = zathura_filemonitor_get_instance_private(file_monitor);
|
||||||
|
|
||||||
if (private->file_path != NULL) {
|
if (priv->file_path != NULL) {
|
||||||
g_free(private->file_path);
|
g_free(priv->file_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
G_OBJECT_CLASS(zathura_filemonitor_parent_class)->finalize(object);
|
G_OBJECT_CLASS(zathura_filemonitor_parent_class)->finalize(object);
|
||||||
|
@ -45,14 +38,14 @@ static void
|
||||||
set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec)
|
set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec)
|
||||||
{
|
{
|
||||||
ZathuraFileMonitor* file_monitor = ZATHURA_FILEMONITOR(object);
|
ZathuraFileMonitor* file_monitor = ZATHURA_FILEMONITOR(object);
|
||||||
ZathuraFileMonitorPrivate* private = zathura_filemonitor_get_instance_private(file_monitor);
|
ZathuraFileMonitorPrivate* priv = zathura_filemonitor_get_instance_private(file_monitor);
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_FILE_PATH:
|
case PROP_FILE_PATH:
|
||||||
if (private->file_path != NULL) {
|
if (priv->file_path != NULL) {
|
||||||
g_free(private->file_path);
|
g_free(priv->file_path);
|
||||||
}
|
}
|
||||||
private->file_path = g_value_dup_string(value);
|
priv->file_path = g_value_dup_string(value);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
||||||
|
@ -63,11 +56,11 @@ static void
|
||||||
get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec)
|
get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec)
|
||||||
{
|
{
|
||||||
ZathuraFileMonitor* file_monitor = ZATHURA_FILEMONITOR(object);
|
ZathuraFileMonitor* file_monitor = ZATHURA_FILEMONITOR(object);
|
||||||
ZathuraFileMonitorPrivate* private = zathura_filemonitor_get_instance_private(file_monitor);
|
ZathuraFileMonitorPrivate* priv = zathura_filemonitor_get_instance_private(file_monitor);
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_FILE_PATH:
|
case PROP_FILE_PATH:
|
||||||
g_value_set_string(value, private->file_path);
|
g_value_set_string(value, priv->file_path);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
||||||
|
@ -94,22 +87,21 @@ zathura_filemonitor_class_init(ZathuraFileMonitorClass* class)
|
||||||
G_PARAM_STATIC_STRINGS));
|
G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
/* add signals */
|
/* add signals */
|
||||||
signals[RELOAD_FILE] =
|
g_signal_new("reload-file", ZATHURA_TYPE_FILEMONITOR, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic,
|
||||||
g_signal_new("reload-file", ZATHURA_TYPE_FILEMONITOR, G_SIGNAL_RUN_LAST, 0,
|
G_TYPE_NONE, 0);
|
||||||
NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
zathura_filemonitor_init(ZathuraFileMonitor* file_monitor)
|
zathura_filemonitor_init(ZathuraFileMonitor* file_monitor)
|
||||||
{
|
{
|
||||||
ZathuraFileMonitorPrivate* private = zathura_filemonitor_get_instance_private(file_monitor);
|
ZathuraFileMonitorPrivate* priv = zathura_filemonitor_get_instance_private(file_monitor);
|
||||||
private->file_path = NULL;
|
priv->file_path = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* zathura_filemonitor_get_filepath(ZathuraFileMonitor* file_monitor)
|
const char* zathura_filemonitor_get_filepath(ZathuraFileMonitor* file_monitor)
|
||||||
{
|
{
|
||||||
ZathuraFileMonitorPrivate* private = zathura_filemonitor_get_instance_private(file_monitor);
|
ZathuraFileMonitorPrivate* priv = zathura_filemonitor_get_instance_private(file_monitor);
|
||||||
return private->file_path;
|
return priv->file_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
void zathura_filemonitor_start(ZathuraFileMonitor* file_monitor)
|
void zathura_filemonitor_start(ZathuraFileMonitor* file_monitor)
|
||||||
|
|
|
@ -195,15 +195,16 @@ load_dir(void* data, void* userdata)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
bool
|
||||||
zathura_plugin_manager_load(zathura_plugin_manager_t* plugin_manager)
|
zathura_plugin_manager_load(zathura_plugin_manager_t* plugin_manager)
|
||||||
{
|
{
|
||||||
if (plugin_manager == NULL || plugin_manager->path == NULL) {
|
if (plugin_manager == NULL || plugin_manager->path == NULL) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* read all files in the plugin directory */
|
/* read all files in the plugin directory */
|
||||||
girara_list_foreach(plugin_manager->path, load_dir, plugin_manager);
|
girara_list_foreach(plugin_manager->path, load_dir, plugin_manager);
|
||||||
|
return girara_list_size(plugin_manager->plugins) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
zathura_plugin_t*
|
zathura_plugin_t*
|
||||||
|
|
|
@ -37,8 +37,9 @@ void zathura_plugin_manager_add_dir(zathura_plugin_manager_t* plugin_manager, co
|
||||||
* Loads all plugins available in the previously given directories
|
* Loads all plugins available in the previously given directories
|
||||||
*
|
*
|
||||||
* @param plugin_manager The plugin manager
|
* @param plugin_manager The plugin manager
|
||||||
|
* @return Success if some plugins have been loaded, false otherwise
|
||||||
*/
|
*/
|
||||||
void zathura_plugin_manager_load(zathura_plugin_manager_t* plugin_manager);
|
bool zathura_plugin_manager_load(zathura_plugin_manager_t* plugin_manager);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the (if available) associated plugin
|
* Returns the (if available) associated plugin
|
||||||
|
|
|
@ -11,6 +11,12 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <girara/utils.h>
|
#include <girara/utils.h>
|
||||||
|
#include <linux/sched.h> /* for clone filter */
|
||||||
|
|
||||||
|
#ifdef GDK_WINDOWING_X11
|
||||||
|
#include <gtk/gtkx.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define ADD_RULE(str_action, action, call, ...) \
|
#define ADD_RULE(str_action, action, call, ...) \
|
||||||
do { \
|
do { \
|
||||||
|
@ -100,8 +106,15 @@ seccomp_enable_basic_filter(void)
|
||||||
DENY_RULE(uselib);
|
DENY_RULE(uselib);
|
||||||
DENY_RULE(vmsplice);
|
DENY_RULE(vmsplice);
|
||||||
|
|
||||||
/* TODO: check for additional syscalls to blacklist */
|
/*
|
||||||
/* DENY_RULE (execve); */
|
*
|
||||||
|
* In case this basic filter is actually triggered, print a clear error message to report this
|
||||||
|
* The syscalls here should never be executed by an unprivileged process
|
||||||
|
*
|
||||||
|
* */
|
||||||
|
|
||||||
|
girara_debug("Using a basic seccomp filter to blacklist privileged system calls! \
|
||||||
|
Errors reporting 'bad system call' may be an indicator of compromise");
|
||||||
|
|
||||||
/* applying filter... */
|
/* applying filter... */
|
||||||
if (seccomp_load(ctx) >= 0) {
|
if (seccomp_load(ctx) >= 0) {
|
||||||
|
@ -117,7 +130,7 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
seccomp_enable_strict_filter(void)
|
seccomp_enable_strict_filter(zathura_t* zathura)
|
||||||
{
|
{
|
||||||
/* prevent child processes from getting more priv e.g. via setuid, capabilities, ... */
|
/* prevent child processes from getting more priv e.g. via setuid, capabilities, ... */
|
||||||
if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0)) {
|
if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0)) {
|
||||||
|
@ -132,20 +145,21 @@ seccomp_enable_strict_filter(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* initialize the filter */
|
/* initialize the filter */
|
||||||
scmp_filter_ctx ctx = seccomp_init(SCMP_ACT_KILL);
|
/* ENOSYS tells the calling process that the syscall is not implemented,
|
||||||
|
* allowing for a potential fallback function to execute
|
||||||
|
* scmp_filter_ctx ctx = seccomp_init(SCMP_ACT_ERRNO(ENOSYS));*/
|
||||||
|
scmp_filter_ctx ctx = seccomp_init(SCMP_ACT_KILL_PROCESS);
|
||||||
if (ctx == NULL){
|
if (ctx == NULL){
|
||||||
girara_error("seccomp_init failed");
|
girara_error("seccomp_init failed");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ALLOW_RULE(access);
|
ALLOW_RULE(access);
|
||||||
/* ALLOW_RULE (arch_prctl); */
|
|
||||||
ALLOW_RULE(bind);
|
ALLOW_RULE(bind);
|
||||||
ALLOW_RULE(brk);
|
ALLOW_RULE(brk);
|
||||||
ALLOW_RULE(clock_getres);
|
ALLOW_RULE(clock_getres);
|
||||||
ALLOW_RULE(clone); /* TODO: investigate */
|
/* ALLOW_RULE(clone); specified below */
|
||||||
ALLOW_RULE(close);
|
ALLOW_RULE(close);
|
||||||
/* ALLOW_RULE (connect); */
|
|
||||||
ALLOW_RULE(eventfd2);
|
ALLOW_RULE(eventfd2);
|
||||||
ALLOW_RULE(exit);
|
ALLOW_RULE(exit);
|
||||||
ALLOW_RULE(exit_group);
|
ALLOW_RULE(exit_group);
|
||||||
|
@ -167,14 +181,11 @@ seccomp_enable_strict_filter(void)
|
||||||
ALLOW_RULE(getpid);
|
ALLOW_RULE(getpid);
|
||||||
ALLOW_RULE(getppid);
|
ALLOW_RULE(getppid);
|
||||||
ALLOW_RULE(gettid);
|
ALLOW_RULE(gettid);
|
||||||
/* ALLOW_RULE (getpeername); */
|
|
||||||
ALLOW_RULE(getrandom);
|
ALLOW_RULE(getrandom);
|
||||||
ALLOW_RULE(getresgid);
|
ALLOW_RULE(getresgid);
|
||||||
ALLOW_RULE(getresuid);
|
ALLOW_RULE(getresuid);
|
||||||
ALLOW_RULE(getrlimit);
|
ALLOW_RULE(getrlimit);
|
||||||
ALLOW_RULE(getpeername);
|
ALLOW_RULE(getpeername);
|
||||||
/* ALLOW_RULE (getsockname); */
|
|
||||||
/* ALLOW_RULE (getsockopt); needed for access to x11 socket in network namespace (without abstract sockets) */
|
|
||||||
ALLOW_RULE(inotify_add_watch);
|
ALLOW_RULE(inotify_add_watch);
|
||||||
ALLOW_RULE(inotify_init1);
|
ALLOW_RULE(inotify_init1);
|
||||||
ALLOW_RULE(inotify_rm_watch);
|
ALLOW_RULE(inotify_rm_watch);
|
||||||
|
@ -183,7 +194,6 @@ seccomp_enable_strict_filter(void)
|
||||||
ALLOW_RULE(lstat);
|
ALLOW_RULE(lstat);
|
||||||
ALLOW_RULE(madvise);
|
ALLOW_RULE(madvise);
|
||||||
ALLOW_RULE(memfd_create);
|
ALLOW_RULE(memfd_create);
|
||||||
ALLOW_RULE(mkdir); /* needed for first run only */
|
|
||||||
ALLOW_RULE(mmap);
|
ALLOW_RULE(mmap);
|
||||||
ALLOW_RULE(mprotect);
|
ALLOW_RULE(mprotect);
|
||||||
ALLOW_RULE(mremap);
|
ALLOW_RULE(mremap);
|
||||||
|
@ -194,23 +204,23 @@ seccomp_enable_strict_filter(void)
|
||||||
ALLOW_RULE(pipe);
|
ALLOW_RULE(pipe);
|
||||||
ALLOW_RULE(pipe2);
|
ALLOW_RULE(pipe2);
|
||||||
ALLOW_RULE(poll);
|
ALLOW_RULE(poll);
|
||||||
ALLOW_RULE(pwrite64); /* TODO: build detailed filter */
|
ALLOW_RULE(pwrite64);
|
||||||
ALLOW_RULE(pread64);
|
ALLOW_RULE(pread64);
|
||||||
/* ALLOW_RULE (prlimit64); */
|
|
||||||
/* ALLOW_RULE (prctl); specified below */
|
/* ALLOW_RULE (prctl); specified below */
|
||||||
ALLOW_RULE(read);
|
ALLOW_RULE(read);
|
||||||
ALLOW_RULE(readlink);
|
ALLOW_RULE(readlink);
|
||||||
ALLOW_RULE(recvfrom);
|
ALLOW_RULE(recvfrom);
|
||||||
ALLOW_RULE(recvmsg);
|
ALLOW_RULE(recvmsg);
|
||||||
ALLOW_RULE(restart_syscall);
|
ALLOW_RULE(restart_syscall);
|
||||||
|
ALLOW_RULE(rseq);
|
||||||
ALLOW_RULE(rt_sigaction);
|
ALLOW_RULE(rt_sigaction);
|
||||||
ALLOW_RULE(rt_sigprocmask);
|
ALLOW_RULE(rt_sigprocmask);
|
||||||
|
ALLOW_RULE(sched_setattr);
|
||||||
|
ALLOW_RULE(sched_getattr);
|
||||||
ALLOW_RULE(sendmsg);
|
ALLOW_RULE(sendmsg);
|
||||||
ALLOW_RULE(sendto);
|
ALLOW_RULE(sendto);
|
||||||
ALLOW_RULE(select);
|
ALLOW_RULE(select);
|
||||||
ALLOW_RULE(set_robust_list);
|
ALLOW_RULE(set_robust_list);
|
||||||
/* ALLOW_RULE (set_tid_address); */
|
|
||||||
/* ALLOW_RULE (setsockopt); */
|
|
||||||
ALLOW_RULE(shmat);
|
ALLOW_RULE(shmat);
|
||||||
ALLOW_RULE(shmctl);
|
ALLOW_RULE(shmctl);
|
||||||
ALLOW_RULE(shmdt);
|
ALLOW_RULE(shmdt);
|
||||||
|
@ -219,30 +229,66 @@ seccomp_enable_strict_filter(void)
|
||||||
ALLOW_RULE(stat);
|
ALLOW_RULE(stat);
|
||||||
ALLOW_RULE(statx);
|
ALLOW_RULE(statx);
|
||||||
ALLOW_RULE(statfs);
|
ALLOW_RULE(statfs);
|
||||||
/* ALLOW_RULE (socket); */
|
|
||||||
ALLOW_RULE(sysinfo);
|
ALLOW_RULE(sysinfo);
|
||||||
|
/* ALLOW_RULE(umask); allowed for X11 only below */
|
||||||
ALLOW_RULE(uname);
|
ALLOW_RULE(uname);
|
||||||
ALLOW_RULE(unlink);
|
ALLOW_RULE(unlink);
|
||||||
ALLOW_RULE(write); /* specified below (zathura needs to write files)*/
|
ALLOW_RULE(write);
|
||||||
ALLOW_RULE(writev);
|
ALLOW_RULE(writev);
|
||||||
ALLOW_RULE(wait4); /* trying to open links should not crash the app */
|
ALLOW_RULE(wait4);
|
||||||
|
|
||||||
/* ADD_RULE("errno", SCMP_ACT_ERRNO(EPERM), sched_setattr, 0); */
|
|
||||||
/* ADD_RULE("errno", SCMP_ACT_ERRNO(EPERM), sched_getattr, 0); */
|
|
||||||
|
|
||||||
/* required by glib */
|
|
||||||
ALLOW_RULE(sched_setattr);
|
|
||||||
ALLOW_RULE(sched_getattr);
|
|
||||||
|
|
||||||
/* required by some X11 setups */
|
|
||||||
ADD_RULE("errno", SCMP_ACT_ERRNO(EPERM), umask, 0);
|
|
||||||
ADD_RULE("errno", SCMP_ACT_ERRNO(EPERM), socket, 0);
|
|
||||||
|
|
||||||
|
|
||||||
/* required for testing only */
|
/* required for testing only */
|
||||||
ALLOW_RULE(timer_create);
|
ALLOW_RULE(timer_create);
|
||||||
ALLOW_RULE(timer_delete);
|
ALLOW_RULE(timer_delete);
|
||||||
|
|
||||||
|
|
||||||
|
/* Permit X11 specific syscalls */
|
||||||
|
#ifdef GDK_WINDOWING_X11
|
||||||
|
GdkDisplay* display = gtk_widget_get_display(zathura->ui.session->gtk.view);
|
||||||
|
|
||||||
|
if (GDK_IS_X11_DISPLAY (display)) {
|
||||||
|
|
||||||
|
girara_debug("On X11, supporting X11 syscalls");
|
||||||
|
|
||||||
|
/* permit the socket syscall for local UNIX domain sockets (required by X11) */
|
||||||
|
ADD_RULE("allow", SCMP_ACT_ALLOW, socket, 1, SCMP_CMP(0, SCMP_CMP_EQ, AF_UNIX));
|
||||||
|
|
||||||
|
ALLOW_RULE(mkdir);
|
||||||
|
ALLOW_RULE(setsockopt);
|
||||||
|
ALLOW_RULE(connect);
|
||||||
|
ALLOW_RULE(umask);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
girara_debug("On Wayland, blocking X11 syscalls");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* filter clone arguments */
|
||||||
|
ADD_RULE("allow", SCMP_ACT_ALLOW, clone, 1, SCMP_CMP(0, SCMP_CMP_EQ, \
|
||||||
|
CLONE_VM | \
|
||||||
|
CLONE_FS | \
|
||||||
|
CLONE_FILES | \
|
||||||
|
CLONE_SIGHAND | \
|
||||||
|
CLONE_THREAD | \
|
||||||
|
CLONE_SYSVSEM | \
|
||||||
|
CLONE_SETTLS | \
|
||||||
|
CLONE_PARENT_SETTID | \
|
||||||
|
CLONE_CHILD_CLEARTID));
|
||||||
|
|
||||||
|
|
||||||
|
/* fcntl filter - not yet working */
|
||||||
|
/*ADD_RULE("allow", SCMP_ACT_ALLOW, fcntl, 1, SCMP_CMP(0, SCMP_CMP_EQ, \
|
||||||
|
F_GETFL | \
|
||||||
|
F_SETFL | \
|
||||||
|
F_ADD_SEALS | \
|
||||||
|
F_SEAL_SEAL | \
|
||||||
|
F_SEAL_SHRINK | \
|
||||||
|
F_DUPFD_CLOEXEC | \
|
||||||
|
F_SETFD | \
|
||||||
|
FD_CLOEXEC )); */
|
||||||
|
|
||||||
|
|
||||||
/* Special requirements for ioctl, allowed on stdout/stderr */
|
/* Special requirements for ioctl, allowed on stdout/stderr */
|
||||||
ADD_RULE("allow", SCMP_ACT_ALLOW, ioctl, 1, SCMP_CMP(0, SCMP_CMP_EQ, 1));
|
ADD_RULE("allow", SCMP_ACT_ALLOW, ioctl, 1, SCMP_CMP(0, SCMP_CMP_EQ, 1));
|
||||||
ADD_RULE("allow", SCMP_ACT_ALLOW, ioctl, 1, SCMP_CMP(0, SCMP_CMP_EQ, 2));
|
ADD_RULE("allow", SCMP_ACT_ALLOW, ioctl, 1, SCMP_CMP(0, SCMP_CMP_EQ, 2));
|
||||||
|
@ -261,44 +307,24 @@ seccomp_enable_strict_filter(void)
|
||||||
ADD_RULE("errno", SCMP_ACT_ERRNO(EACCES), openat, 1, SCMP_CMP(2, SCMP_CMP_MASKED_EQ, O_WRONLY, O_WRONLY));
|
ADD_RULE("errno", SCMP_ACT_ERRNO(EACCES), openat, 1, SCMP_CMP(2, SCMP_CMP_MASKED_EQ, O_WRONLY, O_WRONLY));
|
||||||
ADD_RULE("errno", SCMP_ACT_ERRNO(EACCES), openat, 1, SCMP_CMP(2, SCMP_CMP_MASKED_EQ, O_RDWR, O_RDWR));
|
ADD_RULE("errno", SCMP_ACT_ERRNO(EACCES), openat, 1, SCMP_CMP(2, SCMP_CMP_MASKED_EQ, O_RDWR, O_RDWR));
|
||||||
|
|
||||||
/* allowed for debugging: */
|
|
||||||
|
|
||||||
/* ALLOW_RULE (prctl); */
|
|
||||||
/* ALLOW_RULE (ioctl); */
|
|
||||||
|
|
||||||
/* TODO: test fcntl rules */
|
|
||||||
/* if (seccomp_rule_add (ctx, SCMP_ACT_ALLOW, SCMP_SYS(fcntl), 1, */
|
|
||||||
/* SCMP_CMP(0, SCMP_CMP_EQ, F_GETFL)) < 0) */
|
|
||||||
/* goto out; */
|
|
||||||
|
|
||||||
/* if (seccomp_rule_add (ctx, SCMP_ACT_ALLOW, SCMP_SYS(fcntl), 1, */
|
|
||||||
/* SCMP_CMP(0, SCMP_CMP_EQ, F_SETFL)) < 0) */
|
|
||||||
/* goto out; */
|
|
||||||
|
|
||||||
/* if (seccomp_rule_add (ctx, SCMP_ACT_ALLOW, SCMP_SYS(fcntl), 1, */
|
|
||||||
/* SCMP_CMP(0, SCMP_CMP_EQ, F_SETFD)) < 0) */
|
|
||||||
/* goto out; */
|
|
||||||
|
|
||||||
/* if (seccomp_rule_add (ctx, SCMP_ACT_ALLOW, SCMP_SYS(fcntl), 1, */
|
|
||||||
/* SCMP_CMP(0, SCMP_CMP_EQ, F_GETFD)) < 0) */
|
|
||||||
/* goto out; */
|
|
||||||
|
|
||||||
/* if (seccomp_rule_add (ctx, SCMP_ACT_ALLOW, SCMP_SYS(fcntl), 1, */
|
|
||||||
/* SCMP_CMP(0, SCMP_CMP_EQ, F_SETLK)) < 0) */
|
|
||||||
/* goto out; */
|
|
||||||
|
|
||||||
|
|
||||||
/* TODO: build detailed filter for prctl */
|
|
||||||
/* needed by gtk??? (does not load content without) */
|
|
||||||
|
|
||||||
/* /\* special restrictions for prctl, only allow PR_SET_NAME/PR_SET_PDEATHSIG *\/ */
|
/* Sandbox Status Notes:
|
||||||
/* if (seccomp_rule_add (ctx, SCMP_ACT_ALLOW, SCMP_SYS(prctl), 1, */
|
*
|
||||||
/* SCMP_CMP(0, SCMP_CMP_EQ, PR_SET_NAME)) < 0) */
|
* write: no actual files on the filesystem are opened with write permissions
|
||||||
/* goto out; */
|
* exception is /run/user/UID/dconf/user (file descriptor not available during runtime)
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* mkdir: needed for first run only to create /run/user/UID/dconf (before seccomp init)
|
||||||
|
* wait4: required to attempt opening links (which is then blocked)
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* TODO: prevent dbus socket connection before sandbox init - by checking the sandbox settings in zathurarc
|
||||||
|
*
|
||||||
|
* TODO: check requirement of pipe/pipe2 syscalls when dbus is disabled
|
||||||
|
*/
|
||||||
|
|
||||||
/* if (seccomp_rule_add (ctx, SCMP_ACT_ALLOW, SCMP_SYS(prctl), 1, */
|
|
||||||
/* SCMP_CMP(0, SCMP_CMP_EQ, PR_SET_PDEATHSIG)) < 0) */
|
|
||||||
/* goto out; */
|
|
||||||
|
|
||||||
/* when zathura is run on wayland, with X11 server available but blocked, unset the DISPLAY variable */
|
/* when zathura is run on wayland, with X11 server available but blocked, unset the DISPLAY variable */
|
||||||
/* otherwise it will try to connect to X11 using inet socket protocol */
|
/* otherwise it will try to connect to X11 using inet socket protocol */
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
#ifndef ZATHURA_SECCOMP_FILTERS_H
|
#ifndef ZATHURA_SECCOMP_FILTERS_H
|
||||||
#define ZATHURA_SECCOMP_FILTERS_H
|
#define ZATHURA_SECCOMP_FILTERS_H
|
||||||
|
|
||||||
|
#include "zathura.h"
|
||||||
|
|
||||||
/* basic filter */
|
/* basic filter */
|
||||||
/* this mode allows normal use */
|
/* this mode allows normal use */
|
||||||
/* only dangerous syscalls are blacklisted */
|
/* only dangerous syscalls are blacklisted */
|
||||||
|
@ -10,6 +12,6 @@ int seccomp_enable_basic_filter(void);
|
||||||
|
|
||||||
/* strict filter before document parsing */
|
/* strict filter before document parsing */
|
||||||
/* this filter is to be enabled after most of the initialisation of zathura has finished */
|
/* this filter is to be enabled after most of the initialisation of zathura has finished */
|
||||||
int seccomp_enable_strict_filter(void);
|
int seccomp_enable_strict_filter(zathura_t* zathura);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -45,13 +45,11 @@ zathura_image_buffer_create(unsigned int width, unsigned int height)
|
||||||
g_return_val_if_fail(height != 0, NULL);
|
g_return_val_if_fail(height != 0, NULL);
|
||||||
|
|
||||||
unsigned int size = 0;
|
unsigned int size = 0;
|
||||||
if (checked_umul(width, height, &size) == true ||
|
if (checked_umul(width, height, &size) == true || checked_umul(size, 3, &size) == true) {
|
||||||
checked_umul(size, 3, &size) == true) {
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
zathura_image_buffer_t* image_buffer = malloc(sizeof(zathura_image_buffer_t));
|
zathura_image_buffer_t* image_buffer = malloc(sizeof(zathura_image_buffer_t));
|
||||||
|
|
||||||
if (image_buffer == NULL) {
|
if (image_buffer == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -81,25 +79,27 @@ zathura_image_buffer_free(zathura_image_buffer_t* image_buffer)
|
||||||
free(image_buffer);
|
free(image_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
document_information_entry_free(void* data)
|
||||||
|
{
|
||||||
|
zathura_document_information_entry_t* entry = data;
|
||||||
|
zathura_document_information_entry_free(entry);
|
||||||
|
}
|
||||||
|
|
||||||
girara_list_t*
|
girara_list_t*
|
||||||
zathura_document_information_entry_list_new(void)
|
zathura_document_information_entry_list_new(void)
|
||||||
{
|
{
|
||||||
girara_list_t* list = girara_list_new2((girara_free_function_t)
|
return girara_list_new2(document_information_entry_free);
|
||||||
zathura_document_information_entry_free);
|
|
||||||
|
|
||||||
return list;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
zathura_document_information_entry_t*
|
zathura_document_information_entry_t*
|
||||||
zathura_document_information_entry_new(zathura_document_information_type_t type,
|
zathura_document_information_entry_new(zathura_document_information_type_t type, const char* value)
|
||||||
const char* value)
|
|
||||||
{
|
{
|
||||||
if (value == NULL) {
|
if (value == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
zathura_document_information_entry_t* entry =
|
zathura_document_information_entry_t* entry = g_try_malloc0(sizeof(zathura_document_information_entry_t));
|
||||||
g_try_malloc0(sizeof(zathura_document_information_entry_t));
|
|
||||||
if (entry == NULL) {
|
if (entry == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -117,9 +117,6 @@ zathura_document_information_entry_free(zathura_document_information_entry_t* en
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entry->value != NULL) {
|
|
||||||
g_free(entry->value);
|
g_free(entry->value);
|
||||||
}
|
|
||||||
|
|
||||||
g_free(entry);
|
g_free(entry);
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,10 +173,12 @@ zathura_update_view_ppi(zathura_t* zathura)
|
||||||
GdkRectangle monitor_geom;
|
GdkRectangle monitor_geom;
|
||||||
gdk_monitor_get_geometry(monitor, &monitor_geom);
|
gdk_monitor_get_geometry(monitor, &monitor_geom);
|
||||||
|
|
||||||
/* calculate ppi, knowing that 1 inch = 25.4 mm */
|
/* Due to a bug in Gtk, width is sometimes incorrectly reported to be 1mm
|
||||||
if (width_mm == 0) {
|
* see https://gitlab.gnome.org/GNOME/gtk/issues/3115 for details */
|
||||||
|
if (width_mm <= 1) {
|
||||||
girara_debug("cannot calculate PPI: monitor has zero width");
|
girara_debug("cannot calculate PPI: monitor has zero width");
|
||||||
} else {
|
} else {
|
||||||
|
/* calculate ppi, knowing that 1 inch = 25.4 mm */
|
||||||
ppi = monitor_geom.width * 25.4 / width_mm;
|
ppi = monitor_geom.width * 25.4 / width_mm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -430,7 +432,9 @@ zathura_init(zathura_t* zathura)
|
||||||
g_set_prgname("org.pwmt.zathura");
|
g_set_prgname("org.pwmt.zathura");
|
||||||
|
|
||||||
/* load plugins */
|
/* load plugins */
|
||||||
zathura_plugin_manager_load(zathura->plugins.manager);
|
if (zathura_plugin_manager_load(zathura->plugins.manager) == false) {
|
||||||
|
girara_error("Found no plugins. Please install at least one plugin.");
|
||||||
|
}
|
||||||
|
|
||||||
/* configuration */
|
/* configuration */
|
||||||
config_load_default(zathura);
|
config_load_default(zathura);
|
||||||
|
@ -451,7 +455,7 @@ zathura_init(zathura_t* zathura)
|
||||||
break;
|
break;
|
||||||
case ZATHURA_SANDBOX_STRICT:
|
case ZATHURA_SANDBOX_STRICT:
|
||||||
girara_debug("Strict sandbox preventing write and network access.");
|
girara_debug("Strict sandbox preventing write and network access.");
|
||||||
if (seccomp_enable_strict_filter() != 0) {
|
if (seccomp_enable_strict_filter(zathura) != 0) {
|
||||||
girara_error("Failed to initialize strict seccomp filter.");
|
girara_error("Failed to initialize strict seccomp filter.");
|
||||||
goto error_free;
|
goto error_free;
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,6 +90,8 @@ typedef enum {
|
||||||
|
|
||||||
/* forward declaration for types from database.h */
|
/* forward declaration for types from database.h */
|
||||||
typedef struct _ZathuraDatabase zathura_database_t;
|
typedef struct _ZathuraDatabase zathura_database_t;
|
||||||
|
/* forward declaration for types from content-type.h */
|
||||||
|
typedef struct zathura_content_type_context_s zathura_content_type_context_t;
|
||||||
|
|
||||||
struct zathura_s
|
struct zathura_s
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue