chiark / gitweb /
Switch Disobedience reset (i.e. fresh login) notification over to
authorRichard Kettlewell <rjk@greenend.org.uk>
Mon, 9 Jun 2008 07:22:50 +0000 (08:22 +0100)
committerRichard Kettlewell <rjk@greenend.org.uk>
Mon, 9 Jun 2008 07:22:50 +0000 (08:22 +0100)
event_() functions.

disobedience/choose.c
disobedience/disobedience.c
disobedience/disobedience.h
disobedience/login.c
disobedience/menu.c
disobedience/properties.c

index 731c7a2eee64a83d48db9ccf002d7ab73e0a8976..9cfcc2e9a85a77857b11fc1759f3ad8b3ec2b7d1 100644 (file)
@@ -1426,8 +1426,13 @@ static const struct tabtype tabtype_choose = {
 
 /* Public entry points ----------------------------------------------------- */
 
-/** @brief Called to entirely reset the choose screen */
-static void choose_reset(void) {
+/** @brief Called when we have just logged in
+ *
+ * Entirely resets the choose tab.
+ */
+static void choose_logged_in(const char attribute((unused)) *event,
+                             void attribute((unused)) *eventdata,
+                             void attribute((unused)) *callbackdata) {
   if(root)
     undisplay_tree(root);
   root = newnode(0/*parent*/, "<root>", "All files", "",
@@ -1506,8 +1511,8 @@ GtkWidget *choose_widget(void) {
   NW(layout);
   chooselayout = gtk_layout_new(0, 0);
   gtk_widget_set_style(chooselayout, layout_style);
-  choose_reset();
-  register_reset(choose_reset);
+  choose_logged_in(0, 0, 0);
+  event_register("logged-in", choose_logged_in, 0);
   /* Create the popup menus */
   NW(menu);
   track_menu = gtk_menu_new();
index 6ee4803def54105d99108cc57d3a2751fa7c965d..5e32d2e1172b52b4cd99971bde9540cb25d14364 100644 (file)
@@ -90,12 +90,6 @@ int rtp_supported;
 /** @brief True if RTP play is enabled */
 int rtp_is_running;
 
-/** @brief Linked list of functions to call when we reset login parameters */
-static struct reset_callback_node {
-  struct reset_callback_node *next;
-  reset_callback *callback;
-} *resets;
-
 /* Window creation --------------------------------------------------------- */
 
 /* Note that all the client operations kicked off from here will only complete
@@ -408,29 +402,16 @@ static void help(void) {
   exit(0);
 }
 
-/* reset state */
-void reset(void) {
-  struct reset_callback_node *r;
-
+void logged_in(void) {
   /* reset the clients */
   disorder_eclient_close(client);
   disorder_eclient_close(logclient);
   rtp_supported = 0;
-  for(r = resets; r; r = r->next)
-    r->callback();
+  event_raise("logged-in", 0);
   /* Might be a new server so re-check */
   check_rtp_address();
 }
 
-/** @brief Register a reset callback */
-void register_reset(reset_callback *callback) {
-  struct reset_callback_node *const r = xmalloc(sizeof *r);
-
-  r->next = resets;
-  r->callback = callback;
-  resets = r;
-}
-
 int main(int argc, char **argv) {
   int n;
   gboolean gtkok;
@@ -483,7 +464,6 @@ int main(int argc, char **argv) {
                      maybe_send_nop,
                      0/*data*/,
                      0/*notify*/);
-  register_reset(properties_reset);
   /* Start monitoring the log */
   disorder_eclient_log(logclient, &log_callbacks, 0);
   /* See if RTP play supported */
index 452526d9fd8f26ca818070dcc70e227db7d4bdd2..d945e32c8997629d8dee9cf36a0bec69ec5c5a04 100644 (file)
@@ -134,8 +134,6 @@ void popup_protocol_error(int code,
 void properties(int ntracks, const char **tracks);
 /* Pop up a properties window for a list of tracks */
 
-void properties_reset(void);
-
 GtkWidget *scroll_widget(GtkWidget *child);
 /* Wrap a widget up for scrolling */
 
@@ -166,13 +164,7 @@ GtkWidget *create_buttons_box(struct button *buttons,
                               size_t nbuttons,
                               GtkWidget *box);
 
-/** @brief Type signature for a reset callback */
-typedef void reset_callback(void);
-
-void register_reset(reset_callback *callback);
-/* Register a reset callback */
-
-void reset(void);
+void logged_in(void);
 
 void all_update(void);
 /* Update everything */
index 18afce461642b353c49cc6fc6a9bfe06ddd0ca44..5831aa6cef6cc2455ae71cba2caca449b016ffe9 100644 (file)
@@ -153,7 +153,7 @@ static void login_ok(GtkButton attribute((unused)) *button,
   if(!disorder_connect(c)) {
     /* Success; save the config and start using it */
     login_save_config();
-    reset();
+    logged_in();
     /* Pop down login window */
     gtk_widget_destroy(login_window);
   } else {
index 209438cf5e0dfa3e48d7aa058c99897affbc0639..b52190efcb3391306282c7f9b573ddf2b24b1e26 100644 (file)
@@ -244,8 +244,10 @@ static void menu_got_rights(void attribute((unused)) *v,
   users_set_sensitive(!!(r & RIGHT_ADMIN));
 }
 
-/** @brief Called when we need to reset state */
-static void menu_reset(void) {
+/** @brief Called after a fresh login */
+static void menu_logged_in(const char attribute((unused)) *event,
+                           void attribute((unused)) *eventdata,
+                           void attribute((unused)) *callbackdata) {
   users_set_sensitive(0);               /* until we know better */
   disorder_eclient_userinfo(client, menu_got_rights, config->username, "rights",
                             0);
@@ -419,8 +421,8 @@ GtkWidget *menubar(GtkWidget *w) {
   assert(selectall_widget != 0);
   assert(selectnone_widget != 0);
   assert(properties_widget != 0);
-  register_reset(menu_reset);
-  menu_reset();
+  event_register("logged-in", menu_logged_in, 0);
+  menu_logged_in(0, 0, 0);
   m = gtk_item_factory_get_widget(mainmenufactory,
                                   "<GdisorderMain>");
   set_tool_colors(m);
index fe2bbf5a59a354eecaee5d7f8fea633dfa539cf7..57ed65d007ddd782e16a485d97a542f91c7f10b7 100644 (file)
@@ -55,6 +55,10 @@ static void properties_ok(GtkButton *button, gpointer userdata);
 static void properties_apply(GtkButton *button, gpointer userdata);
 static void properties_cancel(GtkButton *button, gpointer userdata);
 
+static void properties_logged_in(const char *event,
+                                 void *eventdata,
+                                 void *callbackdata);
+
 /** @brief Data for a single preference */
 struct prefdata {
   const char *track;
@@ -157,6 +161,7 @@ static struct prefdata *prefdatas;      /* Current prefdatas */
 static GtkWidget *properties_window;
 static GtkWidget *properties_table;
 static struct progress_window *pw;
+static event_handle properties_event;
 
 static void propagate_clicked(GtkButton attribute((unused)) *button,
                               gpointer userdata) {
@@ -191,6 +196,7 @@ void properties(int ntracks, const char **tracks) {
     popup_msg(GTK_MESSAGE_ERROR, "Too many tracks selected");
     return;
   }
+  properties_event = event_register("logged-in", properties_logged_in, 0);
   /* Create a new properties window */
   properties_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   gtk_widget_set_style(properties_window, tool_style);
@@ -489,13 +495,17 @@ static void properties_apply(GtkButton attribute((unused)) *button,
 static void properties_cancel(GtkButton attribute((unused)) *button,
                               gpointer attribute((unused)) userdata) {
   gtk_widget_destroy(properties_window);
+  event_cancel(properties_event);
+  properties_event = 0;
 }
 
-/** @brief Called on client reset
+/** @brief Called when we've just logged in
  *
  * Destroys the current properties window.
  */
-void properties_reset(void) {
+static void properties_logged_in(const char attribute((unused)) *event,
+                                 void attribute((unused)) *eventdata,
+                                 void attribute((unused)) *callbackdata) {
   if(properties_window)
     gtk_widget_destroy(properties_window);
 }