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...@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. _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits