[gnome-system-monitor] Added priority selection submenu with preset priority items.



commit 70ba9c1af2dbd8b74943b1a283f718d8646f087b
Author: Robert Roth <robert roth off gmail com>
Date:   Sat Nov 26 01:25:44 2011 +0200

    Added priority selection submenu with preset priority items.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=131803

 src/callbacks.cpp |   39 ++++++++++++++++++++++++++++++++++++---
 src/callbacks.h   |    2 +-
 src/interface.cpp |   47 +++++++++++++++++++++++++++++++++++++++++++----
 src/procman.h     |    9 +++++++++
 4 files changed, 89 insertions(+), 8 deletions(-)
---
diff --git a/src/callbacks.cpp b/src/callbacks.cpp
index 251eebd..b8c1c14 100644
--- a/src/callbacks.cpp
+++ b/src/callbacks.cpp
@@ -30,6 +30,7 @@
 #include "proctable.h"
 #include "util.h"
 #include "procactions.h"
+#include "procman.h"
 #include "procdialogs.h"
 #include "memmaps.h"
 #include "openfiles.h"
@@ -82,11 +83,26 @@ cb_edit_preferences (GtkAction *action, gpointer data)
 
 
 void
-cb_renice (GtkAction *action, gpointer data)
+cb_renice (GtkAction *action, GtkRadioAction *current, gpointer data)
 {
     ProcData * const procdata = static_cast<ProcData*>(data);
 
-    procdialog_create_renice_dialog (procdata);
+    gint selected = gtk_radio_action_get_current_value(current);
+
+    if (selected == CUSTOM_PRIORITY)
+    {
+       procdialog_create_renice_dialog (procdata);
+    } else {
+       gint new_nice_value = 0;
+       switch (selected) {
+           case VERY_HIGH_PRIORITY: new_nice_value = -20; break;
+           case HIGH_PRIORITY: new_nice_value = -5; break;
+           case NORMAL_PRIORITY: new_nice_value = 0; break;
+           case LOW_PRIORITY: new_nice_value = 5; break;
+           case VERY_LOW_PRIORITY: new_nice_value = 19; break;
+       }
+       renice(procdata, new_nice_value);
+    }
 }
 
 
@@ -297,7 +313,24 @@ cb_row_selected (GtkTreeSelection *selection, gpointer data)
     */
     gtk_tree_selection_selected_foreach (procdata->selection, get_last_selected,
                                          &procdata->selected_process);
-
+    if (procdata->selected_process) {
+        gint value;
+        gint nice = procdata->selected_process->nice;
+        if (nice < -7)
+            value = VERY_HIGH_PRIORITY;
+        else if (nice < -2)
+            value = HIGH_PRIORITY;
+        else if (nice < 3)
+            value = NORMAL_PRIORITY;
+        else if (nice < 7)
+            value = LOW_PRIORITY;
+        else
+            value = VERY_LOW_PRIORITY;
+
+        GtkRadioAction* normal = GTK_RADIO_ACTION(gtk_action_group_get_action(procdata->action_group, "Normal"));
+
+        gtk_radio_action_set_current_value(normal, value);
+    }
     update_sensitivity(procdata);
 }
 
diff --git a/src/callbacks.h b/src/callbacks.h
index 8988ffa..1ae8138 100644
--- a/src/callbacks.h
+++ b/src/callbacks.h
@@ -29,7 +29,7 @@
 void            cb_show_memory_maps (GtkAction *action, gpointer data);
 void            cb_show_open_files (GtkAction *action, gpointer data);
 void            cb_show_lsof(GtkAction *action, gpointer data);
-void            cb_renice (GtkAction *action, gpointer data);
+void            cb_renice (GtkAction *action, GtkRadioAction *current, gpointer data);
 void            cb_end_process (GtkAction *action, gpointer data);
 void            cb_kill_process (GtkAction *action, gpointer data);
 void            cb_edit_preferences (GtkAction *action, gpointer data);
diff --git a/src/interface.cpp b/src/interface.cpp
index f8bc857..3573edd 100644
--- a/src/interface.cpp
+++ b/src/interface.cpp
@@ -68,8 +68,8 @@ static const GtkActionEntry menu_entries[] =
       N_("Force process to finish normally"), G_CALLBACK (cb_end_process) },
     { "KillProcess", NULL, N_("_Kill Process"), "<control>K",
       N_("Force process to finish immediately"), G_CALLBACK (cb_kill_process) },
-    { "ChangePriority", NULL, N_("_Change Priorityâ"), "<control>N",
-      N_("Change the order of priority of process"), G_CALLBACK (cb_renice) },
+    { "ChangePriority", NULL, N_("_Change Priority"), NULL,
+      N_("Change the order of priority of process"), NULL },
     { "Preferences", GTK_STOCK_PREFERENCES, NULL, NULL,
       N_("Configure the application"), G_CALLBACK (cb_edit_preferences) },
 
@@ -106,6 +106,22 @@ static const GtkRadioActionEntry radio_menu_entries[] =
       N_("Show only user-owned processes"), MY_PROCESSES }
 };
 
+static const GtkRadioActionEntry priority_menu_entries[] =
+{
+    { "VeryHigh", NULL, N_("Very High"), NULL,
+      N_("Set process priority to very high"), VERY_HIGH_PRIORITY },
+    { "High", NULL, N_("High"), NULL,
+      N_("Set process priority to high"), HIGH_PRIORITY },
+    { "Normal", NULL, N_("Normal"), NULL,
+      N_("Set process priority to normal"), NORMAL_PRIORITY },
+    { "Low", NULL, N_("Low"), NULL,
+      N_("Set process priority to low"), LOW_PRIORITY },
+    { "VeryLow", NULL, N_("Very Low"), NULL,
+      N_("Set process priority to very low"), VERY_LOW_PRIORITY },
+    { "Custom", NULL, N_("Custom"), NULL,
+      N_("Set process priority manually"), CUSTOM_PRIORITY }
+};
+
 
 static const char ui_info[] =
     "  <menubar name=\"MenuBar\">"
@@ -120,7 +136,15 @@ static const char ui_info[] =
     "      <menuitem name=\"EditEndProcessMenu\" action=\"EndProcess\" />"
     "      <menuitem name=\"EditKillProcessMenu\" action=\"KillProcess\" />"
     "      <separator />"
-    "      <menuitem name=\"EditChangePriorityMenu\" action=\"ChangePriority\" />"
+    "      <menu name=\"EditChangePriorityMenu\" action=\"ChangePriority\" >"
+    "        <menuitem action=\"VeryHigh\" />"
+    "        <menuitem action=\"High\" />"
+    "        <menuitem action=\"Normal\" />"
+    "        <menuitem action=\"Low\" />"
+    "        <menuitem action=\"VeryLow\" />"
+    "        <separator />"
+    "        <menuitem action=\"Custom\"/>"
+    "      </menu>"
     "      <separator />"
     "      <menuitem name=\"EditPreferencesMenu\" action=\"Preferences\" />"
     "    </menu>"
@@ -148,7 +172,15 @@ static const char ui_info[] =
     "    <menuitem action=\"EndProcess\" />"
     "    <menuitem action=\"KillProcess\" />"
     "    <separator />"
-    "    <menuitem action=\"ChangePriority\" />"
+    "    <menu name=\"ChangePriorityMenu\" action=\"ChangePriority\" >"
+    "      <menuitem action=\"VeryHigh\" />"
+    "      <menuitem action=\"High\" />"
+    "      <menuitem action=\"Normal\" />"
+    "      <menuitem action=\"Low\" />"
+    "      <menuitem action=\"VeryLow\" />"
+    "      <separator />"
+    "      <menuitem action=\"Custom\"/>"
+    "    </menu>"
     "    <separator />"
     "    <menuitem action=\"MemoryMaps\" />"
     "    <menuitem action=\"OpenFiles\" />"
@@ -643,6 +675,13 @@ create_main_window (ProcData *procdata)
                                         G_CALLBACK(cb_radio_processes),
                                         procdata);
 
+    gtk_action_group_add_radio_actions (procdata->action_group,
+                                        priority_menu_entries,
+                                        G_N_ELEMENTS (priority_menu_entries),
+                                        NORMAL_PRIORITY,
+                                        G_CALLBACK(cb_renice),
+                                        procdata);
+
     gtk_ui_manager_insert_action_group (procdata->uimanager,
                                         procdata->action_group,
                                         0);
diff --git a/src/procman.h b/src/procman.h
index 5f42d5e..08e32dc 100644
--- a/src/procman.h
+++ b/src/procman.h
@@ -49,6 +49,15 @@ enum
     ACTIVE_PROCESSES
 };
 
+enum
+{
+    VERY_HIGH_PRIORITY,
+    HIGH_PRIORITY,
+    NORMAL_PRIORITY,
+    LOW_PRIORITY,
+    VERY_LOW_PRIORITY,
+    CUSTOM_PRIORITY
+};
 
 static const unsigned MIN_UPDATE_INTERVAL =   1 * 1000;
 static const unsigned MAX_UPDATE_INTERVAL = 100 * 1000;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]