mirror of
https://github.com/Rafostar/clapper.git
synced 2025-08-29 23:32:04 +02:00
Compare commits
108 Commits
schmiddi
...
b9e98e2fdb
Author | SHA1 | Date | |
---|---|---|---|
|
b9e98e2fdb | ||
|
555b93451e | ||
|
cdfac76d66 | ||
|
ed13d53db9 | ||
|
acf2b75f27 | ||
|
d9c8534bb7 | ||
|
292b339e8a | ||
|
ddfedddce5 | ||
|
743097060e | ||
|
b0b15cec5c | ||
|
b9a8b28a1f | ||
|
4c8c76c8f7 | ||
|
a5db6f701d | ||
|
4301a9a9fa | ||
|
c21e1c1c6a | ||
|
92e0e22e8b | ||
|
4d5519b42d | ||
|
4a34fb3484 | ||
|
d8ea220aad | ||
|
dc56cb201a | ||
|
07f944fb31 | ||
|
b2e6533c30 | ||
|
7a56fbfff8 | ||
|
7457ffda13 | ||
|
bee2e08fb1 | ||
|
0c1d291006 | ||
|
4002a63e3a | ||
|
ff054743e6 | ||
|
9432156aec | ||
|
47d3ebe693 | ||
|
5f8270f0e8 | ||
|
54f059aaa3 | ||
|
f63e13ed39 | ||
|
daadabba8d | ||
|
225e665aff | ||
|
31564b568b | ||
|
1c376612b8 | ||
|
c4afd8bea1 | ||
|
266c588db9 | ||
|
1c0049ec2b | ||
|
7f326e6875 | ||
|
16430c4c66 | ||
|
9f1102bafd | ||
|
7b4a19659b | ||
|
8fe46d315c | ||
|
b5cc171803 | ||
|
0f929014d5 | ||
|
f3b120f451 | ||
|
c354d31436 | ||
|
c0b360dc0f | ||
|
a6ca0b726c | ||
|
976bcc338f | ||
|
6273446817 | ||
|
72ab32d4ef | ||
|
e9d0d8f345 | ||
|
0b8d359844 | ||
|
4a93bea203 | ||
|
5e2c1a8e30 | ||
|
72c8e4ab84 | ||
|
db61b9c773 | ||
|
682ad6c3c8 | ||
|
749796a12f | ||
|
c557c11e86 | ||
|
a2f67a9bc0 | ||
|
ddc0a4d8f9 | ||
|
92e3e686db | ||
|
9fd87dbbb9 | ||
|
ca15f4760a | ||
|
6ddb53252a | ||
|
b30d53d8ce | ||
|
1527873bcc | ||
|
e23f2acb3e | ||
|
1dfcb218ac | ||
|
b05f0f2b30 | ||
|
dad0d46196 | ||
|
e34f729f62 | ||
|
a97e7d1a96 | ||
|
c6c4fe309b | ||
|
3ef6e9694a | ||
|
d951be7a56 | ||
|
98fdd7c58b | ||
|
147d94088c | ||
|
c7790d9f7b | ||
|
f5731957dc | ||
|
2e3c98d9b4 | ||
|
d09824fb1a | ||
|
366315077e | ||
|
a75184a471 | ||
|
5bd6ba8948 | ||
|
160dbce265 | ||
|
224326857b | ||
|
f9b31c51a7 | ||
|
be1de8bc77 | ||
|
b8a4a90b6c | ||
|
d73f33785d | ||
|
dca8fbd336 | ||
|
681d5b8699 | ||
|
009f272f64 | ||
|
a5bc1b5578 | ||
|
49471882c1 | ||
|
069be30225 | ||
|
5f83d93374 | ||
|
d0a9122833 | ||
|
c29b8871a3 | ||
|
d4d0f9e95e | ||
|
291c6e35f2 | ||
|
69bace7150 | ||
|
401e33b1c0 |
36
.github/workflows/flatpak-nightly.yml
vendored
36
.github/workflows/flatpak-nightly.yml
vendored
@@ -6,32 +6,32 @@ name: "Flatpak Nightly"
|
||||
jobs:
|
||||
flatpak:
|
||||
name: "Flatpak"
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 600
|
||||
container:
|
||||
image: bilelmoussaoui/flatpak-github-actions:gnome-nightly
|
||||
options: --privileged
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [x86_64, aarch64]
|
||||
os: [ubuntu-24.04, ubuntu-24.04-arm]
|
||||
include:
|
||||
- os: ubuntu-24.04
|
||||
arch: x86_64
|
||||
- os: ubuntu-24.04-arm
|
||||
arch: aarch64
|
||||
fail-fast: false
|
||||
runs-on: ${{ matrix.os }}
|
||||
container:
|
||||
image: registry.fedoraproject.org/fedora
|
||||
options: --privileged
|
||||
steps:
|
||||
- name: Prepare
|
||||
run: |
|
||||
dnf install -y git git-lfs dbus-daemon flatpak flatpak-builder libappstream-glib ccache zstd xorg-x11-server-Xvfb
|
||||
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||
flatpak remote-add --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatpakrepo
|
||||
flatpak --system install -y --noninteractive flathub org.freedesktop.Sdk.Extension.rust-stable/${{ matrix.arch }}/24.08
|
||||
flatpak --system install -y --noninteractive flathub org.freedesktop.Sdk.Extension.llvm18/${{ matrix.arch }}/24.08
|
||||
flatpak --system install -y --noninteractive flathub org.flatpak.Builder
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Install Docker
|
||||
run: |
|
||||
dnf -y install docker
|
||||
- name: Setup QEMU
|
||||
id: qemu
|
||||
uses: docker/setup-qemu-action@v3
|
||||
with:
|
||||
platforms: arm64
|
||||
- name: Prepare Runtime
|
||||
run: |
|
||||
flatpak --system install -y --noninteractive flathub org.freedesktop.Sdk.Extension.rust-stable/${{ matrix.arch }}/24.08
|
||||
flatpak --system install -y --noninteractive flathub org.freedesktop.Sdk.Extension.llvm18/${{ matrix.arch }}/24.08
|
||||
- name: Build
|
||||
uses: flatpak/flatpak-github-actions/flatpak-builder@master
|
||||
with:
|
||||
|
29
.github/workflows/flatpak.yml
vendored
29
.github/workflows/flatpak.yml
vendored
@@ -10,28 +10,29 @@ name: "Flatpak"
|
||||
jobs:
|
||||
flatpak:
|
||||
name: "Flatpak"
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 600
|
||||
container:
|
||||
image: bilelmoussaoui/flatpak-github-actions:gnome-47
|
||||
options: --privileged
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [x86_64, aarch64]
|
||||
os: [ubuntu-24.04, ubuntu-24.04-arm]
|
||||
include:
|
||||
- os: ubuntu-24.04
|
||||
arch: x86_64
|
||||
- os: ubuntu-24.04-arm
|
||||
arch: aarch64
|
||||
fail-fast: false
|
||||
runs-on: ${{ matrix.os }}
|
||||
container:
|
||||
image: registry.fedoraproject.org/fedora
|
||||
options: --privileged
|
||||
steps:
|
||||
- name: Prepare
|
||||
run: |
|
||||
dnf install -y git git-lfs dbus-daemon flatpak flatpak-builder libappstream-glib ccache zstd xorg-x11-server-Xvfb
|
||||
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||
flatpak --system install -y --noninteractive flathub org.flatpak.Builder
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Install Docker
|
||||
run: |
|
||||
dnf -y install docker
|
||||
- name: Setup QEMU
|
||||
id: qemu
|
||||
uses: docker/setup-qemu-action@v3
|
||||
with:
|
||||
platforms: arm64
|
||||
- name: Build
|
||||
uses: flatpak/flatpak-github-actions/flatpak-builder@master
|
||||
with:
|
||||
|
31
COPYING-LGPL
31
COPYING-LGPL
@@ -2,7 +2,7 @@
|
||||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
<https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
@@ -55,7 +55,7 @@ modified by someone else and passed on, the recipients should know
|
||||
that what they have is not the original version, so that the original
|
||||
author's reputation will not be affected by problems that might be
|
||||
introduced by others.
|
||||
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of
|
||||
any free program. We wish to make sure that a company cannot
|
||||
effectively restrict the users of a free program by obtaining a
|
||||
@@ -111,7 +111,7 @@ modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, whereas the latter must
|
||||
be combined with the library in order to run.
|
||||
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
@@ -158,7 +158,7 @@ Library.
|
||||
You may charge a fee for the physical act of transferring a copy,
|
||||
and you may at your option offer warranty protection in exchange for a
|
||||
fee.
|
||||
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion
|
||||
of it, thus forming a work based on the Library, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
@@ -216,7 +216,7 @@ instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
@@ -267,7 +267,7 @@ Library will still fall under Section 6.)
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
@@ -329,7 +329,7 @@ restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
@@ -370,7 +370,7 @@ subject to these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties with
|
||||
this License.
|
||||
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
@@ -422,7 +422,7 @@ conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
write to the author to ask for permission. For software which is
|
||||
@@ -456,7 +456,7 @@ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
@@ -484,9 +484,7 @@ convey the exclusion of warranty; and each file should have at least the
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
||||
USA
|
||||
License along with this library; if not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
@@ -495,10 +493,9 @@ school, if any, to sign a "copyright disclaimer" for the library, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||
library `Frob' (a library for tweaking knobs) written by James Random
|
||||
Hacker.
|
||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1990
|
||||
Ty Coon, President of Vice
|
||||
<signature of Moe Ghoul>, 1 April 1990
|
||||
Moe Ghoul, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
|
49
examples/clapper-gtk/audio/simple/python/example.py
Executable file
49
examples/clapper-gtk/audio/simple/python/example.py
Executable file
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import gi
|
||||
gi.require_version('Adw', '1')
|
||||
gi.require_version('Clapper', '0.0')
|
||||
gi.require_version('ClapperGtk', '0.0')
|
||||
gi.require_version('Gtk', '4.0')
|
||||
from gi.repository import Adw, Clapper, ClapperGtk, Gtk
|
||||
|
||||
Clapper.init(None)
|
||||
|
||||
def on_activate(app):
|
||||
# Create our widgets.
|
||||
win = Gtk.ApplicationWindow(application=app, title='Clapper Audio', default_width=640, default_height=96)
|
||||
audio = ClapperGtk.Audio()
|
||||
box = Gtk.Box(valign=Gtk.Align.CENTER, margin_start=8, margin_end=8, spacing=4)
|
||||
prev_btn = ClapperGtk.PreviousItemButton()
|
||||
play_btn = ClapperGtk.TogglePlayButton()
|
||||
next_btn = ClapperGtk.NextItemButton()
|
||||
seek_bar = ClapperGtk.SeekBar()
|
||||
|
||||
# Add media for playback. First media item in queue will be automatically selected.
|
||||
item = Clapper.MediaItem(uri='https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3')
|
||||
audio.props.player.props.queue.add_item(item)
|
||||
|
||||
item = Clapper.MediaItem(uri='https://www.learningcontainer.com/wp-content/uploads/2020/02/Kalimba.mp3')
|
||||
audio.props.player.props.queue.add_item(item)
|
||||
|
||||
# Assemble window.
|
||||
box.append(prev_btn)
|
||||
box.append(play_btn)
|
||||
box.append(next_btn)
|
||||
box.append(seek_bar)
|
||||
audio.set_child(box)
|
||||
win.set_child(audio)
|
||||
win.present()
|
||||
|
||||
# Not too loud. Mind the ears.
|
||||
audio.props.player.props.volume = 0.7
|
||||
|
||||
# Start playback.
|
||||
audio.props.player.play()
|
||||
|
||||
# Create a new application.
|
||||
app = Adw.Application(application_id='com.example.ClapperAudio')
|
||||
app.connect('activate', on_activate)
|
||||
|
||||
# Run the application.
|
||||
app.run(None)
|
17
meson.build
17
meson.build
@@ -1,5 +1,5 @@
|
||||
project('clapper', 'c',
|
||||
version: '0.8.0',
|
||||
version: '0.9.1',
|
||||
meson_version: '>= 0.64.0',
|
||||
license: 'LGPL-2.1-or-later AND GPL-3.0-or-later', # LGPL-2.1+ for libs and gst-plugin, GPL-3.0+ for app
|
||||
default_options: [
|
||||
@@ -10,8 +10,8 @@ project('clapper', 'c',
|
||||
|
||||
glib_req = '>= 2.76.0'
|
||||
gst_req = '>= 1.24.0'
|
||||
gtk4_req = '>= 4.16.0'
|
||||
adw_req = '>= 1.4.0'
|
||||
gtk4_req = '>= 4.10.0'
|
||||
adw_req = '>= 1.5.0'
|
||||
|
||||
clapper_version = meson.project_version().split('-')[0]
|
||||
version_array = clapper_version.split('.')
|
||||
@@ -89,6 +89,12 @@ libadwaita_dep = dependency('libadwaita-1',
|
||||
peas_dep = dependency('libpeas-2',
|
||||
required: false,
|
||||
)
|
||||
cgraph_dep = dependency('libcgraph',
|
||||
required: false,
|
||||
)
|
||||
gvc_dep = dependency('libgvc',
|
||||
required: false,
|
||||
)
|
||||
|
||||
cc = meson.get_compiler('c')
|
||||
libm = cc.find_library('m', required: false)
|
||||
@@ -160,3 +166,8 @@ if build_clapper
|
||||
summary(name, clapper_available_features.contains(name) ? 'Yes' : 'No', section: 'Features')
|
||||
endforeach
|
||||
endif
|
||||
if build_clapperapp
|
||||
foreach name : clapperapp_possible_functionalities
|
||||
summary(name, clapperapp_available_functionalities.contains(name) ? 'Yes' : 'No', section: 'Functionalities')
|
||||
endforeach
|
||||
endif
|
||||
|
@@ -41,6 +41,11 @@ option('enhancers-loader',
|
||||
value: 'enabled',
|
||||
description: 'Ability to load libpeas based plugins that enhance capabilities'
|
||||
)
|
||||
option('pipeline-preview',
|
||||
type: 'feature',
|
||||
value: 'auto',
|
||||
description: 'Ability to preview GStreamer pipeline in clapper-app'
|
||||
)
|
||||
|
||||
# Features
|
||||
option('discoverer',
|
||||
|
@@ -14,6 +14,13 @@
|
||||
"add-ld-path": ".",
|
||||
"no-autodownload": false,
|
||||
"autodelete": false
|
||||
},
|
||||
"com.github.rafostar.Clapper.Enhancers": {
|
||||
"versions": "stable;test;master",
|
||||
"directory": "extensions/clapper/enhancers",
|
||||
"add-ld-path": "lib",
|
||||
"no-autodownload": false,
|
||||
"autodelete": false
|
||||
}
|
||||
},
|
||||
"command": "clapper",
|
||||
@@ -31,7 +38,9 @@
|
||||
"--filesystem=xdg-run/gvfsd",
|
||||
"--own-name=org.mpris.MediaPlayer2.Clapper.*",
|
||||
"--talk-name=org.gtk.vfs.*",
|
||||
"--env=GST_PLUGIN_SYSTEM_PATH=/app/lib/gstreamer-1.0"
|
||||
"--env=GST_PLUGIN_SYSTEM_PATH=/app/lib/gstreamer-1.0",
|
||||
"--env=CLAPPER_ENHANCERS_PATH=/app/extensions/clapper/enhancers/plugins",
|
||||
"--env=PYTHONPATH=/app/extensions/clapper/enhancers/python/site-packages"
|
||||
],
|
||||
"build-options": {
|
||||
"append-path": "/usr/lib/sdk/rust-stable/bin:/usr/lib/sdk/llvm18/bin",
|
||||
@@ -53,11 +62,11 @@
|
||||
"flathub/lib/libdvdnav.json",
|
||||
"flathub/lib/libass.json",
|
||||
"flathub/lib/libmicrodns.json",
|
||||
"flathub/lib/libpeas.json",
|
||||
"testing/dav1d.json",
|
||||
"testing/gstreamer.json",
|
||||
"testing/gst-plugins-rs.json",
|
||||
"testing/yt-dlp.json",
|
||||
"testing/libpeas.json",
|
||||
"testing/graphviz.json",
|
||||
{
|
||||
"name": "clapper",
|
||||
"buildsystem": "meson",
|
||||
@@ -67,11 +76,11 @@
|
||||
"path": "../../."
|
||||
}
|
||||
]
|
||||
},
|
||||
"testing/clapper-enhancers.json"
|
||||
}
|
||||
],
|
||||
"cleanup-commands": [
|
||||
"mkdir -p /app/lib/ffmpeg",
|
||||
"mkdir -p /app/extensions/clapper/enhancers",
|
||||
"ln -s /lib/$FLATPAK_ARCH-linux-*/gstreamer-1.0/libgstpipewire.so /app/lib/gstreamer-1.0/"
|
||||
]
|
||||
}
|
||||
|
@@ -10,6 +10,13 @@
|
||||
"add-ld-path": ".",
|
||||
"no-autodownload": false,
|
||||
"autodelete": false
|
||||
},
|
||||
"com.github.rafostar.Clapper.Enhancers": {
|
||||
"versions": "stable;test;master",
|
||||
"directory": "extensions/clapper/enhancers",
|
||||
"add-ld-path": "lib",
|
||||
"no-autodownload": false,
|
||||
"autodelete": false
|
||||
}
|
||||
},
|
||||
"command": "clapper",
|
||||
@@ -27,7 +34,9 @@
|
||||
"--filesystem=xdg-run/gvfsd",
|
||||
"--own-name=org.mpris.MediaPlayer2.Clapper.*",
|
||||
"--talk-name=org.gtk.vfs.*",
|
||||
"--env=GST_PLUGIN_SYSTEM_PATH=/app/lib/gstreamer-1.0"
|
||||
"--env=GST_PLUGIN_SYSTEM_PATH=/app/lib/gstreamer-1.0",
|
||||
"--env=CLAPPER_ENHANCERS_PATH=/app/extensions/clapper/enhancers/plugins",
|
||||
"--env=PYTHONPATH=/app/extensions/clapper/enhancers/python/site-packages"
|
||||
],
|
||||
"modules": [
|
||||
"flathub/shared-modules/gudev/gudev.json",
|
||||
@@ -40,9 +49,9 @@
|
||||
"flathub/lib/libass.json",
|
||||
"flathub/lib/uchardet.json",
|
||||
"flathub/lib/libmicrodns.json",
|
||||
"testing/gstreamer_stable.json",
|
||||
"testing/yt-dlp.json",
|
||||
"testing/libpeas.json",
|
||||
"flathub/lib/libpeas.json",
|
||||
"flathub/gstreamer-1.0/gstreamer.json",
|
||||
"testing/graphviz.json",
|
||||
{
|
||||
"name": "clapper",
|
||||
"buildsystem": "meson",
|
||||
@@ -52,11 +61,11 @@
|
||||
"path": "../../."
|
||||
}
|
||||
]
|
||||
},
|
||||
"testing/clapper-enhancers.json"
|
||||
}
|
||||
],
|
||||
"cleanup-commands": [
|
||||
"mkdir -p /app/lib/ffmpeg",
|
||||
"mkdir -p /app/extensions/clapper/enhancers",
|
||||
"ln -s /lib/$FLATPAK_ARCH-linux-*/gstreamer-1.0/libgstpipewire.so /app/lib/gstreamer-1.0/"
|
||||
]
|
||||
}
|
||||
|
Submodule pkgs/flatpak/flathub updated: 49f279076f...3a672be190
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"name": "clapper-enhancers",
|
||||
"buildsystem": "meson",
|
||||
"config-opts": [
|
||||
"-Dauto_features=enabled"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "git",
|
||||
"url": "https://github.com/Rafostar/clapper-enhancers.git",
|
||||
"branch": "main"
|
||||
}
|
||||
]
|
||||
}
|
38
pkgs/flatpak/testing/graphviz.json
Normal file
38
pkgs/flatpak/testing/graphviz.json
Normal file
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"name": "graphviz",
|
||||
"buildsystem": "autotools",
|
||||
"config-opts": [
|
||||
"--without-x",
|
||||
"--without-gtk",
|
||||
"--without-gtkgl",
|
||||
"--without-gtkglext",
|
||||
"--without-gdk",
|
||||
"--without-gdk-pixbuf",
|
||||
"--without-qt",
|
||||
"--disable-static",
|
||||
"--disable-sharp",
|
||||
"--disable-go",
|
||||
"--disable-guile",
|
||||
"--disable-java",
|
||||
"--disable-javascript",
|
||||
"--disable-lua",
|
||||
"--disable-perl",
|
||||
"--disable-php",
|
||||
"--disable-python",
|
||||
"--disable-r",
|
||||
"--disable-ruby",
|
||||
"--disable-tcl"
|
||||
],
|
||||
"cleanup": [
|
||||
"/bin",
|
||||
"/share/man",
|
||||
"/share/graphviz"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "archive",
|
||||
"url": "https://gitlab.com/api/v4/projects/4207231/packages/generic/graphviz-releases/12.2.1/graphviz-12.2.1.tar.gz",
|
||||
"sha256": "242bc18942eebda6db4039f108f387ec97856fc91ba47f21e89341c34b554df8"
|
||||
}
|
||||
]
|
||||
}
|
@@ -1,99 +0,0 @@
|
||||
{
|
||||
"name": "gstreamer",
|
||||
"buildsystem": "meson",
|
||||
"config-opts": [
|
||||
"--buildtype=release",
|
||||
"--wrap-mode=nodownload",
|
||||
|
||||
"-Dbase=enabled",
|
||||
"-Dgood=enabled",
|
||||
"-Dbad=enabled",
|
||||
"-Dugly=enabled",
|
||||
"-Dlibav=enabled",
|
||||
"-Dvaapi=enabled",
|
||||
"-Dsharp=disabled",
|
||||
"-Drs=disabled",
|
||||
"-Dpython=disabled",
|
||||
"-Ddevtools=disabled",
|
||||
"-Dges=disabled",
|
||||
"-Drtsp_server=disabled",
|
||||
"-Dgst-examples=disabled",
|
||||
"-Dqt5=disabled",
|
||||
"-Dtests=disabled",
|
||||
"-Dexamples=disabled",
|
||||
"-Dintrospection=enabled",
|
||||
"-Ddoc=disabled",
|
||||
"-Dgtk_doc=disabled",
|
||||
"-Dgpl=enabled",
|
||||
|
||||
"-Dgstreamer:benchmarks=disabled",
|
||||
"-Dgstreamer:gobject-cast-checks=disabled",
|
||||
"-Dgstreamer:glib-asserts=disabled",
|
||||
"-Dgstreamer:glib-checks=disabled",
|
||||
"-Dgstreamer:extra-checks=disabled",
|
||||
|
||||
"-Dgst-plugins-base:gobject-cast-checks=disabled",
|
||||
"-Dgst-plugins-base:glib-asserts=disabled",
|
||||
"-Dgst-plugins-base:glib-checks=disabled",
|
||||
"-Dgst-plugins-base:gl_api=opengl,gles2",
|
||||
"-Dgst-plugins-base:gl_platform=egl,glx",
|
||||
|
||||
"-Dgst-plugins-good:gobject-cast-checks=disabled",
|
||||
"-Dgst-plugins-good:glib-asserts=disabled",
|
||||
"-Dgst-plugins-good:glib-checks=disabled",
|
||||
"-Dgst-plugins-good:gtk3=disabled",
|
||||
|
||||
"-Dgst-plugins-bad:gobject-cast-checks=disabled",
|
||||
"-Dgst-plugins-bad:glib-asserts=disabled",
|
||||
"-Dgst-plugins-bad:glib-checks=disabled",
|
||||
"-Dgst-plugins-bad:extra-checks=disabled",
|
||||
"-Dgst-plugins-bad:vulkan=disabled",
|
||||
"-Dgst-plugins-bad:webrtc=disabled",
|
||||
"-Dgst-plugins-bad:wasapi=disabled",
|
||||
"-Dgst-plugins-bad:wasapi2=disabled",
|
||||
"-Dgst-plugins-bad:winks=disabled",
|
||||
"-Dgst-plugins-bad:winscreencap=disabled",
|
||||
"-Dgst-plugins-bad:assrender=enabled",
|
||||
"-Dgst-plugins-bad:nvcodec=enabled",
|
||||
"-Dgst-plugins-bad:v4l2codecs=enabled",
|
||||
"-Dgst-plugins-bad:va=enabled",
|
||||
|
||||
"-Dgst-plugins-ugly:gobject-cast-checks=disabled",
|
||||
"-Dgst-plugins-ugly:glib-asserts=disabled",
|
||||
"-Dgst-plugins-ugly:glib-checks=disabled",
|
||||
"-Dgst-plugins-ugly:mpeg2dec=enabled"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "git",
|
||||
"url": "https://gitlab.freedesktop.org/gstreamer/gstreamer.git",
|
||||
"tag": "1.24.9",
|
||||
"commit": "b309f90bfde36e6d175b70bfa0c941f2829dd6a5",
|
||||
"disable-submodules": true
|
||||
},
|
||||
{
|
||||
"type": "patch",
|
||||
"path": "../flathub/gstreamer-1.0/gst-libav-stop-caching-codecs.patch"
|
||||
},
|
||||
{
|
||||
"type": "patch",
|
||||
"path": "../flathub/gstreamer-1.0/gst-plugins-base-autodetect-subtitle-text-encoding.patch"
|
||||
},
|
||||
{
|
||||
"type": "patch",
|
||||
"path": "../flathub/gstreamer-1.0/gst-plugins-good-matroska-fix-attachments-detection.patch"
|
||||
},
|
||||
{
|
||||
"type": "patch",
|
||||
"path": "../flathub/gstreamer-1.0/gst-plugins-good-dashdemux2-play-last-subfragment.patch"
|
||||
},
|
||||
{
|
||||
"type": "patch",
|
||||
"path": "../flathub/gstreamer-1.0/gst-plugins-bad-dashdemux-sidx-range-download.patch"
|
||||
},
|
||||
{
|
||||
"type": "patch",
|
||||
"path": "../flathub/gstreamer-1.0/gst-plugins-bad-dashdemux-improve-initial-representation-selection.patch"
|
||||
}
|
||||
]
|
||||
}
|
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"name": "yt-dlp",
|
||||
"buildsystem": "simple",
|
||||
"build-commands": [
|
||||
"pip3 install -v --root-user-action=ignore --no-deps --prefix=/app *.whl"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://files.pythonhosted.org/packages/bb/68/548f9819b41d53561d4f3d39588111cf39993c066b6e5300b4ae118eb2e6/yt_dlp-2024.10.22-py3-none-any.whl",
|
||||
"sha256": "ba166602ebe22a220e4dc1ead45bf00eb469ed812b22f4fb8bb54734f9b02084",
|
||||
"x-checker-data": {
|
||||
"type": "pypi",
|
||||
"name": "yt-dlp",
|
||||
"packagetype": "bdist_wheel"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
@@ -22,29 +22,24 @@
|
||||
#include <clapper/clapper.h>
|
||||
#include <adwaita.h>
|
||||
|
||||
#include "clapper-app-about-window.h"
|
||||
#include "clapper-app-about-dialog.h"
|
||||
|
||||
GtkWidget *
|
||||
clapper_app_about_window_new (GtkApplication *gtk_app)
|
||||
clapper_app_about_dialog_new (void)
|
||||
{
|
||||
AdwAboutWindow *about;
|
||||
GtkWindow *window;
|
||||
AdwAboutDialog *about;
|
||||
GString *string;
|
||||
gchar *gst_ver, *debug_info;
|
||||
|
||||
about = ADW_ABOUT_WINDOW (adw_about_window_new_from_appdata (
|
||||
about = ADW_ABOUT_DIALOG (adw_about_dialog_new_from_appdata (
|
||||
CLAPPER_APP_RESOURCE_PREFIX "/data/metainfo/" CLAPPER_APP_ID ".metainfo.xml",
|
||||
NULL));
|
||||
window = gtk_application_get_active_window (gtk_app);
|
||||
|
||||
gtk_window_set_modal (GTK_WINDOW (about), TRUE);
|
||||
gtk_window_set_transient_for (GTK_WINDOW (about), window);
|
||||
|
||||
/* Also show development versions */
|
||||
adw_about_window_set_version (about, CLAPPER_VERSION_S);
|
||||
adw_about_dialog_set_version (about, CLAPPER_VERSION_S);
|
||||
|
||||
/* TRANSLATORS: Put your name(s) here for credits or leave untranslated */
|
||||
adw_about_window_set_translator_credits (about, _("translator-credits"));
|
||||
adw_about_dialog_set_translator_credits (about, _("translator-credits"));
|
||||
|
||||
string = g_string_new (NULL);
|
||||
|
||||
@@ -66,7 +61,7 @@ clapper_app_about_window_new (GtkApplication *gtk_app)
|
||||
g_free (gst_ver);
|
||||
|
||||
debug_info = g_string_free_and_steal (string);
|
||||
adw_about_window_set_debug_info (about, debug_info);
|
||||
adw_about_dialog_set_debug_info (about, debug_info);
|
||||
g_free (debug_info);
|
||||
|
||||
return GTK_WIDGET (about);
|
@@ -24,6 +24,6 @@
|
||||
G_BEGIN_DECLS
|
||||
|
||||
G_GNUC_INTERNAL
|
||||
GtkWidget * clapper_app_about_window_new (GtkApplication *gtk_app);
|
||||
GtkWidget * clapper_app_about_dialog_new (void);
|
||||
|
||||
G_END_DECLS
|
@@ -28,7 +28,7 @@
|
||||
#include "clapper-app-uri-dialog.h"
|
||||
#include "clapper-app-info-window.h"
|
||||
#include "clapper-app-preferences-window.h"
|
||||
#include "clapper-app-about-window.h"
|
||||
#include "clapper-app-about-dialog.h"
|
||||
#include "clapper-app-utils.h"
|
||||
|
||||
#define PERCENTAGE_ROUND(a) (round ((gdouble) a / 0.01) * 0.01)
|
||||
@@ -41,6 +41,7 @@ struct _ClapperAppApplication
|
||||
GtkApplication parent;
|
||||
|
||||
GSettings *settings;
|
||||
GCancellable *cancellable;
|
||||
|
||||
gboolean need_init_state;
|
||||
};
|
||||
@@ -61,6 +62,12 @@ struct ClapperPluginData
|
||||
struct ClapperPluginFeatureData features[10];
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ClapperAppApplication *app;
|
||||
guint id;
|
||||
} ClapperAppWindowData;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const gchar *action;
|
||||
@@ -317,6 +324,19 @@ _assemble_initial_state (GtkWindow *window)
|
||||
g_object_unref (builder);
|
||||
}
|
||||
|
||||
static void
|
||||
_show_error_dialog (GError *error, GtkWindow *parent)
|
||||
{
|
||||
AdwDialog *dialog;
|
||||
|
||||
dialog = adw_alert_dialog_new ("Error", error->message);
|
||||
adw_alert_dialog_add_response (ADW_ALERT_DIALOG (dialog), "close", _("Close"));
|
||||
adw_alert_dialog_set_default_response (ADW_ALERT_DIALOG (dialog), "close");
|
||||
adw_alert_dialog_set_close_response (ADW_ALERT_DIALOG (dialog), "close");
|
||||
|
||||
adw_dialog_present (dialog, GTK_WIDGET (parent));
|
||||
}
|
||||
|
||||
static void
|
||||
add_files (GSimpleAction *action, GVariant *param, gpointer user_data)
|
||||
{
|
||||
@@ -395,14 +415,112 @@ show_info (GSimpleAction *action, GVariant *param, gpointer user_data)
|
||||
gtk_window_present (GTK_WINDOW (info_window));
|
||||
}
|
||||
|
||||
static void
|
||||
_launch_pipeline_cb (GtkFileLauncher *launcher,
|
||||
GAsyncResult *res, ClapperAppWindowData *win_data)
|
||||
{
|
||||
GError *error = NULL;
|
||||
|
||||
if (!gtk_file_launcher_launch_finish (launcher, res, &error)) {
|
||||
if (error->domain != GTK_DIALOG_ERROR || error->code != GTK_DIALOG_ERROR_DISMISSED) {
|
||||
GtkWindow *window;
|
||||
|
||||
GST_ERROR ("Could not launch pipeline preview, reason: %s",
|
||||
GST_STR_NULL (error->message));
|
||||
|
||||
if ((window = gtk_application_get_window_by_id (
|
||||
GTK_APPLICATION (win_data->app), win_data->id)))
|
||||
_show_error_dialog (error, window);
|
||||
}
|
||||
g_error_free (error);
|
||||
}
|
||||
g_free (win_data);
|
||||
}
|
||||
|
||||
static void
|
||||
_show_pipeline_cb (GObject *source G_GNUC_UNUSED,
|
||||
GAsyncResult *res, ClapperAppWindowData *win_data)
|
||||
{
|
||||
GTask *task = G_TASK (res);
|
||||
GtkWindow *window;
|
||||
GFile *svg_file;
|
||||
GError *error = NULL;
|
||||
|
||||
svg_file = (GFile *) g_task_propagate_pointer (task, &error);
|
||||
window = gtk_application_get_window_by_id (
|
||||
GTK_APPLICATION (win_data->app), win_data->id);
|
||||
|
||||
if (error) {
|
||||
if (error->domain != G_IO_ERROR || error->code != G_IO_ERROR_CANCELLED) {
|
||||
GST_ERROR ("Could not create pipeline graph file, reason: %s",
|
||||
GST_STR_NULL (error->message));
|
||||
if (window)
|
||||
_show_error_dialog (error, window);
|
||||
}
|
||||
g_error_free (error);
|
||||
g_free (win_data);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (window) {
|
||||
GtkFileLauncher *launcher = gtk_file_launcher_new (svg_file);
|
||||
|
||||
#if GTK_CHECK_VERSION(4,12,0)
|
||||
gtk_file_launcher_set_always_ask (launcher, TRUE);
|
||||
#endif
|
||||
|
||||
gtk_file_launcher_launch (launcher, window, NULL,
|
||||
(GAsyncReadyCallback) _launch_pipeline_cb, win_data);
|
||||
g_object_unref (launcher);
|
||||
} else {
|
||||
g_free (win_data);
|
||||
}
|
||||
|
||||
g_object_unref (svg_file);
|
||||
}
|
||||
|
||||
static void
|
||||
show_pipeline (GSimpleAction *action, GVariant *param, gpointer user_data)
|
||||
{
|
||||
ClapperAppApplication *self = CLAPPER_APP_APPLICATION_CAST (user_data);
|
||||
GtkApplication *gtk_app = GTK_APPLICATION (self);
|
||||
GtkWindow *window;
|
||||
ClapperAppWindowData *win_data;
|
||||
|
||||
window = gtk_application_get_active_window (gtk_app);
|
||||
|
||||
while (window && !CLAPPER_APP_IS_WINDOW (window))
|
||||
window = gtk_window_get_transient_for (window);
|
||||
|
||||
if (G_UNLIKELY (window == NULL))
|
||||
return;
|
||||
|
||||
if (self->cancellable) {
|
||||
g_cancellable_cancel (self->cancellable);
|
||||
g_object_unref (self->cancellable);
|
||||
}
|
||||
self->cancellable = g_cancellable_new ();
|
||||
|
||||
win_data = g_new (ClapperAppWindowData, 1);
|
||||
win_data->app = self;
|
||||
win_data->id = gtk_application_window_get_id (GTK_APPLICATION_WINDOW (window));
|
||||
|
||||
clapper_app_utils_create_pipeline_svg_file_async (
|
||||
clapper_app_window_get_player (CLAPPER_APP_WINDOW (window)),
|
||||
self->cancellable, (GAsyncReadyCallback) _show_pipeline_cb, win_data);
|
||||
}
|
||||
|
||||
static void
|
||||
show_about (GSimpleAction *action, GVariant *param, gpointer user_data)
|
||||
{
|
||||
GtkApplication *gtk_app = GTK_APPLICATION (user_data);
|
||||
GtkWidget *about_window;
|
||||
GtkWindow *window;
|
||||
GtkWidget *about_dialog;
|
||||
|
||||
about_window = clapper_app_about_window_new (gtk_app);
|
||||
gtk_window_present (GTK_WINDOW (about_window));
|
||||
window = gtk_application_get_active_window (gtk_app);
|
||||
about_dialog = clapper_app_about_dialog_new ();
|
||||
adw_dialog_present (ADW_DIALOG (about_dialog), GTK_WIDGET (window));
|
||||
}
|
||||
|
||||
GApplication *
|
||||
@@ -524,18 +642,6 @@ clapper_app_application_command_line (GApplication *app, GApplicationCommandLine
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_is_claps_file (GFile *file)
|
||||
{
|
||||
gchar *basename = g_file_get_basename (file);
|
||||
gboolean is_claps;
|
||||
|
||||
is_claps = (basename && g_str_has_suffix (basename, ".claps"));
|
||||
g_free (basename);
|
||||
|
||||
return is_claps;
|
||||
}
|
||||
|
||||
static void
|
||||
add_item_from_file (GFile *file, ClapperQueue *queue)
|
||||
{
|
||||
@@ -548,51 +654,6 @@ add_item_from_file (GFile *file, ClapperQueue *queue)
|
||||
gst_object_unref (item);
|
||||
}
|
||||
|
||||
static void
|
||||
add_items_from_claps_file (GFile *file, ClapperQueue *queue)
|
||||
{
|
||||
GDataInputStream *dstream = NULL;
|
||||
GFileInputStream *stream;
|
||||
GError *error = NULL;
|
||||
gchar *line;
|
||||
|
||||
if (!(stream = g_file_read (file, NULL, &error)))
|
||||
goto finish;
|
||||
|
||||
dstream = g_data_input_stream_new (G_INPUT_STREAM (stream));
|
||||
|
||||
while ((line = g_data_input_stream_read_line (
|
||||
dstream, NULL, NULL, &error))) {
|
||||
g_strstrip (line);
|
||||
|
||||
if (strlen (line) > 0) {
|
||||
GFile *tmp_file = gst_uri_is_valid (line)
|
||||
? g_file_new_for_uri (line)
|
||||
: g_file_new_for_path (line);
|
||||
|
||||
if (_is_claps_file (tmp_file))
|
||||
add_items_from_claps_file (tmp_file, queue);
|
||||
else
|
||||
add_item_from_file (tmp_file, queue);
|
||||
|
||||
g_object_unref (tmp_file);
|
||||
}
|
||||
|
||||
g_free (line);
|
||||
}
|
||||
|
||||
finish:
|
||||
if (error) {
|
||||
GST_ERROR ("Could not read \".claps\" file, reason: %s", error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
if (stream) {
|
||||
g_input_stream_close (G_INPUT_STREAM (stream), NULL, NULL);
|
||||
g_object_unref (stream);
|
||||
}
|
||||
g_clear_object (&dstream);
|
||||
}
|
||||
|
||||
static void
|
||||
add_item_with_subtitles (GFile *media_file,
|
||||
GFile *subs_file, ClapperQueue *queue)
|
||||
@@ -661,12 +722,8 @@ clapper_app_application_open (GApplication *app,
|
||||
if (!handled) {
|
||||
gint i;
|
||||
|
||||
for (i = 0; i < n_files; ++i) {
|
||||
if (_is_claps_file (files[i]))
|
||||
add_items_from_claps_file (files[i], queue);
|
||||
else
|
||||
add_item_from_file (files[i], queue);
|
||||
}
|
||||
for (i = 0; i < n_files; ++i)
|
||||
add_item_from_file (files[i], queue);
|
||||
}
|
||||
|
||||
add_only = (g_strcmp0 (hint, "add-only") == 0);
|
||||
@@ -712,6 +769,7 @@ clapper_app_application_constructed (GObject *object)
|
||||
{ "clear-queue", clear_queue, NULL, NULL, NULL },
|
||||
{ "new-window", new_window, NULL, NULL, NULL },
|
||||
{ "info", show_info, NULL, NULL, NULL },
|
||||
{ "pipeline", show_pipeline, NULL, NULL, NULL },
|
||||
{ "preferences", show_preferences, NULL, NULL, NULL },
|
||||
{ "about", show_about, NULL, NULL, NULL },
|
||||
};
|
||||
@@ -720,6 +778,7 @@ clapper_app_application_constructed (GObject *object)
|
||||
{ "app.add-uri", { "<Control>u", NULL, NULL }},
|
||||
{ "app.new-window", { "<Control>n", NULL, NULL }},
|
||||
{ "app.info", { "<Control>i", NULL, NULL }},
|
||||
{ "app.pipeline", { "<Control><Shift>p", NULL, NULL }},
|
||||
{ "app.preferences", { "<Control>comma", NULL, NULL }},
|
||||
{ "app.about", { "F1", NULL, NULL }},
|
||||
{ "win.toggle-fullscreen", { "F11", "f", NULL }},
|
||||
@@ -754,6 +813,19 @@ clapper_app_application_constructed (GObject *object)
|
||||
G_OBJECT_CLASS (parent_class)->constructed (object);
|
||||
}
|
||||
|
||||
static void
|
||||
clapper_app_application_dispose (GObject *object)
|
||||
{
|
||||
ClapperAppApplication *self = CLAPPER_APP_APPLICATION_CAST (object);
|
||||
|
||||
if (self->cancellable) {
|
||||
g_cancellable_cancel (self->cancellable);
|
||||
g_clear_object (&self->cancellable);
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
clapper_app_application_finalize (GObject *object)
|
||||
{
|
||||
@@ -777,6 +849,7 @@ clapper_app_application_class_init (ClapperAppApplicationClass *klass)
|
||||
"Clapper App Application");
|
||||
|
||||
gobject_class->constructed = clapper_app_application_constructed;
|
||||
gobject_class->dispose = clapper_app_application_dispose;
|
||||
gobject_class->finalize = clapper_app_application_finalize;
|
||||
|
||||
gtk_application_class->window_removed = clapper_app_application_window_removed;
|
||||
|
@@ -19,6 +19,7 @@
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib-object.h>
|
||||
#include <gio/gio.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
@@ -72,6 +72,43 @@ _open_subtitles_cb (GtkFileDialog *dialog, GAsyncResult *result, ClapperMediaIte
|
||||
gst_object_unref (item); // Borrowed reference
|
||||
}
|
||||
|
||||
static void
|
||||
_on_select_file_dir_finish (GFile *file, AdwActionRow *action_row, GError *error)
|
||||
{
|
||||
if (G_LIKELY (error == NULL)) {
|
||||
gchar *path = g_file_get_path (file);
|
||||
|
||||
adw_action_row_set_subtitle (action_row, path);
|
||||
g_free (path);
|
||||
} else {
|
||||
if (error->domain != GTK_DIALOG_ERROR || error->code != GTK_DIALOG_ERROR_DISMISSED) {
|
||||
g_printerr ("Error: %s\n",
|
||||
(error->message) ? error->message : "Could not open file dialog");
|
||||
}
|
||||
g_error_free (error);
|
||||
}
|
||||
g_clear_object (&file);
|
||||
g_object_unref (action_row); // Borrowed reference
|
||||
}
|
||||
|
||||
static void
|
||||
_select_file_cb (GtkFileDialog *dialog, GAsyncResult *result, AdwActionRow *action_row)
|
||||
{
|
||||
GError *error = NULL;
|
||||
GFile *file = gtk_file_dialog_open_finish (dialog, result, &error);
|
||||
|
||||
_on_select_file_dir_finish (file, action_row, error);
|
||||
}
|
||||
|
||||
static void
|
||||
_select_dir_cb (GtkFileDialog *dialog, GAsyncResult *result, AdwActionRow *action_row)
|
||||
{
|
||||
GError *error = NULL;
|
||||
GFile *file = gtk_file_dialog_select_folder_finish (dialog, result, &error);
|
||||
|
||||
_on_select_file_dir_finish (file, action_row, error);
|
||||
}
|
||||
|
||||
static void
|
||||
_dialog_add_mime_types (GtkFileDialog *dialog, const gchar *filter_name,
|
||||
const gchar *const *mime_types)
|
||||
@@ -144,3 +181,35 @@ clapper_app_file_dialog_open_subtitles (GtkApplication *gtk_app, ClapperMediaIte
|
||||
|
||||
g_object_unref (dialog);
|
||||
}
|
||||
|
||||
void
|
||||
clapper_app_file_dialog_select_prefs_file (GtkApplication *gtk_app, AdwActionRow *action_row)
|
||||
{
|
||||
GtkWindow *window = gtk_application_get_active_window (gtk_app);
|
||||
GtkFileDialog *dialog = gtk_file_dialog_new ();
|
||||
|
||||
gtk_file_dialog_set_modal (dialog, TRUE);
|
||||
gtk_file_dialog_set_title (dialog, "Select File");
|
||||
|
||||
gtk_file_dialog_open (dialog, window, NULL,
|
||||
(GAsyncReadyCallback) _select_file_cb,
|
||||
g_object_ref (action_row));
|
||||
|
||||
g_object_unref (dialog);
|
||||
}
|
||||
|
||||
void
|
||||
clapper_app_file_dialog_select_prefs_dir (GtkApplication *gtk_app, AdwActionRow *action_row)
|
||||
{
|
||||
GtkWindow *window = gtk_application_get_active_window (gtk_app);
|
||||
GtkFileDialog *dialog = gtk_file_dialog_new ();
|
||||
|
||||
gtk_file_dialog_set_modal (dialog, TRUE);
|
||||
gtk_file_dialog_set_title (dialog, "Select Folder");
|
||||
|
||||
gtk_file_dialog_select_folder (dialog, window, NULL,
|
||||
(GAsyncReadyCallback) _select_dir_cb,
|
||||
g_object_ref (action_row));
|
||||
|
||||
g_object_unref (dialog);
|
||||
}
|
||||
|
@@ -19,6 +19,7 @@
|
||||
|
||||
#include <glib.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <adwaita.h>
|
||||
#include <clapper/clapper.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
@@ -29,4 +30,10 @@ void clapper_app_file_dialog_open_files (GtkApplication *gtk_app);
|
||||
G_GNUC_INTERNAL
|
||||
void clapper_app_file_dialog_open_subtitles (GtkApplication *gtk_app, ClapperMediaItem *item);
|
||||
|
||||
G_GNUC_INTERNAL
|
||||
void clapper_app_file_dialog_select_prefs_file (GtkApplication *gtk_app, AdwActionRow *action_row);
|
||||
|
||||
G_GNUC_INTERNAL
|
||||
void clapper_app_file_dialog_select_prefs_dir (GtkApplication *gtk_app, AdwActionRow *action_row);
|
||||
|
||||
G_END_DECLS
|
||||
|
@@ -36,6 +36,8 @@ struct _ClapperAppInfoWindow
|
||||
GtkWidget *astreams_list;
|
||||
GtkWidget *sstreams_list;
|
||||
|
||||
GtkWidget *pipeline_button;
|
||||
|
||||
ClapperPlayer *player;
|
||||
};
|
||||
|
||||
@@ -174,6 +176,10 @@ clapper_app_info_window_init (ClapperAppInfoWindow *self)
|
||||
gtk_widget_remove_css_class (self->vstreams_list, "view");
|
||||
gtk_widget_remove_css_class (self->astreams_list, "view");
|
||||
gtk_widget_remove_css_class (self->sstreams_list, "view");
|
||||
|
||||
#ifdef HAVE_GRAPHVIZ
|
||||
gtk_widget_set_visible (self->pipeline_button, TRUE);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -256,6 +262,7 @@ clapper_app_info_window_class_init (ClapperAppInfoWindowClass *klass)
|
||||
gtk_widget_class_bind_template_child (widget_class, ClapperAppInfoWindow, vstreams_list);
|
||||
gtk_widget_class_bind_template_child (widget_class, ClapperAppInfoWindow, astreams_list);
|
||||
gtk_widget_class_bind_template_child (widget_class, ClapperAppInfoWindow, sstreams_list);
|
||||
gtk_widget_class_bind_template_child (widget_class, ClapperAppInfoWindow, pipeline_button);
|
||||
|
||||
gtk_widget_class_bind_template_callback (widget_class, media_duration_closure);
|
||||
gtk_widget_class_bind_template_callback (widget_class, playback_element_name_closure);
|
||||
|
@@ -23,6 +23,7 @@
|
||||
|
||||
#include "clapper-app-preferences-window.h"
|
||||
#include "clapper-app-application.h"
|
||||
#include "clapper-app-file-dialog.h"
|
||||
#include "clapper-app-utils.h"
|
||||
|
||||
#define GST_CAT_DEFAULT clapper_app_preferences_window_debug
|
||||
@@ -41,6 +42,14 @@ struct _ClapperAppPreferencesWindow
|
||||
AdwSpinRow *subtitle_offset_spin_row;
|
||||
GtkFontDialogButton *font_dialog_button;
|
||||
|
||||
GtkStack *enhancers_stack;
|
||||
GtkWidget *browse_enhancers_page;
|
||||
GtkWidget *no_enhancers_page;
|
||||
|
||||
AdwNavigationPage *enhancers_subpage;
|
||||
AdwComboRow *enhancers_combo_row;
|
||||
AdwPreferencesGroup *enhancer_config_group;
|
||||
|
||||
AdwNavigationPage *plugins_subpage;
|
||||
AdwComboRow *plugins_combo_row;
|
||||
AdwComboRow *features_combo_row;
|
||||
@@ -48,6 +57,8 @@ struct _ClapperAppPreferencesWindow
|
||||
|
||||
GSettings *settings;
|
||||
|
||||
GList *enhancer_pspec_rows;
|
||||
|
||||
GList *features;
|
||||
GtkStringList *plugins_list;
|
||||
|
||||
@@ -67,6 +78,19 @@ typedef struct
|
||||
gboolean updated;
|
||||
} ClapperAppPreferencesIterRanksData;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GSettings *settings;
|
||||
const gchar *key;
|
||||
} ClapperAppPreferencesResetData;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GSettings *settings;
|
||||
GParamSpec *pspec;
|
||||
guint flag;
|
||||
} ClapperAppPreferencesFlagMapData;
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
@@ -76,6 +100,347 @@ enum
|
||||
|
||||
static GParamSpec *param_specs[PROP_LAST] = { NULL, };
|
||||
|
||||
static void
|
||||
_flag_map_data_free (ClapperAppPreferencesFlagMapData *data)
|
||||
{
|
||||
GST_TRACE ("Destroying flag map data: %p", data);
|
||||
g_object_unref (data->settings);
|
||||
g_free (data);
|
||||
}
|
||||
|
||||
static void
|
||||
_reset_button_closure (ClapperAppPreferencesResetData *data, GClosure *closure)
|
||||
{
|
||||
GST_TRACE ("Destroying reset button data: %p", data);
|
||||
g_object_unref (data->settings);
|
||||
g_free (data);
|
||||
}
|
||||
|
||||
static void
|
||||
_reset_button_clicked_cb (GtkButton *button, ClapperAppPreferencesResetData *data)
|
||||
{
|
||||
g_settings_reset (data->settings, data->key);
|
||||
}
|
||||
|
||||
static void
|
||||
file_selection_row_activated_cb (AdwActionRow *action_row, GParamSpec *pspec)
|
||||
{
|
||||
GtkApplication *gtk_app;
|
||||
GtkWidget *window;
|
||||
|
||||
if (!(window = gtk_widget_get_ancestor (GTK_WIDGET (action_row), GTK_TYPE_WINDOW))) {
|
||||
GST_ERROR ("Could not get a hold of parent window");
|
||||
return;
|
||||
}
|
||||
|
||||
gtk_app = gtk_window_get_application (GTK_WINDOW (window));
|
||||
|
||||
if (pspec->flags & CLAPPER_ENHANCER_PARAM_FILEPATH)
|
||||
clapper_app_file_dialog_select_prefs_file (gtk_app, action_row);
|
||||
else
|
||||
clapper_app_file_dialog_select_prefs_dir (gtk_app, action_row);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_get_enum_mapping (GValue *value, GVariant *variant, GParamSpec *pspec)
|
||||
{
|
||||
GEnumClass *enum_class = G_ENUM_CLASS (g_type_class_peek (pspec->value_type));
|
||||
const gchar *selected_str = g_variant_get_string (variant, NULL);
|
||||
guint i, selected = 0;
|
||||
|
||||
for (i = 0; i < enum_class->n_values; ++i) {
|
||||
if (g_strcmp0 (selected_str, enum_class->values[i].value_nick) == 0) {
|
||||
selected = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_value_set_uint (value, selected);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static GVariant *
|
||||
_set_enum_mapping (GValue *value, GVariantType *exp_type, GParamSpec *pspec)
|
||||
{
|
||||
GEnumClass *enum_class = G_ENUM_CLASS (g_type_class_peek (pspec->value_type));
|
||||
guint selected = g_value_get_uint (value);
|
||||
|
||||
if (G_UNLIKELY (selected == GTK_INVALID_LIST_POSITION))
|
||||
selected = 0;
|
||||
|
||||
return g_variant_new_string (enum_class->values[selected].value_nick);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_get_flag_mapping (GValue *value, GVariant *variant, ClapperAppPreferencesFlagMapData *data)
|
||||
{
|
||||
guint flags = g_settings_get_flags (data->settings, data->pspec->name);
|
||||
|
||||
g_value_set_boolean (value, (flags & data->flag));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static GVariant *
|
||||
_set_flag_mapping (GValue *value, GVariantType *exp_type, ClapperAppPreferencesFlagMapData *data)
|
||||
{
|
||||
GFlagsClass *flags_class = G_FLAGS_CLASS (g_type_class_peek (data->pspec->value_type));
|
||||
GStrvBuilder *builder;
|
||||
GVariant *variant;
|
||||
gchar **strv;
|
||||
gboolean active = g_value_get_boolean (value);
|
||||
guint i, flags = g_settings_get_flags (data->settings, data->pspec->name);
|
||||
|
||||
if (active)
|
||||
flags |= data->flag;
|
||||
else
|
||||
flags &= ~(data->flag);
|
||||
|
||||
builder = g_strv_builder_new ();
|
||||
|
||||
for (i = 0; i < flags_class->n_values; ++i) {
|
||||
if (flags & flags_class->values[i].value)
|
||||
g_strv_builder_add (builder, flags_class->values[i].value_nick);
|
||||
}
|
||||
|
||||
strv = g_strv_builder_end (builder);
|
||||
g_strv_builder_unref (builder);
|
||||
|
||||
variant = g_variant_new_strv ((const gchar *const *) strv, -1);
|
||||
g_strfreev (strv);
|
||||
|
||||
return variant;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_add_enhancer_config_row (ClapperAppPreferencesWindow *self, GParamSpec *pspec,
|
||||
GSettings *enhancer_settings)
|
||||
{
|
||||
GtkWidget *row = NULL, *reset_button;
|
||||
ClapperAppPreferencesResetData *reset_data;
|
||||
const gchar *bind_prop = NULL;
|
||||
gboolean is_enum = FALSE, is_flags = FALSE;
|
||||
|
||||
switch (pspec->value_type) {
|
||||
case G_TYPE_BOOLEAN:{
|
||||
row = adw_switch_row_new ();
|
||||
break;
|
||||
}
|
||||
case G_TYPE_INT:{
|
||||
GParamSpecInt *p = (GParamSpecInt *) pspec;
|
||||
row = adw_spin_row_new_with_range (p->minimum, p->maximum, 1);
|
||||
break;
|
||||
}
|
||||
case G_TYPE_UINT:{
|
||||
GParamSpecUInt *p = (GParamSpecUInt *) pspec;
|
||||
row = adw_spin_row_new_with_range (p->minimum, p->maximum, 1);
|
||||
break;
|
||||
}
|
||||
case G_TYPE_DOUBLE:{
|
||||
GParamSpecDouble *p = (GParamSpecDouble *) pspec;
|
||||
row = adw_spin_row_new_with_range (p->minimum, p->maximum, 0.25);
|
||||
break;
|
||||
}
|
||||
case G_TYPE_STRING:{
|
||||
if (pspec->flags & (CLAPPER_ENHANCER_PARAM_FILEPATH | CLAPPER_ENHANCER_PARAM_DIRPATH)) {
|
||||
GtkWidget *image;
|
||||
|
||||
image = gtk_image_new_from_icon_name ("document-open-symbolic");
|
||||
gtk_widget_set_margin_end (image, 10); // matches other rows
|
||||
|
||||
row = adw_action_row_new ();
|
||||
adw_action_row_add_suffix (ADW_ACTION_ROW (row), image);
|
||||
adw_action_row_set_activatable_widget (ADW_ACTION_ROW (row), image);
|
||||
|
||||
g_signal_connect (row, "activated",
|
||||
G_CALLBACK (file_selection_row_activated_cb), pspec);
|
||||
} else {
|
||||
row = adw_entry_row_new ();
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:{
|
||||
if ((is_enum = G_IS_PARAM_SPEC_ENUM (pspec))) {
|
||||
GtkExpression *expression;
|
||||
AdwEnumListModel *enum_model;
|
||||
|
||||
row = adw_combo_row_new ();
|
||||
expression = gtk_property_expression_new (ADW_TYPE_ENUM_LIST_ITEM, NULL, "nick");
|
||||
adw_combo_row_set_expression (ADW_COMBO_ROW (row), expression);
|
||||
|
||||
enum_model = adw_enum_list_model_new (pspec->value_type);
|
||||
adw_combo_row_set_model (ADW_COMBO_ROW (row), G_LIST_MODEL (enum_model));
|
||||
|
||||
gtk_expression_unref (expression);
|
||||
g_object_unref (enum_model);
|
||||
break;
|
||||
} else if ((is_flags = G_IS_PARAM_SPEC_FLAGS (pspec))) {
|
||||
GFlagsClass *flags_class = G_FLAGS_CLASS (g_type_class_peek (pspec->value_type));
|
||||
guint i;
|
||||
|
||||
row = adw_expander_row_new ();
|
||||
|
||||
for (i = 0; i < flags_class->n_values; ++i) {
|
||||
GtkWidget *flag_row = adw_switch_row_new ();
|
||||
ClapperAppPreferencesFlagMapData *fm_data;
|
||||
|
||||
adw_preferences_row_set_title (ADW_PREFERENCES_ROW (flag_row),
|
||||
flags_class->values[i].value_nick);
|
||||
|
||||
fm_data = g_new (ClapperAppPreferencesFlagMapData, 1);
|
||||
fm_data->settings = g_object_ref (enhancer_settings);
|
||||
fm_data->pspec = pspec;
|
||||
fm_data->flag = flags_class->values[i].value;
|
||||
|
||||
GST_TRACE ("Created flag map data: %p", fm_data);
|
||||
|
||||
g_settings_bind_with_mapping (enhancer_settings, pspec->name, flag_row,
|
||||
"active", G_SETTINGS_BIND_DEFAULT,
|
||||
(GSettingsBindGetMapping) _get_flag_mapping,
|
||||
(GSettingsBindSetMapping) _set_flag_mapping,
|
||||
fm_data, (GDestroyNotify) _flag_map_data_free);
|
||||
|
||||
adw_expander_row_add_row (ADW_EXPANDER_ROW (row), flag_row);
|
||||
}
|
||||
break;
|
||||
}
|
||||
g_warning ("Unsupported enhancer \"%s\" property type: %s",
|
||||
pspec->name, g_type_name (pspec->value_type));
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
reset_button = gtk_button_new_from_icon_name ("view-refresh-symbolic");
|
||||
gtk_widget_set_tooltip_text (reset_button, _("Restore default"));
|
||||
|
||||
gtk_widget_set_halign (reset_button, GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_valign (reset_button, GTK_ALIGN_CENTER);
|
||||
gtk_widget_add_css_class (reset_button, "circular");
|
||||
|
||||
gtk_widget_set_tooltip_text (row, g_param_spec_get_blurb (pspec));
|
||||
|
||||
adw_preferences_row_set_title (ADW_PREFERENCES_ROW (row), g_param_spec_get_nick (pspec));
|
||||
|
||||
if (ADW_IS_SWITCH_ROW (row)) {
|
||||
bind_prop = "active";
|
||||
} else if (ADW_IS_SPIN_ROW (row)) {
|
||||
bind_prop = "value";
|
||||
adw_spin_row_set_numeric (ADW_SPIN_ROW (row), TRUE);
|
||||
} else if (ADW_IS_ENTRY_ROW (row)) {
|
||||
bind_prop = "text";
|
||||
} else if (ADW_IS_COMBO_ROW (row)) {
|
||||
bind_prop = "selected";
|
||||
} else if (ADW_IS_ACTION_ROW (row)) {
|
||||
bind_prop = "subtitle";
|
||||
} else if (!is_flags) { // In case of flags we bind individual widgets
|
||||
g_assert_not_reached ();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (ADW_IS_ENTRY_ROW (row))
|
||||
adw_entry_row_add_prefix (ADW_ENTRY_ROW (row), reset_button);
|
||||
else if (ADW_IS_ACTION_ROW (row))
|
||||
adw_action_row_add_prefix (ADW_ACTION_ROW (row), reset_button);
|
||||
else if (ADW_IS_EXPANDER_ROW (row))
|
||||
adw_expander_row_add_prefix (ADW_EXPANDER_ROW (row), reset_button);
|
||||
|
||||
if (is_enum) {
|
||||
g_settings_bind_with_mapping (enhancer_settings, pspec->name, row,
|
||||
bind_prop, G_SETTINGS_BIND_DEFAULT,
|
||||
(GSettingsBindGetMapping) _get_enum_mapping,
|
||||
(GSettingsBindSetMapping) _set_enum_mapping,
|
||||
pspec, NULL);
|
||||
} else if (!is_flags) {
|
||||
g_settings_bind (enhancer_settings, pspec->name, row,
|
||||
bind_prop, G_SETTINGS_BIND_DEFAULT);
|
||||
}
|
||||
|
||||
reset_data = g_new (ClapperAppPreferencesResetData, 1);
|
||||
reset_data->settings = g_object_ref (enhancer_settings);
|
||||
reset_data->key = pspec->name;
|
||||
|
||||
GST_TRACE ("Created reset button data: %p", reset_data);
|
||||
|
||||
g_signal_connect_data (reset_button, "clicked",
|
||||
G_CALLBACK (_reset_button_clicked_cb), reset_data,
|
||||
(GClosureNotify) _reset_button_closure, G_CONNECT_DEFAULT);
|
||||
|
||||
adw_preferences_group_add (self->enhancer_config_group, row);
|
||||
self->enhancer_pspec_rows = g_list_append (self->enhancer_pspec_rows, row);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
selected_enhancer_changed_cb (AdwComboRow *combo_row,
|
||||
GParamSpec *pspec G_GNUC_UNUSED, ClapperAppPreferencesWindow *self)
|
||||
{
|
||||
guint selected = adw_combo_row_get_selected (combo_row);
|
||||
|
||||
/* Remove old rows */
|
||||
if (self->enhancer_pspec_rows) {
|
||||
GList *el;
|
||||
|
||||
for (el = self->enhancer_pspec_rows; el; el = g_list_next (el))
|
||||
adw_preferences_group_remove (self->enhancer_config_group, GTK_WIDGET (el->data));
|
||||
|
||||
g_clear_list (&self->enhancer_pspec_rows, NULL);
|
||||
}
|
||||
|
||||
/* Add new rows */
|
||||
if (selected != GTK_INVALID_LIST_POSITION) {
|
||||
ClapperEnhancerProxyList *proxies = clapper_get_global_enhancer_proxies ();
|
||||
ClapperEnhancerProxy *proxy = clapper_enhancer_proxy_list_peek_proxy (proxies, selected);
|
||||
GParamSpec **pspecs;
|
||||
guint n_pspecs;
|
||||
gboolean has_props = FALSE;
|
||||
|
||||
if ((pspecs = clapper_enhancer_proxy_get_target_properties (proxy, &n_pspecs))) {
|
||||
GSettings *enhancer_settings = NULL;
|
||||
guint i;
|
||||
|
||||
for (i = 0; i < n_pspecs; ++i) {
|
||||
if (pspecs[i]->flags & CLAPPER_ENHANCER_PARAM_GLOBAL) {
|
||||
if (!enhancer_settings)
|
||||
enhancer_settings = clapper_enhancer_proxy_get_settings (proxy);
|
||||
if (enhancer_settings)
|
||||
has_props |= _add_enhancer_config_row (self, pspecs[i], enhancer_settings);
|
||||
}
|
||||
}
|
||||
|
||||
g_clear_object (&enhancer_settings);
|
||||
}
|
||||
|
||||
if (!has_props) {
|
||||
GtkWidget *row = adw_action_row_new ();
|
||||
|
||||
adw_preferences_row_set_title (ADW_PREFERENCES_ROW (row), _("No configurable properties"));
|
||||
adw_preferences_group_add (self->enhancer_config_group, row);
|
||||
self->enhancer_pspec_rows = g_list_append (self->enhancer_pspec_rows, row);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
enhancers_config_activated_cb (AdwActionRow *action_row, ClapperAppPreferencesWindow *self)
|
||||
{
|
||||
/* If no model set yet */
|
||||
if (!adw_combo_row_get_model (self->enhancers_combo_row)) {
|
||||
ClapperEnhancerProxyList *proxies = clapper_get_global_enhancer_proxies ();
|
||||
|
||||
adw_combo_row_set_model (self->enhancers_combo_row, G_LIST_MODEL (proxies));
|
||||
adw_combo_row_set_selected (self->enhancers_combo_row, GTK_INVALID_LIST_POSITION);
|
||||
|
||||
GST_DEBUG ("Populated names combo row in enhancers subpage");
|
||||
|
||||
if (clapper_enhancer_proxy_list_get_n_proxies (proxies) > 0)
|
||||
gtk_stack_set_visible_child (self->enhancers_stack, self->browse_enhancers_page);
|
||||
else
|
||||
gtk_stack_set_visible_child (self->enhancers_stack, self->no_enhancers_page);
|
||||
}
|
||||
|
||||
adw_preferences_window_push_subpage (ADW_PREFERENCES_WINDOW (self), self->enhancers_subpage);
|
||||
}
|
||||
|
||||
/* Sort by plugin name and if the same, sort by element name */
|
||||
static gint
|
||||
_compare_plugins_cb (gconstpointer ptr_a, gconstpointer ptr_b)
|
||||
@@ -301,6 +666,12 @@ _make_plugin_features_string_list (ClapperAppPreferencesWindow *self, const gcha
|
||||
return features_list;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
list_has_selection_closure (ClapperAppPreferencesWindow *self, guint selected)
|
||||
{
|
||||
return (selected != GTK_INVALID_LIST_POSITION);
|
||||
}
|
||||
|
||||
static GtkStringList *
|
||||
ranking_features_model_closure (ClapperAppPreferencesWindow *self, GtkStringObject *string_obj)
|
||||
{
|
||||
@@ -543,6 +914,7 @@ clapper_app_preferences_window_finalize (GObject *object)
|
||||
|
||||
g_object_unref (self->settings);
|
||||
|
||||
g_clear_list (&self->enhancer_pspec_rows, NULL);
|
||||
g_clear_object (&self->plugins_list);
|
||||
|
||||
if (self->features)
|
||||
@@ -598,6 +970,14 @@ clapper_app_preferences_window_class_init (ClapperAppPreferencesWindowClass *kla
|
||||
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, subtitle_offset_spin_row);
|
||||
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, font_dialog_button);
|
||||
|
||||
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, enhancers_stack);
|
||||
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, browse_enhancers_page);
|
||||
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, no_enhancers_page);
|
||||
|
||||
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, enhancers_subpage);
|
||||
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, enhancers_combo_row);
|
||||
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, enhancer_config_group);
|
||||
|
||||
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, plugins_subpage);
|
||||
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, plugins_combo_row);
|
||||
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, features_combo_row);
|
||||
@@ -605,9 +985,13 @@ clapper_app_preferences_window_class_init (ClapperAppPreferencesWindowClass *kla
|
||||
|
||||
gtk_widget_class_bind_template_callback (widget_class, seek_method_name_closure);
|
||||
|
||||
gtk_widget_class_bind_template_callback (widget_class, enhancers_config_activated_cb);
|
||||
gtk_widget_class_bind_template_callback (widget_class, selected_enhancer_changed_cb);
|
||||
|
||||
gtk_widget_class_bind_template_callback (widget_class, plugin_ranking_activated_cb);
|
||||
gtk_widget_class_bind_template_callback (widget_class, plugin_ranking_unrealize_cb);
|
||||
|
||||
gtk_widget_class_bind_template_callback (widget_class, list_has_selection_closure);
|
||||
gtk_widget_class_bind_template_callback (widget_class, ranking_features_model_closure);
|
||||
gtk_widget_class_bind_template_callback (widget_class, add_override_button_sensitive_closure);
|
||||
gtk_widget_class_bind_template_callback (widget_class, add_override_button_clicked_cb);
|
||||
|
@@ -25,30 +25,28 @@
|
||||
#include "clapper-app-utils.h"
|
||||
|
||||
static void
|
||||
_entry_text_changed_cb (GtkEntry *entry,
|
||||
GParamSpec *pspec G_GNUC_UNUSED, AdwMessageDialog *dialog)
|
||||
_entry_text_changed_cb (AdwEntryRow *entry,
|
||||
GParamSpec *pspec G_GNUC_UNUSED, AdwAlertDialog *dialog)
|
||||
{
|
||||
GtkEntryBuffer *buffer = gtk_entry_get_buffer (entry);
|
||||
guint text_length = gtk_entry_buffer_get_length (buffer);
|
||||
const gchar *text = gtk_editable_get_text (GTK_EDITABLE (entry));
|
||||
gboolean enabled = FALSE;
|
||||
|
||||
if (text_length > 0) {
|
||||
const gchar *text = gtk_entry_buffer_get_text (buffer);
|
||||
enabled = (text && gst_uri_is_valid (text));
|
||||
if (text && *text != '\0') {
|
||||
enabled = gst_uri_is_valid (text);
|
||||
}
|
||||
|
||||
adw_message_dialog_set_response_enabled (dialog, "add", enabled);
|
||||
adw_alert_dialog_set_response_enabled (dialog, "add", enabled);
|
||||
}
|
||||
|
||||
static void
|
||||
_open_uri_cb (AdwMessageDialog *dialog, GAsyncResult *result, GtkApplication *gtk_app)
|
||||
_open_uri_cb (AdwAlertDialog *dialog, GAsyncResult *result, GtkApplication *gtk_app)
|
||||
{
|
||||
const gchar *response = adw_message_dialog_choose_finish (dialog, result);
|
||||
const gchar *response = adw_alert_dialog_choose_finish (dialog, result);
|
||||
|
||||
if (strcmp (response, "add") == 0) {
|
||||
GtkWidget *extra_child = adw_message_dialog_get_extra_child (dialog);
|
||||
GtkEntryBuffer *buffer = gtk_entry_get_buffer (GTK_ENTRY (extra_child));
|
||||
const gchar *text = gtk_entry_buffer_get_text (buffer);
|
||||
GtkWidget *extra_child = adw_alert_dialog_get_extra_child (dialog);
|
||||
AdwEntryRow *entry_row = ADW_ENTRY_ROW (gtk_list_box_get_row_at_index (GTK_LIST_BOX (extra_child), 0));
|
||||
const gchar *text = gtk_editable_get_text (GTK_EDITABLE (entry_row));
|
||||
GFile **files = NULL;
|
||||
gint n_files = 0;
|
||||
|
||||
@@ -60,16 +58,15 @@ _open_uri_cb (AdwMessageDialog *dialog, GAsyncResult *result, GtkApplication *gt
|
||||
}
|
||||
|
||||
static void
|
||||
_read_text_cb (GdkClipboard *clipboard, GAsyncResult *result, GtkWidget *extra_child)
|
||||
_read_text_cb (GdkClipboard *clipboard, GAsyncResult *result, GtkWidget *entry_row)
|
||||
{
|
||||
GtkEntry *entry = GTK_ENTRY (extra_child);
|
||||
GError *error = NULL;
|
||||
gchar *text = gdk_clipboard_read_text_finish (clipboard, result, &error);
|
||||
|
||||
if (G_LIKELY (error == NULL)) {
|
||||
if (gst_uri_is_valid (text)) {
|
||||
gtk_editable_set_text (GTK_EDITABLE (entry), text);
|
||||
gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1);
|
||||
gtk_editable_set_text (GTK_EDITABLE (entry_row), text);
|
||||
gtk_editable_select_region (GTK_EDITABLE (entry_row), 0, -1);
|
||||
}
|
||||
} else {
|
||||
/* Common error when clipboard is empty or has unsupported content.
|
||||
@@ -89,30 +86,28 @@ clapper_app_uri_dialog_open_uri (GtkApplication *gtk_app)
|
||||
{
|
||||
GtkWindow *window = gtk_application_get_active_window (gtk_app);
|
||||
GtkBuilder *builder;
|
||||
AdwMessageDialog *dialog;
|
||||
GtkWidget *extra_child;
|
||||
AdwAlertDialog *dialog;
|
||||
GtkWidget *entry_row;
|
||||
GdkDisplay *display;
|
||||
|
||||
builder = gtk_builder_new_from_resource (
|
||||
CLAPPER_APP_RESOURCE_PREFIX "/ui/clapper-app-uri-dialog.ui");
|
||||
|
||||
dialog = ADW_MESSAGE_DIALOG (gtk_builder_get_object (builder, "dialog"));
|
||||
gtk_window_set_transient_for (GTK_WINDOW (dialog), window);
|
||||
dialog = ADW_ALERT_DIALOG (gtk_builder_get_object (builder, "dialog"));
|
||||
entry_row = GTK_WIDGET (gtk_builder_get_object (builder, "entry_row"));
|
||||
|
||||
extra_child = adw_message_dialog_get_extra_child (dialog);
|
||||
|
||||
g_signal_connect (GTK_ENTRY (extra_child), "notify::text",
|
||||
g_signal_connect (GTK_EDITABLE (entry_row), "notify::text",
|
||||
G_CALLBACK (_entry_text_changed_cb), dialog);
|
||||
|
||||
if ((display = gdk_display_get_default ())) {
|
||||
GdkClipboard *clipboard = gdk_display_get_clipboard (display);
|
||||
|
||||
gdk_clipboard_read_text_async (clipboard, NULL,
|
||||
(GAsyncReadyCallback) _read_text_cb, extra_child);
|
||||
(GAsyncReadyCallback) _read_text_cb, entry_row);
|
||||
}
|
||||
|
||||
/* NOTE: Dialog will automatically unref itself after response */
|
||||
adw_message_dialog_choose (dialog, NULL,
|
||||
adw_alert_dialog_choose (dialog, GTK_WIDGET (window), NULL,
|
||||
(GAsyncReadyCallback) _open_uri_cb,
|
||||
gtk_app);
|
||||
|
||||
|
@@ -23,6 +23,11 @@
|
||||
#include "clapper-app-utils.h"
|
||||
#include "clapper-app-media-item-box.h"
|
||||
|
||||
#ifdef HAVE_GRAPHVIZ
|
||||
#include <graphviz/cgraph.h>
|
||||
#include <graphviz/gvc.h>
|
||||
#endif
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
#include <windows.h>
|
||||
#ifdef HAVE_WIN_PROCESS_THREADS_API
|
||||
@@ -527,3 +532,187 @@ clapper_app_utils_make_element (const gchar *string)
|
||||
|
||||
return gst_element_factory_make (string, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* _get_tmp_dir:
|
||||
* @subdir: (nullable): an optional subdirectory
|
||||
*
|
||||
* Returns: (transfer full): a newly constructed #GFile
|
||||
*/
|
||||
static inline GFile *
|
||||
_get_tmp_dir (const gchar *subdir)
|
||||
{
|
||||
/* XXX: System tmp directory does not work within containers such as Flatpak
|
||||
* for our usage with file launcher, so make our own temp in app data dir */
|
||||
return g_file_new_build_filename (
|
||||
g_get_user_data_dir (), CLAPPER_APP_ID, "tmp", subdir, NULL);
|
||||
}
|
||||
|
||||
#ifdef HAVE_GRAPHVIZ
|
||||
static GFile *
|
||||
_create_tmp_subdir (const gchar *subdir, GCancellable *cancellable, GError **error)
|
||||
{
|
||||
GFile *tmp_dir;
|
||||
GError *my_error = NULL;
|
||||
|
||||
tmp_dir = _get_tmp_dir (subdir);
|
||||
|
||||
if (!g_file_make_directory_with_parents (tmp_dir, cancellable, &my_error)) {
|
||||
if (my_error->domain != G_IO_ERROR || my_error->code != G_IO_ERROR_EXISTS) {
|
||||
*error = g_error_copy (my_error);
|
||||
g_clear_object (&tmp_dir); // return NULL
|
||||
}
|
||||
g_error_free (my_error);
|
||||
}
|
||||
|
||||
return tmp_dir;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
_create_pipeline_svg_file_in_thread (GTask *task, GObject *source G_GNUC_UNUSED,
|
||||
ClapperPlayer *player, GCancellable *cancellable)
|
||||
{
|
||||
GFile *tmp_file = NULL;
|
||||
GError *error = NULL;
|
||||
|
||||
#ifdef HAVE_GRAPHVIZ
|
||||
GFile *tmp_subdir;
|
||||
Agraph_t *graph;
|
||||
GVC_t *gvc;
|
||||
gchar *path, *template = NULL, *dot_data = NULL, *img_data = NULL;
|
||||
gint fd;
|
||||
gsize size = 0;
|
||||
|
||||
if (!(tmp_subdir = _create_tmp_subdir ("pipelines", cancellable, &error)))
|
||||
goto finish;
|
||||
|
||||
path = g_file_get_path (tmp_subdir);
|
||||
g_object_unref (tmp_subdir);
|
||||
|
||||
template = g_build_filename (path, "pipeline-XXXXXX.svg", NULL);
|
||||
g_free (path);
|
||||
|
||||
fd = g_mkstemp (template); // Modifies template to actual filename
|
||||
|
||||
if (G_UNLIKELY (fd == -1)) {
|
||||
g_set_error (&error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
|
||||
"Could not open temp file for writing");
|
||||
goto finish;
|
||||
}
|
||||
|
||||
dot_data = clapper_player_make_pipeline_graph (player, GST_DEBUG_GRAPH_SHOW_ALL);
|
||||
|
||||
if (g_cancellable_is_cancelled (cancellable))
|
||||
goto close_and_finish;
|
||||
|
||||
graph = agmemread (dot_data);
|
||||
|
||||
gvc = gvContext ();
|
||||
gvLayout (gvc, graph, "dot");
|
||||
|
||||
#ifdef HAVE_GVC_13
|
||||
gvRenderData (gvc, graph, "svg", &img_data, &size);
|
||||
#else
|
||||
{
|
||||
guint tmp_size = 0; // Temporary uint to satisfy older API
|
||||
gvRenderData (gvc, graph, "svg", &img_data, &tmp_size);
|
||||
size = tmp_size;
|
||||
}
|
||||
#endif
|
||||
|
||||
agclose (graph);
|
||||
gvFreeContext (gvc);
|
||||
|
||||
if (g_cancellable_is_cancelled (cancellable))
|
||||
goto close_and_finish;
|
||||
|
||||
if (write (fd, img_data, size) != -1) {
|
||||
tmp_file = g_file_new_for_path (template);
|
||||
} else {
|
||||
g_set_error (&error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
|
||||
"Could not write data to temp file");
|
||||
}
|
||||
|
||||
close_and_finish:
|
||||
/* Always close the file IO */
|
||||
if (G_UNLIKELY (close (fd) == -1))
|
||||
GST_ERROR ("Could not close temp file!");
|
||||
|
||||
finish:
|
||||
g_free (template);
|
||||
g_free (dot_data);
|
||||
g_free (img_data);
|
||||
#else
|
||||
g_set_error (&error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
|
||||
"Cannot create graph file when compiled without Graphviz");
|
||||
#endif
|
||||
|
||||
if (tmp_file)
|
||||
g_task_return_pointer (task, tmp_file, (GDestroyNotify) g_object_unref);
|
||||
else
|
||||
g_task_return_error (task, error);
|
||||
}
|
||||
|
||||
void
|
||||
clapper_app_utils_create_pipeline_svg_file_async (ClapperPlayer *player,
|
||||
GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
|
||||
{
|
||||
GTask *task;
|
||||
|
||||
task = g_task_new (NULL, cancellable, callback, user_data);
|
||||
g_task_set_task_data (task, gst_object_ref (player), (GDestroyNotify) gst_object_unref);
|
||||
g_task_run_in_thread (task, (GTaskThreadFunc) _create_pipeline_svg_file_in_thread);
|
||||
|
||||
g_object_unref (task);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_delete_dir_recursive (GFile *dir, GError **error)
|
||||
{
|
||||
GFileEnumerator *dir_enum;
|
||||
|
||||
if ((dir_enum = g_file_enumerate_children (dir,
|
||||
G_FILE_ATTRIBUTE_STANDARD_NAME "," G_FILE_ATTRIBUTE_STANDARD_TYPE,
|
||||
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, error))) {
|
||||
while (TRUE) {
|
||||
GFileInfo *info = NULL;
|
||||
GFile *child = NULL;
|
||||
|
||||
if (!g_file_enumerator_iterate (dir_enum, &info,
|
||||
&child, NULL, error) || !info)
|
||||
break;
|
||||
|
||||
if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY) {
|
||||
if (!_delete_dir_recursive (child, error))
|
||||
break;
|
||||
} else if (!g_file_delete (child, NULL, error)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_object_unref (dir_enum);
|
||||
}
|
||||
|
||||
if (*error != NULL)
|
||||
return FALSE;
|
||||
|
||||
return g_file_delete (dir, NULL, error);
|
||||
}
|
||||
|
||||
void
|
||||
clapper_app_utils_delete_tmp_dir (void)
|
||||
{
|
||||
GFile *tmp_dir = _get_tmp_dir (NULL);
|
||||
GError *error = NULL;
|
||||
|
||||
if (!_delete_dir_recursive (tmp_dir, &error)) {
|
||||
if (error->domain != G_IO_ERROR || error->code != G_IO_ERROR_NOT_FOUND) {
|
||||
GST_ERROR ("Could not remove temp dir, reason: %s",
|
||||
GST_STR_NULL (error->message));
|
||||
}
|
||||
g_error_free (error);
|
||||
}
|
||||
|
||||
g_object_unref (tmp_dir);
|
||||
}
|
||||
|
@@ -84,4 +84,10 @@ void clapper_app_utils_iterate_plugin_feature_ranks (GSettings *settings, Clappe
|
||||
G_GNUC_INTERNAL
|
||||
GstElement * clapper_app_utils_make_element (const gchar *string);
|
||||
|
||||
G_GNUC_INTERNAL
|
||||
void clapper_app_utils_create_pipeline_svg_file_async (ClapperPlayer *player, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data);
|
||||
|
||||
G_GNUC_INTERNAL
|
||||
void clapper_app_utils_delete_tmp_dir (void);
|
||||
|
||||
G_END_DECLS
|
||||
|
@@ -86,9 +86,7 @@ typedef struct
|
||||
gint64 last_tick;
|
||||
} ClapperAppWindowResizeData;
|
||||
|
||||
#if CLAPPER_HAVE_MPRIS
|
||||
static guint16 instance_count = 0;
|
||||
#endif
|
||||
|
||||
static inline GQuark
|
||||
clapper_app_window_extra_options_get_quark (void)
|
||||
@@ -233,7 +231,7 @@ video_map_cb (GtkWidget *widget, ClapperAppWindow *self)
|
||||
|
||||
GST_TRACE_OBJECT (self, "Video map");
|
||||
|
||||
player = clapper_gtk_video_get_player (CLAPPER_GTK_VIDEO_CAST (self->video));
|
||||
player = clapper_gtk_av_get_player (CLAPPER_GTK_AV_CAST (self->video));
|
||||
|
||||
g_signal_connect (player, "notify::volume",
|
||||
G_CALLBACK (_player_volume_changed_cb), self);
|
||||
@@ -254,7 +252,7 @@ video_unmap_cb (GtkWidget *widget, ClapperAppWindow *self)
|
||||
|
||||
GST_TRACE_OBJECT (self, "Video unmap");
|
||||
|
||||
player = clapper_gtk_video_get_player (CLAPPER_GTK_VIDEO_CAST (self->video));
|
||||
player = clapper_gtk_av_get_player (CLAPPER_GTK_AV_CAST (self->video));
|
||||
|
||||
g_signal_handlers_disconnect_by_func (player, _player_volume_changed_cb, self);
|
||||
g_signal_handlers_disconnect_by_func (player, _player_speed_changed_cb, self);
|
||||
@@ -526,7 +524,7 @@ drag_update_cb (GtkGestureDrag *drag,
|
||||
static inline void
|
||||
_alter_volume (ClapperAppWindow *self, gdouble dy)
|
||||
{
|
||||
ClapperPlayer *player = clapper_gtk_video_get_player (CLAPPER_GTK_VIDEO_CAST (self->video));
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (CLAPPER_GTK_AV_CAST (self->video));
|
||||
gdouble volume = clapper_player_get_volume (player);
|
||||
|
||||
/* We do not want for volume to change too suddenly */
|
||||
@@ -549,7 +547,7 @@ _alter_volume (ClapperAppWindow *self, gdouble dy)
|
||||
static inline void
|
||||
_alter_speed (ClapperAppWindow *self, gdouble dx)
|
||||
{
|
||||
ClapperPlayer *player = clapper_gtk_video_get_player (CLAPPER_GTK_VIDEO_CAST (self->video));
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (CLAPPER_GTK_AV_CAST (self->video));
|
||||
gdouble speed = clapper_player_get_speed (player);
|
||||
|
||||
speed -= dx * 0.02;
|
||||
@@ -573,8 +571,7 @@ _begin_seek_operation (ClapperAppWindow *self)
|
||||
if (self->seeking)
|
||||
return FALSE;
|
||||
|
||||
player = clapper_gtk_video_get_player (
|
||||
CLAPPER_GTK_VIDEO_CAST (self->video));
|
||||
player = clapper_gtk_av_get_player (CLAPPER_GTK_AV_CAST (self->video));
|
||||
queue = clapper_player_get_queue (player);
|
||||
current_item = clapper_queue_get_current_item (queue);
|
||||
|
||||
@@ -602,8 +599,8 @@ static void
|
||||
_end_seek_operation (ClapperAppWindow *self)
|
||||
{
|
||||
if (self->seeking && self->current_duration > 0) {
|
||||
ClapperPlayer *player = clapper_gtk_video_get_player (
|
||||
CLAPPER_GTK_VIDEO_CAST (self->video));
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (
|
||||
CLAPPER_GTK_AV_CAST (self->video));
|
||||
|
||||
clapper_player_seek_custom (player, self->pending_position,
|
||||
g_settings_get_int (self->settings, "seek-method"));
|
||||
@@ -766,8 +763,8 @@ _handle_seek_key_press (ClapperAppWindow *self, gboolean forward)
|
||||
static void
|
||||
_handle_chapter_key_press (ClapperAppWindow *self, gboolean forward)
|
||||
{
|
||||
ClapperPlayer *player = clapper_gtk_video_get_player (
|
||||
CLAPPER_GTK_VIDEO_CAST (self->video));
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (
|
||||
CLAPPER_GTK_AV_CAST (self->video));
|
||||
ClapperQueue *queue = clapper_player_get_queue (player);
|
||||
ClapperMediaItem *current_item = clapper_queue_get_current_item (queue);
|
||||
ClapperTimeline *timeline;
|
||||
@@ -857,8 +854,8 @@ _handle_chapter_key_press (ClapperAppWindow *self, gboolean forward)
|
||||
static void
|
||||
_handle_item_key_press (ClapperAppWindow *self, gboolean forward)
|
||||
{
|
||||
ClapperPlayer *player = clapper_gtk_video_get_player (
|
||||
CLAPPER_GTK_VIDEO_CAST (self->video));
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (
|
||||
CLAPPER_GTK_AV_CAST (self->video));
|
||||
ClapperQueue *queue = clapper_player_get_queue (player);
|
||||
guint prev_index, index;
|
||||
|
||||
@@ -866,7 +863,7 @@ _handle_item_key_press (ClapperAppWindow *self, gboolean forward)
|
||||
|
||||
prev_index = clapper_queue_get_current_index (queue);
|
||||
gtk_widget_activate_action (self->video,
|
||||
(forward) ? "video.next-item" : "video.previous-item", NULL);
|
||||
(forward) ? "av.next-item" : "av.previous-item", NULL);
|
||||
index = clapper_queue_get_current_index (queue);
|
||||
|
||||
/* Notify only when changed */
|
||||
@@ -883,14 +880,14 @@ _handle_speed_key_press (ClapperAppWindow *self, gboolean forward)
|
||||
forward ^= (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL);
|
||||
|
||||
gtk_widget_activate_action (self->video,
|
||||
(forward) ? "video.speed-up" : "video.speed-down", NULL);
|
||||
(forward) ? "av.speed-up" : "av.speed-down", NULL);
|
||||
}
|
||||
|
||||
static inline void
|
||||
_handle_progression_key_press (ClapperAppWindow *self)
|
||||
{
|
||||
ClapperPlayer *player = clapper_gtk_video_get_player (
|
||||
CLAPPER_GTK_VIDEO_CAST (self->video));
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (
|
||||
CLAPPER_GTK_AV_CAST (self->video));
|
||||
ClapperQueue *queue = clapper_player_get_queue (player);
|
||||
ClapperQueueProgressionMode mode;
|
||||
const gchar *icon = NULL, *label = NULL;
|
||||
@@ -910,11 +907,11 @@ key_pressed_cb (GtkEventControllerKey *controller, guint keyval,
|
||||
switch (keyval) {
|
||||
case GDK_KEY_Up:
|
||||
if ((state & GDK_MODIFIER_MASK) == 0)
|
||||
gtk_widget_activate_action (self->video, "video.volume-up", NULL);
|
||||
gtk_widget_activate_action (self->video, "av.volume-up", NULL);
|
||||
break;
|
||||
case GDK_KEY_Down:
|
||||
if ((state & GDK_MODIFIER_MASK) == 0)
|
||||
gtk_widget_activate_action (self->video, "video.volume-down", NULL);
|
||||
gtk_widget_activate_action (self->video, "av.volume-down", NULL);
|
||||
break;
|
||||
case GDK_KEY_Left:
|
||||
if ((state & GDK_MODIFIER_MASK) == 0) {
|
||||
@@ -945,7 +942,7 @@ key_pressed_cb (GtkEventControllerKey *controller, guint keyval,
|
||||
case GDK_KEY_space:
|
||||
case GDK_KEY_k:
|
||||
if (!self->key_held && (state & GDK_MODIFIER_MASK) == 0)
|
||||
gtk_widget_activate_action (self->video, "video.toggle-play", NULL);
|
||||
gtk_widget_activate_action (self->video, "av.toggle-play", NULL);
|
||||
break;
|
||||
case GDK_KEY_less:
|
||||
if (!self->key_held) // Needs seek (action is slow)
|
||||
@@ -957,7 +954,7 @@ key_pressed_cb (GtkEventControllerKey *controller, guint keyval,
|
||||
break;
|
||||
case GDK_KEY_m:
|
||||
if (!self->key_held && (state & GDK_MODIFIER_MASK) == 0)
|
||||
gtk_widget_activate_action (self->video, "video.toggle-mute", NULL);
|
||||
gtk_widget_activate_action (self->video, "av.toggle-mute", NULL);
|
||||
break;
|
||||
case GDK_KEY_p:
|
||||
if (!self->key_held && (state & GDK_MODIFIER_MASK) == 0)
|
||||
@@ -1125,7 +1122,7 @@ clapper_app_window_get_video (ClapperAppWindow *self)
|
||||
ClapperPlayer *
|
||||
clapper_app_window_get_player (ClapperAppWindow *self)
|
||||
{
|
||||
return clapper_gtk_video_get_player (CLAPPER_GTK_VIDEO_CAST (self->video));
|
||||
return clapper_gtk_av_get_player (CLAPPER_GTK_AV_CAST (self->video));
|
||||
}
|
||||
|
||||
ClapperAppWindowExtraOptions *
|
||||
@@ -1200,6 +1197,7 @@ clapper_app_window_init (ClapperAppWindow *self)
|
||||
GtkSettings *settings;
|
||||
GtkWidget *dummy_titlebar;
|
||||
gint distance = 0;
|
||||
GtkWindowGroup *group;
|
||||
|
||||
gtk_widget_set_size_request (GTK_WIDGET (self),
|
||||
MIN_WINDOW_WIDTH, MIN_WINDOW_HEIGHT);
|
||||
@@ -1231,6 +1229,11 @@ clapper_app_window_init (ClapperAppWindow *self)
|
||||
|
||||
gtk_drop_target_set_gtypes (self->drop_target,
|
||||
(GType[3]) { GDK_TYPE_FILE_LIST, G_TYPE_FILE, G_TYPE_STRING }, 3);
|
||||
|
||||
/* Add to window group */
|
||||
group = gtk_window_group_new ();
|
||||
gtk_window_group_add_window (group, GTK_WINDOW (self));
|
||||
g_object_unref (group);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1239,6 +1242,8 @@ clapper_app_window_constructed (GObject *object)
|
||||
ClapperAppWindow *self = CLAPPER_APP_WINDOW_CAST (object);
|
||||
ClapperPlayer *player = clapper_app_window_get_player (self);
|
||||
ClapperQueue *queue = clapper_player_get_queue (player);
|
||||
ClapperEnhancerProxyList *proxies = clapper_player_get_enhancer_proxies (player);
|
||||
ClapperEnhancerProxy *proxy;
|
||||
ClapperGtkExtraMenuButton *button;
|
||||
AdwStyleManager *manager;
|
||||
|
||||
@@ -1252,22 +1257,30 @@ clapper_app_window_constructed (GObject *object)
|
||||
#if (CLAPPER_HAVE_MPRIS || CLAPPER_HAVE_SERVER || CLAPPER_HAVE_DISCOVERER)
|
||||
ClapperFeature *feature = NULL;
|
||||
#endif
|
||||
#if CLAPPER_HAVE_MPRIS
|
||||
|
||||
gchar mpris_name[45];
|
||||
g_snprintf (mpris_name, sizeof (mpris_name),
|
||||
"org.mpris.MediaPlayer2.Clapper.instance%" G_GUINT16_FORMAT, instance_count++);
|
||||
#endif
|
||||
|
||||
self->settings = g_settings_new (CLAPPER_APP_ID);
|
||||
self->last_volume = PERCENTAGE_ROUND (g_settings_get_double (self->settings, "volume"));
|
||||
|
||||
if ((proxy = clapper_enhancer_proxy_list_get_proxy_by_module (proxies, "clapper-mpris"))) {
|
||||
clapper_enhancer_proxy_set_locally (proxy,
|
||||
"own-name", mpris_name,
|
||||
"identity", CLAPPER_APP_NAME,
|
||||
"desktop-entry", CLAPPER_APP_ID,
|
||||
"queue-controllable", TRUE, NULL);
|
||||
gst_object_unref (proxy);
|
||||
} else {
|
||||
#if CLAPPER_HAVE_MPRIS
|
||||
feature = CLAPPER_FEATURE (clapper_mpris_new (
|
||||
mpris_name, CLAPPER_APP_NAME, CLAPPER_APP_ID));
|
||||
clapper_mpris_set_queue_controllable (CLAPPER_MPRIS (feature), TRUE);
|
||||
clapper_player_add_feature (player, feature);
|
||||
gst_object_unref (feature);
|
||||
feature = CLAPPER_FEATURE (clapper_mpris_new (
|
||||
mpris_name, CLAPPER_APP_NAME, CLAPPER_APP_ID));
|
||||
clapper_mpris_set_queue_controllable (CLAPPER_MPRIS (feature), TRUE);
|
||||
clapper_player_add_feature (player, feature);
|
||||
gst_object_unref (feature);
|
||||
#endif
|
||||
}
|
||||
|
||||
#if CLAPPER_HAVE_SERVER
|
||||
feature = CLAPPER_FEATURE (clapper_server_new ());
|
||||
|
@@ -21,10 +21,10 @@ window.info .subcontent streamlist preferencesgroup {
|
||||
window.preferences .subcontent {
|
||||
margin: 16px;
|
||||
}
|
||||
window.preferences .pluginssubpage .subcontent popover {
|
||||
window.preferences .configsubpage .subcontent popover {
|
||||
min-width: 264px;
|
||||
}
|
||||
window.preferences .pluginssubpage .subcontent button.pill {
|
||||
window.preferences .configsubpage .subcontent button.pill {
|
||||
margin-top: 8px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
@@ -12,7 +12,7 @@ StartupNotify=true
|
||||
Terminal=false
|
||||
Type=Application
|
||||
# Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
Keywords=Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;
|
||||
Keywords=Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;
|
||||
# Translators: Do NOT translate or transliterate this text (these are enum types)!
|
||||
X-Purism-FormFactor=Workstation;Mobile;
|
||||
Actions=new-window;
|
||||
|
@@ -1,10 +1,11 @@
|
||||
appstream_util = find_program('appstream-util', required: false)
|
||||
if appstream_util.found()
|
||||
appstream_cli = find_program('appstreamcli', required: false)
|
||||
if appstream_cli.found()
|
||||
test('Validate appstream file',
|
||||
appstream_util,
|
||||
appstream_cli,
|
||||
args: [
|
||||
'validate-relax',
|
||||
'--nonet',
|
||||
'validate',
|
||||
'--no-net',
|
||||
'--explain',
|
||||
join_paths(meson.current_source_dir(), 'metainfo', 'com.github.rafostar.Clapper.metainfo.xml'),
|
||||
]
|
||||
)
|
||||
|
@@ -31,8 +31,10 @@
|
||||
gint
|
||||
main (gint argc, gchar **argv)
|
||||
{
|
||||
const gchar *clapper_ldir;
|
||||
GApplication *application;
|
||||
ClapperEnhancerProxyList *proxies;
|
||||
const gchar *clapper_ldir;
|
||||
guint i, n_proxies;
|
||||
gint status;
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
@@ -64,6 +66,15 @@ main (gint argc, gchar **argv)
|
||||
resolution = clapper_app_utils_win_hi_res_clock_start ();
|
||||
#endif
|
||||
|
||||
proxies = clapper_get_global_enhancer_proxies ();
|
||||
n_proxies = clapper_enhancer_proxy_list_get_n_proxies (proxies);
|
||||
|
||||
/* Allow usage of all enhancers */
|
||||
for (i = 0; i < n_proxies; ++i) {
|
||||
ClapperEnhancerProxy *proxy = clapper_enhancer_proxy_list_peek_proxy (proxies, i);
|
||||
clapper_enhancer_proxy_set_target_creation_allowed (proxy, TRUE);
|
||||
}
|
||||
|
||||
application = clapper_app_application_new ();
|
||||
|
||||
status = g_application_run (application, argc, argv);
|
||||
@@ -74,5 +85,7 @@ main (gint argc, gchar **argv)
|
||||
clapper_app_utils_win_hi_res_clock_stop (resolution);
|
||||
#endif
|
||||
|
||||
clapper_app_utils_delete_tmp_dir ();
|
||||
|
||||
return status;
|
||||
}
|
||||
|
@@ -67,7 +67,7 @@ configure_file(
|
||||
)
|
||||
|
||||
clapperapp_sources = [
|
||||
'clapper-app-about-window.c',
|
||||
'clapper-app-about-dialog.c',
|
||||
'clapper-app-application.c',
|
||||
'clapper-app-file-dialog.c',
|
||||
'clapper-app-headerbar.c',
|
||||
@@ -94,6 +94,26 @@ clapperapp_c_args = [
|
||||
'-DGST_USE_UNSTABLE_API',
|
||||
]
|
||||
|
||||
clapperapp_possible_functionalities = [
|
||||
'pipeline-preview',
|
||||
]
|
||||
clapperapp_available_functionalities = []
|
||||
|
||||
pp_option = get_option('pipeline-preview')
|
||||
|
||||
if not pp_option.disabled()
|
||||
if cgraph_dep.found() and gvc_dep.found()
|
||||
clapperapp_c_args += ['-DHAVE_GRAPHVIZ']
|
||||
clapperapp_deps += [cgraph_dep, gvc_dep]
|
||||
if gvc_dep.version().version_compare('>= 13.0.0')
|
||||
clapperapp_c_args += ['-DHAVE_GVC_13']
|
||||
endif
|
||||
clapperapp_available_functionalities += 'pipeline-preview'
|
||||
elif pp_option.enabled()
|
||||
error('pipeline-preview option was enabled, but required dependencies were not found')
|
||||
endif
|
||||
endif
|
||||
|
||||
is_windows = ['windows'].contains(host_machine.system())
|
||||
|
||||
if is_windows
|
||||
|
@@ -10,7 +10,7 @@ src/bin/clapper-app/ui/clapper-app-subtitle-stream-list-item.ui
|
||||
src/bin/clapper-app/ui/clapper-app-uri-dialog.ui
|
||||
src/bin/clapper-app/ui/clapper-app-video-stream-list-item.ui
|
||||
|
||||
src/bin/clapper-app/clapper-app-about-window.c
|
||||
src/bin/clapper-app/clapper-app-about-dialog.c
|
||||
src/bin/clapper-app/clapper-app-application.c
|
||||
src/bin/clapper-app/clapper-app-info-window.c
|
||||
src/bin/clapper-app/clapper-app-list-item-utils.c
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:10\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Afrikaans\n"
|
||||
"Language: af_ZA\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr ""
|
||||
msgid "Fast"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:10\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Arabic\n"
|
||||
"Language: ar_SA\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr "عادي"
|
||||
msgid "Fast"
|
||||
msgstr "سريع"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:11\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Asturian\n"
|
||||
"Language: ast_ES\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr "Normal"
|
||||
msgid "Fast"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:10\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Catalan\n"
|
||||
"Language: ca_ES\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr "Normal"
|
||||
msgid "Fast"
|
||||
msgstr "Ràpid"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr "Sense progressió"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr "Consecutiu"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr "Repeteix l'ítem"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr "Carrusel"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr "Aleatori"
|
||||
|
||||
|
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper-app\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -32,9 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid ""
|
||||
"Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;"
|
||||
"Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -537,23 +535,23 @@ msgstr ""
|
||||
msgid "Fast"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:10\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Czech\n"
|
||||
"Language: cs_CZ\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr "Normální"
|
||||
msgid "Fast"
|
||||
msgstr "Rychlý"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr "Žádný postup"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr "Po sobě"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr "Opakovat položku"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr "Opakovat frontu"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr "Náhodně"
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:10\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Danish\n"
|
||||
"Language: da_DK\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr ""
|
||||
msgid "Fast"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-13 18:01\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-04-11 18:29\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: German\n"
|
||||
"Language: de_DE\n"
|
||||
@@ -32,8 +32,8 @@ msgstr "Gebe Videos uns Musik wieder"
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgstr "Video;Bewegtbildproduktion;Film;Clip;Serie;Wiedergabe;Wiedergabeliste;DVD;TV;Fernsehen;Platte;Album;Musik;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
#: src/bin/clapper-app/ui/clapper-app-headerbar.ui:183
|
||||
@@ -374,7 +374,7 @@ msgstr "Versatz zwischen der Untertitel- und Videospur (in Sekunden)"
|
||||
|
||||
#: src/bin/clapper-app/ui/clapper-app-preferences-window.ui:118
|
||||
msgid "Default font"
|
||||
msgstr "Standartschriftart"
|
||||
msgstr "Standardschriftart"
|
||||
|
||||
#: src/bin/clapper-app/ui/clapper-app-preferences-window.ui:119
|
||||
msgid "Text font used for subtitles when media does not explicitly specify one"
|
||||
@@ -530,23 +530,23 @@ msgstr "Normal"
|
||||
msgid "Fast"
|
||||
msgstr "Schnell"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr "Kein Fortschritt"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr "Fortlaufend"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr "Wiederholen"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr "Kreislauf"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr "Zufallswiedergabe"
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:10\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Greek\n"
|
||||
"Language: el_GR\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr ""
|
||||
msgid "Fast"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 17:41\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:10\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Spanish\n"
|
||||
"Language: es_ES\n"
|
||||
@@ -32,8 +32,8 @@ msgstr "Reproduce videos y música"
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgstr "Vídeo;Película;Film;Clip;Serie;Reproductor;Playlist;DVD;TV;Disco;Álbum;Música;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
#: src/bin/clapper-app/ui/clapper-app-headerbar.ui:183
|
||||
@@ -531,23 +531,23 @@ msgstr "Normal"
|
||||
msgid "Fast"
|
||||
msgstr "Rápido"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr "Sin progresión"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr "Consecutivo"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr "Repetir elemento"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr "Carrusel"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr "Aleatorio"
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:10\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Basque\n"
|
||||
"Language: eu_ES\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr "Normala"
|
||||
msgid "Fast"
|
||||
msgstr "Azkarra"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-13 15:41\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 13:14\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Persian\n"
|
||||
"Language: fa_IR\n"
|
||||
@@ -32,8 +32,8 @@ msgstr "پخش ویدیو و آهنگ"
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgstr "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;ویدیو;فیلم;کلیپ;سریتال;پخش;تلویزیون;آلبوم;آهنگ;گنوم;کلاکت;کلپر;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;ویدیو;فیلم;کلیپ;سریال;نمایش;پخش;دیویدی;تلویزیون;دیسک;"
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
#: src/bin/clapper-app/ui/clapper-app-headerbar.ui:183
|
||||
@@ -531,23 +531,23 @@ msgstr "معمولی"
|
||||
msgid "Fast"
|
||||
msgstr "تند"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr "بدون پیشرفت"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr "متوالی"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr "تکرار مورد"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr "چرخ فلک"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr "بر زدن"
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-12 13:02\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-17 08:37\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Finnish\n"
|
||||
"Language: fi_FI\n"
|
||||
@@ -20,7 +20,7 @@ msgstr ""
|
||||
#. Translators: Do NOT translate app name!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:4
|
||||
msgid "Clapper"
|
||||
msgstr ""
|
||||
msgstr "Clapper"
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:5
|
||||
msgid "Multimedia Player"
|
||||
@@ -32,8 +32,8 @@ msgstr "Toista videoita ja musiikkia"
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgstr "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;elokuva;sarja;soittolista;levy;albumi;musiikki;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;elokuva;leffa;sarja;soittolista;soitin;"
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
#: src/bin/clapper-app/ui/clapper-app-headerbar.ui:183
|
||||
@@ -530,23 +530,23 @@ msgstr "Normaali"
|
||||
msgid "Fast"
|
||||
msgstr "Nopea"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr "Ei etenemistä"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr "Perättäinen"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr "Toista kohde"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr "Karuselli"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr "Sekoita"
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-18 09:13\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-27 20:49\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: French\n"
|
||||
"Language: fr_FR\n"
|
||||
@@ -32,8 +32,8 @@ msgstr "Lire des vidéos et de la musique"
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgstr "Vidéo;Movie;Film;Clip;Séries;Player;Lecteur;Playlist;DVD;TV;Disque;Album;Musique;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr "Vidéo;Film;Clip;Série;Lecteur;Playlist;DVD;TV;Disque;"
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
#: src/bin/clapper-app/ui/clapper-app-headerbar.ui:183
|
||||
@@ -531,23 +531,23 @@ msgstr "Normal"
|
||||
msgid "Fast"
|
||||
msgstr "Rapide"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr "Aucune progression"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr "Chronologique"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr "Répéter l’élement"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr "Carrousel"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr "Aléatoire"
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:10\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Hebrew\n"
|
||||
"Language: he_IL\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr "רגילה"
|
||||
msgid "Fast"
|
||||
msgstr "מהיר"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:11\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Hindi\n"
|
||||
"Language: hi_IN\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr "साधारण"
|
||||
msgid "Fast"
|
||||
msgstr "तेज"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr "प्रगति नहीं"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr "लगातार"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr "मद दोहराएं"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr "कैरोसेल"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr "शफल"
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:11\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Croatian\n"
|
||||
"Language: hr_HR\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr "Normalna"
|
||||
msgid "Fast"
|
||||
msgstr "Brzo"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:10\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Hungarian\n"
|
||||
"Language: hu_HU\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr "Normál"
|
||||
msgid "Fast"
|
||||
msgstr "Gyors"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr "Ne haladjon"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr "Folyamatos"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr "Listaelem ismétlése"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr "Körkörös"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr "Véletlenszerű"
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:10\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Italian\n"
|
||||
"Language: it_IT\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr "Normale"
|
||||
msgid "Fast"
|
||||
msgstr "Veloce"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:10\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Japanese\n"
|
||||
"Language: ja_JP\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr "標準"
|
||||
msgid "Fast"
|
||||
msgstr "高速"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:10\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Korean\n"
|
||||
"Language: ko_KR\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr ""
|
||||
msgid "Fast"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:10\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Lithuanian\n"
|
||||
"Language: lt_LT\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr "Numatyta"
|
||||
msgid "Fast"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:10\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Dutch\n"
|
||||
"Language: nl_NL\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr "Normaal"
|
||||
msgid "Fast"
|
||||
msgstr "Snel"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:10\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Norwegian\n"
|
||||
"Language: no_NO\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr "Normal"
|
||||
msgid "Fast"
|
||||
msgstr "Rask"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr "Ingen progresjon"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr "Konsekutiv"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr "Gjenta element"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr "Gjenta kø"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr "Omstokking"
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:11\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Occitan\n"
|
||||
"Language: oc_FR\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr ""
|
||||
msgid "Fast"
|
||||
msgstr "Rapid"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr "Cap de progression"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr "Consecutiu"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr "Repetir l’element"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr "Vira-vira"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr "Aleatòri"
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-19 14:18\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:10\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Polish\n"
|
||||
"Language: pl_PL\n"
|
||||
@@ -32,8 +32,8 @@ msgstr "Odtwarzaj filmy i muzykę"
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgstr "Wideo;Film;Clip;Serie;Odtwarzacz;Playlista;DVD;TV;CD;Album;Muzyka;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
#: src/bin/clapper-app/ui/clapper-app-headerbar.ui:183
|
||||
@@ -530,23 +530,23 @@ msgstr "Normalny"
|
||||
msgid "Fast"
|
||||
msgstr "Szybki"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr "Brak progresji"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr "Po kolei"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr "Powtarzaj rzecz"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr "Karuzela"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr "Losowo"
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-14 14:46\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-04-01 09:11\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Portuguese\n"
|
||||
"Language: pt_PT\n"
|
||||
@@ -32,8 +32,8 @@ msgstr "Reproduzir vídeos e música"
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgstr "Vídeo;Filme;Clip;Leitor;Reprodutor;Playlist;Lista de reprodução;DVD;TV;Disco;Música;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr "Vídeo;Filme;Filme;Clipe;Série;Leitor;Reprodutor;Lista de reprodução;DVD;TV;Disco;"
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
#: src/bin/clapper-app/ui/clapper-app-headerbar.ui:183
|
||||
@@ -530,23 +530,23 @@ msgstr "Predefinido"
|
||||
msgid "Fast"
|
||||
msgstr "Rápido"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr "Sem progressão"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr "Consecutiva"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr "Repetir item"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr "Carrossel"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr "Aleatório"
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-12 03:17\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-16 04:37\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Portuguese, Brazilian\n"
|
||||
"Language: pt_BR\n"
|
||||
@@ -32,8 +32,8 @@ msgstr "Reproduza vídeos e músicas"
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgstr "Vídeo;Filme;Clipe;Série;Show;Reprodutor;Player;Playlist;Lista;DVD;TV;Disco;Álbum;Música;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Vídeo;Filme;Clipe;Série;Reprodutor;Lista;Reprodução;Disco;"
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
#: src/bin/clapper-app/ui/clapper-app-headerbar.ui:183
|
||||
@@ -531,23 +531,23 @@ msgstr "Normal"
|
||||
msgid "Fast"
|
||||
msgstr "Rápido"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr "Sem progressão"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr "Consecutiva"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr "Repetir item"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr "Repetir tudo"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr "Aleatório"
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-20 20:06\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:10\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Romanian\n"
|
||||
"Language: ro_RO\n"
|
||||
@@ -32,7 +32,7 @@ msgstr "Redă videoclipuri și muzică"
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr ""
|
||||
msgid "Fast"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-14 21:16\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-25 20:33\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Russian\n"
|
||||
"Language: ru_RU\n"
|
||||
@@ -20,25 +20,25 @@ msgstr ""
|
||||
#. Translators: Do NOT translate app name!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:4
|
||||
msgid "Clapper"
|
||||
msgstr ""
|
||||
msgstr "Clapper"
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:5
|
||||
msgid "Multimedia Player"
|
||||
msgstr ""
|
||||
msgstr "Проигрыватель мультимедиа"
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:6
|
||||
msgid "Play videos and music"
|
||||
msgstr ""
|
||||
msgstr "Воспроизведение видео и музыки"
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgstr ""
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr "Видео;Фильм;Фильм;Клип;Серий;Плейлист;DVD;ТВ;Диск;"
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
#: src/bin/clapper-app/ui/clapper-app-headerbar.ui:183
|
||||
msgid "New Window"
|
||||
msgstr ""
|
||||
msgstr "Новое Окно"
|
||||
|
||||
#: src/bin/clapper-app/ui/clapper-app-audio-stream-list-item.ui:14
|
||||
#: src/bin/clapper-app/ui/clapper-app-video-stream-list-item.ui:14
|
||||
@@ -90,7 +90,7 @@ msgstr "Общие"
|
||||
|
||||
#: src/bin/clapper-app/ui/clapper-app-help-overlay.ui:13
|
||||
msgid "New window"
|
||||
msgstr ""
|
||||
msgstr "Новое окно"
|
||||
|
||||
#: src/bin/clapper-app/ui/clapper-app-help-overlay.ui:19
|
||||
msgid "Open preferences"
|
||||
@@ -110,15 +110,15 @@ msgstr "Двойное нажатие | Двойной клик"
|
||||
|
||||
#: src/bin/clapper-app/ui/clapper-app-help-overlay.ui:38
|
||||
msgid "Unfullscreen"
|
||||
msgstr ""
|
||||
msgstr "Выйти из полноэкранного режима"
|
||||
|
||||
#: src/bin/clapper-app/ui/clapper-app-help-overlay.ui:44
|
||||
msgid "Auto window resize"
|
||||
msgstr ""
|
||||
msgstr "Автоматически изменять размер окна"
|
||||
|
||||
#: src/bin/clapper-app/ui/clapper-app-help-overlay.ui:45
|
||||
msgid "Middle click"
|
||||
msgstr ""
|
||||
msgstr "Клик колёсиком"
|
||||
|
||||
#: src/bin/clapper-app/ui/clapper-app-help-overlay.ui:51
|
||||
msgid "Quit"
|
||||
@@ -468,19 +468,19 @@ msgstr "Игорь Дятлов"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-application.c:696
|
||||
msgid "Create a new window"
|
||||
msgstr ""
|
||||
msgstr "Создать новое окно"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-application.c:697
|
||||
msgid "Add media to queue in primary application instance"
|
||||
msgstr ""
|
||||
msgstr "Добавить контент в очередь в основной экземпляр приложения"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-application.c:698
|
||||
msgid "Audio volume to set (0 - 2.0 range)"
|
||||
msgstr ""
|
||||
msgstr "Установить громкость звука (диапазон 0 - 2,0)"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-application.c:699
|
||||
msgid "Playback speed to set (0.05 - 2.0 range)"
|
||||
msgstr ""
|
||||
msgstr "Установить скорость воспроизведения (диапазон 0,05 - 2,0)"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-application.c:700
|
||||
msgid "Initial bitrate for adaptive streaming"
|
||||
@@ -492,7 +492,7 @@ msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-application.c:702
|
||||
msgid "Set window to be fullscreen"
|
||||
msgstr ""
|
||||
msgstr "Запустить в полноэкранном окне"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-application.c:703
|
||||
msgid "Video filter to use (\"none\" to disable)"
|
||||
@@ -530,23 +530,23 @@ msgstr "Обычная"
|
||||
msgid "Fast"
|
||||
msgstr "Быстрый"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr "Нет прогрессии"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr "Последовательно"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr "Повторить элемент"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr "Повтор очереди"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr "Случайно"
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:11\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Slovak\n"
|
||||
"Language: sk_SK\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr "Normálne"
|
||||
msgid "Fast"
|
||||
msgstr "Rýchle"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:11\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Serbian (Cyrillic)\n"
|
||||
"Language: sr_SP\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr ""
|
||||
msgid "Fast"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:11\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Swedish\n"
|
||||
"Language: sv_SE\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr "Normal"
|
||||
msgid "Fast"
|
||||
msgstr "Snabbt"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 22:52\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:11\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Language: tr_TR\n"
|
||||
@@ -32,8 +32,8 @@ msgstr "Videoları ve müzikleri oynat"
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgstr "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;Vidyo;Klip;Dizi;Oynatıcı;Oynatma Listesi;Çalma Listesi;Disk;Albüm;Müzik;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
#: src/bin/clapper-app/ui/clapper-app-headerbar.ui:183
|
||||
@@ -530,23 +530,23 @@ msgstr "Normal"
|
||||
msgid "Fast"
|
||||
msgstr "Hızlı"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr "İlerleme yok"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr "Ardaşık"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr "Ögeyi Yinele"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr "Karosel"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr "Karıştır"
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:11\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Ukrainian\n"
|
||||
"Language: uk_UA\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr ""
|
||||
msgid "Fast"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:11\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Vietnamese\n"
|
||||
"Language: vi_VN\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr ""
|
||||
msgid "Fast"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-19 10:03\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:11\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Chinese Simplified\n"
|
||||
"Language: zh_CN\n"
|
||||
@@ -32,13 +32,13 @@ msgstr "播放视频和音乐"
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
#: src/bin/clapper-app/ui/clapper-app-headerbar.ui:183
|
||||
msgid "New Window"
|
||||
msgstr ""
|
||||
msgstr "新建窗口"
|
||||
|
||||
#: src/bin/clapper-app/ui/clapper-app-audio-stream-list-item.ui:14
|
||||
#: src/bin/clapper-app/ui/clapper-app-video-stream-list-item.ui:14
|
||||
@@ -90,7 +90,7 @@ msgstr "常规"
|
||||
|
||||
#: src/bin/clapper-app/ui/clapper-app-help-overlay.ui:13
|
||||
msgid "New window"
|
||||
msgstr ""
|
||||
msgstr "新建窗口"
|
||||
|
||||
#: src/bin/clapper-app/ui/clapper-app-help-overlay.ui:19
|
||||
msgid "Open preferences"
|
||||
@@ -285,7 +285,7 @@ msgstr "过滤器"
|
||||
#: src/bin/clapper-app/ui/clapper-app-info-window.ui:182
|
||||
#: src/bin/clapper-app/ui/clapper-app-info-window.ui:223
|
||||
msgid "Sink"
|
||||
msgstr "Sink"
|
||||
msgstr "接收器"
|
||||
|
||||
#: src/bin/clapper-app/ui/clapper-app-info-window.ui:196
|
||||
msgid "Audio Playback"
|
||||
@@ -309,11 +309,11 @@ msgstr "添加媒体到播放队列即可开始"
|
||||
|
||||
#: src/bin/clapper-app/ui/clapper-app-preferences-window.ui:15
|
||||
msgid "Seeking"
|
||||
msgstr "定位播放"
|
||||
msgstr "快进/快退"
|
||||
|
||||
#: src/bin/clapper-app/ui/clapper-app-preferences-window.ui:18
|
||||
msgid "Method"
|
||||
msgstr "快进/快退方式"
|
||||
msgstr "方式"
|
||||
|
||||
#: src/bin/clapper-app/ui/clapper-app-preferences-window.ui:19
|
||||
msgid "A preferred method used for seeking"
|
||||
@@ -465,7 +465,8 @@ msgstr "像素格式"
|
||||
#: src/bin/clapper-app/clapper-app-about-window.c:47
|
||||
msgid "translator-credits"
|
||||
msgstr "刘韬\n"
|
||||
"Tommy He"
|
||||
"Tommy He\n"
|
||||
"demo_007"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-application.c:696
|
||||
msgid "Create a new window"
|
||||
@@ -473,11 +474,11 @@ msgstr "新建一个窗口"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-application.c:697
|
||||
msgid "Add media to queue in primary application instance"
|
||||
msgstr ""
|
||||
msgstr "向主应用程序实例播放列队添加媒体"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-application.c:698
|
||||
msgid "Audio volume to set (0 - 2.0 range)"
|
||||
msgstr "设置音量 (范围 0 - 2.0)"
|
||||
msgstr "设置音量(范围 0 - 2.0)"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-application.c:699
|
||||
msgid "Playback speed to set (0.05 - 2.0 range)"
|
||||
@@ -485,31 +486,31 @@ msgstr "设置播放速度(范围 0.05 - 2.0)"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-application.c:700
|
||||
msgid "Initial bitrate for adaptive streaming"
|
||||
msgstr ""
|
||||
msgstr "自适性流的初始比特率"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-application.c:701
|
||||
msgid "Initial queue progression mode (0=none, 1=consecutive, 2=repeat-item, 3=carousel, 4=shuffle)"
|
||||
msgstr ""
|
||||
msgstr "初始播放列队模式 (0=单集, 1=连续, 2=单机循环, 3=队列循环, 4=随机)"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-application.c:702
|
||||
msgid "Set window to be fullscreen"
|
||||
msgstr "设置窗口为全屏"
|
||||
msgstr "窗口全屏"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-application.c:703
|
||||
msgid "Video filter to use (\"none\" to disable)"
|
||||
msgstr ""
|
||||
msgstr "视频过滤器(\"none\"为禁用)"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-application.c:704
|
||||
msgid "Audio filter to use (\"none\" to disable)"
|
||||
msgstr ""
|
||||
msgstr "音频过滤器(\"none\"为禁用)"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-application.c:705
|
||||
msgid "Video sink to use"
|
||||
msgstr ""
|
||||
msgstr "视频接收器"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-application.c:706
|
||||
msgid "Audio sink to use"
|
||||
msgstr ""
|
||||
msgstr "音频接收器"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-info-window.c:86
|
||||
msgid "Hardware"
|
||||
@@ -531,23 +532,23 @@ msgstr "标准"
|
||||
msgid "Fast"
|
||||
msgstr "快速"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr "单集"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr "连续"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr "单集循环"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr "队列循环"
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr "随机"
|
||||
|
||||
|
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: clapper\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-11 15:22+0100\n"
|
||||
"PO-Revision-Date: 2025-01-11 14:36\n"
|
||||
"POT-Creation-Date: 2025-02-15 12:47+0100\n"
|
||||
"PO-Revision-Date: 2025-02-15 12:11\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Chinese Traditional\n"
|
||||
"Language: zh_TW\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate the semicolons!
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:16
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;"
|
||||
msgid "Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/data/applications/com.github.rafostar.Clapper.desktop.in:22
|
||||
@@ -530,23 +530,23 @@ msgstr ""
|
||||
msgid "Fast"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:90
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:207
|
||||
msgid "No progression"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:91
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:208
|
||||
msgid "Consecutive"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:92
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:209
|
||||
msgid "Repeat item"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:93
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:210
|
||||
msgid "Carousel"
|
||||
msgstr ""
|
||||
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:94
|
||||
#: src/bin/clapper-app/clapper-app-utils.c:211
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
|
@@ -26,6 +26,12 @@
|
||||
<property name="accelerator"><Ctrl>question</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkShortcutsShortcut">
|
||||
<property name="title" translatable="yes">Show pipeline</property>
|
||||
<property name="accelerator"><Ctrl><Shift>p</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkShortcutsShortcut">
|
||||
<property name="title" translatable="yes">Toggle fullscreen</property>
|
||||
|
@@ -232,6 +232,17 @@
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="pipeline_button">
|
||||
<property name="halign">center</property>
|
||||
<property name="label" translatable="yes">Show Pipeline</property>
|
||||
<property name="action-name">app.pipeline</property>
|
||||
<property name="visible">false</property>
|
||||
<style>
|
||||
<class name="pill"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
@@ -136,6 +136,24 @@
|
||||
<object class="AdwPreferencesPage">
|
||||
<property name="title" translatable="yes">Tweaks</property>
|
||||
<property name="icon-name">applications-engineering-symbolic</property>
|
||||
<child>
|
||||
<object class="AdwPreferencesGroup">
|
||||
<property name="title" translatable="no">Clapper</property>
|
||||
<child>
|
||||
<object class="AdwActionRow">
|
||||
<property name="title" translatable="yes">Enhancers</property>
|
||||
<property name="subtitle" translatable="yes">Browse and configure properties of available enhancers</property>
|
||||
<property name="activatable">true</property>
|
||||
<signal name="activated" handler="enhancers_config_activated_cb"/>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="icon_name">go-next-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="AdwPreferencesGroup">
|
||||
<property name="title" translatable="no">GStreamer</property>
|
||||
@@ -160,6 +178,124 @@
|
||||
<class name="preferences"/>
|
||||
</style>
|
||||
</template>
|
||||
<object class="AdwNavigationPage" id="enhancers_subpage">
|
||||
<property name="title" translatable="yes">Clapper Enhancers</property>
|
||||
<property name="child">
|
||||
<object class="AdwToolbarView">
|
||||
<child type="top">
|
||||
<object class="AdwHeaderBar"/>
|
||||
</child>
|
||||
<property name="content">
|
||||
<object class="GtkScrolledWindow">
|
||||
<child>
|
||||
<object class="AdwClamp">
|
||||
<style>
|
||||
<class name="subcontent"/>
|
||||
</style>
|
||||
<child>
|
||||
<object class="GtkStack" id="enhancers_stack">
|
||||
<child>
|
||||
<object class="GtkBox" id="browse_enhancers_page">
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="AdwPreferencesGroup">
|
||||
<property name="title" translatable="yes">Available enhancers</property>
|
||||
<property name="description" translatable="yes">Select an enhancer plugin to view its information and properties to configure.</property>
|
||||
<child>
|
||||
<object class="AdwComboRow" id="enhancers_combo_row">
|
||||
<property name="title" translatable="yes">Enhancer</property>
|
||||
<property name="enable-search">true</property>
|
||||
<property name="expression">
|
||||
<lookup type="ClapperEnhancerProxy" name="friendly-name"/>
|
||||
</property>
|
||||
<signal name="notify::selected" handler="selected_enhancer_changed_cb"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="orientation">vertical</property>
|
||||
<binding name="visible">
|
||||
<closure type="gboolean" function="list_has_selection_closure">
|
||||
<lookup name="selected">enhancers_combo_row</lookup>
|
||||
</closure>
|
||||
</binding>
|
||||
<child>
|
||||
<object class="AdwPreferencesGroup">
|
||||
<property name="title" translatable="yes">Information</property>
|
||||
<child>
|
||||
<object class="AdwActionRow">
|
||||
<property name="title" translatable="yes">Module</property>
|
||||
<binding name="subtitle">
|
||||
<lookup name="module-name" type="ClapperEnhancerProxy">
|
||||
<lookup name="selected-item">enhancers_combo_row</lookup>
|
||||
</lookup>
|
||||
</binding>
|
||||
<style>
|
||||
<class name="property"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="AdwActionRow">
|
||||
<property name="title" translatable="yes">Description</property>
|
||||
<binding name="subtitle">
|
||||
<lookup name="description" type="ClapperEnhancerProxy">
|
||||
<lookup name="selected-item">enhancers_combo_row</lookup>
|
||||
</lookup>
|
||||
</binding>
|
||||
<style>
|
||||
<class name="property"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="AdwActionRow">
|
||||
<property name="title" translatable="yes">Version</property>
|
||||
<binding name="subtitle">
|
||||
<lookup name="version" type="ClapperEnhancerProxy">
|
||||
<lookup name="selected-item">enhancers_combo_row</lookup>
|
||||
</lookup>
|
||||
</binding>
|
||||
<style>
|
||||
<class name="property"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="AdwPreferencesGroup" id="enhancer_config_group">
|
||||
<property name="title" translatable="yes">Properties</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="AdwStatusPage" id="no_enhancers_page">
|
||||
<property name="vexpand">true</property>
|
||||
<property name="hexpand">true</property>
|
||||
<property name="icon-name">edit-find-symbolic</property>
|
||||
<property name="title" translatable="yes">No Clapper Enhancers Found</property>
|
||||
<property name="description" translatable="yes">Install some to add more cool functionalities to the player!</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</property>
|
||||
<signal name="unrealize" handler="plugin_ranking_unrealize_cb"/>
|
||||
<style>
|
||||
<class name="configsubpage"/>
|
||||
</style>
|
||||
</object>
|
||||
<object class="AdwNavigationPage" id="plugins_subpage">
|
||||
<property name="title" translatable="yes">Plugin Ranking</property>
|
||||
<property name="child">
|
||||
@@ -240,7 +376,7 @@
|
||||
</property>
|
||||
<signal name="unrealize" handler="plugin_ranking_unrealize_cb"/>
|
||||
<style>
|
||||
<class name="pluginssubpage"/>
|
||||
<class name="configsubpage"/>
|
||||
</style>
|
||||
</object>
|
||||
</interface>
|
||||
|
@@ -1,21 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface domain="clapper-app">
|
||||
<object class="AdwMessageDialog" id="dialog">
|
||||
<property name="modal">true</property>
|
||||
<property name="width-request">420</property>
|
||||
<object class="AdwAlertDialog" id="dialog">
|
||||
<property name="heading" translatable="yes">Add URI</property>
|
||||
<property name="body" translatable="yes">Insert an URI to be added to playback queue</property>
|
||||
<property name="close-response">cancel</property>
|
||||
<property name="default-response">add</property>
|
||||
<property name="follows-content-size">false</property>
|
||||
<property name="content-width">420</property>
|
||||
<property name="extra-child">
|
||||
<object class="GtkEntry">
|
||||
<property name="halign">fill</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">true</property>
|
||||
<property name="activates-default">true</property>
|
||||
<property name="truncate-multiline">true</property>
|
||||
<property name="input-purpose">url</property>
|
||||
<property name="placeholder-text" translatable="yes">Enter or drop URI here</property>
|
||||
<object class="GtkListBox">
|
||||
<property name="selection-mode">none</property>
|
||||
<style>
|
||||
<class name="boxed-list"/>
|
||||
</style>
|
||||
<child>
|
||||
<object class="AdwEntryRow" id="entry_row">
|
||||
<property name="halign">fill</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">true</property>
|
||||
<property name="activates-default">true</property>
|
||||
<property name="input-purpose">url</property>
|
||||
<property name="title" translatable="yes">Enter or drop URI here</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</property>
|
||||
<responses>
|
||||
|
268
src/lib/clapper-gtk/clapper-gtk-audio.c
Normal file
268
src/lib/clapper-gtk/clapper-gtk-audio.c
Normal file
@@ -0,0 +1,268 @@
|
||||
/* Clapper GTK Integration Library
|
||||
* Copyright (C) 2025 Rafał Dzięgiel <rafostar.github@gmail.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* ClapperGtkAudio:
|
||||
*
|
||||
* A GTK widget for audio playback with Clapper API.
|
||||
*
|
||||
* #ClapperGtkAudio is a widget meant for integrating audio playback
|
||||
* within GTK application. It exposes [class@Clapper.Player] through its
|
||||
* base class [property@ClapperGtk.Av:player] property.
|
||||
*
|
||||
* Other widgets (buttons, seek bar, etc.) provided by `ClapperGtk` library, once placed
|
||||
* anywhere inside audio container (including nesting within another widget like [class@Gtk.Box])
|
||||
* will automatically control #ClapperGtkAudio they are within. This allows to freely create
|
||||
* custom UI best suited for specific application.
|
||||
*
|
||||
* # Basic usage
|
||||
*
|
||||
* A typical use case is to embed audio widget as part of your app where audio playback
|
||||
* is needed (can be even the very first child of the window). Get the [class@Clapper.Player]
|
||||
* belonging to the AV widget and start adding new [class@Clapper.MediaItem] items to the
|
||||
* [class@Clapper.Queue] for playback. For more information please refer to the Clapper
|
||||
* playback library documentation.
|
||||
*
|
||||
* # Actions
|
||||
*
|
||||
* You can use built-in actions of parent [class@ClapperGtk.Av].
|
||||
* See its documentation for the list of available ones.
|
||||
*
|
||||
* # ClapperGtkAudio as GtkBuildable
|
||||
*
|
||||
* #ClapperGtkAudio implementation of the [iface@Gtk.Buildable] interface supports
|
||||
* placing a single widget (which might then hold multiple widgets) as `<child>` element.
|
||||
*
|
||||
* ```xml
|
||||
* <object class="ClapperGtkAudio" id="audio">
|
||||
* <child>
|
||||
* <object class="GtkBox">
|
||||
* <property name="orientation">horizontal</property>
|
||||
* <child>
|
||||
* <object class="ClapperGtkPreviousItemButton">
|
||||
* </child>
|
||||
* <child>
|
||||
* <object class="ClapperGtkTogglePlayButton">
|
||||
* </child>
|
||||
* <child>
|
||||
* <object class="ClapperGtkNextItemButton">
|
||||
* </child>
|
||||
* </object>
|
||||
* </child>
|
||||
* </object>
|
||||
* ```
|
||||
*
|
||||
* Since: 0.10
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "clapper-gtk-audio.h"
|
||||
|
||||
#define GST_CAT_DEFAULT clapper_gtk_audio_debug
|
||||
GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
|
||||
|
||||
struct _ClapperGtkAudio
|
||||
{
|
||||
ClapperGtkAv parent;
|
||||
|
||||
GtkWidget *child;
|
||||
};
|
||||
|
||||
static void
|
||||
clapper_gtk_audio_add_child (GtkBuildable *buildable,
|
||||
GtkBuilder *builder, GObject *child, const char *type)
|
||||
{
|
||||
if (GTK_IS_WIDGET (child)) {
|
||||
clapper_gtk_audio_set_child (CLAPPER_GTK_AUDIO (buildable), GTK_WIDGET (child));
|
||||
} else {
|
||||
GtkBuildableIface *parent_iface = g_type_interface_peek_parent (GTK_BUILDABLE_GET_IFACE (buildable));
|
||||
parent_iface->add_child (buildable, builder, child, type);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_buildable_iface_init (GtkBuildableIface *iface)
|
||||
{
|
||||
iface->add_child = clapper_gtk_audio_add_child;
|
||||
}
|
||||
|
||||
#define parent_class clapper_gtk_audio_parent_class
|
||||
G_DEFINE_TYPE_WITH_CODE (ClapperGtkAudio, clapper_gtk_audio, CLAPPER_GTK_TYPE_AV,
|
||||
G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE, _buildable_iface_init))
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
PROP_CHILD,
|
||||
PROP_LAST
|
||||
};
|
||||
|
||||
static GParamSpec *param_specs[PROP_LAST] = { NULL, };
|
||||
|
||||
static inline void
|
||||
_unparent_child (ClapperGtkAudio *self)
|
||||
{
|
||||
GtkWidget *child;
|
||||
|
||||
if ((child = gtk_widget_get_first_child (GTK_WIDGET (self))))
|
||||
gtk_widget_unparent (child);
|
||||
}
|
||||
|
||||
/**
|
||||
* clapper_gtk_audio_new:
|
||||
*
|
||||
* Creates a new #ClapperGtkAudio instance.
|
||||
*
|
||||
* Newly created audio widget will also have set "scaletempo" GStreamer element
|
||||
* as default audio filter on its [class@Clapper.Player] and disable video and
|
||||
* subtitle streams. This can be changed after construction by setting
|
||||
* corresponding player properties.
|
||||
*
|
||||
* Returns: a new audio #GtkWidget.
|
||||
*/
|
||||
GtkWidget *
|
||||
clapper_gtk_audio_new (void)
|
||||
{
|
||||
return g_object_new (CLAPPER_GTK_TYPE_AUDIO, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* clapper_gtk_audio_set_child:
|
||||
* @audio: a #ClapperGtkAudio
|
||||
* @child: (nullable): a #GtkWidget
|
||||
*
|
||||
* Set a child #GtkWidget of @audio.
|
||||
*/
|
||||
void
|
||||
clapper_gtk_audio_set_child (ClapperGtkAudio *self, GtkWidget *child)
|
||||
{
|
||||
g_return_if_fail (CLAPPER_GTK_IS_AUDIO (self));
|
||||
g_return_if_fail (GTK_IS_WIDGET (child));
|
||||
|
||||
_unparent_child (self);
|
||||
if (child)
|
||||
gtk_widget_set_parent (child, GTK_WIDGET (self));
|
||||
}
|
||||
|
||||
/**
|
||||
* clapper_gtk_audio_get_child:
|
||||
* @audio: a #ClapperGtkAudio
|
||||
*
|
||||
* Get a child #GtkWidget of @audio.
|
||||
*
|
||||
* Returns: (transfer none) (nullable): #GtkWidget set as child.
|
||||
*/
|
||||
GtkWidget *
|
||||
clapper_gtk_audio_get_child (ClapperGtkAudio *self)
|
||||
{
|
||||
g_return_val_if_fail (CLAPPER_GTK_IS_AUDIO (self), NULL);
|
||||
|
||||
return gtk_widget_get_first_child (GTK_WIDGET (self));
|
||||
}
|
||||
|
||||
static void
|
||||
clapper_gtk_audio_init (ClapperGtkAudio *self)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
clapper_gtk_audio_constructed (GObject *object)
|
||||
{
|
||||
ClapperGtkAudio *self = CLAPPER_GTK_AUDIO_CAST (object);
|
||||
ClapperPlayer *player;
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->constructed (object);
|
||||
|
||||
player = clapper_gtk_av_get_player (CLAPPER_GTK_AV_CAST (self));
|
||||
|
||||
clapper_player_set_video_enabled (player, FALSE);
|
||||
clapper_player_set_subtitles_enabled (player, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
clapper_gtk_audio_dispose (GObject *object)
|
||||
{
|
||||
ClapperGtkAudio *self = CLAPPER_GTK_AUDIO_CAST (object);
|
||||
|
||||
_unparent_child (self);
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
clapper_gtk_audio_get_property (GObject *object, guint prop_id,
|
||||
GValue *value, GParamSpec *pspec)
|
||||
{
|
||||
ClapperGtkAudio *self = CLAPPER_GTK_AUDIO_CAST (object);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_CHILD:
|
||||
g_value_set_object (value, clapper_gtk_audio_get_child (self));
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
clapper_gtk_audio_set_property (GObject *object, guint prop_id,
|
||||
const GValue *value, GParamSpec *pspec)
|
||||
{
|
||||
ClapperGtkAudio *self = CLAPPER_GTK_AUDIO_CAST (object);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_CHILD:
|
||||
clapper_gtk_audio_set_child (self, g_value_get_object (value));
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
clapper_gtk_audio_class_init (ClapperGtkAudioClass *klass)
|
||||
{
|
||||
GObjectClass *gobject_class = (GObjectClass *) klass;
|
||||
GtkWidgetClass *widget_class = (GtkWidgetClass *) klass;
|
||||
|
||||
GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "clappergtkaudio", GST_DEBUG_FG_MAGENTA,
|
||||
"Clapper GTK Audio");
|
||||
|
||||
gobject_class->constructed = clapper_gtk_audio_constructed;
|
||||
gobject_class->get_property = clapper_gtk_audio_get_property;
|
||||
gobject_class->set_property = clapper_gtk_audio_set_property;
|
||||
gobject_class->dispose = clapper_gtk_audio_dispose;
|
||||
|
||||
/**
|
||||
* ClapperGtkAudio:child:
|
||||
*
|
||||
* The child widget of `ClapperGtkAudio`.
|
||||
*/
|
||||
param_specs[PROP_CHILD] = g_param_spec_object ("child",
|
||||
NULL, NULL, GTK_TYPE_WIDGET,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
g_object_class_install_properties (gobject_class, PROP_LAST, param_specs);
|
||||
|
||||
gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
|
||||
gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GENERIC);
|
||||
gtk_widget_class_set_css_name (widget_class, "clapper-gtk-audio");
|
||||
}
|
49
src/lib/clapper-gtk/clapper-gtk-audio.h
Normal file
49
src/lib/clapper-gtk/clapper-gtk-audio.h
Normal file
@@ -0,0 +1,49 @@
|
||||
/* Clapper GTK Integration Library
|
||||
* Copyright (C) 2025 Rafał Dzięgiel <rafostar.github@gmail.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#if !defined(__CLAPPER_GTK_INSIDE__) && !defined(CLAPPER_GTK_COMPILATION)
|
||||
#error "Only <clapper-gtk/clapper-gtk.h> can be included directly."
|
||||
#endif
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib-object.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include <clapper-gtk/clapper-gtk-av.h>
|
||||
#include <clapper-gtk/clapper-gtk-visibility.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define CLAPPER_GTK_TYPE_AUDIO (clapper_gtk_audio_get_type())
|
||||
#define CLAPPER_GTK_AUDIO_CAST(obj) ((ClapperGtkAudio *)(obj))
|
||||
|
||||
CLAPPER_GTK_API
|
||||
G_DECLARE_FINAL_TYPE (ClapperGtkAudio, clapper_gtk_audio, CLAPPER_GTK, AUDIO, ClapperGtkAv)
|
||||
|
||||
CLAPPER_GTK_API
|
||||
GtkWidget * clapper_gtk_audio_new (void);
|
||||
|
||||
CLAPPER_GTK_API
|
||||
void clapper_gtk_audio_set_child (ClapperGtkAudio *audio, GtkWidget *child);
|
||||
|
||||
CLAPPER_GTK_API
|
||||
GtkWidget * clapper_gtk_audio_get_child (ClapperGtkAudio *audio);
|
||||
|
||||
G_END_DECLS
|
645
src/lib/clapper-gtk/clapper-gtk-av.c
Normal file
645
src/lib/clapper-gtk/clapper-gtk-av.c
Normal file
@@ -0,0 +1,645 @@
|
||||
/* Clapper GTK Integration Library
|
||||
* Copyright (C) 2025 Rafał Dzięgiel <rafostar.github@gmail.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* ClapperGtkAv:
|
||||
*
|
||||
* A base class for GTK audio and video widgets.
|
||||
*
|
||||
* See its descendants: [class@ClapperGtk.Audio] and [class@ClapperGtk.Video].
|
||||
*
|
||||
* # Actions
|
||||
*
|
||||
* #ClapperGtkAv defines a set of built-in actions:
|
||||
*
|
||||
* ```yaml
|
||||
* - "av.toggle-play": toggle play/pause
|
||||
* - "av.play": start/resume playback
|
||||
* - "av.pause": pause playback
|
||||
* - "av.stop": stop playback
|
||||
* - "av.seek": seek to position (variant "d")
|
||||
* - "av.seek-custom": seek to position using seek method (variant "(di)")
|
||||
* - "av.toggle-mute": toggle mute state
|
||||
* - "av.set-mute": set mute state (variant "b")
|
||||
* - "av.volume-up": increase volume by 2%
|
||||
* - "av.volume-down": decrease volume by 2%
|
||||
* - "av.set-volume": set volume to specified value (variant "d")
|
||||
* - "av.speed-up": increase speed (from 0.05x - 2x range to nearest quarter)
|
||||
* - "av.speed-down": decrease speed (from 0.05x - 2x range to nearest quarter)
|
||||
* - "av.set-speed": set speed to specified value (variant "d")
|
||||
* - "av.previous-item": select previous item in queue
|
||||
* - "av.next-item": select next item in queue
|
||||
* - "av.select-item": select item at specified index in queue (variant "u")
|
||||
* ```
|
||||
*
|
||||
* Since: 0.10
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "clapper-gtk-av.h"
|
||||
|
||||
#define PERCENTAGE_ROUND(a) (round ((gdouble) a / 0.01) * 0.01)
|
||||
|
||||
#define DEFAULT_AUTO_INHIBIT FALSE
|
||||
|
||||
#define GST_CAT_DEFAULT clapper_gtk_av_debug
|
||||
GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
|
||||
|
||||
typedef struct _ClapperGtkAvPrivate ClapperGtkAvPrivate;
|
||||
|
||||
struct _ClapperGtkAvPrivate
|
||||
{
|
||||
ClapperPlayer *player;
|
||||
gboolean auto_inhibit;
|
||||
|
||||
guint inhibit_cookie;
|
||||
};
|
||||
|
||||
#define parent_class clapper_gtk_av_parent_class
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (ClapperGtkAv, clapper_gtk_av, GTK_TYPE_WIDGET)
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
PROP_PLAYER,
|
||||
PROP_AUTO_INHIBIT,
|
||||
PROP_INHIBITED,
|
||||
PROP_LAST
|
||||
};
|
||||
|
||||
static gboolean provider_added = FALSE;
|
||||
static GParamSpec *param_specs[PROP_LAST] = { NULL, };
|
||||
|
||||
static void
|
||||
toggle_play_action_cb (GtkWidget *widget, const gchar *action_name, GVariant *parameter)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (self);
|
||||
|
||||
switch (clapper_player_get_state (player)) {
|
||||
case CLAPPER_PLAYER_STATE_PLAYING:
|
||||
clapper_player_pause (player);
|
||||
break;
|
||||
case CLAPPER_PLAYER_STATE_STOPPED:
|
||||
case CLAPPER_PLAYER_STATE_PAUSED:
|
||||
clapper_player_play (player);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
play_action_cb (GtkWidget *widget, const gchar *action_name, GVariant *parameter)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (self);
|
||||
|
||||
clapper_player_play (player);
|
||||
}
|
||||
|
||||
static void
|
||||
pause_action_cb (GtkWidget *widget, const gchar *action_name, GVariant *parameter)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (self);
|
||||
|
||||
clapper_player_pause (player);
|
||||
}
|
||||
|
||||
static void
|
||||
stop_action_cb (GtkWidget *widget, const gchar *action_name, GVariant *parameter)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (self);
|
||||
|
||||
clapper_player_stop (player);
|
||||
}
|
||||
|
||||
static void
|
||||
seek_action_cb (GtkWidget *widget, const gchar *action_name, GVariant *parameter)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (self);
|
||||
gdouble position = g_variant_get_double (parameter);
|
||||
|
||||
clapper_player_seek (player, position);
|
||||
}
|
||||
|
||||
static void
|
||||
seek_custom_action_cb (GtkWidget *widget, const gchar *action_name, GVariant *parameter)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (self);
|
||||
ClapperPlayerSeekMethod method = CLAPPER_PLAYER_SEEK_METHOD_NORMAL;
|
||||
gdouble position = 0;
|
||||
|
||||
g_variant_get (parameter, "(di)", &position, &method);
|
||||
clapper_player_seek_custom (player, position, method);
|
||||
}
|
||||
|
||||
static void
|
||||
toggle_mute_action_cb (GtkWidget *widget, const gchar *action_name, GVariant *parameter)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (self);
|
||||
|
||||
clapper_player_set_mute (player, !clapper_player_get_mute (player));
|
||||
}
|
||||
|
||||
static void
|
||||
set_mute_action_cb (GtkWidget *widget, const gchar *action_name, GVariant *parameter)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (self);
|
||||
gboolean mute = g_variant_get_boolean (parameter);
|
||||
|
||||
clapper_player_set_mute (player, mute);
|
||||
}
|
||||
|
||||
static void
|
||||
volume_up_action_cb (GtkWidget *widget, const gchar *action_name, GVariant *parameter)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (self);
|
||||
gdouble volume = (clapper_player_get_volume (player) + 0.02);
|
||||
|
||||
if (volume > 2.0)
|
||||
volume = 2.0;
|
||||
|
||||
clapper_player_set_volume (player, PERCENTAGE_ROUND (volume));
|
||||
}
|
||||
|
||||
static void
|
||||
volume_down_action_cb (GtkWidget *widget, const gchar *action_name, GVariant *parameter)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (self);
|
||||
gdouble volume = (clapper_player_get_volume (player) - 0.02);
|
||||
|
||||
if (volume < 0)
|
||||
volume = 0;
|
||||
|
||||
clapper_player_set_volume (player, PERCENTAGE_ROUND (volume));
|
||||
}
|
||||
|
||||
static void
|
||||
set_volume_action_cb (GtkWidget *widget, const gchar *action_name, GVariant *parameter)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (self);
|
||||
gdouble volume = g_variant_get_double (parameter);
|
||||
|
||||
clapper_player_set_volume (player, volume);
|
||||
}
|
||||
|
||||
static void
|
||||
speed_up_action_cb (GtkWidget *widget, const gchar *action_name, GVariant *parameter)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (self);
|
||||
gdouble dest, speed = clapper_player_get_speed (player);
|
||||
|
||||
if (speed >= 2.0)
|
||||
return;
|
||||
|
||||
dest = 0.25;
|
||||
while (speed >= dest)
|
||||
dest += 0.25;
|
||||
|
||||
if (dest > 2.0)
|
||||
dest = 2.0;
|
||||
|
||||
clapper_player_set_speed (player, dest);
|
||||
}
|
||||
|
||||
static void
|
||||
speed_down_action_cb (GtkWidget *widget, const gchar *action_name, GVariant *parameter)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (self);
|
||||
gdouble dest, speed = clapper_player_get_speed (player);
|
||||
|
||||
if (speed <= 0.05)
|
||||
return;
|
||||
|
||||
dest = 2.0;
|
||||
while (speed <= dest)
|
||||
dest -= 0.25;
|
||||
|
||||
if (dest < 0.05)
|
||||
dest = 0.05;
|
||||
|
||||
clapper_player_set_speed (player, dest);
|
||||
}
|
||||
|
||||
static void
|
||||
set_speed_action_cb (GtkWidget *widget, const gchar *action_name, GVariant *parameter)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (self);
|
||||
gdouble speed = g_variant_get_double (parameter);
|
||||
|
||||
clapper_player_set_speed (player, speed);
|
||||
}
|
||||
|
||||
static void
|
||||
previous_item_action_cb (GtkWidget *widget, const gchar *action_name, GVariant *parameter)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (self);
|
||||
|
||||
clapper_queue_select_previous_item (clapper_player_get_queue (player));
|
||||
}
|
||||
|
||||
static void
|
||||
next_item_action_cb (GtkWidget *widget, const gchar *action_name, GVariant *parameter)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (self);
|
||||
|
||||
clapper_queue_select_next_item (clapper_player_get_queue (player));
|
||||
}
|
||||
|
||||
static void
|
||||
select_item_action_cb (GtkWidget *widget, const gchar *action_name, GVariant *parameter)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
ClapperPlayer *player = clapper_gtk_av_get_player (self);
|
||||
guint index = g_variant_get_uint32 (parameter);
|
||||
|
||||
clapper_queue_select_index (clapper_player_get_queue (player), index);
|
||||
}
|
||||
|
||||
static void
|
||||
_ensure_css_provider (void)
|
||||
{
|
||||
GdkDisplay *display;
|
||||
|
||||
if (provider_added)
|
||||
return;
|
||||
|
||||
display = gdk_display_get_default ();
|
||||
|
||||
if (G_LIKELY (display != NULL)) {
|
||||
GtkCssProvider *provider = gtk_css_provider_new ();
|
||||
gtk_css_provider_load_from_resource (provider,
|
||||
CLAPPER_GTK_RESOURCE_PREFIX "/css/styles.css");
|
||||
|
||||
gtk_style_context_add_provider_for_display (display,
|
||||
(GtkStyleProvider *) provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION - 1);
|
||||
g_object_unref (provider);
|
||||
|
||||
provider_added = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
_set_inhibit_session (ClapperGtkAv *self, gboolean inhibit)
|
||||
{
|
||||
ClapperGtkAvPrivate *priv = clapper_gtk_av_get_instance_private (self);
|
||||
GtkRoot *root;
|
||||
GApplication *app;
|
||||
gboolean inhibited = (priv->inhibit_cookie != 0);
|
||||
|
||||
if (inhibited == inhibit)
|
||||
return;
|
||||
|
||||
GST_DEBUG_OBJECT (self, "Trying to %sinhibit session...", (inhibit) ? "" : "un");
|
||||
|
||||
root = gtk_widget_get_root (GTK_WIDGET (self));
|
||||
|
||||
if (!root && !GTK_IS_WINDOW (root)) {
|
||||
GST_WARNING_OBJECT (self, "Cannot %sinhibit session "
|
||||
"without root window", (inhibit) ? "" : "un");
|
||||
return;
|
||||
}
|
||||
|
||||
/* NOTE: Not using application from window prop,
|
||||
* as it goes away early when unrooting */
|
||||
app = g_application_get_default ();
|
||||
|
||||
if (!app && !GTK_IS_APPLICATION (app)) {
|
||||
GST_WARNING_OBJECT (self, "Cannot %sinhibit session "
|
||||
"without window application set", (inhibit) ? "" : "un");
|
||||
return;
|
||||
}
|
||||
|
||||
if (inhibited) {
|
||||
gtk_application_uninhibit (GTK_APPLICATION (app), priv->inhibit_cookie);
|
||||
priv->inhibit_cookie = 0;
|
||||
}
|
||||
if (inhibit) {
|
||||
priv->inhibit_cookie = gtk_application_inhibit (GTK_APPLICATION (app),
|
||||
GTK_WINDOW (root), GTK_APPLICATION_INHIBIT_IDLE,
|
||||
"Media is playing");
|
||||
}
|
||||
|
||||
GST_DEBUG_OBJECT (self, "Session %sinhibited", (inhibit) ? "" : "un");
|
||||
g_object_notify_by_pspec (G_OBJECT (self), param_specs[PROP_INHIBITED]);
|
||||
}
|
||||
|
||||
static void
|
||||
_player_state_changed_cb (ClapperPlayer *player,
|
||||
GParamSpec *pspec G_GNUC_UNUSED, ClapperGtkAv *self)
|
||||
{
|
||||
ClapperGtkAvPrivate *priv = clapper_gtk_av_get_instance_private (self);
|
||||
|
||||
if (priv->auto_inhibit) {
|
||||
ClapperPlayerState state = clapper_player_get_state (player);
|
||||
_set_inhibit_session (self, state == CLAPPER_PLAYER_STATE_PLAYING);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* clapper_gtk_av_get_player:
|
||||
* @av: a #ClapperGtkAv
|
||||
*
|
||||
* Get #ClapperPlayer used by this #ClapperGtkAv instance.
|
||||
*
|
||||
* Returns: (transfer none): a #ClapperPlayer used by widget.
|
||||
*
|
||||
* Since: 0.10
|
||||
*/
|
||||
ClapperPlayer *
|
||||
clapper_gtk_av_get_player (ClapperGtkAv *self)
|
||||
{
|
||||
ClapperGtkAvPrivate *priv;
|
||||
|
||||
g_return_val_if_fail (CLAPPER_GTK_IS_AV (self), NULL);
|
||||
|
||||
priv = clapper_gtk_av_get_instance_private (self);
|
||||
|
||||
return priv->player;
|
||||
}
|
||||
|
||||
/**
|
||||
* clapper_gtk_av_set_auto_inhibit:
|
||||
* @av: a #ClapperGtkAv
|
||||
* @inhibit: whether to enable automatic session inhibit
|
||||
*
|
||||
* Set whether widget should try to automatically inhibit session
|
||||
* from idling (and possibly screen going black) when media is playing.
|
||||
*
|
||||
* Since: 0.10
|
||||
*/
|
||||
void
|
||||
clapper_gtk_av_set_auto_inhibit (ClapperGtkAv *self, gboolean inhibit)
|
||||
{
|
||||
ClapperGtkAvPrivate *priv;
|
||||
|
||||
g_return_if_fail (CLAPPER_GTK_IS_AV (self));
|
||||
|
||||
priv = clapper_gtk_av_get_instance_private (self);
|
||||
|
||||
if (priv->auto_inhibit != inhibit) {
|
||||
priv->auto_inhibit = inhibit;
|
||||
|
||||
/* Uninhibit if we were auto inhibited earlier */
|
||||
if (!priv->auto_inhibit)
|
||||
_set_inhibit_session (self, FALSE);
|
||||
|
||||
g_object_notify_by_pspec (G_OBJECT (self), param_specs[PROP_AUTO_INHIBIT]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* clapper_gtk_av_get_auto_inhibit:
|
||||
* @av: a #ClapperGtkAv
|
||||
*
|
||||
* Get whether automatic session inhibit is enabled.
|
||||
*
|
||||
* Returns: %TRUE if enabled, %FALSE otherwise.
|
||||
*
|
||||
* Since: 0.10
|
||||
*/
|
||||
gboolean
|
||||
clapper_gtk_av_get_auto_inhibit (ClapperGtkAv *self)
|
||||
{
|
||||
ClapperGtkAvPrivate *priv;
|
||||
|
||||
g_return_val_if_fail (CLAPPER_GTK_IS_AV (self), FALSE);
|
||||
|
||||
priv = clapper_gtk_av_get_instance_private (self);
|
||||
|
||||
return priv->auto_inhibit;
|
||||
}
|
||||
|
||||
/**
|
||||
* clapper_gtk_av_get_inhibited:
|
||||
* @av: a #ClapperGtkAv
|
||||
*
|
||||
* Get whether session is currently inhibited by
|
||||
* [property@ClapperGtk.Av:auto-inhibit].
|
||||
*
|
||||
* Returns: %TRUE if inhibited, %FALSE otherwise.
|
||||
*
|
||||
* Since: 0.10
|
||||
*/
|
||||
gboolean
|
||||
clapper_gtk_av_get_inhibited (ClapperGtkAv *self)
|
||||
{
|
||||
ClapperGtkAvPrivate *priv;
|
||||
|
||||
g_return_val_if_fail (CLAPPER_GTK_IS_AV (self), FALSE);
|
||||
|
||||
priv = clapper_gtk_av_get_instance_private (self);
|
||||
|
||||
return (priv->inhibit_cookie != 0);
|
||||
}
|
||||
|
||||
static void
|
||||
clapper_gtk_av_root (GtkWidget *widget)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
ClapperGtkAvPrivate *priv = clapper_gtk_av_get_instance_private (self);
|
||||
|
||||
_ensure_css_provider ();
|
||||
|
||||
GTK_WIDGET_CLASS (parent_class)->root (widget);
|
||||
|
||||
if (priv->auto_inhibit) {
|
||||
ClapperPlayerState state = clapper_player_get_state (priv->player);
|
||||
_set_inhibit_session (self, state == CLAPPER_PLAYER_STATE_PLAYING);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
clapper_gtk_av_unroot (GtkWidget *widget)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (widget);
|
||||
|
||||
_set_inhibit_session (self, FALSE);
|
||||
|
||||
GTK_WIDGET_CLASS (parent_class)->unroot (widget);
|
||||
}
|
||||
|
||||
static void
|
||||
clapper_gtk_av_init (ClapperGtkAv *self)
|
||||
{
|
||||
ClapperGtkAvPrivate *priv = clapper_gtk_av_get_instance_private (self);
|
||||
|
||||
priv->auto_inhibit = DEFAULT_AUTO_INHIBIT;
|
||||
}
|
||||
|
||||
static void
|
||||
clapper_gtk_av_constructed (GObject *object)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (object);
|
||||
ClapperGtkAvPrivate *priv = clapper_gtk_av_get_instance_private (self);
|
||||
GstElement *afilter;
|
||||
|
||||
priv->player = clapper_player_new ();
|
||||
|
||||
g_signal_connect (priv->player, "notify::state",
|
||||
G_CALLBACK (_player_state_changed_cb), self);
|
||||
|
||||
afilter = gst_element_factory_make ("scaletempo", NULL);
|
||||
if (G_LIKELY (afilter != NULL))
|
||||
clapper_player_set_audio_filter (priv->player, afilter);
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->constructed (object);
|
||||
}
|
||||
|
||||
static void
|
||||
clapper_gtk_av_dispose (GObject *object)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (object);
|
||||
ClapperGtkAvPrivate *priv = clapper_gtk_av_get_instance_private (self);
|
||||
|
||||
/* Something else might still be holding a reference on the player,
|
||||
* thus we should disconnect everything before disposing template */
|
||||
if (priv->player) {
|
||||
g_signal_handlers_disconnect_by_func (priv->player,
|
||||
_player_state_changed_cb, self);
|
||||
}
|
||||
|
||||
gst_clear_object (&priv->player);
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
clapper_gtk_av_get_property (GObject *object, guint prop_id,
|
||||
GValue *value, GParamSpec *pspec)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (object);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_PLAYER:
|
||||
g_value_set_object (value, clapper_gtk_av_get_player (self));
|
||||
break;
|
||||
case PROP_AUTO_INHIBIT:
|
||||
g_value_set_boolean (value, clapper_gtk_av_get_auto_inhibit (self));
|
||||
break;
|
||||
case PROP_INHIBITED:
|
||||
g_value_set_boolean (value, clapper_gtk_av_get_inhibited (self));
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
clapper_gtk_av_set_property (GObject *object, guint prop_id,
|
||||
const GValue *value, GParamSpec *pspec)
|
||||
{
|
||||
ClapperGtkAv *self = CLAPPER_GTK_AV_CAST (object);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_AUTO_INHIBIT:
|
||||
clapper_gtk_av_set_auto_inhibit (self, g_value_get_boolean (value));
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
clapper_gtk_av_class_init (ClapperGtkAvClass *klass)
|
||||
{
|
||||
GObjectClass *gobject_class = (GObjectClass *) klass;
|
||||
GtkWidgetClass *widget_class = (GtkWidgetClass *) klass;
|
||||
|
||||
GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "clappergtkav", GST_DEBUG_FG_MAGENTA,
|
||||
"Clapper GTK AV");
|
||||
|
||||
widget_class->root = clapper_gtk_av_root;
|
||||
widget_class->unroot = clapper_gtk_av_unroot;
|
||||
|
||||
gobject_class->constructed = clapper_gtk_av_constructed;
|
||||
gobject_class->get_property = clapper_gtk_av_get_property;
|
||||
gobject_class->set_property = clapper_gtk_av_set_property;
|
||||
gobject_class->dispose = clapper_gtk_av_dispose;
|
||||
|
||||
/**
|
||||
* ClapperGtkAv:player:
|
||||
*
|
||||
* A #ClapperPlayer used by widget.
|
||||
*/
|
||||
param_specs[PROP_PLAYER] = g_param_spec_object ("player",
|
||||
NULL, NULL, CLAPPER_TYPE_PLAYER,
|
||||
G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* ClapperGtkAv:auto-inhibit:
|
||||
*
|
||||
* Try to automatically inhibit session when media is playing.
|
||||
*/
|
||||
param_specs[PROP_AUTO_INHIBIT] = g_param_spec_boolean ("auto-inhibit",
|
||||
NULL, NULL, DEFAULT_AUTO_INHIBIT,
|
||||
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
/**
|
||||
* ClapperGtkAv:inhibited:
|
||||
*
|
||||
* Get whether session is currently inhibited by playback.
|
||||
*/
|
||||
param_specs[PROP_INHIBITED] = g_param_spec_boolean ("inhibited",
|
||||
NULL, NULL, FALSE,
|
||||
G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
g_object_class_install_properties (gobject_class, PROP_LAST, param_specs);
|
||||
|
||||
gtk_widget_class_install_action (widget_class, "av.toggle-play", NULL, toggle_play_action_cb);
|
||||
gtk_widget_class_install_action (widget_class, "av.play", NULL, play_action_cb);
|
||||
gtk_widget_class_install_action (widget_class, "av.pause", NULL, pause_action_cb);
|
||||
gtk_widget_class_install_action (widget_class, "av.stop", NULL, stop_action_cb);
|
||||
gtk_widget_class_install_action (widget_class, "av.seek", "d", seek_action_cb);
|
||||
gtk_widget_class_install_action (widget_class, "av.seek-custom", "(di)", seek_custom_action_cb);
|
||||
gtk_widget_class_install_action (widget_class, "av.toggle-mute", NULL, toggle_mute_action_cb);
|
||||
gtk_widget_class_install_action (widget_class, "av.set-mute", "b", set_mute_action_cb);
|
||||
gtk_widget_class_install_action (widget_class, "av.volume-up", NULL, volume_up_action_cb);
|
||||
gtk_widget_class_install_action (widget_class, "av.volume-down", NULL, volume_down_action_cb);
|
||||
gtk_widget_class_install_action (widget_class, "av.set-volume", "d", set_volume_action_cb);
|
||||
gtk_widget_class_install_action (widget_class, "av.speed-up", NULL, speed_up_action_cb);
|
||||
gtk_widget_class_install_action (widget_class, "av.speed-down", NULL, speed_down_action_cb);
|
||||
gtk_widget_class_install_action (widget_class, "av.set-speed", "d", set_speed_action_cb);
|
||||
gtk_widget_class_install_action (widget_class, "av.previous-item", NULL, previous_item_action_cb);
|
||||
gtk_widget_class_install_action (widget_class, "av.next-item", NULL, next_item_action_cb);
|
||||
gtk_widget_class_install_action (widget_class, "av.select-item", "u", select_item_action_cb);
|
||||
|
||||
gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
|
||||
gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GENERIC);
|
||||
gtk_widget_class_set_css_name (widget_class, "clapper-gtk-av");
|
||||
}
|
60
src/lib/clapper-gtk/clapper-gtk-av.h
Normal file
60
src/lib/clapper-gtk/clapper-gtk-av.h
Normal file
@@ -0,0 +1,60 @@
|
||||
/* Clapper GTK Integration Library
|
||||
* Copyright (C) 2025 Rafał Dzięgiel <rafostar.github@gmail.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#if !defined(__CLAPPER_GTK_INSIDE__) && !defined(CLAPPER_GTK_COMPILATION)
|
||||
#error "Only <clapper-gtk/clapper-gtk.h> can be included directly."
|
||||
#endif
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib-object.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <clapper/clapper.h>
|
||||
|
||||
#include <clapper-gtk/clapper-gtk-visibility.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define CLAPPER_GTK_TYPE_AV (clapper_gtk_av_get_type())
|
||||
#define CLAPPER_GTK_AV_CAST(obj) ((ClapperGtkAv *)(obj))
|
||||
|
||||
CLAPPER_GTK_API
|
||||
G_DECLARE_DERIVABLE_TYPE (ClapperGtkAv, clapper_gtk_av, CLAPPER_GTK, AV, GtkWidget)
|
||||
|
||||
struct _ClapperGtkAvClass
|
||||
{
|
||||
GtkWidgetClass parent_class;
|
||||
|
||||
/*< private >*/
|
||||
gpointer padding[4];
|
||||
};
|
||||
|
||||
CLAPPER_GTK_API
|
||||
ClapperPlayer * clapper_gtk_av_get_player (ClapperGtkAv *av);
|
||||
|
||||
CLAPPER_GTK_API
|
||||
void clapper_gtk_av_set_auto_inhibit (ClapperGtkAv *av, gboolean inhibit);
|
||||
|
||||
CLAPPER_GTK_API
|
||||
gboolean clapper_gtk_av_get_auto_inhibit (ClapperGtkAv *av);
|
||||
|
||||
CLAPPER_GTK_API
|
||||
gboolean clapper_gtk_av_get_inhibited (ClapperGtkAv *av);
|
||||
|
||||
G_END_DECLS
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <clapper/clapper.h>
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "clapper-gtk-buffering-paintable-private.h"
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <clapper/clapper.h>
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -83,7 +82,7 @@ clapper_gtk_next_item_button_init (ClapperGtkNextItemButton *self)
|
||||
{
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (self), FALSE);
|
||||
gtk_button_set_icon_name (GTK_BUTTON (self), "media-skip-forward-symbolic");
|
||||
gtk_actionable_set_action_name (GTK_ACTIONABLE (self), "video.next-item");
|
||||
gtk_actionable_set_action_name (GTK_ACTIONABLE (self), "av.next-item");
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -83,7 +82,7 @@ clapper_gtk_previous_item_button_init (ClapperGtkPreviousItemButton *self)
|
||||
{
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (self), FALSE);
|
||||
gtk_button_set_icon_name (GTK_BUTTON (self), "media-skip-backward-symbolic");
|
||||
gtk_actionable_set_action_name (GTK_ACTIONABLE (self), "video.previous-item");
|
||||
gtk_actionable_set_action_name (GTK_ACTIONABLE (self), "av.previous-item");
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
@@ -12,9 +12,8 @@
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
* License along with this library; if not, see
|
||||
* <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -396,6 +395,47 @@ _update_duration_label (ClapperGtkSeekBar *self, gdouble duration)
|
||||
gtk_adjustment_set_upper (adjustment, duration);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_find_marks_in_widget (GtkWidget *widget, GtkWidget **top_marks, GtkWidget **bottom_marks)
|
||||
{
|
||||
GtkWidget *child;
|
||||
|
||||
if (g_strcmp0 (gtk_widget_get_css_name (widget), "marks") == 0) {
|
||||
if (gtk_widget_has_css_class (widget, "top"))
|
||||
*top_marks = widget;
|
||||
else if (gtk_widget_has_css_class (widget, "bottom"))
|
||||
*bottom_marks = widget;
|
||||
|
||||
/* Its unexpected to have marks within marks,
|
||||
* so do not iterate children of marks widget */
|
||||
return (*top_marks && *bottom_marks);
|
||||
}
|
||||
|
||||
child = gtk_widget_get_first_child (widget);
|
||||
|
||||
while (child != NULL) {
|
||||
if (_find_marks_in_widget (child, top_marks, bottom_marks))
|
||||
return TRUE;
|
||||
|
||||
child = gtk_widget_get_next_sibling (child);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_find_last_mark_in_marks (GtkWidget *marks, GtkWidget **last_mark)
|
||||
{
|
||||
GtkWidget *widget = gtk_widget_get_last_child (marks);
|
||||
|
||||
if (widget && g_strcmp0 (gtk_widget_get_css_name (widget), "mark") == 0) {
|
||||
*last_mark = widget;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
_update_scale_marks (ClapperGtkSeekBar *self, ClapperTimeline *timeline)
|
||||
{
|
||||
@@ -424,11 +464,43 @@ _update_scale_marks (ClapperGtkSeekBar *self, ClapperTimeline *timeline)
|
||||
|
||||
for (i = 0; i < n_markers; ++i) {
|
||||
ClapperMarker *marker = clapper_timeline_get_marker (timeline, i);
|
||||
ClapperMarkerType marker_type = clapper_marker_get_marker_type (marker);
|
||||
gdouble start = clapper_marker_get_start (marker);
|
||||
|
||||
gtk_scale_add_mark (GTK_SCALE (self->scale), start, GTK_POS_TOP, NULL);
|
||||
gtk_scale_add_mark (GTK_SCALE (self->scale), start, GTK_POS_BOTTOM, NULL);
|
||||
|
||||
if (marker_type >= CLAPPER_MARKER_TYPE_CUSTOM_1) {
|
||||
GtkWidget *top_marks = NULL, *bottom_marks = NULL;
|
||||
GtkWidget *top_mark = NULL, *bottom_mark = NULL;
|
||||
|
||||
if (_find_marks_in_widget (self->scale, &top_marks, &bottom_marks)
|
||||
&& _find_last_mark_in_marks (top_marks, &top_mark)
|
||||
&& _find_last_mark_in_marks (bottom_marks, &bottom_mark)) {
|
||||
const gchar *custom_name;
|
||||
|
||||
switch (marker_type) {
|
||||
case CLAPPER_MARKER_TYPE_CUSTOM_1:
|
||||
custom_name = "custom1";
|
||||
break;
|
||||
case CLAPPER_MARKER_TYPE_CUSTOM_2:
|
||||
custom_name = "custom2";
|
||||
break;
|
||||
case CLAPPER_MARKER_TYPE_CUSTOM_3:
|
||||
custom_name = "custom3";
|
||||
break;
|
||||
default:
|
||||
custom_name = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
if (G_LIKELY (custom_name != NULL)) {
|
||||
gtk_widget_add_css_class (top_mark, custom_name);
|
||||
gtk_widget_add_css_class (bottom_mark, custom_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gst_object_unref (marker);
|
||||
}
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user