diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-04-05 20:47:16 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-04-05 20:47:16 +0000 |
| commit | bd12517c615d661fa2823f85bbbcb48555f7c3db (patch) | |
| tree | f42faa3fed75a2dea76bc95577e5c27922f609f4 /openbox | |
| parent | cbbf90a718ecc6836ef7a77b9040aebb9da348b8 (diff) | |
add focus options to the new rc file
Diffstat (limited to 'openbox')
| -rw-r--r-- | openbox/focus.c | 22 | ||||
| -rw-r--r-- | openbox/openbox.c | 15 | ||||
| -rw-r--r-- | openbox/parse.c | 32 |
3 files changed, 45 insertions, 24 deletions
diff --git a/openbox/focus.c b/openbox/focus.c index b676c127..39894046 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -6,6 +6,7 @@ #include "prop.h" #include "dispatch.h" #include "focus.h" +#include "parse.h" #include <X11/Xlib.h> #include <glib.h> @@ -18,6 +19,25 @@ Window focus_backup = None; gboolean focus_new = TRUE; gboolean focus_follow = TRUE; +static void parse_assign(char *name, ParseToken *value) +{ + if (!g_ascii_strcasecmp(name, "focusnew")) { + if (value->type != TOKEN_BOOL) + yyerror("invalid value"); + else { + focus_new = value->data.bool; + } + } else if (!g_ascii_strcasecmp(name, "followmouse")) { + if (value->type != TOKEN_BOOL) + yyerror("invalid value"); + else { + focus_follow = value->data.bool; + } + } else + yyerror("invalid option"); + parse_free_token(value); +} + void focus_startup() { /* create the window which gets focus when no clients get it. Have to @@ -38,6 +58,8 @@ void focus_startup() /* start with nothing focused */ focus_set_client(NULL); + + parse_reg_section("focus", NULL, parse_assign); } void focus_shutdown() diff --git a/openbox/openbox.c b/openbox/openbox.c index 90756097..3d4db6f9 100644 --- a/openbox/openbox.c +++ b/openbox/openbox.c @@ -147,22 +147,24 @@ int main(int argc, char **argv) extensions_query_all(); /* find which extensions are present */ if (screen_annex()) { /* it will be ours! */ + /* startup the parsing so everything can register sections of the rc */ + parse_startup(); + + /* anything that is going to read data from the rc file needs to be + in this group */ timer_startup(); render_startup(); font_startup(); event_startup(); grab_startup(); engine_startup(); + focus_startup(); plugin_startup(); - - /* startup the parsing so plugins can register sections of the rc */ - parse_startup(); - /* load the plugins specified in the pluginrc */ plugin_loadall(); + /* parse/load user options */ parse_rc(); - /* we're done with parsing now, kill it */ parse_shutdown(); @@ -170,7 +172,6 @@ int main(int argc, char **argv) engine_load(); screen_startup(); - focus_startup(); client_startup(); /* call startup for all the plugins */ @@ -188,8 +189,8 @@ int main(int argc, char **argv) plugin_shutdown(); /* calls all the plugins' shutdown functions */ client_shutdown(); - focus_shutdown(); screen_shutdown(); + focus_shutdown(); engine_shutdown(); grab_shutdown(); event_shutdown(); diff --git a/openbox/parse.c b/openbox/parse.c index a72cfd84..ffb72c03 100644 --- a/openbox/parse.c +++ b/openbox/parse.c @@ -3,11 +3,11 @@ static GHashTable *reg = NULL; struct Functions { - ParseFunc func; - AssignParseFunc afunc; + ParseFunc f; + AssignParseFunc af; } *funcs; -void destshit(gpointer key) { g_free(key); } +void destshit(gpointer shit) { g_free(shit); } void parse_startup() { @@ -22,15 +22,10 @@ void parse_shutdown() void parse_reg_section(char *section, ParseFunc func, AssignParseFunc afunc) { - if (g_hash_table_lookup(reg, section) != NULL) - g_warning("duplicate request for section '%s' in the rc file", - section); - else { - struct Functions *f = g_new(struct Functions, 1); - f->func = func; - f->afunc = afunc; - g_hash_table_insert(reg, g_ascii_strdown(section, -1), f); - } + struct Functions *f = g_new(struct Functions, 1); + f->f = func; + f->af = afunc; + g_hash_table_insert(reg, g_ascii_strdown(section, -1), f); } void parse_free_token(ParseToken *token) @@ -64,14 +59,17 @@ void parse_free_token(ParseToken *token) void parse_set_section(char *section) { - funcs = g_hash_table_lookup(reg, section); + char *sec; + sec = g_ascii_strdown(section, -1); + funcs = g_hash_table_lookup(reg, sec); + g_free(sec); } void parse_token(ParseToken *token) { if (funcs) { - if (funcs->func != NULL) - funcs->func(token); + if (funcs->f) + funcs->f(token); else if (token->type != TOKEN_NEWLINE) yyerror("syntax error"); } @@ -80,8 +78,8 @@ void parse_token(ParseToken *token) void parse_assign(char *name, ParseToken *value) { if (funcs) { - if (funcs->afunc != NULL) - funcs->afunc(name, value); + if (funcs->af) + funcs->af(name, value); else yyerror("syntax error"); } |
