Port to xfconf

The internal XtmSettings object is retained so we don't have to refactor
everything, but the backend now uses Xfconf over the rc file.
This commit is contained in:
Simon Steinbeiss
2021-01-20 16:00:15 +01:00
committed by Simon Steinbeiß
parent 99c3deee8e
commit a5aeafc15f
7 changed files with 146 additions and 290 deletions

View File

@@ -27,6 +27,7 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include <xfconf/xfconf.h>
#include <libxfce4ui/libxfce4ui.h>
#include "settings.h"
@@ -61,6 +62,10 @@ struct _XtmProcessWindow
GtkWidget * statusbar;
GtkWidget * settings_button;
XtmSettings * settings;
XfconfChannel * channel;
gint width;
gint height;
gulong handler;
};
G_DEFINE_TYPE (XtmProcessWindow, xtm_process_window, GTK_TYPE_WIDGET)
@@ -68,8 +73,6 @@ static void xtm_process_window_finalize (GObject *object);
static void xtm_process_window_hide (GtkWidget *widget);
static void emit_destroy_signal (XtmProcessWindow *window);
static gboolean xtm_process_window_configure_event (XtmProcessWindow *window, GdkEvent *event);
static gboolean xtm_process_vpaned_move_event (XtmProcessWindow *window, GdkEventButton *event);
static gboolean xtm_process_window_key_pressed (XtmProcessWindow *window, GdkEventKey *event);
static void monitor_update_step_size (XtmProcessWindow *window);
@@ -208,59 +211,62 @@ xtm_process_window_class_init (XtmProcessWindowClass *klass)
}
static void
show_settings_dialog (GtkButton *button, GtkWidget *parent)
xtm_process_window_size_allocate (GtkWidget *widget, GtkAllocation *allocation, gpointer user_data)
{
xtm_settings_dialog_run (parent);
XtmProcessWindow *window = (XtmProcessWindow *) user_data;
g_return_if_fail (GTK_IS_WINDOW (XTM_PROCESS_WINDOW (widget)->window));
gtk_window_get_size (GTK_WINDOW (XTM_PROCESS_WINDOW (widget)->window), &window->width, &window->height);
}
static gboolean
xtm_process_window_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data)
{
XtmProcessWindow *window = (XtmProcessWindow *) user_data;
xfconf_channel_set_int (XTM_PROCESS_WINDOW (widget)->channel, SETTING_WINDOW_WIDTH, window->width);
xfconf_channel_set_int (XTM_PROCESS_WINDOW (widget)->channel, SETTING_WINDOW_HEIGHT, window->height);
return FALSE;
}
static void
xtm_show_legend (XtmProcessWindow *window)
show_settings_dialog (GtkButton *button, gpointer user_data)
{
gboolean show_legend;
XtmProcessWindow *window = (XtmProcessWindow *) user_data;
g_object_get (window->settings,
"show-legend", &show_legend,
NULL);
gtk_widget_set_visible (GTK_WIDGET (gtk_builder_get_object (window->builder, "legend")), show_legend);
}
static void
show_filter_toggled_cb (GtkToggleButton *button, gpointer user_data)
{
XtmProcessWindow *window = user_data;
gboolean active;
active = gtk_toggle_button_get_active (button);
gtk_revealer_set_reveal_child (GTK_REVEALER (gtk_bin_get_child (GTK_BIN (window->filter_searchbar))), active);
g_signal_handler_block (G_OBJECT (window->window), window->handler);
xtm_settings_dialog_run (window->window);
g_signal_handler_unblock (G_OBJECT (window->window), window->handler);
}
static void
xtm_process_window_init (XtmProcessWindow *window)
{
GtkWidget *button;
gint width, height;
gboolean show_legend;
gboolean active;
window->settings = xtm_settings_get_default ();
window->channel = xfconf_channel_new (CHANNEL);
window->builder = gtk_builder_new ();
gtk_builder_add_from_string (window->builder, process_window_ui, process_window_ui_length, NULL);
window->window = GTK_WIDGET (gtk_builder_get_object (window->builder, "process-window"));
g_object_get (window->settings, "window-width", &width, "window-height", &height, NULL);
if (width >= 1 && height >= 1)
gtk_window_resize (GTK_WINDOW (window->window), width, height);
g_signal_connect_swapped (window->window, "destroy", G_CALLBACK (emit_destroy_signal), window);
g_signal_connect_swapped (window->window, "key-press-event", G_CALLBACK(xtm_process_window_key_pressed), window);
g_signal_connect_swapped(window->window, "configure-event",
G_CALLBACK(xtm_process_window_configure_event), window);
window->width = xfconf_channel_get_int (window->channel, SETTING_WINDOW_WIDTH, DEFAULT_WINDOW_WIDTH);
window->height = xfconf_channel_get_int (window->channel, SETTING_WINDOW_HEIGHT, DEFAULT_WINDOW_HEIGHT);
if (window->width >= 1 && window->height >= 1)
gtk_window_set_default_size (GTK_WINDOW (window->window), window->width, window->height);
g_signal_connect_swapped (window->settings, "notify::show-legend", G_CALLBACK (xtm_show_legend), window);
g_object_notify (G_OBJECT (window->settings), "show-legend");
g_signal_connect_swapped (window->window, "destroy", G_CALLBACK (emit_destroy_signal), window);
window->handler = g_signal_connect_swapped (window->window, "size-allocate", G_CALLBACK (xtm_process_window_size_allocate), window);
g_signal_connect_swapped (window->window, "delete-event", G_CALLBACK (xtm_process_window_delete_event), window);
g_signal_connect_swapped (window->window, "key-press-event", G_CALLBACK(xtm_process_window_key_pressed), window);
button = GTK_WIDGET (gtk_builder_get_object (window->builder, "button-settings"));
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (show_settings_dialog), GTK_WIDGET (window->window));
G_CALLBACK (show_settings_dialog), window);
button = GTK_WIDGET (gtk_builder_get_object (window->builder, "button-identify"));
g_signal_connect (G_OBJECT (button), "clicked",
@@ -268,11 +274,11 @@ xtm_process_window_init (XtmProcessWindow *window)
window->filter_searchbar = GTK_WIDGET (gtk_builder_get_object (window->builder, "filter-searchbar"));
button = GTK_WIDGET (gtk_builder_get_object (window->builder, "button-show-filter"));
gtk_revealer_set_reveal_child (GTK_REVEALER (gtk_bin_get_child (GTK_BIN (window->filter_searchbar))), FALSE);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
gtk_revealer_get_reveal_child (GTK_REVEALER (gtk_bin_get_child (GTK_BIN (window->filter_searchbar)))));
g_signal_connect (G_OBJECT (button), "toggled",
G_CALLBACK (show_filter_toggled_cb), window);
xfconf_g_property_bind (window->channel, SETTING_SHOW_FILTER, G_TYPE_BOOLEAN,
G_OBJECT (button), "active");
active = xfconf_channel_get_bool (window->channel, SETTING_SHOW_FILTER, FALSE);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), active);
gtk_revealer_set_reveal_child (GTK_REVEALER (gtk_bin_get_child (GTK_BIN (window->filter_searchbar))), active);
g_object_bind_property (G_OBJECT (gtk_bin_get_child (GTK_BIN (window->filter_searchbar))), "reveal-child",
G_OBJECT (button), "active", G_BINDING_BIDIRECTIONAL);
@@ -287,10 +293,8 @@ xtm_process_window_init (XtmProcessWindow *window)
NULL);
window->vpaned = GTK_WIDGET (gtk_builder_get_object (window->builder, "mainview-vpaned"));
if (handle_position > -1)
gtk_paned_set_position (GTK_PANED (window->vpaned), handle_position);
g_signal_connect_swapped(window->vpaned, "button-release-event",
G_CALLBACK(xtm_process_vpaned_move_event), window);
xfconf_g_property_bind (window->channel, SETTING_HANDLE_POSITION, G_TYPE_INT,
G_OBJECT (window->vpaned), "position");
toolitem = GTK_WIDGET (gtk_builder_get_object (window->builder, "graph-cpu"));
window->cpu_monitor = xtm_process_monitor_new ();
@@ -319,10 +323,8 @@ xtm_process_window_init (XtmProcessWindow *window)
gtk_widget_show (window->treeview);
gtk_container_add (GTK_CONTAINER (gtk_builder_get_object (window->builder, "scrolledwindow")), window->treeview);
g_object_get (window->settings,
"show-legend", &show_legend,
NULL);
gtk_widget_set_visible (GTK_WIDGET (gtk_builder_get_object (window->builder, "legend")), show_legend);
xfconf_g_property_bind (window->channel, SETTING_SHOW_LEGEND, G_TYPE_BOOLEAN,
gtk_builder_get_object (window->builder, "legend"), "visible");
window->filter_entry = GTK_WIDGET(gtk_builder_get_object (window->builder, "filter-entry"));
g_signal_connect (G_OBJECT(window->filter_entry), "icon-press", G_CALLBACK(filter_entry_icon_pressed_cb), NULL);
@@ -360,36 +362,6 @@ emit_destroy_signal (XtmProcessWindow *window)
g_signal_emit_by_name (window, "destroy", G_TYPE_NONE);
}
static gboolean
xtm_process_window_configure_event(XtmProcessWindow *window,
GdkEvent *event) {
if (NULL != window &&
NULL != event && GDK_CONFIGURE == event->configure.type) {
g_object_set (window->settings,
"window-width", event->configure.width,
"window-height", event->configure.height,
NULL);
}
return (FALSE);
}
static gboolean
xtm_process_vpaned_move_event(XtmProcessWindow *window,
GdkEventButton *event __unused) {
gint handle_position;
if (NULL != window) {
handle_position = gtk_paned_get_position(GTK_PANED(window->vpaned));
g_object_set (window->settings,
"handle-position", handle_position,
NULL);
}
return (FALSE);
}
static gboolean
xtm_process_window_key_pressed (XtmProcessWindow *window, GdkEventKey *event)
{
@@ -397,7 +369,6 @@ xtm_process_window_key_pressed (XtmProcessWindow *window, GdkEventKey *event)
if (event->keyval == GDK_KEY_Escape ||
(event->keyval == GDK_KEY_q && (event->state & GDK_CONTROL_MASK))) {
xtm_settings_save_settings (window->settings);
g_signal_emit_by_name (window, "delete-event", event, &ret, G_TYPE_BOOLEAN);
ret = TRUE;
}