Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update some deps for gtk4 #362

Draft
wants to merge 19 commits into
base: dev
Choose a base branch
from
Draft
4 changes: 2 additions & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@ 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
apt install -y libdbus-glib-1-dev libwnck-3-dev libgtop2-dev libwingpanel-3.0-dev libudisks2-dev
apt install -y libxnvctrl0 libxnvctrl-dev libcurl4-gnutls-dev libflatpak-dev
apt install -y meson valac sassc git
- name: Build
env:
DESTDIR: out
run: |
meson --prefix=/usr -Dindicator-wingpanel=enabled build
meson --prefix=/usr -Dindicator-wingpanel=disabled build
cd build
ninja

4 changes: 2 additions & 2 deletions data/stylesheet/_index.scss
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
@import "../../subprojects/stylesheet/src/gtk-3.0/palette";
@import "../../subprojects/stylesheet/src/gtk-3.0/index";
@import "../../subprojects/stylesheet/src/gtk-4.0/palette";
@import "../../subprojects/stylesheet/src/gtk-4.0/index";

$text_color: $fg_color;

Expand Down
13 changes: 7 additions & 6 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ add_global_arguments('-DGETTEXT_PACKAGE="@0@"'.format(meson.project_name()), lan

add_project_arguments(['--vapidir', vapidir], language: 'vala')
add_project_arguments(['-DWNCK_I_KNOW_THIS_IS_UNSTABLE', '-w'], language: 'c')
# add_project_arguments(['-DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED'], language: 'c')

livechart_proj = subproject('live-chart')

Expand All @@ -24,17 +25,17 @@ livechart_proj = subproject('live-chart')
# elementary_stylesheet = subproject('stylesheet')

app_dependencies = [
dependency('granite', version: '>= 5.2.0'),
dependency('granite-7'),
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('libwnck-3.0'),
dependency('libhandy-1', version: '>=0.90.0'),
dependency('gdk-x11-3.0'),
dependency('x11'),
#dependency('libwnck-3.0', version: '>=40.1'),
dependency('libadwaita-1', version: '>=1.0.0'),
dependency('gtk4-x11'),
# dependency('x11'),
dependency('udisks2'),
dependency('json-glib-1.0'),
dependency('flatpak'),
Expand Down
118 changes: 77 additions & 41 deletions src/MainWindow.vala
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
public class Monitor.MainWindow : Hdy.ApplicationWindow {
public class Monitor.MainWindow : Gtk.ApplicationWindow {
// application reference
private Shortcuts shortcuts;

private Resources resources;

// Widgets
public Headerbar headerbar;

public ProcessView process_view;
public SystemView system_view;
public ContainerView container_view;
Expand All @@ -19,7 +16,10 @@ public class Monitor.MainWindow : Hdy.ApplicationWindow {

// Constructs a main window
public MainWindow (MonitorApp app) {
Hdy.init ();
Granite.init ();

// Adw.init ();

this.set_application (app);

setup_window_state ();
Expand All @@ -43,43 +43,32 @@ public class Monitor.MainWindow : Hdy.ApplicationWindow {
stack.add_titled (container_view, "container_view", _("Containers"));
}


Gtk.StackSwitcher stack_switcher = new Gtk.StackSwitcher ();
stack_switcher.valign = Gtk.Align.CENTER;
stack_switcher.set_stack (stack);

headerbar = new Headerbar (this);
headerbar.set_custom_title (stack_switcher);
var sv = new PreferencesView ();
headerbar.preferences_grid.add (sv);
sv.show_all ();
var headerbar = this.build_headerbar (stack_switcher);
set_titlebar (headerbar);

statusbar = new Statusbar ();

var grid = new Gtk.Grid () {
orientation = Gtk.Orientation.VERTICAL
};

grid.add (headerbar);
grid.add (stack);
grid.add (statusbar);
grid.attach (stack, 0, 1, 1, 1);
grid.attach (statusbar, 0, 2, 1, 1);

add (grid);
set_child (grid);

show_all ();
present ();

dbusserver = DBusServer.get_default ();

headerbar.search_revealer.set_reveal_child (stack.visible_child_name == "process_view");
stack.notify["visible-child-name"].connect (() => {
headerbar.search_revealer.set_reveal_child (stack.visible_child_name == "process_view");
});

new Thread<void> ("upd", () => {
Timeout.add_seconds (MonitorApp.settings.get_int ("update-time"), () => {
process_view.update ();


// process_view.update ();
container_view.update ();


Expand All @@ -98,41 +87,84 @@ public class Monitor.MainWindow : Hdy.ApplicationWindow {

dbusserver.quit.connect (() => app.quit ());
dbusserver.show.connect (() => {
this.deiconify ();
this.present ();
setup_window_state ();
this.show_all ();
this.present ();
});

shortcuts = new Shortcuts (this);
key_press_event.connect ((e) => shortcuts.handle (e));
// key_press_event.connect ((e) => shortcuts.handle (e));

this.delete_event.connect (() => {
int window_width, window_height, position_x, position_y;
get_size (out window_width, out window_height);
get_position (out position_x, out position_y);
app.window_removed.connect (() => {
int position_x, position_y;
int window_width = get_size (Gtk.Orientation.HORIZONTAL);
int window_height = get_size (Gtk.Orientation.VERTICAL);
// get_position (out position_x, out position_y);
MonitorApp.settings.set_int ("window-width", window_width);
MonitorApp.settings.set_int ("window-height", window_height);
MonitorApp.settings.set_int ("position-x", position_x);
MonitorApp.settings.set_int ("position-y", position_y);
MonitorApp.settings.set_boolean ("is-maximized", this.is_maximized);
// MonitorApp.settings.set_int ("position-x", position_x);
// MonitorApp.settings.set_int ("position-y", position_y);
// MonitorApp.settings.set_boolean ("is-maximized", this.is_maximized);

MonitorApp.settings.set_string ("opened-view", stack.visible_child_name);

if (MonitorApp.settings.get_boolean ("indicator-state")) {
this.hide_on_delete ();
// Read: https://discourse.gnome.org/t/how-to-hide-widget-instead-removing-them-in-gtk-4/8176
this.hide ();

} else {
dbusserver.indicator_state (false);
app.quit ();
}

return true;
// return true;
});

dbusserver.indicator_state (MonitorApp.settings.get_boolean ("indicator-state"));
stack.visible_child_name = MonitorApp.settings.get_string ("opened-view");
}

private Adw.HeaderBar build_headerbar (Gtk.Widget widget) {
// The headerbar
var headerbar = new Adw.HeaderBar ();
headerbar.set_title_widget (widget);

// Preferences button
var preferences_button = new Gtk.MenuButton ();
preferences_button.has_tooltip = true;
preferences_button.tooltip_text = (_("Settings"));
preferences_button.set_icon_name ("open-menu");
headerbar.pack_end (preferences_button);

var preferences_grid = new Gtk.Grid () {
orientation = Gtk.Orientation.VERTICAL
};

var preferences_popover = new Gtk.Popover ();
preferences_popover.set_child (preferences_grid);
preferences_button.popover = preferences_popover;

preferences_grid.attach (new PreferencesView (), 0, 0, 1, 1);

// Search entry
var search = new Search (process_view.process_tree_view) {
valign = Gtk.Align.CENTER,
};

Gtk.Revealer search_revealer = new Gtk.Revealer () {
transition_type = Gtk.RevealerTransitionType.SLIDE_LEFT,
};
search_revealer.set_child (search);
headerbar.pack_start (search_revealer);

search_revealer.set_reveal_child (stack.visible_child_name == "process_view");
stack.notify["visible-child-name"].connect (() => {
search_revealer.set_reveal_child (stack.visible_child_name == "process_view");
});

return headerbar;
}

private void setup_window_state () {
int window_width = MonitorApp.settings.get_int ("window-width");
int window_height = MonitorApp.settings.get_int ("window-height");
Expand All @@ -144,12 +176,16 @@ public class Monitor.MainWindow : Hdy.ApplicationWindow {

int position_x = MonitorApp.settings.get_int ("position-x");
int position_y = MonitorApp.settings.get_int ("position-y");
if (position_x == -1 || position_y == -1) {
// -1 is default value of these keys, which means this is the first launch
this.window_position = Gtk.WindowPosition.CENTER;
} else {
move (position_x, position_y);
}

// Can't move window to a specific position in GTK4
// Read: https://discourse.gnome.org/t/how-to-center-gtkwindows-in-gtk4/3112

// if (position_x == -1 || position_y == -1) {
// // -1 is default value of these keys, which means this is the first launch
// this.window_position = Gtk.WindowPosition.CENTER;
// } else {
// move (position_x, position_y);
// }
}

}
8 changes: 4 additions & 4 deletions src/Managers/Process.vala
Original file line number Diff line number Diff line change
Expand Up @@ -318,10 +318,10 @@ public class Monitor.Process : GLib.Object {
mem_usage = (proc_mem.resident - proc_mem.share) / 1024; // in KiB

// also if it is using X Window Server
if (Gdk.Display.get_default () is Gdk.X11.Display) {
Wnck.ResourceUsage resu = Wnck.ResourceUsage.pid_read (Gdk.Display.get_default (), stat.pid);
mem_usage += (resu.total_bytes_estimate / 1024);
}
// if (Gdk.Display.get_default () is Gdk.X11.Display) {
// Wnck.ResourceUsage resu = Wnck.ResourceUsage.pid_read (Gdk.Display.get_default (), stat.pid);
// mem_usage += (resu.total_bytes_estimate / 1024);
// }

var total_installed_memory = (double) mem.total / 1024;
mem_percentage = (mem_usage / total_installed_memory) * 100;
Expand Down
4 changes: 4 additions & 0 deletions src/Models/TreeViewModel.vala
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ public enum Monitor.Column {
}

public class Monitor.TreeViewModel : Gtk.TreeStore {
private static GLib.Once<TreeViewModel> instance;
public static unowned TreeViewModel get_default () {
return instance.once (() => { return new TreeViewModel (); });
}
public ProcessManager process_manager;
private Gee.Map<int, Gtk.TreeIter ? > process_rows;
public signal void added_first_row ();
Expand Down
3 changes: 1 addition & 2 deletions src/Monitor.vala
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ namespace Monitor {
public override void activate () {
// only have one window
if (get_windows () != null) {
window.show_all ();
window.present ();
return;
}
Expand Down Expand Up @@ -60,7 +59,7 @@ namespace Monitor {
window.hide ();
MonitorApp.settings.set_boolean ("background-state", true);
} else {
window.show_all ();
window.present ();
}

window.process_view.process_tree_view.focus_on_first_row ();
Expand Down
24 changes: 12 additions & 12 deletions src/Services/Appearance.vala
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,27 @@ public class Monitor.Appearance : Object {
bool is_dark = granite_settings.prefers_color_scheme == Granite.Settings.ColorScheme.DARK;
gtk_settings.gtk_application_prefer_dark_theme = is_dark;


var provider = new Gtk.CssProvider ();

if (is_dark) {
provider.load_from_resource ("/com/github/stsdc/monitor/monitor-dark.css");
} else {
provider.load_from_resource ("/com/github/stsdc/monitor/monitor-light.css");
}

Gtk.StyleContext.add_provider_for_screen (Gdk.Screen.get_default (), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
load_style (is_dark);

// We listen to changes in Granite.Settings and update our app if the user changes their preference
granite_settings.notify["prefers-color-scheme"].connect (() => {
is_dark = granite_settings.prefers_color_scheme == Granite.Settings.ColorScheme.DARK;
gtk_settings.gtk_application_prefer_dark_theme = is_dark;
load_style (is_dark);
});
}

private static void load_style (bool is_dark) {
var provider = new Gtk.CssProvider ();

if (is_dark) {
provider.load_from_resource ("/com/github/stsdc/monitor/monitor-dark.css");
} else {
provider.load_from_resource ("/com/github/stsdc/monitor/monitor-light.css");
}
});
// @TODO: Fix styles
Gtk.StyleContext.add_provider_for_display (Gdk.Display.get_default (), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);

}

public static void retrofit () {
Expand All @@ -37,7 +36,8 @@ public class Monitor.Appearance : Object {
debug ("Retrofitting styles to make Monitor usable with a current theme.");
var provider = new Gtk.CssProvider ();
provider.load_from_resource ("/com/github/stsdc/monitor/monitor-retrofit.css");
Gtk.StyleContext.add_provider_for_screen (Gdk.Screen.get_default (), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
// @TODO: Fix retrofitting styles
Gtk.StyleContext.add_provider_for_display (Gdk.Display.get_default (), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
}
}
}
Loading