add focus options to the new rc file

This commit is contained in:
Dana Jansens 2003-04-05 20:47:16 +00:00
parent cbbf90a718
commit bd12517c61
4 changed files with 54 additions and 25 deletions

View file

@ -1,4 +1,12 @@
all install uninstall: all uninstall:
@$(MAKE) -$(MAKEFLAGS) -f build/Makefile.render $@
@$(MAKE) -$(MAKEFLAGS) -f build/Makefile.kernel $@
@$(MAKE) -$(MAKEFLAGS) -f build/Makefile.plugins $@
@$(MAKE) -$(MAKEFLAGS) -f build/Makefile.engines $@
@$(MAKE) -$(MAKEFLAGS) -f build/Makefile.data $@
# @$(MAKE) -$(MAKEFLAGS) -f build/Makefile.themes $@
install: all
@$(MAKE) -$(MAKEFLAGS) -f build/Makefile.render $@ @$(MAKE) -$(MAKEFLAGS) -f build/Makefile.render $@
@$(MAKE) -$(MAKEFLAGS) -f build/Makefile.kernel $@ @$(MAKE) -$(MAKEFLAGS) -f build/Makefile.kernel $@
@$(MAKE) -$(MAKEFLAGS) -f build/Makefile.plugins $@ @$(MAKE) -$(MAKEFLAGS) -f build/Makefile.plugins $@

View file

@ -6,6 +6,7 @@
#include "prop.h" #include "prop.h"
#include "dispatch.h" #include "dispatch.h"
#include "focus.h" #include "focus.h"
#include "parse.h"
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <glib.h> #include <glib.h>
@ -18,6 +19,25 @@ Window focus_backup = None;
gboolean focus_new = TRUE; gboolean focus_new = TRUE;
gboolean focus_follow = 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() void focus_startup()
{ {
/* create the window which gets focus when no clients get it. Have to /* create the window which gets focus when no clients get it. Have to
@ -38,6 +58,8 @@ void focus_startup()
/* start with nothing focused */ /* start with nothing focused */
focus_set_client(NULL); focus_set_client(NULL);
parse_reg_section("focus", NULL, parse_assign);
} }
void focus_shutdown() void focus_shutdown()

View file

@ -147,22 +147,24 @@ int main(int argc, char **argv)
extensions_query_all(); /* find which extensions are present */ extensions_query_all(); /* find which extensions are present */
if (screen_annex()) { /* it will be ours! */ 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(); timer_startup();
render_startup(); render_startup();
font_startup(); font_startup();
event_startup(); event_startup();
grab_startup(); grab_startup();
engine_startup(); engine_startup();
focus_startup();
plugin_startup(); plugin_startup();
/* startup the parsing so plugins can register sections of the rc */
parse_startup();
/* load the plugins specified in the pluginrc */ /* load the plugins specified in the pluginrc */
plugin_loadall(); plugin_loadall();
/* parse/load user options */ /* parse/load user options */
parse_rc(); parse_rc();
/* we're done with parsing now, kill it */ /* we're done with parsing now, kill it */
parse_shutdown(); parse_shutdown();
@ -170,7 +172,6 @@ int main(int argc, char **argv)
engine_load(); engine_load();
screen_startup(); screen_startup();
focus_startup();
client_startup(); client_startup();
/* call startup for all the plugins */ /* call startup for all the plugins */
@ -188,8 +189,8 @@ int main(int argc, char **argv)
plugin_shutdown(); /* calls all the plugins' shutdown functions */ plugin_shutdown(); /* calls all the plugins' shutdown functions */
client_shutdown(); client_shutdown();
focus_shutdown();
screen_shutdown(); screen_shutdown();
focus_shutdown();
engine_shutdown(); engine_shutdown();
grab_shutdown(); grab_shutdown();
event_shutdown(); event_shutdown();

View file

@ -3,11 +3,11 @@
static GHashTable *reg = NULL; static GHashTable *reg = NULL;
struct Functions { struct Functions {
ParseFunc func; ParseFunc f;
AssignParseFunc afunc; AssignParseFunc af;
} *funcs; } *funcs;
void destshit(gpointer key) { g_free(key); } void destshit(gpointer shit) { g_free(shit); }
void parse_startup() void parse_startup()
{ {
@ -22,15 +22,10 @@ void parse_shutdown()
void parse_reg_section(char *section, ParseFunc func, AssignParseFunc afunc) void parse_reg_section(char *section, ParseFunc func, AssignParseFunc afunc)
{ {
if (g_hash_table_lookup(reg, section) != NULL) struct Functions *f = g_new(struct Functions, 1);
g_warning("duplicate request for section '%s' in the rc file", f->f = func;
section); f->af = afunc;
else { g_hash_table_insert(reg, g_ascii_strdown(section, -1), f);
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);
}
} }
void parse_free_token(ParseToken *token) void parse_free_token(ParseToken *token)
@ -64,14 +59,17 @@ void parse_free_token(ParseToken *token)
void parse_set_section(char *section) 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) void parse_token(ParseToken *token)
{ {
if (funcs) { if (funcs) {
if (funcs->func != NULL) if (funcs->f)
funcs->func(token); funcs->f(token);
else if (token->type != TOKEN_NEWLINE) else if (token->type != TOKEN_NEWLINE)
yyerror("syntax error"); yyerror("syntax error");
} }
@ -80,8 +78,8 @@ void parse_token(ParseToken *token)
void parse_assign(char *name, ParseToken *value) void parse_assign(char *name, ParseToken *value)
{ {
if (funcs) { if (funcs) {
if (funcs->afunc != NULL) if (funcs->af)
funcs->afunc(name, value); funcs->af(name, value);
else else
yyerror("syntax error"); yyerror("syntax error");
} }