diff --git a/src/sview/common.c b/src/sview/common.c index 93a7075760eace886341cc4ad1ee7c80278a96ca..fd7864a4463db081da2672b10f3539bdd833cf35 100644 --- a/src/sview/common.c +++ b/src/sview/common.c @@ -120,6 +120,17 @@ static void _editing_canceled(GtkCellRenderer *cell, } +static void *_editing_thr(void *arg) +{ + sleep(5); + gdk_threads_enter(); + gtk_statusbar_pop(GTK_STATUSBAR(main_statusbar), STATUS_ADMIN_EDIT); + gdk_flush(); + gdk_threads_leave(); + return NULL; +} + + static void _add_col_to_treeview(GtkTreeView *tree_view, display_data_t *display_data) { @@ -823,7 +834,6 @@ extern char *get_reason() GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); - //GError *error = NULL; int response = 0; char *user_name = NULL; char time_buf[64], time_str[32]; @@ -856,20 +866,25 @@ extern char *get_reason() slurm_make_time_str(&now, time_str, sizeof(time_str)); snprintf(time_buf, sizeof(time_buf), "@%s]", time_str); xstrcat(reason_str, time_buf); - /* maybe later we will update the status bar */ - /* temp = g_strdup_printf("Refresh Interval set to %d seconds.", */ -/* global_sleep_time); */ -/* gtk_statusbar_push(GTK_STATUSBAR(main_statusbar), 1, */ -/* temp); */ -/* g_free(temp); */ -/* if (!g_thread_create(_refresh_thr, NULL, FALSE, &error)) */ -/* { */ -/* g_printerr ("Failed to create refresh thread: %s\n", */ -/* error->message); */ -/* } */ } gtk_widget_destroy(popup); return reason_str; } + +extern void display_edit_note(char *edit_note) +{ + GError *error = NULL; + + gtk_statusbar_pop(GTK_STATUSBAR(main_statusbar), STATUS_ADMIN_EDIT); + gtk_statusbar_push(GTK_STATUSBAR(main_statusbar), STATUS_ADMIN_EDIT, + edit_note); + + if (!g_thread_create(_editing_thr, NULL, FALSE, &error)) + { + g_printerr ("Failed to create edit thread: %s\n", + error->message); + } + return; +} diff --git a/src/sview/node_info.c b/src/sview/node_info.c index ad85db0d2b37d8de5875c2789d3b5146c1708304..e8fe99a5cae893e1fd7a2a4d5444438a33bbe220 100644 --- a/src/sview/node_info.c +++ b/src/sview/node_info.c @@ -343,12 +343,16 @@ extern int update_state_node(GtkTreeStore *treestore, GtkTreeIter *iter, } node_msg->node_state = (uint16_t)state; - rc = slurm_update_node(node_msg); + if(slurm_update_node(node_msg) == SLURM_SUCCESS) { + gtk_tree_store_set(treestore, iter, text_column, new_text, + num_column, state, -1); + upper = g_strdup_printf("Node(s) %s state changed to %s", + node_msg->node_names, + new_text); + display_edit_note(upper); + g_free(upper); + } xfree(node_msg->reason); - if(rc != SLURM_SUCCESS) - return rc; - gtk_tree_store_set(treestore, iter, text_column, new_text, - num_column, state, -1); return rc; } diff --git a/src/sview/part_info.c b/src/sview/part_info.c index 5f952513e9aca89be8e72744ee352dfca3dad60f..37f4655842363c44844f08280fd8087548c1e6ea 100644 --- a/src/sview/part_info.c +++ b/src/sview/part_info.c @@ -1034,6 +1034,7 @@ extern void admin_edit_part(GtkCellRendererText *cell, update_part_msg_t part_msg; char *temp = NULL; + char *type = NULL; int column = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cell), "column")); gtk_tree_model_get_iter(GTK_TREE_MODEL(treestore), &iter, path); @@ -1054,6 +1055,7 @@ extern void admin_edit_part(GtkCellRendererText *cell, part_msg.default_part = 0; temp = ""; } + type = "default"; break; case SORTID_HIDDEN: if (!strcasecmp(new_text, "yes")) { @@ -1063,6 +1065,7 @@ extern void admin_edit_part(GtkCellRendererText *cell, part_msg.hidden = 0; temp = ""; } + type = "hidden"; break; case SORTID_MIN_NODES: if (!strcasecmp(new_text, "infinite")) { @@ -1071,6 +1074,7 @@ extern void admin_edit_part(GtkCellRendererText *cell, part_msg.min_nodes = (uint32_t)strtol(new_text, (char **)NULL, 10); } + type = "min_nodes"; break; case SORTID_MAX_NODES: if (!strcasecmp(new_text, "infinite")) { @@ -1079,6 +1083,7 @@ extern void admin_edit_part(GtkCellRendererText *cell, part_msg.max_nodes = (uint32_t)strtol(new_text, (char **)NULL, 10); } + type = "max_nodes"; break; case SORTID_ROOT: if (!strcasecmp(new_text, "yes")) { @@ -1087,6 +1092,7 @@ extern void admin_edit_part(GtkCellRendererText *cell, part_msg.default_part = 0; } temp = (char *)new_text; + type = "root"; break; case SORTID_SHARE: if (!strcasecmp(new_text, "yes")) { @@ -1096,10 +1102,13 @@ extern void admin_edit_part(GtkCellRendererText *cell, } else { part_msg.default_part = SHARED_FORCE; } + type = "share"; break; case SORTID_GROUPS: + type = "groups"; break; case SORTID_NODELIST: + type = "nodelist"; break; case SORTID_AVAIL: slurm_init_part_desc_msg(&part_msg); @@ -1111,6 +1120,7 @@ extern void admin_edit_part(GtkCellRendererText *cell, else part_msg.state_up = 0; temp = (char *)new_text; + type = "availability"; break; case SORTID_STATE: gtk_tree_model_get(GTK_TREE_MODEL(treestore), &iter, @@ -1124,8 +1134,16 @@ extern void admin_edit_part(GtkCellRendererText *cell, } if(column != SORTID_STATE) { - if(slurm_update_partition(&part_msg) == SLURM_SUCCESS) + if(slurm_update_partition(&part_msg) == SLURM_SUCCESS) { gtk_tree_store_set(treestore, &iter, column, temp, -1); + temp = g_strdup_printf("Partition %s %s changed to %s", + part_msg.name, + type, + new_text); + display_edit_note(temp); + g_free(temp); + } + g_free(part_msg.name); } diff --git a/src/sview/sview.c b/src/sview/sview.c index 5191076187ae07b5aa66d5bcb8b007787e869dee..009ceb1409cf2dba9ec110e7d1d6b6b407c0b124 100644 --- a/src/sview/sview.c +++ b/src/sview/sview.c @@ -114,7 +114,7 @@ void *_refresh_thr(void *arg) { sleep(5); gdk_threads_enter(); - gtk_statusbar_pop(GTK_STATUSBAR(main_statusbar), 1); + gtk_statusbar_pop(GTK_STATUSBAR(main_statusbar), STATUS_REFRESH); gdk_flush(); gdk_threads_leave(); return NULL; @@ -185,10 +185,12 @@ static void _set_admin_mode(GtkToggleAction *action) { if(admin_mode) { admin_mode = FALSE; - gtk_statusbar_pop(GTK_STATUSBAR(main_statusbar), 0); + gtk_statusbar_pop(GTK_STATUSBAR(main_statusbar), + STATUS_ADMIN_MODE); } else { admin_mode = TRUE; - gtk_statusbar_push(GTK_STATUSBAR(main_statusbar), 0, + gtk_statusbar_push(GTK_STATUSBAR(main_statusbar), + STATUS_ADMIN_MODE, "Admin mode activated! " "Think before you alter anything."); } @@ -234,7 +236,10 @@ static void _change_refresh(GtkToggleAction *action, gpointer user_data) gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_button)); temp = g_strdup_printf("Refresh Interval set to %d seconds.", global_sleep_time); - gtk_statusbar_push(GTK_STATUSBAR(main_statusbar), 1, + gtk_statusbar_pop(GTK_STATUSBAR(main_statusbar), + STATUS_REFRESH); + gtk_statusbar_push(GTK_STATUSBAR(main_statusbar), + STATUS_REFRESH, temp); g_free(temp); if (!g_thread_create(_refresh_thr, NULL, FALSE, &error)) diff --git a/src/sview/sview.h b/src/sview/sview.h index be2e5ee589805d7001fb279b809657b453f7c76d..e38e42bd986f0cfe715033b313dafe4bb7cda072 100644 --- a/src/sview/sview.h +++ b/src/sview/sview.h @@ -91,6 +91,11 @@ enum { ERROR_VIEW, INFO_VIEW }; +enum { STATUS_ADMIN_MODE, + STATUS_REFRESH, + STATUS_ADMIN_EDIT +}; + /* Input parameters */ typedef struct { bool all_flag; @@ -176,6 +181,7 @@ extern bool force_refresh; extern List popup_list; extern int global_sleep_time; extern bool admin_mode; +extern GtkWidget *main_statusbar; extern GtkWidget *main_window; extern GStaticMutex sview_mutex; @@ -294,4 +300,6 @@ extern GtkWidget *create_pulldown_combo(display_data_t *display_data, int count); extern char *str_tolower(char *upper_str); extern char *get_reason(); +extern void display_edit_note(char *edit_note); + #endif