Improve settings saving (bug #15213)
This commit is contained in:
10
src/main.c
10
src/main.c
@@ -34,6 +34,9 @@ static GOptionEntry main_entries[] = {
|
||||
{ NULL, 0, 0, 0, NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
static void destroy_window (void);
|
||||
|
||||
|
||||
static void
|
||||
status_icon_activated (void)
|
||||
{
|
||||
@@ -53,7 +56,7 @@ status_icon_popup_menu (GtkStatusIcon *_status_icon, guint button, guint activat
|
||||
GtkWidget *mi;
|
||||
menu = gtk_menu_new ();
|
||||
mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_QUIT, NULL);
|
||||
g_signal_connect (mi, "activate", G_CALLBACK (gtk_main_quit), NULL);
|
||||
g_signal_connect (mi, "activate", G_CALLBACK (destroy_window), NULL);
|
||||
gtk_container_add (GTK_CONTAINER (menu), mi);
|
||||
gtk_widget_show_all (menu);
|
||||
}
|
||||
@@ -72,8 +75,10 @@ show_hide_status_icon (void)
|
||||
static void
|
||||
destroy_window (void)
|
||||
{
|
||||
if (gtk_main_level () > 0)
|
||||
if (gtk_main_level () > 0) {
|
||||
xtm_settings_save_settings(settings);
|
||||
gtk_main_quit ();
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -81,6 +86,7 @@ delete_window (void)
|
||||
{
|
||||
if (!gtk_status_icon_get_visible (status_icon))
|
||||
{
|
||||
xtm_settings_save_settings(settings);
|
||||
gtk_main_quit ();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -612,6 +612,11 @@ column_clicked (GtkTreeViewColumn *column, XtmProcessTreeView *treeview)
|
||||
gtk_tree_view_column_set_sort_order (column, sort_type);
|
||||
|
||||
treeview->sort_column = column;
|
||||
|
||||
g_object_set(treeview->settings,
|
||||
"sort-column-id", GPOINTER_TO_INT(g_object_get_data(G_OBJECT(treeview->sort_column), "column-id")),
|
||||
"sort-type", sort_type,
|
||||
NULL);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -746,13 +751,6 @@ xtm_process_tree_view_new (void)
|
||||
return g_object_new (XTM_TYPE_PROCESS_TREE_VIEW, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
xtm_process_tree_view_get_sort_column_id (XtmProcessTreeView *treeview, gint *sort_column_id, GtkSortType *sort_type)
|
||||
{
|
||||
*sort_column_id = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (treeview->sort_column), "column-id"));
|
||||
*sort_type = gtk_tree_view_column_get_sort_order (treeview->sort_column);
|
||||
}
|
||||
|
||||
GtkTreeModel *
|
||||
xtm_process_tree_view_get_model (XtmProcessTreeView *treeview)
|
||||
{
|
||||
|
||||
@@ -51,7 +51,6 @@ typedef struct _XtmProcessTreeView XtmProcessTreeView;
|
||||
|
||||
GType xtm_process_tree_view_get_type (void);
|
||||
GtkWidget * xtm_process_tree_view_new (void);
|
||||
void xtm_process_tree_view_get_sort_column_id (XtmProcessTreeView *treeview, gint *sort_column_id, GtkSortType *sort_type);
|
||||
void xtm_process_tree_view_set_filter (XtmProcessTreeView *treeview, const gchar *cmd_filter);
|
||||
GtkTreeModel * xtm_process_tree_view_get_model (XtmProcessTreeView *treeview);
|
||||
void xtm_process_tree_view_highlight_pid (XtmProcessTreeView *treeview, GPid pid);
|
||||
|
||||
@@ -72,7 +72,8 @@ 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 emit_delete_event_signal (XtmProcessWindow *window, GdkEvent *event);
|
||||
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 toolbar_update_style (XtmProcessWindow *window);
|
||||
static void monitor_update_step_size (XtmProcessWindow *window);
|
||||
@@ -242,8 +243,9 @@ xtm_process_window_init (XtmProcessWindow *window)
|
||||
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, "delete-event", G_CALLBACK (emit_delete_event_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->toolbar = GTK_WIDGET (gtk_builder_get_object (window->builder, "process-toolbar"));
|
||||
g_signal_connect_swapped (window->settings, "notify::toolbar-style", G_CALLBACK (toolbar_update_style), window);
|
||||
@@ -281,6 +283,8 @@ xtm_process_window_init (XtmProcessWindow *window)
|
||||
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);
|
||||
|
||||
toolitem = GTK_WIDGET (gtk_builder_get_object (window->builder, "graph-cpu"));
|
||||
window->cpu_monitor = xtm_process_monitor_new ();
|
||||
@@ -375,28 +379,33 @@ emit_destroy_signal (XtmProcessWindow *window)
|
||||
}
|
||||
|
||||
static gboolean
|
||||
emit_delete_event_signal (XtmProcessWindow *window, GdkEvent *event)
|
||||
{
|
||||
gboolean ret;
|
||||
gint width, height, handle_position;
|
||||
guint sort_column_id;
|
||||
GtkSortType sort_type;
|
||||
|
||||
gtk_window_get_size (GTK_WINDOW (window->window), &width, &height);
|
||||
xtm_process_tree_view_get_sort_column_id (XTM_PROCESS_TREE_VIEW (window->treeview), (gint*)&sort_column_id, &sort_type);
|
||||
|
||||
handle_position = gtk_paned_get_position (GTK_PANED (window->vpaned));
|
||||
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,
|
||||
"window-width", width,
|
||||
"window-height", height,
|
||||
"sort-column-id", sort_column_id,
|
||||
"sort-type", sort_type,
|
||||
"handle-position", handle_position,
|
||||
NULL);
|
||||
}
|
||||
|
||||
g_signal_emit_by_name (window, "delete-event", event, &ret, G_TYPE_BOOLEAN);
|
||||
return ret;
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -406,7 +415,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))) {
|
||||
emit_delete_event_signal (window, (GdkEvent*) event);
|
||||
ret = TRUE;
|
||||
}
|
||||
else if (event->keyval == GDK_KEY_f && (event->state & GDK_CONTROL_MASK)) {
|
||||
|
||||
@@ -70,6 +70,7 @@ struct _XtmSettings
|
||||
GObject parent;
|
||||
/*<private>*/
|
||||
GValue values[N_PROPS];
|
||||
gint loading; /* Setting loading now, do not save. */
|
||||
};
|
||||
G_DEFINE_TYPE (XtmSettings, xtm_settings, G_TYPE_OBJECT)
|
||||
|
||||
@@ -77,8 +78,6 @@ static void xtm_settings_get_property (GObject *object, guint property_id, GVa
|
||||
static void xtm_settings_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec);
|
||||
|
||||
static void xtm_settings_load_settings (XtmSettings *settings);
|
||||
static void xtm_settings_save_settings (XtmSettings *settings);
|
||||
|
||||
|
||||
|
||||
static void
|
||||
@@ -170,7 +169,15 @@ xtm_settings_set_property (GObject *object, guint property_id, const GValue *val
|
||||
if (g_param_values_cmp (pspec, value, dest) != 0)
|
||||
{
|
||||
g_value_copy (value, dest);
|
||||
/* Do not save some noisy changed props on fly. */
|
||||
switch (property_id) {
|
||||
case PROP_WINDOW_WIDTH:
|
||||
case PROP_WINDOW_HEIGHT:
|
||||
break;
|
||||
default:
|
||||
xtm_settings_save_settings (XTM_SETTINGS (object));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -236,6 +243,7 @@ xtm_settings_load_settings (XtmSettings *settings)
|
||||
|
||||
register_transformable ();
|
||||
|
||||
settings->loading = 1;
|
||||
g_object_freeze_notify (G_OBJECT (settings));
|
||||
|
||||
rc = g_key_file_new ();
|
||||
@@ -288,14 +296,17 @@ xtm_settings_load_settings (XtmSettings *settings)
|
||||
g_key_file_free (rc);
|
||||
|
||||
g_object_thaw_notify (G_OBJECT (settings));
|
||||
settings->loading = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
xtm_settings_save_settings (XtmSettings *settings)
|
||||
{
|
||||
GKeyFile *rc;
|
||||
gchar *filename;
|
||||
|
||||
if (0 != settings->loading)
|
||||
return;
|
||||
rc = g_key_file_new ();
|
||||
filename = g_strdup_printf ("%s/xfce4/xfce4-taskmanager.rc", g_get_user_config_dir ());
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
typedef struct _XtmSettings XtmSettings;
|
||||
|
||||
void xtm_settings_save_settings (XtmSettings *settings);
|
||||
GType xtm_settings_get_type (void);
|
||||
XtmSettings * xtm_settings_get_default (void);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user