-
-
Notifications
You must be signed in to change notification settings - Fork 49
Expand file tree
/
Copy pathMainWindow.vala
More file actions
128 lines (99 loc) · 4.05 KB
/
MainWindow.vala
File metadata and controls
128 lines (99 loc) · 4.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/*
* SPDX-License-Identifier: GPL-3.0-or-later
* SPDX-FileCopyrightText: 2025 elementary, Inc. (https://elementary.io)
*/
public class Monitor.MainWindow : Gtk.ApplicationWindow {
public ProcessView process_view { get; private set; }
public MainWindow (MonitorApp app) {
Object (application: app);
}
construct {
title = _("Monitor");
close_request.connect (() => {
if (MonitorApp.settings.get_boolean ("indicator-state")) {
debug ("Indicator is enabled, hiding the window instead of closing");
hide ();
return Gdk.EVENT_STOP;
}
debug ("Close the window");
return Gdk.EVENT_PROPAGATE;
});
var resources = new Resources ();
process_view = new ProcessView ();
var system_view = new SystemView (resources);
var stack = new Gtk.Stack () {
transition_type = SLIDE_LEFT_RIGHT
};
stack.add_titled (process_view, "process_view", _("Processes"));
stack.add_titled (system_view, "system_view", _("System"));
var stack_switcher = new Gtk.StackSwitcher () {
stack = stack,
valign = CENTER
};
var preferences_view = new PreferencesView ();
var preferences_popover = new Gtk.Popover () {
child = preferences_view
};
var preferences_button = new Gtk.MenuButton () {
icon_name = "open-menu",
primary = true,
popover = preferences_popover,
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,
overflow = VISIBLE
};
var headerbar = new Adw.HeaderBar ();
headerbar.pack_start (search_revealer);
headerbar.set_title_widget (stack_switcher);
headerbar.pack_end (preferences_button);
var statusbar = new Statusbar ();
var main_container = new Gtk.Box (Gtk.Orientation.VERTICAL, 0);
set_titlebar (headerbar);
main_container.append (stack);
main_container.append (statusbar);
child = main_container;
var dbusserver = DBusServer.get_default ();
search_revealer.reveal_child = stack.visible_child == process_view;
stack.notify["visible-child"].connect (() => {
search_revealer.reveal_child = stack.visible_child == process_view;
});
new Thread<void> ("upd", () => {
Timeout.add_seconds (MonitorApp.settings.get_int ("update-time"), () => {
process_view.update ();
Idle.add (() => {
system_view.update ();
dbusserver.indicator_state (MonitorApp.settings.get_boolean ("indicator-state"));
var res = resources.serialize ();
statusbar.update (res);
dbusserver.update (res);
return false;
});
return true;
});
});
dbusserver.indicator_state (MonitorApp.settings.get_boolean ("indicator-state"));
MonitorApp.settings.bind ("opened-view", stack, "visible-child-name", DEFAULT);
search_entry.search_changed.connect (() => {
process_view.treeview_model.filtered.needle = search_entry.text;
search_entry.grab_focus ();
});
var search_action = new GLib.SimpleAction ("search", null);
search_action.activate.connect (() => {
search_entry.text = "";
search_entry.search_changed ();
});
add_action (search_action);
}
}