Skip to content

Commit

Permalink
LibGUI: Add a timer in ProcessChooser to get processes for every 1000ms
Browse files Browse the repository at this point in the history
  • Loading branch information
umasankar-yedida authored and awesomekling committed Aug 14, 2020
1 parent cdae3f5 commit d5a77de
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
28 changes: 28 additions & 0 deletions Libraries/LibGUI/ProcessChooser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,34 @@ ProcessChooser::ProcessChooser(const StringView& window_title, const StringView&
};

table_view.model()->update();

m_refresh_timer = add<Core::Timer>();

m_refresh_timer->start(m_refresh_interval); // Start the timer to update the processes
m_refresh_timer->on_timeout = [&table_view] {
auto previous_selected_pid = -1; // Store the selection index to not to clear the selection upon update.
if (!table_view.selection().is_empty()) {
auto pid_as_variant = table_view.model()->data(table_view.selection().first(), GUI::Model::Role::Custom);
previous_selected_pid = pid_as_variant.as_i32();
}

table_view.model()->update();

if (previous_selected_pid == -1) {
return;
}

auto model = table_view.model();
auto row_count = model->row_count();
auto column_index = 1; // Corresponds to PID column in the table_view.
for (int row_index = 0; row_index < row_count; ++row_index) {
auto cell_index = model->index(row_index, column_index);
auto pid_as_variant = model->data(cell_index, GUI::Model::Role::Custom);
if (previous_selected_pid == pid_as_variant.as_i32()) {
table_view.selection().set(cell_index); // Set only if PIDs are matched.
}
}
};
}

ProcessChooser::~ProcessChooser()
Expand Down
5 changes: 5 additions & 0 deletions Libraries/LibGUI/ProcessChooser.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#pragma once

#include <LibGUI/Dialog.h>
#include <LibCore/Timer.h>

namespace GUI {

Expand All @@ -46,6 +47,10 @@ class ProcessChooser final : public GUI::Dialog {
String m_window_title;
String m_button_label;
RefPtr<Gfx::Bitmap> m_window_icon;

bool m_refresh_enabled { true };
unsigned m_refresh_interval { 1000 };
RefPtr<Core::Timer> m_refresh_timer;
};

}

0 comments on commit d5a77de

Please sign in to comment.