diff options
author | infirit <[email protected]> | 2014-12-19 00:35:27 +0100 |
---|---|---|
committer | infirit <[email protected]> | 2014-12-19 00:35:27 +0100 |
commit | 51357cc58ed32763b7eaff97d9ba04507ac0665d (patch) | |
tree | d8edd30bdff48a0f9aa75d9c2c6c45ad6e5ee710 /src | |
parent | ee379181d3b6b89c23a660d027caa9c2d027aa7d (diff) | |
download | mate-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
Diffstat (limited to 'src')
-rw-r--r-- | src/callbacks.cpp | 4 | ||||
-rw-r--r-- | src/interface.cpp | 19 | ||||
-rw-r--r-- | src/interface.h | 1 | ||||
-rw-r--r-- | 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 */ |