void emit_tag_changed(HSTag* tag, int monitor) { assert(tag != NULL); static char monitor_name[STRING_BUF_SIZE]; snprintf(monitor_name, STRING_BUF_SIZE, "%d", monitor); const char* argv[3]; argv[0] = "tag_changed"; argv[1] = tag->name->str; argv[2] = monitor_name; hook_emit(LENGTH(argv), argv); }
void hook_emit_list(const char* name, ...) { assert(name != NULL); int count = 1; va_list ap; // first count number of arguments va_start(ap, name); while (va_arg(ap, char*)) { count++; } va_end(ap); // then fill arguments into argv array const char** argv = g_new(const char*, count); int i = 0; argv[i++] = name; va_start(ap, name); while (i < count) { argv[i] = va_arg(ap, char*); i++; } va_end(ap); hook_emit(count, argv); // cleanup g_free(argv); }
int custom_hook_emit(int argc, char** argv) { hook_emit(argc - 1, argv + 1); return 0; }