mirror of
https://github.com/Rafostar/clapper.git
synced 2025-08-30 16:02:00 +02:00
Compare commits
12 Commits
gstplaylis
...
0.3.0
Author | SHA1 | Date | |
---|---|---|---|
|
37d2f7aebd | ||
|
f2ac3b20a3 | ||
|
ade60b93a4 | ||
|
48bc96f074 | ||
|
0d9cb91705 | ||
|
21ccab1cc2 | ||
|
bea3b1670d | ||
|
0d4d3f1a8c | ||
|
fc525ffcb1 | ||
|
6f1a5626bc | ||
|
fbe6a8804c | ||
|
c0b92c190b |
6
TODO.md
6
TODO.md
@@ -40,7 +40,7 @@
|
|||||||
- [X] Remote playback controls via HTTP (VLC) + WebSockets
|
- [X] Remote playback controls via HTTP (VLC) + WebSockets
|
||||||
- [ ] Expand available API
|
- [ ] Expand available API
|
||||||
- [ ] API documentation
|
- [ ] API documentation
|
||||||
- [ ] Integration with the top bar
|
- [X] Integration with the top bar
|
||||||
- [ ] MPRIS support
|
- [X] MPRIS support
|
||||||
- [ ] Controls in the notifications panel
|
- [X] Controls in the notifications panel
|
||||||
- [ ] Progress bar in the notifications panel (maybe via extension)
|
- [ ] Progress bar in the notifications panel (maybe via extension)
|
||||||
|
115
data/com.github.rafostar.Clapper-symbolic.svg
Normal file
115
data/com.github.rafostar.Clapper-symbolic.svg
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="16"
|
||||||
|
height="16"
|
||||||
|
viewBox="0 0 4.2333333 4.2333334"
|
||||||
|
version="1.1"
|
||||||
|
id="svg5"
|
||||||
|
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
|
||||||
|
sodipodi:docname="com.github.rafostar.Clapper-symbolic.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview7"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:snap-bbox-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:snap-midpoints="true"
|
||||||
|
inkscape:snap-global="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:zoom="32"
|
||||||
|
inkscape:cx="6.078125"
|
||||||
|
inkscape:cy="8.09375"
|
||||||
|
inkscape:window-width="1680"
|
||||||
|
inkscape:window-height="981"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="layer1" />
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect1853"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
satellites_param="F,0,0,1,0,1.8520833,0,1 @ F,0,0,1,0,1.8520833,0,1 @ F,0,0,1,0,1.8520833,0,1 @ F,0,0,1,0,1.8520833,0,1"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
radius="7"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="fillet_chamfer"
|
||||||
|
id="path-effect1732"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
satellites_param="F,0,0,1,0,1.8520833,0,1 @ F,0,0,1,0,1.8520833,0,1 @ F,0,0,1,0,1.8520833,0,1 @ F,0,0,1,0,1.8520833,0,1"
|
||||||
|
unit="px"
|
||||||
|
method="auto"
|
||||||
|
mode="F"
|
||||||
|
radius="7"
|
||||||
|
chamfer_steps="1"
|
||||||
|
flexible="false"
|
||||||
|
use_knot_distance="true"
|
||||||
|
apply_no_radius="true"
|
||||||
|
apply_with_radius="true"
|
||||||
|
only_selected="false"
|
||||||
|
hide_knots="false" />
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1">
|
||||||
|
<g
|
||||||
|
id="g2022"
|
||||||
|
transform="matrix(0.06169519,0,0,0.06168906,-4.7800087,-3.2713603)">
|
||||||
|
<path
|
||||||
|
id="rect973"
|
||||||
|
style="fill:#000000;stroke-width:1.30776;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill"
|
||||||
|
d="m 88.193064,81.795006 c -0.699254,0 -1.342327,0.227875 -1.864484,0.609782 h 51.32503 c -0.52216,-0.381907 -1.16471,-0.609782 -1.86397,-0.609782 z m -3.157945,10.475846 v 26.225278 c 0,1.74939 1.40856,3.15743 3.157945,3.15743 h 47.596576 c 1.74939,0 3.15795,-1.40804 3.15795,-3.15743 V 92.270852 Z m 20.323311,4.964038 15.40009,9.27283 -15.5205,9.56634 z" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 83.974394,69.464471 7.344033,-0.06509 a 2.7923103,2.7923103 33.047712 0 1 2.587466,1.683384 l 7.009937,16.201526 a 1.2163248,1.2163248 123.30899 0 1 -1.116623,1.699322 l -15.720141,-0.004 a 1.862525,1.862525 44.853691 0 1 -1.862019,-1.852534 l -0.08473,-15.79409 a 1.8585738,1.8585738 134.59241 0 1 1.842075,-1.868472 z"
|
||||||
|
id="path1422"
|
||||||
|
inkscape:path-effect="#path-effect1732"
|
||||||
|
inkscape:original-d="m 82.122383,69.480886 11.048055,-0.09792 8.480852,19.601124 -19.424307,-0.005 z" />
|
||||||
|
<rect
|
||||||
|
style="fill:#000000;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill"
|
||||||
|
id="rect1544"
|
||||||
|
width="59.366463"
|
||||||
|
height="9.8661175"
|
||||||
|
x="82"
|
||||||
|
y="79.292183"
|
||||||
|
ry="1.2306831" />
|
||||||
|
<path
|
||||||
|
id="rect1847"
|
||||||
|
style="fill:#000000;stroke-width:4.91339;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill"
|
||||||
|
d="m 522.12695,200.42773 c -0.45798,3.8e-4 -0.92335,0.0696 -1.38476,0.21289 l -172.88672,53.70313 5.28515,-0.0469 a 10.55362,10.55362 0 0 1 9.7793,6.36328 l 10.69922,24.72656 158.18359,-49.13477 c 2.46089,-0.7644 3.82691,-3.36137 3.0625,-5.82226 l -8.30078,-26.72657 c -0.62108,-1.99947 -2.4529,-3.277 -4.4375,-3.27539 z m -203.69531,63.05469 -3.08398,0.95899 c -2.46089,0.7644 -3.82691,3.35942 -3.0625,5.82031 l 6.29101,20.2539 z"
|
||||||
|
transform="scale(0.26458333)" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.8 KiB |
@@ -14,6 +14,10 @@
|
|||||||
<default>100</default>
|
<default>100</default>
|
||||||
<summary>Custom initial volume value in percentage after startup</summary>
|
<summary>Custom initial volume value in percentage after startup</summary>
|
||||||
</key>
|
</key>
|
||||||
|
<key name="keep-last-frame" type="b">
|
||||||
|
<default>false</default>
|
||||||
|
<summary>Keep showing last video frame after playback finishes</summary>
|
||||||
|
</key>
|
||||||
<key name="close-auto" type="b">
|
<key name="close-auto" type="b">
|
||||||
<default>false</default>
|
<default>false</default>
|
||||||
<summary>Automatically close the app after playback finishes</summary>
|
<summary>Automatically close the app after playback finishes</summary>
|
||||||
|
@@ -25,7 +25,7 @@
|
|||||||
<p>
|
<p>
|
||||||
For best stability Wayland session is recommended. Wayland users with AMD/Intel GPUs
|
For best stability Wayland session is recommended. Wayland users with AMD/Intel GPUs
|
||||||
can try enabling HIGHLY EXPERIMENTAL "vah264dec" plugin inside player preferences
|
can try enabling HIGHLY EXPERIMENTAL "vah264dec" plugin inside player preferences
|
||||||
for reduced CPU and GPU usage on standard (8-bit) H.264 videos.
|
for reduced CPU and GPU usage on H.264 videos.
|
||||||
</p>
|
</p>
|
||||||
</description>
|
</description>
|
||||||
<developer_name>Rafał Dzięgiel</developer_name>
|
<developer_name>Rafał Dzięgiel</developer_name>
|
||||||
@@ -52,6 +52,26 @@
|
|||||||
</screenshot>
|
</screenshot>
|
||||||
</screenshots>
|
</screenshots>
|
||||||
<releases>
|
<releases>
|
||||||
|
<release version="0.3.0" date="2021-06-18">
|
||||||
|
<description>
|
||||||
|
<p>Changes:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Added MPRIS support</li>
|
||||||
|
<li>Added repeat modes: single video, whole playlist and shuffle</li>
|
||||||
|
<li>Support opening folders with media files</li>
|
||||||
|
<li>Append playlist items by holding Ctrl while doing Drag and Drop</li>
|
||||||
|
<li>Improved handling of keyboard shortcuts</li>
|
||||||
|
<li>Added more keyboard shortcuts</li>
|
||||||
|
<li>Added window that shows available keyboard shortcuts</li>
|
||||||
|
<li>Show black screen by default after playback (make showing last frame optional instead)</li>
|
||||||
|
<li>Added ability to export playlist to file</li>
|
||||||
|
<li>Improve handling of changing displays with different resolutions</li>
|
||||||
|
<li>Added support for EGL under x11 with GTK 4.3.1 or later</li>
|
||||||
|
<li>Added missing symbolic app icon</li>
|
||||||
|
<li>Some misc bug fixes and code cleanups</li>
|
||||||
|
</ul>
|
||||||
|
</description>
|
||||||
|
</release>
|
||||||
<release version="0.2.1" date="2021-04-19">
|
<release version="0.2.1" date="2021-04-19">
|
||||||
<description>
|
<description>
|
||||||
<p>Player:</p>
|
<p>Player:</p>
|
||||||
|
@@ -4,6 +4,9 @@ iconsdir = join_paths(sharedir, 'icons', 'hicolor')
|
|||||||
install_data('com.github.rafostar.Clapper.svg',
|
install_data('com.github.rafostar.Clapper.svg',
|
||||||
install_dir: join_paths(iconsdir, 'scalable', 'apps')
|
install_dir: join_paths(iconsdir, 'scalable', 'apps')
|
||||||
)
|
)
|
||||||
|
install_data('com.github.rafostar.Clapper-symbolic.svg',
|
||||||
|
install_dir: join_paths(iconsdir, 'symbolic', 'apps')
|
||||||
|
)
|
||||||
install_data('com.github.rafostar.Clapper.gschema.xml',
|
install_data('com.github.rafostar.Clapper.gschema.xml',
|
||||||
install_dir: join_paths(sharedir, 'glib-2.0', 'schemas')
|
install_dir: join_paths(sharedir, 'glib-2.0', 'schemas')
|
||||||
)
|
)
|
||||||
|
@@ -771,12 +771,8 @@ gst_clapper_mpris_new (const gchar * own_name, const gchar * id_path,
|
|||||||
const gchar * identity, const gchar * desktop_entry,
|
const gchar * identity, const gchar * desktop_entry,
|
||||||
const gchar * default_art_url)
|
const gchar * default_art_url)
|
||||||
{
|
{
|
||||||
GstClapperMpris *self;
|
return g_object_new (GST_TYPE_CLAPPER_MPRIS,
|
||||||
|
|
||||||
self = g_object_new (GST_TYPE_CLAPPER,
|
|
||||||
"own-name", own_name, "id_path", id_path,
|
"own-name", own_name, "id_path", id_path,
|
||||||
"identity", identity, "desktop-entry", desktop_entry,
|
"identity", identity, "desktop-entry", desktop_entry,
|
||||||
"default-art-url", default_art_url, NULL);
|
"default-art-url", default_art_url, NULL);
|
||||||
|
|
||||||
return self;
|
|
||||||
}
|
}
|
||||||
|
4
lib/gst/clapper/gstclapper.c
vendored
4
lib/gst/clapper/gstclapper.c
vendored
@@ -757,7 +757,9 @@ gst_clapper_get_property (GObject * object, guint prop_id,
|
|||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_MPRIS:
|
case PROP_MPRIS:
|
||||||
|
g_mutex_lock (&self->lock);
|
||||||
g_value_set_object (value, self->mpris);
|
g_value_set_object (value, self->mpris);
|
||||||
|
g_mutex_unlock (&self->lock);
|
||||||
break;
|
break;
|
||||||
case PROP_STATE:
|
case PROP_STATE:
|
||||||
g_mutex_lock (&self->lock);
|
g_mutex_lock (&self->lock);
|
||||||
@@ -1616,7 +1618,7 @@ static void
|
|||||||
emit_duration_changed (GstClapper * self, GstClockTime duration)
|
emit_duration_changed (GstClapper * self, GstClockTime duration)
|
||||||
{
|
{
|
||||||
if (self->cached_duration == duration
|
if (self->cached_duration == duration
|
||||||
|| self->cached_duration / GST_MSECOND == duration / GST_MSECOND)
|
|| self->cached_duration / (250 * GST_MSECOND) == duration / (250 * GST_MSECOND))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (self, "Duration changed %" GST_TIME_FORMAT,
|
GST_DEBUG_OBJECT (self, "Duration changed %" GST_TIME_FORMAT,
|
||||||
|
@@ -37,10 +37,6 @@
|
|||||||
GST_DEBUG_CATEGORY (gst_debug_clapper_gl_sink);
|
GST_DEBUG_CATEGORY (gst_debug_clapper_gl_sink);
|
||||||
#define GST_CAT_DEFAULT gst_debug_clapper_gl_sink
|
#define GST_CAT_DEFAULT gst_debug_clapper_gl_sink
|
||||||
|
|
||||||
#define DEFAULT_FORCE_ASPECT_RATIO TRUE
|
|
||||||
#define DEFAULT_PAR_N 0
|
|
||||||
#define DEFAULT_PAR_D 1
|
|
||||||
|
|
||||||
static GstStaticPadTemplate gst_clapper_gl_sink_template =
|
static GstStaticPadTemplate gst_clapper_gl_sink_template =
|
||||||
GST_STATIC_PAD_TEMPLATE ("sink",
|
GST_STATIC_PAD_TEMPLATE ("sink",
|
||||||
GST_PAD_SINK,
|
GST_PAD_SINK,
|
||||||
@@ -62,6 +58,7 @@ static gboolean gst_clapper_gl_sink_propose_allocation (GstBaseSink * bsink,
|
|||||||
static gboolean gst_clapper_gl_sink_query (GstBaseSink * bsink, GstQuery * query);
|
static gboolean gst_clapper_gl_sink_query (GstBaseSink * bsink, GstQuery * query);
|
||||||
static gboolean gst_clapper_gl_sink_start (GstBaseSink * bsink);
|
static gboolean gst_clapper_gl_sink_start (GstBaseSink * bsink);
|
||||||
static gboolean gst_clapper_gl_sink_stop (GstBaseSink * bsink);
|
static gboolean gst_clapper_gl_sink_stop (GstBaseSink * bsink);
|
||||||
|
static GstFlowReturn gst_clapper_gl_sink_wait_event (GstBaseSink * bsink, GstEvent * event);
|
||||||
|
|
||||||
static GstStateChangeReturn
|
static GstStateChangeReturn
|
||||||
gst_clapper_gl_sink_change_state (GstElement * element,
|
gst_clapper_gl_sink_change_state (GstElement * element,
|
||||||
@@ -79,14 +76,6 @@ static GstFlowReturn gst_clapper_gl_sink_show_frame (GstVideoSink * bsink,
|
|||||||
static void
|
static void
|
||||||
gst_clapper_gl_sink_navigation_interface_init (GstNavigationInterface * iface);
|
gst_clapper_gl_sink_navigation_interface_init (GstNavigationInterface * iface);
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
PROP_0,
|
|
||||||
PROP_WIDGET,
|
|
||||||
PROP_FORCE_ASPECT_RATIO,
|
|
||||||
PROP_PIXEL_ASPECT_RATIO,
|
|
||||||
};
|
|
||||||
|
|
||||||
#define gst_clapper_gl_sink_parent_class parent_class
|
#define gst_clapper_gl_sink_parent_class parent_class
|
||||||
G_DEFINE_TYPE_WITH_CODE (GstClapperGLSink, gst_clapper_gl_sink,
|
G_DEFINE_TYPE_WITH_CODE (GstClapperGLSink, gst_clapper_gl_sink,
|
||||||
GST_TYPE_VIDEO_SINK,
|
GST_TYPE_VIDEO_SINK,
|
||||||
@@ -112,6 +101,7 @@ gst_clapper_gl_sink_class_init (GstClapperGLSinkClass * klass)
|
|||||||
|
|
||||||
gobject_class->set_property = gst_clapper_gl_sink_set_property;
|
gobject_class->set_property = gst_clapper_gl_sink_set_property;
|
||||||
gobject_class->get_property = gst_clapper_gl_sink_get_property;
|
gobject_class->get_property = gst_clapper_gl_sink_get_property;
|
||||||
|
gobject_class->finalize = gst_clapper_gl_sink_finalize;
|
||||||
|
|
||||||
g_object_class_install_property (gobject_class, PROP_WIDGET,
|
g_object_class_install_property (gobject_class, PROP_WIDGET,
|
||||||
g_param_spec_object ("widget", "GTK Widget",
|
g_param_spec_object ("widget", "GTK Widget",
|
||||||
@@ -119,19 +109,7 @@ gst_clapper_gl_sink_class_init (GstClapperGLSinkClass * klass)
|
|||||||
"(must only be get from the GTK main thread)",
|
"(must only be get from the GTK main thread)",
|
||||||
GTK_TYPE_WIDGET, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
GTK_TYPE_WIDGET, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
g_object_class_install_property (gobject_class, PROP_FORCE_ASPECT_RATIO,
|
gst_gtk_install_shared_properties (gobject_class);
|
||||||
g_param_spec_boolean ("force-aspect-ratio",
|
|
||||||
"Force aspect ratio",
|
|
||||||
"When enabled, scaling will respect original aspect ratio",
|
|
||||||
DEFAULT_FORCE_ASPECT_RATIO,
|
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
||||||
|
|
||||||
g_object_class_install_property (gobject_class, PROP_PIXEL_ASPECT_RATIO,
|
|
||||||
gst_param_spec_fraction ("pixel-aspect-ratio", "Pixel Aspect Ratio",
|
|
||||||
"The pixel aspect ratio of the device", DEFAULT_PAR_N, DEFAULT_PAR_D,
|
|
||||||
G_MAXINT, 1, 1, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
||||||
|
|
||||||
gobject_class->finalize = gst_clapper_gl_sink_finalize;
|
|
||||||
|
|
||||||
gstelement_class->change_state = gst_clapper_gl_sink_change_state;
|
gstelement_class->change_state = gst_clapper_gl_sink_change_state;
|
||||||
|
|
||||||
@@ -142,6 +120,7 @@ gst_clapper_gl_sink_class_init (GstClapperGLSinkClass * klass)
|
|||||||
gstbasesink_class->query = gst_clapper_gl_sink_query;
|
gstbasesink_class->query = gst_clapper_gl_sink_query;
|
||||||
gstbasesink_class->start = gst_clapper_gl_sink_start;
|
gstbasesink_class->start = gst_clapper_gl_sink_start;
|
||||||
gstbasesink_class->stop = gst_clapper_gl_sink_stop;
|
gstbasesink_class->stop = gst_clapper_gl_sink_stop;
|
||||||
|
gstbasesink_class->wait_event = gst_clapper_gl_sink_wait_event;
|
||||||
|
|
||||||
gstvideosink_class->show_frame = gst_clapper_gl_sink_show_frame;
|
gstvideosink_class->show_frame = gst_clapper_gl_sink_show_frame;
|
||||||
|
|
||||||
@@ -166,6 +145,9 @@ gst_clapper_gl_sink_init (GstClapperGLSink * clapper_sink)
|
|||||||
clapper_sink->force_aspect_ratio = DEFAULT_FORCE_ASPECT_RATIO;
|
clapper_sink->force_aspect_ratio = DEFAULT_FORCE_ASPECT_RATIO;
|
||||||
clapper_sink->par_n = DEFAULT_PAR_N;
|
clapper_sink->par_n = DEFAULT_PAR_N;
|
||||||
clapper_sink->par_d = DEFAULT_PAR_D;
|
clapper_sink->par_d = DEFAULT_PAR_D;
|
||||||
|
clapper_sink->keep_last_frame = DEFAULT_KEEP_LAST_FRAME;
|
||||||
|
|
||||||
|
clapper_sink->had_eos = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -228,12 +210,12 @@ gst_clapper_gl_sink_get_widget (GstClapperGLSink * clapper_sink)
|
|||||||
clapper_sink->widget = (GtkClapperGLWidget *)
|
clapper_sink->widget = (GtkClapperGLWidget *)
|
||||||
GST_CLAPPER_GL_SINK_GET_CLASS (clapper_sink)->create_widget ();
|
GST_CLAPPER_GL_SINK_GET_CLASS (clapper_sink)->create_widget ();
|
||||||
|
|
||||||
clapper_sink->bind_aspect_ratio =
|
g_object_bind_property (clapper_sink, "force-aspect-ratio", clapper_sink->widget,
|
||||||
g_object_bind_property (clapper_sink, "force-aspect-ratio", clapper_sink->widget,
|
|
||||||
"force-aspect-ratio", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
|
"force-aspect-ratio", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
|
||||||
clapper_sink->bind_pixel_aspect_ratio =
|
g_object_bind_property (clapper_sink, "pixel-aspect-ratio", clapper_sink->widget,
|
||||||
g_object_bind_property (clapper_sink, "pixel-aspect-ratio", clapper_sink->widget,
|
|
||||||
"pixel-aspect-ratio", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
|
"pixel-aspect-ratio", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
|
||||||
|
g_object_bind_property (clapper_sink, "keep-last-frame", clapper_sink->widget,
|
||||||
|
"keep-last-frame", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
|
||||||
|
|
||||||
/* Take the floating ref, other wise the destruction of the container will
|
/* Take the floating ref, other wise the destruction of the container will
|
||||||
* make this widget disappear possibly before we are done. */
|
* make this widget disappear possibly before we are done. */
|
||||||
@@ -279,6 +261,9 @@ gst_clapper_gl_sink_get_property (GObject * object, guint prop_id,
|
|||||||
case PROP_PIXEL_ASPECT_RATIO:
|
case PROP_PIXEL_ASPECT_RATIO:
|
||||||
gst_value_set_fraction (value, clapper_sink->par_n, clapper_sink->par_d);
|
gst_value_set_fraction (value, clapper_sink->par_n, clapper_sink->par_d);
|
||||||
break;
|
break;
|
||||||
|
case PROP_KEEP_LAST_FRAME:
|
||||||
|
g_value_set_boolean (value, clapper_sink->keep_last_frame);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@@ -299,6 +284,9 @@ gst_clapper_gl_sink_set_property (GObject * object, guint prop_id,
|
|||||||
clapper_sink->par_n = gst_value_get_fraction_numerator (value);
|
clapper_sink->par_n = gst_value_get_fraction_numerator (value);
|
||||||
clapper_sink->par_d = gst_value_get_fraction_denominator (value);
|
clapper_sink->par_d = gst_value_get_fraction_denominator (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_KEEP_LAST_FRAME:
|
||||||
|
clapper_sink->keep_last_frame = g_value_get_boolean (value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@@ -589,6 +577,7 @@ gst_clapper_gl_sink_change_state (GstElement * element, GstStateChange transitio
|
|||||||
switch (transition) {
|
switch (transition) {
|
||||||
case GST_STATE_CHANGE_NULL_TO_READY:
|
case GST_STATE_CHANGE_NULL_TO_READY:
|
||||||
GST_OBJECT_LOCK (clapper_sink);
|
GST_OBJECT_LOCK (clapper_sink);
|
||||||
|
clapper_sink->had_eos = FALSE;
|
||||||
if (clapper_sink->widget) {
|
if (clapper_sink->widget) {
|
||||||
GTK_CLAPPER_GL_WIDGET_LOCK (clapper_sink->widget);
|
GTK_CLAPPER_GL_WIDGET_LOCK (clapper_sink->widget);
|
||||||
clapper_sink->widget->ignore_buffers = FALSE;
|
clapper_sink->widget->ignore_buffers = FALSE;
|
||||||
@@ -614,7 +603,8 @@ gst_clapper_gl_sink_change_state (GstElement * element, GstStateChange transitio
|
|||||||
GST_OBJECT_LOCK (clapper_sink);
|
GST_OBJECT_LOCK (clapper_sink);
|
||||||
if (clapper_sink->widget) {
|
if (clapper_sink->widget) {
|
||||||
GTK_CLAPPER_GL_WIDGET_LOCK (clapper_sink->widget);
|
GTK_CLAPPER_GL_WIDGET_LOCK (clapper_sink->widget);
|
||||||
clapper_sink->widget->ignore_buffers = TRUE;
|
clapper_sink->widget->ignore_buffers =
|
||||||
|
!clapper_sink->had_eos || !clapper_sink->keep_last_frame;
|
||||||
GTK_CLAPPER_GL_WIDGET_UNLOCK (clapper_sink->widget);
|
GTK_CLAPPER_GL_WIDGET_UNLOCK (clapper_sink->widget);
|
||||||
}
|
}
|
||||||
GST_OBJECT_UNLOCK (clapper_sink);
|
GST_OBJECT_UNLOCK (clapper_sink);
|
||||||
@@ -706,6 +696,29 @@ gst_clapper_gl_sink_set_caps (GstBaseSink * bsink, GstCaps * caps)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GstFlowReturn
|
||||||
|
gst_clapper_gl_sink_wait_event (GstBaseSink * bsink, GstEvent * event)
|
||||||
|
{
|
||||||
|
GstClapperGLSink *clapper_sink = GST_CLAPPER_GL_SINK (bsink);
|
||||||
|
GstFlowReturn ret;
|
||||||
|
|
||||||
|
ret = GST_BASE_SINK_CLASS (parent_class)->wait_event (bsink, event);
|
||||||
|
|
||||||
|
switch (event->type) {
|
||||||
|
case GST_EVENT_EOS:
|
||||||
|
if (ret == GST_FLOW_OK) {
|
||||||
|
GST_OBJECT_LOCK (clapper_sink);
|
||||||
|
clapper_sink->had_eos = TRUE;
|
||||||
|
GST_OBJECT_UNLOCK (clapper_sink);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
gst_clapper_gl_sink_show_frame (GstVideoSink * vsink, GstBuffer * buf)
|
gst_clapper_gl_sink_show_frame (GstVideoSink * vsink, GstBuffer * buf)
|
||||||
{
|
{
|
||||||
|
@@ -58,15 +58,14 @@ struct _GstClapperGLSink
|
|||||||
|
|
||||||
GtkClapperGLWidget *widget;
|
GtkClapperGLWidget *widget;
|
||||||
|
|
||||||
|
gboolean had_eos;
|
||||||
|
|
||||||
/* properties */
|
/* properties */
|
||||||
gboolean force_aspect_ratio;
|
gboolean force_aspect_ratio;
|
||||||
GBinding *bind_aspect_ratio;
|
|
||||||
|
|
||||||
gint par_n, par_d;
|
gint par_n, par_d;
|
||||||
GBinding *bind_pixel_aspect_ratio;
|
gboolean keep_last_frame;
|
||||||
|
|
||||||
gboolean ignore_textures;
|
gboolean ignore_textures;
|
||||||
GBinding *bind_ignore_textures;
|
|
||||||
|
|
||||||
GtkWidget *window;
|
GtkWidget *window;
|
||||||
gulong widget_destroy_id;
|
gulong widget_destroy_id;
|
||||||
|
@@ -19,6 +19,7 @@
|
|||||||
* Boston, MA 02110-1301, USA.
|
* Boston, MA 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <gst/gst.h>
|
||||||
#include "gstgtkutils.h"
|
#include "gstgtkutils.h"
|
||||||
|
|
||||||
struct invoke_context
|
struct invoke_context
|
||||||
@@ -69,3 +70,26 @@ gst_gtk_invoke_on_main (GThreadFunc func, gpointer data)
|
|||||||
|
|
||||||
return info.res;
|
return info.res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gst_gtk_install_shared_properties (GObjectClass *gobject_class)
|
||||||
|
{
|
||||||
|
g_object_class_install_property (gobject_class, PROP_FORCE_ASPECT_RATIO,
|
||||||
|
g_param_spec_boolean ("force-aspect-ratio",
|
||||||
|
"Force aspect ratio",
|
||||||
|
"When enabled, scaling will respect original aspect ratio",
|
||||||
|
DEFAULT_FORCE_ASPECT_RATIO,
|
||||||
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
|
g_object_class_install_property (gobject_class, PROP_PIXEL_ASPECT_RATIO,
|
||||||
|
gst_param_spec_fraction ("pixel-aspect-ratio", "Pixel Aspect Ratio",
|
||||||
|
"The pixel aspect ratio of the device", DEFAULT_PAR_N, DEFAULT_PAR_D,
|
||||||
|
G_MAXINT, 1, 1, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
|
g_object_class_install_property (gobject_class, PROP_KEEP_LAST_FRAME,
|
||||||
|
g_param_spec_boolean ("keep-last-frame",
|
||||||
|
"Keep last frame",
|
||||||
|
"Keep showing last video frame after playback instead of black screen",
|
||||||
|
DEFAULT_KEEP_LAST_FRAME,
|
||||||
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
}
|
||||||
|
@@ -22,8 +22,25 @@
|
|||||||
#ifndef __GST_GTK_UTILS_H__
|
#ifndef __GST_GTK_UTILS_H__
|
||||||
#define __GST_GTK_UTILS_H__
|
#define __GST_GTK_UTILS_H__
|
||||||
|
|
||||||
|
#define DEFAULT_FORCE_ASPECT_RATIO TRUE
|
||||||
|
#define DEFAULT_PAR_N 0
|
||||||
|
#define DEFAULT_PAR_D 1
|
||||||
|
#define DEFAULT_KEEP_LAST_FRAME FALSE
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
#include <glib-object.h>
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
PROP_0,
|
||||||
|
PROP_WIDGET,
|
||||||
|
PROP_FORCE_ASPECT_RATIO,
|
||||||
|
PROP_PIXEL_ASPECT_RATIO,
|
||||||
|
PROP_KEEP_LAST_FRAME
|
||||||
|
};
|
||||||
|
|
||||||
gpointer gst_gtk_invoke_on_main (GThreadFunc func, gpointer data);
|
gpointer gst_gtk_invoke_on_main (GThreadFunc func, gpointer data);
|
||||||
|
|
||||||
|
void gst_gtk_install_shared_properties (GObjectClass *gobject_class);
|
||||||
|
|
||||||
#endif /* __GST_GTK_UTILS_H__ */
|
#endif /* __GST_GTK_UTILS_H__ */
|
||||||
|
@@ -57,10 +57,6 @@
|
|||||||
GST_DEBUG_CATEGORY (gst_debug_clapper_gl_widget);
|
GST_DEBUG_CATEGORY (gst_debug_clapper_gl_widget);
|
||||||
#define GST_CAT_DEFAULT gst_debug_clapper_gl_widget
|
#define GST_CAT_DEFAULT gst_debug_clapper_gl_widget
|
||||||
|
|
||||||
#define DEFAULT_FORCE_ASPECT_RATIO TRUE
|
|
||||||
#define DEFAULT_PAR_N 0
|
|
||||||
#define DEFAULT_PAR_D 1
|
|
||||||
|
|
||||||
struct _GtkClapperGLWidgetPrivate
|
struct _GtkClapperGLWidgetPrivate
|
||||||
{
|
{
|
||||||
gboolean initiated;
|
gboolean initiated;
|
||||||
@@ -94,13 +90,6 @@ G_DEFINE_TYPE_WITH_CODE (GtkClapperGLWidget, gtk_clapper_gl_widget, GTK_TYPE_GL_
|
|||||||
GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "gtkclapperglwidget", 0,
|
GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "gtkclapperglwidget", 0,
|
||||||
"GTK Clapper GL Widget"));
|
"GTK Clapper GL Widget"));
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
PROP_0,
|
|
||||||
PROP_FORCE_ASPECT_RATIO,
|
|
||||||
PROP_PIXEL_ASPECT_RATIO,
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_clapper_gl_widget_get_preferred_width (GtkWidget * widget, gint * min,
|
gtk_clapper_gl_widget_get_preferred_width (GtkWidget * widget, gint * min,
|
||||||
gint * natural)
|
gint * natural)
|
||||||
@@ -174,6 +163,9 @@ gtk_clapper_gl_widget_set_property (GObject * object, guint prop_id,
|
|||||||
clapper_widget->par_n = gst_value_get_fraction_numerator (value);
|
clapper_widget->par_n = gst_value_get_fraction_numerator (value);
|
||||||
clapper_widget->par_d = gst_value_get_fraction_denominator (value);
|
clapper_widget->par_d = gst_value_get_fraction_denominator (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_KEEP_LAST_FRAME:
|
||||||
|
clapper_widget->keep_last_frame = g_value_get_boolean (value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@@ -193,6 +185,9 @@ gtk_clapper_gl_widget_get_property (GObject * object, guint prop_id,
|
|||||||
case PROP_PIXEL_ASPECT_RATIO:
|
case PROP_PIXEL_ASPECT_RATIO:
|
||||||
gst_value_set_fraction (value, clapper_widget->par_n, clapper_widget->par_d);
|
gst_value_set_fraction (value, clapper_widget->par_n, clapper_widget->par_d);
|
||||||
break;
|
break;
|
||||||
|
case PROP_KEEP_LAST_FRAME:
|
||||||
|
g_value_set_boolean (value, clapper_widget->keep_last_frame);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@@ -909,30 +904,20 @@ _get_gl_context (GtkClapperGLWidget * clapper_widget)
|
|||||||
static void
|
static void
|
||||||
gtk_clapper_gl_widget_class_init (GtkClapperGLWidgetClass * klass)
|
gtk_clapper_gl_widget_class_init (GtkClapperGLWidgetClass * klass)
|
||||||
{
|
{
|
||||||
GObjectClass *gobject_klass = (GObjectClass *) klass;
|
GObjectClass *gobject_class = (GObjectClass *) klass;
|
||||||
GtkWidgetClass *widget_klass = (GtkWidgetClass *) klass;
|
GtkWidgetClass *widget_class = (GtkWidgetClass *) klass;
|
||||||
GtkGLAreaClass *gl_area_klass = (GtkGLAreaClass *) klass;
|
GtkGLAreaClass *gl_area_class = (GtkGLAreaClass *) klass;
|
||||||
|
|
||||||
gobject_klass->set_property = gtk_clapper_gl_widget_set_property;
|
gobject_class->set_property = gtk_clapper_gl_widget_set_property;
|
||||||
gobject_klass->get_property = gtk_clapper_gl_widget_get_property;
|
gobject_class->get_property = gtk_clapper_gl_widget_get_property;
|
||||||
gobject_klass->finalize = gtk_clapper_gl_widget_finalize;
|
gobject_class->finalize = gtk_clapper_gl_widget_finalize;
|
||||||
|
|
||||||
g_object_class_install_property (gobject_klass, PROP_FORCE_ASPECT_RATIO,
|
gst_gtk_install_shared_properties (gobject_class);
|
||||||
g_param_spec_boolean ("force-aspect-ratio",
|
|
||||||
"Force aspect ratio",
|
|
||||||
"When enabled, scaling will respect original aspect ratio",
|
|
||||||
DEFAULT_FORCE_ASPECT_RATIO,
|
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
||||||
|
|
||||||
g_object_class_install_property (gobject_klass, PROP_PIXEL_ASPECT_RATIO,
|
widget_class->measure = gtk_clapper_gl_widget_measure;
|
||||||
gst_param_spec_fraction ("pixel-aspect-ratio", "Pixel Aspect Ratio",
|
widget_class->size_allocate = gtk_clapper_gl_widget_size_allocate;
|
||||||
"The pixel aspect ratio of the device", DEFAULT_PAR_N, DEFAULT_PAR_D,
|
|
||||||
G_MAXINT, 1, 1, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
||||||
|
|
||||||
widget_klass->measure = gtk_clapper_gl_widget_measure;
|
gl_area_class->render = gtk_clapper_gl_widget_render;
|
||||||
widget_klass->size_allocate = gtk_clapper_gl_widget_size_allocate;
|
|
||||||
|
|
||||||
gl_area_klass->render = gtk_clapper_gl_widget_render;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -945,6 +930,7 @@ gtk_clapper_gl_widget_init (GtkClapperGLWidget * clapper_widget)
|
|||||||
clapper_widget->force_aspect_ratio = DEFAULT_FORCE_ASPECT_RATIO;
|
clapper_widget->force_aspect_ratio = DEFAULT_FORCE_ASPECT_RATIO;
|
||||||
clapper_widget->par_n = DEFAULT_PAR_N;
|
clapper_widget->par_n = DEFAULT_PAR_N;
|
||||||
clapper_widget->par_d = DEFAULT_PAR_D;
|
clapper_widget->par_d = DEFAULT_PAR_D;
|
||||||
|
clapper_widget->keep_last_frame = DEFAULT_KEEP_LAST_FRAME;
|
||||||
clapper_widget->ignore_buffers = FALSE;
|
clapper_widget->ignore_buffers = FALSE;
|
||||||
clapper_widget->last_pos_x = 0;
|
clapper_widget->last_pos_x = 0;
|
||||||
clapper_widget->last_pos_y = 0;
|
clapper_widget->last_pos_y = 0;
|
||||||
@@ -993,7 +979,7 @@ gtk_clapper_gl_widget_init (GtkClapperGLWidget * clapper_widget)
|
|||||||
#if GST_GL_HAVE_WINDOW_X11 && defined (GDK_WINDOWING_X11)
|
#if GST_GL_HAVE_WINDOW_X11 && defined (GDK_WINDOWING_X11)
|
||||||
if (GDK_IS_X11_DISPLAY (display)) {
|
if (GDK_IS_X11_DISPLAY (display)) {
|
||||||
gpointer display_ptr;
|
gpointer display_ptr;
|
||||||
#if GST_GL_HAVE_PLATFORM_EGL && GTK_CHECK_VERSION(4,4,0)
|
#if GST_GL_HAVE_PLATFORM_EGL && GTK_CHECK_VERSION(4,3,1)
|
||||||
display_ptr = gdk_x11_display_get_egl_display (display);
|
display_ptr = gdk_x11_display_get_egl_display (display);
|
||||||
if (display_ptr)
|
if (display_ptr)
|
||||||
priv->display = (GstGLDisplay *)
|
priv->display = (GstGLDisplay *)
|
||||||
|
@@ -52,6 +52,7 @@ struct _GtkClapperGLWidget
|
|||||||
/* properties */
|
/* properties */
|
||||||
gboolean force_aspect_ratio;
|
gboolean force_aspect_ratio;
|
||||||
gint par_n, par_d;
|
gint par_n, par_d;
|
||||||
|
gboolean keep_last_frame;
|
||||||
|
|
||||||
gint display_width;
|
gint display_width;
|
||||||
gint display_height;
|
gint display_height;
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
project('com.github.rafostar.Clapper', 'c', 'cpp',
|
project('com.github.rafostar.Clapper', 'c', 'cpp',
|
||||||
version: '0.2.1',
|
version: '0.3.0',
|
||||||
meson_version: '>= 0.50.0',
|
meson_version: '>= 0.50.0',
|
||||||
license: 'GPL3',
|
license: 'GPL3',
|
||||||
default_options: [
|
default_options: [
|
||||||
|
@@ -2,7 +2,7 @@ Format: 3.0 (quilt)
|
|||||||
Source: clapper
|
Source: clapper
|
||||||
Binary: clapper
|
Binary: clapper
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Version: 0.2.1
|
Version: 0.3.0
|
||||||
Maintainer: Rafostar <rafostar.github@gmail.com>
|
Maintainer: Rafostar <rafostar.github@gmail.com>
|
||||||
Build-Depends: debhelper (>= 10),
|
Build-Depends: debhelper (>= 10),
|
||||||
meson (>= 0.50),
|
meson (>= 0.50),
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
clapper (0.2.1) unstable; urgency=low
|
clapper (0.3.0) unstable; urgency=low
|
||||||
|
|
||||||
* New version
|
* New version
|
||||||
|
|
||||||
-- Rafostar <rafostar.github@gmail.com> Mon, 19 Apr 2021 09:39:00 +0100
|
-- Rafostar <rafostar.github@gmail.com> Fri, 18 Jun 2021 09:39:00 +0100
|
||||||
|
@@ -26,7 +26,7 @@
|
|||||||
%global glib2_version 2.56.0
|
%global glib2_version 2.56.0
|
||||||
|
|
||||||
Name: clapper
|
Name: clapper
|
||||||
Version: 0.2.1
|
Version: 0.3.0
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: Simple and modern GNOME media player
|
Summary: Simple and modern GNOME media player
|
||||||
|
|
||||||
@@ -126,6 +126,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
|
|||||||
%{_libdir}/%{appname}/
|
%{_libdir}/%{appname}/
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Jun 18 2021 Rafostar <rafostar.github@gmail.com> - 0.3.0-1
|
||||||
|
- New version
|
||||||
|
|
||||||
* Mon Apr 19 2021 Rafostar <rafostar.github@gmail.com> - 0.2.1-1
|
* Mon Apr 19 2021 Rafostar <rafostar.github@gmail.com> - 0.2.1-1
|
||||||
- New version
|
- New version
|
||||||
|
|
||||||
|
@@ -81,7 +81,8 @@ class ClapperPlayer extends GstClapper.Clapper
|
|||||||
this._onSettingsKeyChanged(settings, key);
|
this._onSettingsKeyChanged(settings, key);
|
||||||
|
|
||||||
const flag = Gio.SettingsBindFlags.GET;
|
const flag = Gio.SettingsBindFlags.GET;
|
||||||
settings.bind('subtitle-font', this.pipeline, 'subtitle_font_desc', flag);
|
settings.bind('keep-last-frame', this.widget, 'keep-last-frame', flag);
|
||||||
|
settings.bind('subtitle-font', this.pipeline, 'subtitle-font-desc', flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
set_initial_config()
|
set_initial_config()
|
||||||
|
@@ -41,6 +41,7 @@ class ClapperGeneralPage extends PrefsBase.Grid
|
|||||||
comboBox.connect('changed', this._onVolumeInitialChanged.bind(this, spinButton));
|
comboBox.connect('changed', this._onVolumeInitialChanged.bind(this, spinButton));
|
||||||
|
|
||||||
this.addTitle('Finish');
|
this.addTitle('Finish');
|
||||||
|
this.addCheckButton('Keep showing last frame', 'keep-last-frame');
|
||||||
this.addCheckButton('Close after playback', 'close-auto');
|
this.addCheckButton('Close after playback', 'close-auto');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -38,7 +38,7 @@ var YouTubeClient = GObject.registerClass({
|
|||||||
|
|
||||||
this.lastInfo = null;
|
this.lastInfo = null;
|
||||||
this.postInfo = {
|
this.postInfo = {
|
||||||
clientVersion: null,
|
clientVersion: "2.20210605.09.00",
|
||||||
visitorData: "",
|
visitorData: "",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user