X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fstartup.c;h=1cfec5f7dd941ba08d3d0bd9470d65115a226469;hb=bc52fae15c75635e9cec57e25619d304dba3a69b;hp=ebe8c1d9439601a426bee70aa512d95c70a7a44f;hpb=3c5df50c54ab6451098c2175a21470312952000e;p=i3%2Fi3 diff --git a/src/startup.c b/src/startup.c index ebe8c1d9..1cfec5f7 100644 --- a/src/startup.c +++ b/src/startup.c @@ -4,7 +4,7 @@ * vim:ts=4:sw=4:expandtab * * i3 - an improved dynamic tiling window manager - * © 2009-2012 Michael Stapelberg and contributors (see also: LICENSE) + * © 2009 Michael Stapelberg and contributors (see also: LICENSE) * * startup.c: Startup notification code. Ensures a startup notification context * is setup when launching applications. We store the current @@ -131,7 +131,7 @@ void startup_sequence_delete(struct Startup_Sequence *sequence) { * */ void start_application(const char *command, bool no_startup_id) { - SnLauncherContext *context; + SnLauncherContext *context = NULL; if (!no_startup_id) { /* Create a startup notification context to monitor the progress of this @@ -149,7 +149,7 @@ void start_application(const char *command, bool no_startup_id) { free(first_word); /* Trigger a timeout after 60 seconds */ - struct ev_timer *timeout = scalloc(sizeof(struct ev_timer)); + struct ev_timer *timeout = scalloc(1, sizeof(struct ev_timer)); ev_timer_init(timeout, startup_timeout, 60.0, 0.); timeout->data = context; ev_timer_start(main_loop, timeout); @@ -159,7 +159,7 @@ void start_application(const char *command, bool no_startup_id) { /* Save the ID and current workspace in our internal list of startup * sequences */ Con *ws = con_get_workspace(focused); - struct Startup_Sequence *sequence = scalloc(sizeof(struct Startup_Sequence)); + struct Startup_Sequence *sequence = scalloc(1, sizeof(struct Startup_Sequence)); sequence->id = sstrdup(sn_launcher_context_get_startup_id(context)); sequence->workspace = sstrdup(ws->name); sequence->context = context; @@ -257,6 +257,22 @@ void startup_monitor_event(SnMonitorEvent *event, void *userdata) { } } +/** + * Renames workspaces that are mentioned in the startup sequences. + * + */ +void startup_sequence_rename_workspace(char *old_name, char *new_name) { + struct Startup_Sequence *current; + TAILQ_FOREACH(current, &startup_sequences, sequences) { + if (strcmp(current->workspace, old_name) != 0) + continue; + DLOG("Renaming workspace \"%s\" to \"%s\" in startup sequence %s.\n", + old_name, new_name, current->id); + free(current->workspace); + current->workspace = sstrdup(new_name); + } +} + /** * Gets the stored startup sequence for the _NET_STARTUP_ID of a given window. *