Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
5ab1a68
Switch dependencies to GTK4
stsdc May 15, 2025
188bc76
GTK4 wip
stsdc May 16, 2025
185e7d7
livechart-1 → livechart-2
stsdc May 17, 2025
c94a754
GTK4 wip
stsdc May 17, 2025
b6205d8
first GTK4 run
stsdc May 17, 2025
cd7acbd
bring back searchbox
stsdc May 17, 2025
8ee64a4
Update livechart in CI
stsdc May 17, 2025
448c98b
Merge branch 'main' into stsdc/gtk4-port
stsdc May 17, 2025
fa37ab4
Fix get_style_context dprecation warning
stsdc May 18, 2025
6038748
Bring back search
stsdc Jul 3, 2025
f4058e1
Merge branch 'main' into stsdc/gtk4-port
stsdc Jul 10, 2025
74455fc
Merge branch 'main' into stsdc/gtk4-port
stsdc Jul 14, 2025
7246a45
Bring back ProcessInfoView
stsdc Jul 14, 2025
0388884
Merge branch 'main' into stsdc/gtk4-port
stsdc Jul 16, 2025
95240d2
Do not clone submodules
stsdc Jul 16, 2025
2629e40
Fix lint
stsdc Jul 16, 2025
3841548
Refactor
stsdc Jul 16, 2025
f4d0b46
Merge branch 'main' into stsdc/gtk4-port
stsdc Jul 17, 2025
89537b9
Fix GTK4 build
stsdc Jul 17, 2025
e862c27
Merge branch 'main' into stsdc/gtk4-port
stsdc Jul 17, 2025
092ea0f
Use `add_css_class ()`
stsdc Jul 18, 2025
b86bbd9
Replace grid with a box
stsdc Jul 18, 2025
febdcb6
Refactor
stsdc Jul 18, 2025
c1e2ffc
Merge branch 'main' into stsdc/gtk4-port
stsdc Jul 21, 2025
4b1ea34
Remove `show_all()` comments
stsdc Jul 21, 2025
e4ad9ed
Use Box instead of Grid for labels container on a Chart
stsdc Jul 21, 2025
5ffd5f9
Replace `show_all()` with `present()` in MonitorApp and remove TODO c…
stsdc Jul 21, 2025
8afa0a3
Fix saving is-maximized in settings
stsdc Jul 21, 2025
5a000fc
Update src/Views/ProcessView/ProcessInfoView/ProcessInfoView.vala
stsdc Jul 22, 2025
ead2ed6
Update src/Views/ProcessView/ProcessInfoView/ProcessInfoView.vala
stsdc Jul 22, 2025
ae0d178
Update src/Views/SystemView/SystemCPUView.vala
stsdc Jul 22, 2025
db50576
Fix formatting of margin properties in SystemView and adjust indentat…
stsdc Jul 22, 2025
d9e157f
Set spacing to 6 in labels_box
stsdc Jul 22, 2025
b857816
Use just `HORIZONTAL`
stsdc Jul 22, 2025
dc3a10b
Fix lint
stsdc Jul 22, 2025
133575c
fix lint
stsdc Jul 22, 2025
c4b3ce4
Set `key_controller` in process tree view
stsdc Jul 23, 2025
3681153
Do not prepend smol charts
stsdc Jul 23, 2025
a8aa44f
Fix visibility handling in ProcessInfoView
stsdc Jul 23, 2025
5c42112
Bring back OpenFilesTreeView
stsdc Jul 23, 2025
5d60804
Fix cpu info popover
stsdc Jul 23, 2025
1cd238f
Delete some `present ()`'s
stsdc Jul 23, 2025
b396bbc
Remove commented `insert_at_cursor ()` in `Search ()`
stsdc Jul 26, 2025
325537e
Remove obsolete commented code in LabelVertical
stsdc Jul 26, 2025
c045b89
Regex matching is unnecessary in CPUProcessTreeView; clean up OpenFil…
stsdc Jul 26, 2025
2b934c6
Remove unused regex variable from CPUProcessTreeView constructor
stsdc Jul 26, 2025
d8f739b
Merge branch 'main' into stsdc/gtk4-port
stsdc Jul 29, 2025
ef76dc1
Refactor permission_error_infobar initialization and improve conditio…
stsdc Jul 29, 2025
536685e
Refactor Statusbar labels
stsdc Jul 29, 2025
e78f54a
re-enable Indicator build
stsdc Aug 1, 2025
5722f47
Merge branch 'main' into stsdc/gtk4-port
stsdc Aug 2, 2025
f439651
Merge branch 'main' into stsdc/gtk4-port
stsdc Aug 25, 2025
203994c
Brings designs of custom labels back for now
stsdc Aug 25, 2025
b8db4d4
Remove unused dependency on libwnck-3.0 and clean up related code
stsdc Sep 4, 2025
d8df688
Fix chart and labels overlay
stsdc Sep 5, 2025
522da49
Remove unused update_model method from OpenFilesTreeViewModel
stsdc Sep 6, 2025
81a03fb
Fix syntax for color-scheme conditionals in _index.scss
stsdc Sep 14, 2025
e009d5e
Fix missed spacing
stsdc Sep 14, 2025
650359c
Use Granite.Bin for LabelVertical
stsdc Sep 14, 2025
1989786
Remove comments in Monitor.Search
stsdc Sep 14, 2025
daded9e
Removed commented code
stsdc Sep 14, 2025
9e3366c
merge main
danirabbit Sep 23, 2025
841480c
merge main
danirabbit Sep 23, 2025
515f7e8
Remove extra actionbar from merge
danirabbit Sep 23, 2025
bd9beb6
Merge branch 'main' into stsdc/gtk4-port
stsdc Sep 26, 2025
9647a49
Fix indentations
stsdc Sep 26, 2025
08fa919
Remove unused 'Opened files' label from ProcessInfoIOStats
stsdc Sep 26, 2025
7c957e3
Merge branch 'main' into stsdc/gtk4-port
stsdc Sep 27, 2025
19b7e6d
merge main
danirabbit Oct 1, 2025
d781ed5
Require Granite 7.7.0
danirabbit Oct 1, 2025
5c234ce
Mark primary menu, tooltip shortcut, large icons
danirabbit Oct 1, 2025
c227551
Manage window state as in other apps
danirabbit Oct 1, 2025
b50fd68
Merge main
danirabbit Oct 1, 2025
344c988
Remove obsolete comment
stsdc Oct 1, 2025
935684a
Merge branch 'main' into stsdc/gtk4-port
stsdc Oct 1, 2025
4dcdd9d
Merge branch 'main' into stsdc/gtk4-port
stsdc Oct 1, 2025
90b0298
Merge branch 'main' into stsdc/gtk4-port
stsdc Oct 2, 2025
cf3733a
Comment out open_files_paths.set call in add_path method
stsdc Oct 2, 2025
ea2124e
Update ProcessInfoIOStats.vala
danirabbit Oct 2, 2025
dc95a04
Merge branch 'main' into stsdc/gtk4-port
stsdc Oct 3, 2025
6fd7255
merge main
danirabbit Oct 3, 2025
de88c18
Reintroduce livechart dependency with fallback and re-create wrap fil…
stsdc Oct 3, 2025
2182564
Update live-chart revision to >=1.1.0
stsdc Oct 3, 2025
819d759
Update livechart dependency to livechart-2
stsdc Oct 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ jobs:
- name: Install Dependencies
run: |
apt update
apt install -y libgala-dev libgee-0.8-dev libglib2.0-dev libgranite-dev libgtk-3-dev libhandy-1-dev \
apt install -y libgala-dev libgee-0.8-dev libglib2.0-dev libgranite-dev libgtk-4-dev libadwaita-1-dev \
libdbus-glib-1-dev libgtop2-dev libwingpanel-3.0-dev libudisks2-dev \
libxnvctrl0 libxnvctrl-dev libcurl4-gnutls-dev libflatpak-dev libjson-glib-dev \
liblivechart-1-dev libpci-dev \
liblivechart-2-dev libpci-dev \
meson valac sassc git
- name: Build
run: |
Expand Down
36 changes: 26 additions & 10 deletions data/stylesheet/_index.scss
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@ roundy-label:selected:focus,
roundy-label:hover:selected {
margin: 0 3px;

.small-label {
padding: 0;
}

.value {
color: #{'alpha(@text_color, 0.7)'};
font-feature-settings: "tnum";
Expand Down Expand Up @@ -51,6 +47,27 @@ roundy-label:hover:selected {
}
}

.small-label {
padding: 0;
font-weight: bold;
font-size: 9px;

@if $color-scheme == "light" {
color: grey;
} @else if $color-scheme == "dark" {
color: $SILVER_500;
}
}

.label-vertical {
&-val {
color: $text_color;
font-size: 30px;
font-weight: 200;
border-width: 0;
}
}

.grape_500 {
background-color: rgba($GRAPE_500, 0.6);
}
Expand Down Expand Up @@ -91,24 +108,23 @@ roundy-label:hover:selected {
.core_badge {
border-radius: 8px;
padding-right: 4px;
padding-left:2px;
padding-left: 2px;
font-size: 10px;

@if $color-scheme == "light" {
border: 1px solid $SILVER_300;
background-color: $SILVER_100;

} @else if $color-scheme == "dark" {
border: 1px solid $SILVER_700;
background-color: $SILVER_900;
}


&-mild-warning {
@if $color-scheme == "light" {
background-color: rgba($BANANA_100, 0.7);
color: $BANANA_900;
border: 1px solid rgba($BANANA_300, 0.7);
border: 1px solid rgba($BANANA_300, 0.7);
} @else if $color-scheme == "dark" {
background-color: rgba($BANANA_900, 0.7);
color: $BANANA_300;
Expand Down Expand Up @@ -192,7 +208,7 @@ roundy-label:hover:selected {
} @else if $color-scheme == "dark" {
border-bottom: 1px $SILVER_900 solid;
}

label {
font-family: monospace;
/* background-color: $SILVER_300; */
Expand All @@ -213,4 +229,4 @@ roundy-label:hover:selected {

.text-secondary {
color: $SILVER_700;
}
}
14 changes: 6 additions & 8 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -21,24 +21,22 @@ add_project_arguments(['--vapidir', vapidir], language: 'vala')
# elementary_stylesheet = subproject('stylesheet')

app_dependencies = [
dependency('granite', version: '>= 5.2.0'),
dependency('granite-7', version: '>=7.7.0'),
dependency('glib-2.0'),
dependency('gtk+-3.0'),
dependency('gtk4'),
dependency('gee-0.8'),
dependency('gio-2.0'),
dependency('gobject-2.0'),
dependency('libgtop-2.0'),
dependency('libhandy-1', version: '>=0.90.0'),
dependency('gdk-x11-3.0'),
dependency('x11'),
dependency('libadwaita-1', version: '>=1.0.0'),
dependency('gtk4-x11'),
dependency('udisks2'),
dependency('json-glib-1.0'),
dependency('flatpak'),

# FIXME Bump required version to >= 1.10.0 when GTK 4 porting
dependency(
'livechart',
version: '< 1.10.0',
'livechart-2',
version: '>= 1.10.0',
fallback: ['live-chart', 'livechart_dep'],
),

Expand Down
75 changes: 22 additions & 53 deletions src/MainWindow.vala
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,14 @@
* SPDX-FileCopyrightText: 2025 elementary, Inc. (https://elementary.io)
*/

public class Monitor.MainWindow : Hdy.ApplicationWindow {
public class Monitor.MainWindow : Gtk.ApplicationWindow {
public ProcessView process_view { get; private set; }

public MainWindow (MonitorApp app) {
Object (application: app);
}

construct {
setup_window_state ();

title = _("Monitor");

var resources = new Resources ();
Expand All @@ -31,48 +29,49 @@ public class Monitor.MainWindow : Hdy.ApplicationWindow {
valign = CENTER
};

var sv = new PreferencesView ();
sv.show_all ();
var preferences_view = new PreferencesView ();

var preferences_popover = new Gtk.Popover (null) {
child = sv
var preferences_popover = new Gtk.Popover () {
child = preferences_view
};

var preferences_button = new Gtk.MenuButton () {
image = new Gtk.Image.from_icon_name ("open-menu", Gtk.IconSize.LARGE_TOOLBAR),
icon_name = "open-menu",
primary = true,
popover = preferences_popover,
tooltip_text = (_("Settings"))
tooltip_markup = ("%s\n" + Granite.TOOLTIP_SECONDARY_TEXT_MARKUP).printf (
_("Settings"),
"F10"
)
};
preferences_button.add_css_class (Granite.STYLE_CLASS_LARGE_ICONS);

var search_entry = new Gtk.SearchEntry () {
placeholder_text = _("Search process name or PID"),
valign = CENTER
};
search_entry.set_key_capture_widget (this);

var search_revealer = new Gtk.Revealer () {
child = search_entry,
transition_type = SLIDE_LEFT
transition_type = SLIDE_LEFT,
overflow = VISIBLE
};

var headerbar = new Hdy.HeaderBar () {
has_subtitle = false,
show_close_button = true,
title = _("Monitor")
};
var headerbar = new Adw.HeaderBar ();
headerbar.pack_start (search_revealer);
headerbar.set_custom_title (stack_switcher);
headerbar.set_title_widget (stack_switcher);
headerbar.pack_end (preferences_button);

var statusbar = new Statusbar ();

var box = new Gtk.Box (VERTICAL, 0);
box.add (headerbar);
box.add (stack);
box.add (statusbar);
var main_container = new Gtk.Box (Gtk.Orientation.VERTICAL, 0);

child = box;
set_titlebar (headerbar);
main_container.append (stack);
main_container.append (statusbar);

show_all ();
child = main_container;

var dbusserver = DBusServer.get_default ();

Expand All @@ -97,29 +96,13 @@ public class Monitor.MainWindow : Hdy.ApplicationWindow {
});
});

key_press_event.connect (search_entry.handle_event);

this.delete_event.connect (() => {
int window_width, window_height;
get_size (out window_width, out window_height);
MonitorApp.settings.set_int ("window-width", window_width);
MonitorApp.settings.set_int ("window-height", window_height);
MonitorApp.settings.set_boolean ("is-maximized", this.is_maximized);

if (!MonitorApp.settings.get_boolean ("indicator-state")) {
dbusserver.indicator_state (false);
}

return Gdk.EVENT_PROPAGATE;
});

dbusserver.indicator_state (MonitorApp.settings.get_boolean ("indicator-state"));

MonitorApp.settings.bind ("opened-view", stack, "visible-child-name", DEFAULT);

search_entry.search_changed.connect (() => {
// collapse tree only when search is focused and changed
if (search_entry.is_focus) {
if (search_entry.is_focus ()) {
process_view.process_tree_view.collapse_all ();
}

Expand All @@ -128,10 +111,6 @@ public class Monitor.MainWindow : Hdy.ApplicationWindow {
// focus on child row to avoid the app crashes by clicking "Kill/End Process" buttons in headerbar
process_view.process_tree_view.focus_on_child_row ();
search_entry.grab_focus ();

if (search_entry.text != "") {
search_entry.insert_at_cursor ("");
}
});

search_entry.activate.connect (() => {
Expand All @@ -146,14 +125,4 @@ public class Monitor.MainWindow : Hdy.ApplicationWindow {

add_action (search_action);
}

private void setup_window_state () {
int window_width = MonitorApp.settings.get_int ("window-width");
int window_height = MonitorApp.settings.get_int ("window-height");
this.set_default_size (window_width, window_height);

if (MonitorApp.settings.get_boolean ("is-maximized")) {
this.maximize ();
}
}
}
8 changes: 3 additions & 5 deletions src/Models/OpenFilesTreeViewModel.vala
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*/

public class Monitor.OpenFilesTreeViewModel : Gtk.TreeStore {
private Gee.Map<string, Gtk.TreeIter ? > open_files_paths = new Gee.HashMap<string, Gtk.TreeIter ? > ();
private Gee.Map<string, Gtk.TreeIter ?> open_files_paths = new Gee.HashMap<string, Gtk.TreeIter ?> ();

private Process _process;

Expand Down Expand Up @@ -41,11 +41,9 @@ public class Monitor.OpenFilesTreeViewModel : Gtk.TreeStore {
Gtk.TreeIter iter;
append (out iter, null);

set (iter,
Column.NAME, path,
-1);
set (iter, Column.NAME, path, -1);

// open_files_paths.set (path, iter);
// open_files_paths.set (path, iter);
return true;
}
return false;
Expand Down
33 changes: 30 additions & 3 deletions src/Monitor.vala
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ namespace Monitor {
public override void startup () {
base.startup ();

Hdy.init ();
Granite.init ();
Adw.init ();

Appearance.set_prefered_style ();

Expand Down Expand Up @@ -72,12 +73,17 @@ namespace Monitor {
var dbusserver = DBusServer.get_default ();
dbusserver.show.connect (() => activate ());
dbusserver.quit.connect (quit);

window_removed.connect (() => {
if (!settings.get_boolean ("indicator-state")) {
dbusserver.indicator_state (false);
}
});
}

public override void activate () {
// only have one window
if (get_windows () != null) {
window.show_all ();
window.present ();
return;
}
Expand Down Expand Up @@ -108,9 +114,23 @@ namespace Monitor {
window.hide ();
MonitorApp.settings.set_boolean ("background-state", true);
} else {
window.show_all ();
window.present ();
}

/*
* This is very finicky. Bind size after present else set_titlebar gives us bad sizes
* Set maximize after height/width else window is min size on unmaximize
* Bind maximize as SET else get get bad sizes
*/
settings.bind ("window-height", window, "default-height", SettingsBindFlags.DEFAULT);
settings.bind ("window-width", window, "default-width", SettingsBindFlags.DEFAULT);

if (settings.get_boolean ("is-maximized")) {
window.maximize ();
}

settings.bind ("is-maximized", window, "maximized", SettingsBindFlags.SET);

window.process_view.process_tree_view.focus_on_first_row ();
}

Expand All @@ -127,6 +147,13 @@ namespace Monitor {
PCIUtils.LIBPCI_PATCH_VER
);

print (
"Gtk %d.%d.%d\n",
Gtk.MAJOR_VERSION,
Gtk.MINOR_VERSION,
Gtk.MICRO_VERSION
);

// add command line options
try {
var opt_context = new OptionContext ("");
Expand Down
2 changes: 1 addition & 1 deletion src/Services/Appearance.vala
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class Monitor.Appearance : Object {
provider.load_from_resource ("/io/elementary/monitor/monitor-light.css");
}

Gtk.StyleContext.add_provider_for_screen (Gdk.Screen.get_default (), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
Gtk.StyleContext.add_provider_for_display (Gdk.Display.get_default (), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);

// We listen to changes in Granite.Settings and update our app if the user changes their preference
granite_settings.notify["prefers-color-scheme"].connect (() => {
Expand Down
Loading
Loading