[Xfce4-commits] [apps/xfce4-taskmanager] 01/01: Improve settings saving (bug #15213)

noreply at xfce.org noreply at xfce.org
Tue May 21 19:52:49 CEST 2019


This is an automated email from the git hooks/post-receive script.

l   a   n   d   r   y       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository apps/xfce4-taskmanager.

commit be159c9a69c5b17dc9dacdda93590f33865a8bcd
Author: rim <rozhuk.im at gmail.com>
Date:   Tue Mar 19 04:41:57 2019 +0300

    Improve settings saving (bug #15213)
---
 src/main.c              | 10 +++++++--
 src/process-tree-view.c | 12 +++++------
 src/process-tree-view.h |  1 -
 src/process-window.c    | 56 ++++++++++++++++++++++++++++---------------------
 src/settings.c          | 19 +++++++++++++----
 src/settings.h          |  1 +
 6 files changed, 61 insertions(+), 38 deletions(-)

diff --git a/src/main.c b/src/main.c
index a015fea..47124b7 100644
--- a/src/main.c
+++ b/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;
 	}
diff --git a/src/process-tree-view.c b/src/process-tree-view.c
index cffa79e..ddf31d7 100644
--- a/src/process-tree-view.c
+++ b/src/process-tree-view.c
@@ -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)
 {
diff --git a/src/process-tree-view.h b/src/process-tree-view.h
index 7410ea2..163e803 100644
--- a/src/process-tree-view.h
+++ b/src/process-tree-view.h
@@ -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);
diff --git a/src/process-window.c b/src/process-window.c
index 2dd7ca5..4f85303 100644
--- a/src/process-window.c
+++ b/src/process-window.c
@@ -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));
-
-	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);
+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);
+	}
 
-	g_signal_emit_by_name (window, "delete-event", event, &ret, G_TYPE_BOOLEAN);
-	return ret;
+	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
@@ -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)) {
diff --git a/src/settings.c b/src/settings.c
index 8a01ff6..6e919e2 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -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);
-		xtm_settings_save_settings (XTM_SETTINGS (object));
+		/* 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 ());
 
diff --git a/src/settings.h b/src/settings.h
index 7a2bc3f..ec6e82b 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -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);
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list