gfio: allow different tooltips for a button depending on state
Signed-off-by: Jens Axboe <axboe@kernel.dk>
diff --git a/gfio.c b/gfio.c
index ffc6605..93c8e17 100644
--- a/gfio.c
+++ b/gfio.c
@@ -52,16 +52,16 @@
static struct button_spec {
const char *buttontext;
clickfunction f;
- const char *tooltiptext;
- const int start_insensitive;
+ const char *tooltiptext[2];
+ const int start_sensitive;
} buttonspeclist[] = {
#define CONNECT_BUTTON 0
#define SEND_BUTTON 1
#define START_JOB_BUTTON 2
- { "Connect", connect_clicked, "Connect to host", 0 },
- { "Send", send_clicked, "Send job description to host", 1 },
+ { "Connect", connect_clicked, { "Disconnect from host", "Connect to host" }, 1 },
+ { "Send", send_clicked, { "Send job description to host", NULL }, 0 },
{ "Start Job", start_job_clicked,
- "Start the current job on the server", 1 },
+ { "Start the current job on the server", NULL }, 0 },
};
struct probe_widget {
@@ -433,6 +433,39 @@
set_menu_entry_visible(ui, "/MainMenu/ViewMenu/Results", visible);
}
+static const char *get_button_tooltip(struct button_spec *s, int sensitive)
+{
+ if (s->tooltiptext[sensitive])
+ return s->tooltiptext[sensitive];
+
+ return s->tooltiptext[0];
+}
+
+static GtkWidget *add_button(GtkWidget *buttonbox,
+ struct button_spec *buttonspec, gpointer data)
+{
+ GtkWidget *button = gtk_button_new_with_label(buttonspec->buttontext);
+ gboolean sens = buttonspec->start_sensitive;
+
+ g_signal_connect(button, "clicked", G_CALLBACK(buttonspec->f), data);
+ gtk_box_pack_start(GTK_BOX(buttonbox), button, FALSE, FALSE, 3);
+
+ sens = buttonspec->start_sensitive;
+ gtk_widget_set_tooltip_text(button, get_button_tooltip(buttonspec, sens));
+ gtk_widget_set_sensitive(button, sens);
+
+ return button;
+}
+
+static void add_buttons(struct gui_entry *ge, struct button_spec *buttonlist,
+ int nbuttons)
+{
+ int i;
+
+ for (i = 0; i < nbuttons; i++)
+ ge->button[i] = add_button(ge->buttonbox, &buttonlist[i], ge);
+}
+
/*
* Update sensitivity of job buttons and job menu items, based on the
* state of the client.
@@ -499,6 +532,7 @@
gtk_widget_set_sensitive(ge->button[SEND_BUTTON], send_state);
gtk_widget_set_sensitive(ge->button[START_JOB_BUTTON], start_state);
gtk_button_set_label(GTK_BUTTON(ge->button[CONNECT_BUTTON]), connect_str);
+ gtk_widget_set_tooltip_text(ge->button[CONNECT_BUTTON], get_button_tooltip(&buttonspeclist[CONNECT_BUTTON], connect_state));
set_menu_entry_visible(ui, "/MainMenu/JobMenu/Connect", connect_state);
set_menu_entry_text(ui, "/MainMenu/JobMenu/Connect", connect_str);
@@ -2093,28 +2127,6 @@
}
}
-static GtkWidget *add_button(GtkWidget *buttonbox,
- struct button_spec *buttonspec, gpointer data)
-{
- GtkWidget *button = gtk_button_new_with_label(buttonspec->buttontext);
-
- g_signal_connect(button, "clicked", G_CALLBACK(buttonspec->f), data);
- gtk_box_pack_start(GTK_BOX(buttonbox), button, FALSE, FALSE, 3);
- gtk_widget_set_tooltip_text(button, buttonspec->tooltiptext);
- gtk_widget_set_sensitive(button, !buttonspec->start_insensitive);
-
- return button;
-}
-
-static void add_buttons(struct gui_entry *ge, struct button_spec *buttonlist,
- int nbuttons)
-{
- int i;
-
- for (i = 0; i < nbuttons; i++)
- ge->button[i] = add_button(ge->buttonbox, &buttonlist[i], ge);
-}
-
static void on_info_bar_response(GtkWidget *widget, gint response,
gpointer data)
{