From c73bd6c1881f5b6ee5f10482fd21531fa6b933f0 Mon Sep 17 00:00:00 2001 Message-Id: From: Mark Wooding Date: Sun, 20 Apr 2008 00:08:52 +0100 Subject: [PATCH] Only offer user management window if you have RIGHT_ADMIN. The server will stop you if you don't but it won't be pretty. Organization: Straylight/Edgeware From: Richard Kettlewell --- disobedience/disobedience.h | 1 + disobedience/menu.c | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/disobedience/disobedience.h b/disobedience/disobedience.h index 95e259b..4885c8e 100644 --- a/disobedience/disobedience.h +++ b/disobedience/disobedience.h @@ -193,6 +193,7 @@ 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); /* Controls */ diff --git a/disobedience/menu.c b/disobedience/menu.c index d2bb6a6..f24569a 100644 --- a/disobedience/menu.c +++ b/disobedience/menu.c @@ -215,6 +215,29 @@ static void about_popup_got_version(void attribute((unused)) *v, gtk_widget_destroy(w); } +/** @brief Set 'Manage Users' menu item sensitivity */ +void users_set_sensitive(int sensitive) { + GtkWidget *w = gtk_item_factory_get_widget(mainmenufactory, + "/Server/Manage users"); + gtk_widget_set_sensitive(w, sensitive); +} + +/** @brief Called with current user's rights string */ +static void menu_got_rights(void attribute((unused)) *v, const char *value) { + rights_type r; + + if(parse_rights(value, &r, 0)) + r = 0; + users_set_sensitive(!!(r & RIGHT_ADMIN)); +} + +/** @brief Called when we need to reset state */ +static void menu_reset(void) { + users_set_sensitive(0); /* until we know better */ + disorder_eclient_userinfo(client, menu_got_rights, config->username, "rights", + 0); +} + /** @brief Create the menu bar widget */ GtkWidget *menubar(GtkWidget *w) { GtkWidget *m; @@ -383,6 +406,8 @@ GtkWidget *menubar(GtkWidget *w) { assert(selectall_widget != 0); assert(selectnone_widget != 0); assert(properties_widget != 0); + register_reset(menu_reset); + menu_reset(); m = gtk_item_factory_get_widget(mainmenufactory, ""); set_tool_colors(m); -- [mdw]