+
+ i3_output *o_walk;
+ SLIST_FOREACH(o_walk, outputs, slist) {
+ kick_tray_clients(o_walk);
+ }
+
+ draw_bars(false);
+}
+
+/*
+ * Called when we get the configuration for our bar instance
+ *
+ */
+void got_bar_config(char *reply) {
+ DLOG("Received bar config \"%s\"\n", reply);
+ /* We initiate the main-function by requesting infos about the outputs and
+ * workspaces. Everything else (creating the bars, showing the right workspace-
+ * buttons and more) is taken care of by the event-drivenness of the code */
+ i3_send_msg(I3_IPC_MESSAGE_TYPE_GET_OUTPUTS, NULL);
+ parse_config_json(reply);
+
+ /* Now we can actually use 'config', so let's subscribe to the appropriate
+ * events and request the workspaces if necessary. */
+ subscribe_events();
+ if (!config.disable_ws)
+ i3_send_msg(I3_IPC_MESSAGE_TYPE_GET_WORKSPACES, NULL);
+
+ /* Initialize the rest of XCB */
+ init_xcb_late(config.fontname);
+
+ /* Resolve color strings to colorpixels and save them, then free the strings. */
+ init_colors(&(config.colors));
+ free_colors(&(config.colors));
+
+ /* The name of this function is actually misleading. Even if no command is
+ * specified, this function initiates the watchers to listen on stdin and
+ * react accordingly */
+ start_child(config.command);
+ FREE(config.command);