summaryrefslogtreecommitdiff
path: root/lib/sway/node.vala
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sway/node.vala')
-rw-r--r--lib/sway/node.vala211
1 files changed, 105 insertions, 106 deletions
diff --git a/lib/sway/node.vala b/lib/sway/node.vala
index 24dbd49..69cc0c1 100644
--- a/lib/sway/node.vala
+++ b/lib/sway/node.vala
@@ -1,21 +1,21 @@
namespace AstalSway {
- public enum NodeType {
+public enum NodeType {
ROOT,
WORKSPACE,
CONTAINER,
WINDOW,
OUTPUT,
SCRATCHPAD
- }
+}
- public struct Rectangle {
+public struct Rectangle {
public static Rectangle from_json(Json.Object obj) {
- return Rectangle() {
- x = (int)obj.get_int_member("x"),
- y = (int)obj.get_int_member("y"),
- width = (int)obj.get_int_member("width"),
- height = (int)obj.get_int_member("height"),
- };
+ return Rectangle() {
+ x = (int)obj.get_int_member("x"),
+ y = (int)obj.get_int_member("y"),
+ width = (int)obj.get_int_member("width"),
+ height = (int)obj.get_int_member("height"),
+ };
}
@@ -23,15 +23,14 @@ namespace AstalSway {
public int y;
public int width;
public int height;
- }
+}
- public class Node : Object {
+public class Node : Object {
public int id {get; private set; }
public bool urgent { get; private set; }
public string name { get; private set; }
public string layout { get; private set; }
public string orientation { get; private set; }
- public float? percent { get; private set; }
public Rectangle rect { get; private set; }
public Rectangle window_rect { get; private set; }
public Rectangle deco_rect { get; private set; }
@@ -41,116 +40,116 @@ namespace AstalSway {
public List<weak Node> nodes;
public List<weak Window> windows { owned get {
- var arr = new List<weak Window> ();
- foreach (var node in nodes) {
- if (node.node_type == NodeType.WINDOW) {
- arr.append(node as Window);
- } else {
- arr.concat(node.windows);
+ var arr = new List<weak Window> ();
+ foreach (var node in nodes) {
+ if (node.node_type == NodeType.WINDOW) {
+ arr.append(node as Window);
+ } else {
+ arr.concat(node.windows);
+ }
}
- }
- return arr;
+ return arr;
}}
protected Json.Object data;
private static HashTable<int, Node> _temp_nodes =
- new HashTable<int, Node>(i => i, (a,b) => a==b);
+ new HashTable<int, Node>(i => i, (a,b) => a==b);
internal static HashTable<int, Node> _all_nodes =
- new HashTable<int, Node>(i => i, (a,b) => a==b);
+ new HashTable<int, Node>(i => i, (a,b) => a==b);
public static Node? build(Json.Object obj) {
- if (obj == null) {
+ if (obj == null) {
+ return null;
+ }
+ switch (obj.get_string_member("type")) {
+ case "workspace":
+ var ws = new Workspace();
+ return ws as Node;
+ case "con":
+ case "floating_con":
+ if (obj.get_member("pid") != null) {
+ var win = new Window();
+ return win as Node;
+ } else {
+ var con = new Container();
+ return con as Node;
+ }
+ case "output":
+ if (obj.get_string_member("name") == "__i3") {
+ var node = new Node();
+ node.node_type = NodeType.SCRATCHPAD;
+ return node;
+ } else {
+ var output = new Output();
+ return output as Node;
+ }
+ default:
+ var node = new Node();
+ node.node_type = NodeType.ROOT;
+ return node;
+ break;
+
+ }
return null;
- }
- switch (obj.get_string_member("type")) {
- case "workspace":
- var ws = new Workspace();
- return ws as Node;
- case "con":
- case "floating_con":
- if (obj.get_member("pid") != null) {
- var win = new Window();
- return win as Node;
- } else {
- var con = new Container();
- return con as Node;
- }
- case "output":
- if (obj.get_string_member("name") == "__i3") {
- var node = new Node();
- node.node_type = NodeType.SCRATCHPAD;
- return node;
- } else {
- var output = new Output();
- return output as Node;
- }
- default:
- var node = new Node();
- node.node_type = NodeType.ROOT;
- return node;
- break;
-
- }
- return null;
}
internal static async void sync_tree() {
- var str = yield Sway.get_default().message_async(PayloadType.MESSAGE_GET_TREE, "");
- var obj = Json.from_string(str).get_object();
- if (obj == null) {
- return;
- }
-
- Node root = build(obj);
- _temp_nodes = new HashTable<int, Node>(i => i, (a,b) => a==b);
- root.sync(obj);
- _temp_nodes.insert(root.id, root);
- _all_nodes = _temp_nodes;
+ var str = yield Sway.get_default().message_async(PayloadType.MESSAGE_GET_TREE, "");
+ var obj = Json.from_string(str).get_object();
+ if (obj == null) {
+ return;
+ }
+
+ Node root = build(obj);
+ _temp_nodes = new HashTable<int, Node>(i => i, (a,b) => a==b);
+ root.sync(obj);
+ _temp_nodes.insert(root.id, root);
+ _all_nodes = _temp_nodes;
}
internal virtual void sync(Json.Object obj) {
- if (obj == null) {
- return;
- }
- data = obj;
- id = (int)obj.get_int_member("id");
- name = obj.get_string_member("name");
- orientation = obj.get_string_member("orientation");
- layout = obj.get_string_member("layout");
- urgent = obj.get_boolean_member("urgent");
- rect = Rectangle.from_json(obj.get_object_member("rect"));
- window_rect = Rectangle.from_json(obj.get_object_member("window_rect"));
- deco_rect = Rectangle.from_json(obj.get_object_member("deco_rect"));
-
- var arr = obj.get_array_member("nodes");
- var arr2 = obj.get_array_member("floating_nodes");
- sync_nodes(arr);
- sync_nodes(arr2);
+ if (obj == null) {
+ return;
+ }
+ data = obj;
+ id = (int)obj.get_int_member("id");
+ name = obj.get_string_member("name");
+ orientation = obj.get_string_member("orientation");
+ layout = obj.get_string_member("layout");
+ urgent = obj.get_boolean_member("urgent");
+ rect = Rectangle.from_json(obj.get_object_member("rect"));
+ window_rect = Rectangle.from_json(obj.get_object_member("window_rect"));
+ deco_rect = Rectangle.from_json(obj.get_object_member("deco_rect"));
+
+ var arr = obj.get_array_member("nodes");
+ var arr2 = obj.get_array_member("floating_nodes");
+ sync_nodes(arr);
+ sync_nodes(arr2);
}
private void sync_nodes(Json.Array arr) {
- var new_nodes = new List<weak Node> ();
-
- foreach (var item in arr.get_elements()) {
- var obj = item.get_object();
- int id = (int)obj.get_int_member("id");
- var node = _all_nodes.get(id);
-
- if (node == null) {
- node = Node.build(obj);
+ var new_nodes = new List<weak Node> ();
+
+ foreach (var item in arr.get_elements()) {
+ var obj = item.get_object();
+ int id = (int)obj.get_int_member("id");
+ var node = _all_nodes.get(id);
+
+ if (node == null) {
+ node = Node.build(obj);
+ }
+
+ node.parent = this;
+ new_nodes.append(node);
+ _temp_nodes.insert(id, node);
+ node.sync(obj);
}
- node.parent = this;
- new_nodes.append(node);
- _temp_nodes.insert(id, node);
- node.sync(obj);
- }
-
- nodes = (owned) new_nodes;
+ nodes = (owned) new_nodes;
}
public virtual void focus() {
@@ -158,15 +157,15 @@ namespace AstalSway {
}
public bool contain(Node node) {
- parent = node.parent;
- while (parent != null) {
- if (id == parent.id) {
- return true;
+ parent = node.parent;
+ while (parent != null) {
+ if (id == parent.id) {
+ return true;
+ }
+ parent = parent.parent;
}
- parent = parent.parent;
- }
- return false;
+ return false;
}
- }
+}
}