From: Richard Kettlewell Date: Thu, 12 Jun 2008 10:57:34 +0000 (+0100) Subject: Set edit menu sensitivity when it is shown rather than when we change tab. X-Git-Tag: 4.1~15^2~41 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/commitdiff_plain/229d327f85abd31e64c3b06741c14b8f9233bccd Set edit menu sensitivity when it is shown rather than when we change tab. --- diff --git a/disobedience/client.c b/disobedience/client.c index 283ce8a..d81aac2 100644 --- a/disobedience/client.c +++ b/disobedience/client.c @@ -120,7 +120,6 @@ static void gtkclient_poll(void *u, static void gtkclient_comms_error(void attribute((unused)) *u, const char *msg) { D(("gtkclient_comms_error %s", msg)); - menu_update(-1); gtk_label_set_text(GTK_LABEL(report_label), msg); } @@ -148,7 +147,6 @@ static void gtkclient_report(void attribute((unused)) *u, if(!msg) /* We're idle - clear the report line */ gtk_label_set_text(GTK_LABEL(report_label), ""); - menu_update(-1); } /** @brief Repoort an unhandled protocol-level error to the user */ diff --git a/disobedience/disobedience.c b/disobedience/disobedience.c index 818128d..80fd389 100644 --- a/disobedience/disobedience.c +++ b/disobedience/disobedience.c @@ -122,7 +122,6 @@ static void tab_switched(GtkNotebook *notebook, GtkNotebookPage attribute((unused)) *page, guint page_num, gpointer attribute((unused)) user_data) { - menu_update(page_num); GtkWidget *const tab = gtk_notebook_get_nth_page(notebook, page_num); const struct tabtype *const t = g_object_get_data(G_OBJECT(tab), "type"); assert(t != 0); diff --git a/disobedience/disobedience.h b/disobedience/disobedience.h index e18c082..faf7597 100644 --- a/disobedience/disobedience.h +++ b/disobedience/disobedience.h @@ -180,10 +180,6 @@ void all_update(void); GtkWidget *menubar(GtkWidget *w); /* Create the menu bar */ - -void menu_update(int page); -/* Called whenever the main menu might need to change. PAGE is the current - * page if known or -1 otherwise. */ void users_set_sensitive(int sensitive); diff --git a/disobedience/menu.c b/disobedience/menu.c index 7cf65c0..abe7005 100644 --- a/disobedience/menu.c +++ b/disobedience/menu.c @@ -115,19 +115,18 @@ static void settings(gpointer attribute((unused)) callback_data, } #endif -/** @brief Update menu state +/** @brief Called when edit menu is shown * * Determines option sensitivity according to the current tab and adjusts the * widgets accordingly. Knows about @ref DISORDER_CONNECTED so the callbacks * need not. - * - * TODO: base this on menu popup instead? */ -void menu_update(int page) { +static void edit_menu_show(GtkWidget attribute((unused)) *widget, + gpointer attribute((unused)) user_data) { if(tabs) { GtkWidget *tab = gtk_notebook_get_nth_page (GTK_NOTEBOOK(tabs), - page < 0 ? gtk_notebook_current_page(GTK_NOTEBOOK(tabs)) : page); + gtk_notebook_current_page(GTK_NOTEBOOK(tabs))); const struct tabtype *t = g_object_get_data(G_OBJECT(tab), "type"); assert(t != 0); @@ -411,6 +410,14 @@ GtkWidget *menubar(GtkWidget *w) { assert(selectall_widget != 0); assert(selectnone_widget != 0); assert(properties_widget != 0); + + + GtkWidget *edit_widget = gtk_item_factory_get_widget(mainmenufactory, + "/Edit"); + fprintf(stderr, "edit is a %s\n", + GTK_OBJECT_TYPE_NAME(edit_widget)); + g_signal_connect(edit_widget, "show", G_CALLBACK(edit_menu_show), 0); + event_register("rights-changed", menu_rights_changed, 0); users_set_sensitive(0); m = gtk_item_factory_get_widget(mainmenufactory, diff --git a/disobedience/queue-generic.c b/disobedience/queue-generic.c index e6971ab..9c9e549 100644 --- a/disobedience/queue-generic.c +++ b/disobedience/queue-generic.c @@ -495,8 +495,6 @@ void ql_new_queue(struct queuelike *ql, ql->q = newq; /* Set the rest of the columns in new rows */ ql_update_list_store(ql); - /* Update menu sensitivity */ - menu_update(-1); --suppress_actions; }