From 51357cc58ed32763b7eaff97d9ba04507ac0665d Mon Sep 17 00:00:00 2001 From: infirit Date: Fri, 19 Dec 2014 00:35:27 +0100 Subject: Disable priority changed handler while setting current priority Taken from GSM commit: c00d94f3bfe2186428ef30e922042a555b7dc03a From: Robert Roth Gnome bug: https://bugzilla.gnome.org/show_bug.cgi?id=667227 --- src/callbacks.cpp | 4 +++- src/interface.cpp | 19 +++++++++++++++++++ src/interface.h | 1 + src/procactions.cpp | 3 ++- 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/callbacks.cpp b/src/callbacks.cpp index ffded13..0399834 100644 --- a/src/callbacks.cpp +++ b/src/callbacks.cpp @@ -331,8 +331,10 @@ cb_row_selected (GtkTreeSelection *selection, gpointer data) value = VERY_LOW_PRIORITY; GtkRadioAction* normal = GTK_RADIO_ACTION(gtk_action_group_get_action(procdata->action_group, "Normal")); - + block_priority_changed_handlers(procdata, TRUE); gtk_radio_action_set_current_value(normal, value); + block_priority_changed_handlers(procdata, FALSE); + } update_sensitivity(procdata); } diff --git a/src/interface.cpp b/src/interface.cpp index 9d62d5e..f9428a4 100644 --- a/src/interface.cpp +++ b/src/interface.cpp @@ -883,6 +883,25 @@ update_sensitivity(ProcData *data) } } +void +block_priority_changed_handlers(ProcData *data, bool block) +{ + gint i; + if (block) { + for (i = 0; i != G_N_ELEMENTS(priority_menu_entries); ++i) { + GtkRadioAction *action = GTK_RADIO_ACTION(gtk_action_group_get_action(data->action_group, + priority_menu_entries[i].name)); + g_signal_handlers_block_by_func(action, (gpointer)cb_renice, data); + } + } else { + for (i = 0; i != G_N_ELEMENTS(priority_menu_entries); ++i) { + GtkRadioAction *action = GTK_RADIO_ACTION(gtk_action_group_get_action(data->action_group, + priority_menu_entries[i].name)); + g_signal_handlers_unblock_by_func(action, (gpointer)cb_renice, data); + } + } +} + static void cb_toggle_tree (GtkAction *action, gpointer data) { diff --git a/src/interface.h b/src/interface.h index a69574a..2b42e7a 100644 --- a/src/interface.h +++ b/src/interface.h @@ -26,6 +26,7 @@ void create_main_window (ProcData *data); void update_sensitivity (ProcData *data); +void block_priority_changed_handlers(ProcData *data, bool block); void do_popup_menu(ProcData *data, GdkEventButton *event); GtkWidget * make_title_label (const char *text); diff --git a/src/procactions.cpp b/src/procactions.cpp index a8f3d61..2e71510 100644 --- a/src/procactions.cpp +++ b/src/procactions.cpp @@ -47,7 +47,8 @@ renice_single_process (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter if (!info) return; - + if (info->nice == args->nice_value) + return; error = setpriority (PRIO_PROCESS, info->pid, args->nice_value); /* success */ -- cgit v1.2.1