[gnome-usage] process-list-box: Simplify ProcessListBox according to backend



commit 9eba69a2f4b032d2226a61a5a3541586c80c9dc2
Author: Petr Štětka <pstetka redhat com>
Date:   Sun May 20 14:41:07 2018 +0200

    process-list-box: Simplify ProcessListBox according to backend

 src/cpu-sub-view.vala     |   2 +-
 src/memory-sub-view.vala  |   2 +-
 src/process-list-box.vala | 136 +++++++++++++++-------------------------------
 3 files changed, 45 insertions(+), 95 deletions(-)
---
diff --git a/src/cpu-sub-view.vala b/src/cpu-sub-view.vala
index be6941a..23516dc 100644
--- a/src/cpu-sub-view.vala
+++ b/src/cpu-sub-view.vala
@@ -78,7 +78,7 @@ namespace Usage
 
         public void search_in_processes(string text)
         {
-            process_list_box.search(text);
+            process_list_box.search_text = text;
         }
     }
 }
diff --git a/src/memory-sub-view.vala b/src/memory-sub-view.vala
index fb73735..2336df8 100644
--- a/src/memory-sub-view.vala
+++ b/src/memory-sub-view.vala
@@ -74,7 +74,7 @@ namespace Usage
 
         public void search_in_processes(string text)
         {
-            process_list_box.search(text);
+            process_list_box.search_text = text;
         }
     }
 }
diff --git a/src/process-list-box.vala b/src/process-list-box.vala
index 41ac03e..6692138 100644
--- a/src/process-list-box.vala
+++ b/src/process-list-box.vala
@@ -28,48 +28,31 @@ namespace Usage
     public class ProcessListBox : Gtk.ListBox
     {
         public bool empty { get; set; default = true; }
+        public string search_text { get; set; default = ""; }
 
-        ListStore model;
-        ProcessRow? opened_row = null;
-        string focused_row_cmdline;
-        ProcessListBoxType type;
-        string search_text = "";
+        private const double APP_CPU_MIN_LOAD_LIMIT = 1;
+        private const double APP_MEM_MIN_USAGE_LIMIT = 0;
+        private ListStore model;
+        private ProcessListBoxType type;
 
         public ProcessListBox(ProcessListBoxType type)
         {
-            this.type = type;
             set_selection_mode (Gtk.SelectionMode.NONE);
             set_header_func (update_header);
-            row_activated.connect((row) => {
-                var process_row = (ProcessRow) row;
 
-                if(opened_row != null)
-                    opened_row.activate();
+            this.type = type;
+            model = new ListStore(typeof(AppItem));
+            bind_model(model, on_row_created);
 
-                if(opened_row != process_row)
-                {
-                    process_row.activate();
-                    if(process_row.process.sub_processes != null)
-                        opened_row = process_row;
-                    else
-                        opened_row = null;
-                }
-                else
-                    opened_row = null;
+            row_activated.connect((row) => {
+                var process_row = (ProcessRow) row;
+                process_row.activate();
             });
 
-            set_focus_child.connect((child) =>
-            {
-                if(child != null)
-                {
-                    focused_row_cmdline = ((ProcessRow) child).process.cmdline;
-                    //GLib.stdout.printf("focused: " + focused_row_cmdline+ "\n");
-                }
+            this.notify["search-text"].connect ((sender, property) => {
+                update();
             });
 
-            model = new ListStore(typeof(Process));
-            bind_model(model, on_row_created);
-
             var settings = Settings.get_default();
             Timeout.add(settings.list_update_interval_UI, update);
 
@@ -78,96 +61,63 @@ namespace Usage
 
         public bool update()
         {
-            CompareDataFunc<Process> processcmp = (a, b) => {
-                Process p_a = (Process) a;
-                Process p_b = (Process) b;
+            model.remove_all();
 
-                switch(type)
-                {
+            CompareDataFunc<AppItem> app_cmp = (a, b) => {
+                AppItem app_a = (AppItem) a;
+                AppItem app_b = (AppItem) b;
+
+                switch(type) {
                     default:
                     case ProcessListBoxType.PROCESSOR:
-                        return (int) ((uint64) (p_a.cpu_load < p_b.cpu_load) - (uint64) (p_a.cpu_load > 
p_b.cpu_load));
+                        return (int) ((uint64) (app_a.cpu_load < app_b.cpu_load) - (uint64) (app_a.cpu_load 
app_b.cpu_load));
                     case ProcessListBoxType.MEMORY:
-                        return (int) ((uint64) (p_a.mem_usage < p_b.mem_usage) - (uint64) (p_a.mem_usage > 
p_b.mem_usage));
+                        return (int) ((uint64) (app_a.mem_usage < app_b.mem_usage) - (uint64) 
(app_a.mem_usage > app_b.mem_usage));
                 }
             };
 
-            bind_model(null, null);
-            model.remove_all();
-
-            SystemMonitor system_monitor = SystemMonitor.get_default();
-            if(search_text == "")
-            {
+            var system_monitor = SystemMonitor.get_default();
+            if(search_text == "") {
                 switch(type)
                 {
                     default:
                     case ProcessListBoxType.PROCESSOR:
-                        foreach(unowned Process process in system_monitor.get_cpu_processes())
-                            model.insert_sorted(process, processcmp);
+                        foreach(unowned AppItem app in system_monitor.get_apps()) {
+                            if(app.cpu_load > APP_CPU_MIN_LOAD_LIMIT)
+                                model.insert_sorted(app, app_cmp);
+                        }
                         break;
                     case ProcessListBoxType.MEMORY:
-                        foreach(unowned Process process in system_monitor.get_ram_processes())
-                            model.insert_sorted(process, processcmp);
+                        foreach(unowned AppItem app in system_monitor.get_apps())
+                            if(app.mem_usage > APP_MEM_MIN_USAGE_LIMIT)
+                                model.insert_sorted(app, app_cmp);
                         break;
                 }
             }
-            else
-            {
-                foreach(unowned Process process in system_monitor.get_ram_processes()) //because ram 
contains all processes
-                {
-                    if(process.display_name.down().contains(search_text.down()) || 
process.cmdline.down().contains(search_text.down()))
-                        model.insert_sorted(process, processcmp);
+            else {
+                foreach(unowned AppItem app in system_monitor.get_apps()) {
+                    if(app.display_name.down().contains(search_text.down()) || 
app.representative_cmdline.down().contains(search_text.down()))
+                        model.insert_sorted(app, app_cmp);
                 }
             }
 
             empty = (model.get_n_items() == 0);
-
-            bind_model(model, on_row_created);
             return true;
         }
 
-        public void search(string text)
-        {
-            search_text = text;
-            update();
+        private Gtk.Widget on_row_created (Object item) {
+            return new ProcessRow((AppItem) item, type);
         }
 
-        private Gtk.Widget on_row_created (Object item)
-        {
-            Process process = (Process) item;
-            bool opened = false;
-
-            if(opened_row != null)
-                if(process.cmdline == opened_row.process.cmdline)
-                    opened = true;
-
-            var row = new ProcessRow(process, type, opened);
-            if(opened)
-               opened_row = row;
-
-            if(focused_row_cmdline != null)
-            {
-                if(process.cmdline == focused_row_cmdline)
-                {
-                    //row.grab_focus(); TODO not working
-                    //GLib.stdout.printf("grab focus for: " + focused_row_cmdline+ "\n");
-                }
-            }
-
-            return row;
-        }
-
-        private void update_header(Gtk.ListBoxRow row, Gtk.ListBoxRow? before_row)
-        {
-               if(before_row == null)
-                   row.set_header(null);
-            else
-            {
+        private void update_header(Gtk.ListBoxRow row, Gtk.ListBoxRow? before_row) {
+            if(before_row == null)
+                row.set_header(null);
+            else {
                 var separator = new Gtk.Separator (Gtk.Orientation.HORIZONTAL);
                 separator.get_style_context().add_class("list");
-               separator.show();
-                   row.set_header(separator);
-               }
+                separator.show();
+                row.set_header(separator);
+            }
         }
     }
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]