From: Richard Kettlewell Date: Mon, 9 Jun 2008 07:22:50 +0000 (+0100) Subject: Switch Disobedience reset (i.e. fresh login) notification over to X-Git-Tag: 4.1~15^2~68 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/commitdiff_plain/7c30fc7526b3f761d1b4d1c9d3a51842569529e2 Switch Disobedience reset (i.e. fresh login) notification over to event_() functions. --- diff --git a/disobedience/choose.c b/disobedience/choose.c index 731c7a2..9cfcc2e 100644 --- a/disobedience/choose.c +++ b/disobedience/choose.c @@ -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*/, "", "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(); diff --git a/disobedience/disobedience.c b/disobedience/disobedience.c index 6ee4803..5e32d2e 100644 --- a/disobedience/disobedience.c +++ b/disobedience/disobedience.c @@ -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 */ diff --git a/disobedience/disobedience.h b/disobedience/disobedience.h index 452526d..d945e32 100644 --- a/disobedience/disobedience.h +++ b/disobedience/disobedience.h @@ -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 */ diff --git a/disobedience/login.c b/disobedience/login.c index 18afce4..5831aa6 100644 --- a/disobedience/login.c +++ b/disobedience/login.c @@ -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 { diff --git a/disobedience/menu.c b/disobedience/menu.c index 209438c..b52190e 100644 --- a/disobedience/menu.c +++ b/disobedience/menu.c @@ -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, ""); set_tool_colors(m); diff --git a/disobedience/properties.c b/disobedience/properties.c index fe2bbf5..57ed65d 100644 --- a/disobedience/properties.c +++ b/disobedience/properties.c @@ -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); }