chiark / gitweb /
Only offer user management window if you have RIGHT_ADMIN. The server
authorRichard Kettlewell <rjk@greenend.org.uk>
Sat, 19 Apr 2008 23:08:52 +0000 (00:08 +0100)
committerRichard Kettlewell <rjk@greenend.org.uk>
Sat, 19 Apr 2008 23:08:52 +0000 (00:08 +0100)
will stop you if you don't but it won't be pretty.

disobedience/disobedience.h
disobedience/menu.c

index 95e259bf424903a660da158841405d8288b7353b..4885c8ef47c43b676af6ba0fa6a116bc59d95639 100644 (file)
@@ -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 */
 
index d2bb6a6ddfad4472b103259fa9437c3a89cef2b4..f24569af7d481cf115f802dac57a0522253be41f 100644 (file)
@@ -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,
+                                             "<GdisorderMain>/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,
                                   "<GdisorderMain>");
   set_tool_colors(m);