Fix multiple bindings
Signed-off-by: Vasiliy Doylov <nekocwd@mainlining.org>
This commit is contained in:
parent
66bf073f94
commit
00c15ba185
5 changed files with 35 additions and 75 deletions
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<gresources>
|
||||
<gresource prefix="/mobi/phosh/plugins/vala-quick-setting/">
|
||||
<file preprocess="xml-stripblanks">qs.ui</file>
|
||||
<file preprocess="xml-stripblanks">player.ui</file>
|
||||
<file>style.css</file>
|
||||
</gresource>
|
||||
|
|
|
@ -4,7 +4,6 @@ blueprints = custom_target(
|
|||
'blueprints',
|
||||
input: files(
|
||||
'player.blp',
|
||||
'qs.blp',
|
||||
),
|
||||
output: '.',
|
||||
command: [
|
||||
|
|
|
@ -21,6 +21,7 @@ public class Extension.Player : Gtk.Box {
|
|||
get_style_context ().add_provider (css_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER);
|
||||
get_style_context ().add_class (id);
|
||||
}
|
||||
|
||||
~Player () {
|
||||
Gtk.StyleContext.remove_provider_for_screen (Gdk.Screen.get_default (), css_provider);
|
||||
}
|
||||
|
@ -36,7 +37,11 @@ public class Extension.Player : Gtk.Box {
|
|||
}
|
||||
var data = ".%s { background: radial-gradient(circle at left, %s); }"
|
||||
.printf (id, string.joinv (",", gradient_points));
|
||||
css_provider.load_from_data (data);
|
||||
try {
|
||||
css_provider.load_from_data (data);
|
||||
} catch (Error err) {
|
||||
warning ("Something wrong with CSS generation: %s", err.message);
|
||||
}
|
||||
}
|
||||
|
||||
private Gdk.RGBA max_color (ref Gee.HashMap<Gdk.RGBA?, int> histogram) {
|
||||
|
@ -102,7 +107,12 @@ public class Extension.Player : Gtk.Box {
|
|||
pixbuff = (Gdk.Pixbuf) icon;
|
||||
else if (icon is FileIcon) {
|
||||
var fi = (LoadableIcon) icon;
|
||||
pixbuff = new Gdk.Pixbuf.from_stream (fi.load (1024, null, null));
|
||||
try {
|
||||
pixbuff = new Gdk.Pixbuf.from_stream (fi.load (1024, null, null));
|
||||
} catch (Error err) {
|
||||
warning ("Icon load failed %s", err.message);
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
return icon;
|
||||
}
|
||||
|
|
|
@ -1,44 +0,0 @@
|
|||
using Gtk 3.0; // This requires blueprint-compiller changes
|
||||
using Phosh 0;
|
||||
|
||||
template $ExtensionQuickSetting: Phosh.QuickSetting {
|
||||
status-icon: info;
|
||||
status-page: status_page;
|
||||
clicked => $on_clicked();
|
||||
}
|
||||
|
||||
Phosh.StatusIcon info {
|
||||
visible: true;
|
||||
}
|
||||
|
||||
Phosh.StatusPage status_page {
|
||||
visible: true;
|
||||
title: _("Quick Setting Example");
|
||||
content: content;
|
||||
footer: footer;
|
||||
}
|
||||
|
||||
// Idk why there are no that placeholder in typelib
|
||||
$PhoshStatusPagePlaceholder content{
|
||||
visible: true;
|
||||
icon-name: "face-angel-symbolic";
|
||||
extra-widget: label;
|
||||
}
|
||||
|
||||
Label label{
|
||||
visible: true;
|
||||
label: _("Im' written in Vala!");
|
||||
}
|
||||
|
||||
|
||||
Button footer {
|
||||
visible: true;
|
||||
hexpand: true;
|
||||
clicked => $on_footer_clicked();
|
||||
|
||||
Label {
|
||||
visible: true;
|
||||
ellipsize: end;
|
||||
label: _("Open Plugin Settings");
|
||||
}
|
||||
}
|
|
@ -10,34 +10,15 @@ using Phosh;
|
|||
using GLib;
|
||||
|
||||
|
||||
[GtkTemplate (ui = "/mobi/phosh/plugins/vala-quick-setting/qs.ui")]
|
||||
public class Extension.QuickSetting : Phosh.QuickSetting {
|
||||
[GtkChild]
|
||||
private unowned StatusIcon info;
|
||||
|
||||
[GtkCallback]
|
||||
private void on_clicked (Phosh.QuickSetting qs) {
|
||||
bool active = get_active ();
|
||||
if (active) {
|
||||
info.set_icon_name ("face-shutmouth-symbolic");
|
||||
info.set_info ("I'm Inactive");
|
||||
} else {
|
||||
info.set_icon_name ("face-smile-big-symbolic");
|
||||
info.set_info ("I'm Active");
|
||||
}
|
||||
|
||||
set_active (!active);
|
||||
}
|
||||
|
||||
[GtkCallback]
|
||||
private void on_footer_clicked (Gtk.Button btn) {
|
||||
}
|
||||
private Player player = new Player ();
|
||||
private Gtk.Widget? hiden_player = null;
|
||||
|
||||
construct {
|
||||
info.set_icon_name ("face-shutmouth-symbolic");
|
||||
info.set_info ("I'm Inactive");
|
||||
parent_set.connect (() => replace_player (Stage.QickSettings_Box));
|
||||
visible = false;
|
||||
}
|
||||
|
||||
enum Stage {
|
||||
QickSettings_Box = 0,
|
||||
QickSettings,
|
||||
|
@ -47,12 +28,16 @@ public class Extension.QuickSetting : Phosh.QuickSetting {
|
|||
return ((EnumClass) typeof (Stage).class_ref ()).get_value (this).value_nick.up ();
|
||||
}
|
||||
}
|
||||
|
||||
void replace_player (Stage stage) {
|
||||
message ("Replace player: Stage %d %s", stage, stage.to_string ());
|
||||
if (parent == null) {
|
||||
message ("Parent is null");
|
||||
if (stage == Stage.QickSettings_Box)
|
||||
clean_up ();
|
||||
return;
|
||||
}
|
||||
if (hiden_player != null)
|
||||
return;
|
||||
message ("Replace player: Stage %d %s", stage, stage.to_string ());
|
||||
if (stage != Stage.BoxSettings) {
|
||||
var _p = parent;
|
||||
for (uint i = 0; i < stage; i++)
|
||||
|
@ -69,6 +54,9 @@ public class Extension.QuickSetting : Phosh.QuickSetting {
|
|||
}
|
||||
|
||||
void on_something_added (Gtk.Widget widget) {
|
||||
if (hiden_player != null)
|
||||
return;
|
||||
|
||||
if (widget.get_type ().is_a (typeof (Gtk.Container))) {
|
||||
((Gtk.Container) widget).add.connect ((w) => on_something_added (w));
|
||||
}
|
||||
|
@ -78,16 +66,17 @@ public class Extension.QuickSetting : Phosh.QuickSetting {
|
|||
}
|
||||
|
||||
void find_player (Gtk.Container container) {
|
||||
if (hiden_player != null)
|
||||
return;
|
||||
var i = 0;
|
||||
foreach (var child in container.get_children ()) {
|
||||
if (child.name == "PhoshDefaultMediaPlayer") {
|
||||
message ("Player found");
|
||||
var player = new Player ();
|
||||
player.bind_to_player ((Gtk.Box) child);
|
||||
container.add (player);
|
||||
var b = (Gtk.Box) container;
|
||||
b.reorder_child (player, i);
|
||||
// container.remove (child);
|
||||
hiden_player = child;
|
||||
}
|
||||
if (child.get_type ().is_a (typeof (Gtk.Container))) {
|
||||
find_player ((Gtk.Container) child);
|
||||
|
@ -95,4 +84,11 @@ public class Extension.QuickSetting : Phosh.QuickSetting {
|
|||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
void clean_up () {
|
||||
player.dispose ();
|
||||
if (player.parent != null)
|
||||
player.parent.remove (player);
|
||||
hiden_player = null;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue