summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorinfirit <[email protected]>2014-12-19 00:35:27 +0100
committerinfirit <[email protected]>2014-12-19 00:35:27 +0100
commit51357cc58ed32763b7eaff97d9ba04507ac0665d (patch)
treed8edd30bdff48a0f9aa75d9c2c6c45ad6e5ee710
parentee379181d3b6b89c23a660d027caa9c2d027aa7d (diff)
downloadmate-system-monitor-51357cc58ed32763b7eaff97d9ba04507ac0665d.tar.bz2
mate-system-monitor-51357cc58ed32763b7eaff97d9ba04507ac0665d.tar.xz
Disable priority changed handler while setting current priority
Taken from GSM commit: c00d94f3bfe2186428ef30e922042a555b7dc03a From: Robert Roth <[email protected]> Gnome bug: https://bugzilla.gnome.org/show_bug.cgi?id=667227
-rw-r--r--src/callbacks.cpp4
-rw-r--r--src/interface.cpp19
-rw-r--r--src/interface.h1
-rw-r--r--src/procactions.cpp3
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 */