first try to get widget configurable
This commit is contained in:
parent
4432bd6d39
commit
602f921559
|
@ -21,6 +21,14 @@ screen 0
|
||||||
layout dwindle { symbol = "[\\]" }
|
layout dwindle { symbol = "[\\]" }
|
||||||
layout floating { symbol = "><>" }
|
layout floating { symbol = "><>" }
|
||||||
}
|
}
|
||||||
|
statusbar
|
||||||
|
{
|
||||||
|
position = "top"
|
||||||
|
widget taglist {}
|
||||||
|
widget layoutinfo {}
|
||||||
|
widget focustitle {}
|
||||||
|
widget textbox {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rules
|
rules
|
||||||
|
|
27
config.c
27
config.c
|
@ -32,6 +32,7 @@
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "rules.h"
|
#include "rules.h"
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
|
#include "widget.h"
|
||||||
#include "layouts/tile.h"
|
#include "layouts/tile.h"
|
||||||
#include "layouts/floating.h"
|
#include "layouts/floating.h"
|
||||||
#include "layouts/max.h"
|
#include "layouts/max.h"
|
||||||
|
@ -58,6 +59,7 @@ typedef struct
|
||||||
} MouseButton;
|
} MouseButton;
|
||||||
|
|
||||||
extern const NameFuncLink UicbList[];
|
extern const NameFuncLink UicbList[];
|
||||||
|
extern const NameFuncLink WidgetList[];
|
||||||
|
|
||||||
/** List of keyname and corresponding X11 mask codes */
|
/** List of keyname and corresponding X11 mask codes */
|
||||||
static const KeyMod KeyModList[] =
|
static const KeyMod KeyModList[] =
|
||||||
|
@ -269,9 +271,14 @@ parse_config(const char *confpatharg, awesome_config *awesomeconf)
|
||||||
CFG_STR((char *) "tab_border", (char *) "#ff0000", CFGF_NONE),
|
CFG_STR((char *) "tab_border", (char *) "#ff0000", CFGF_NONE),
|
||||||
CFG_END()
|
CFG_END()
|
||||||
};
|
};
|
||||||
|
static cfg_opt_t widget_opts[] =
|
||||||
|
{
|
||||||
|
CFG_END()
|
||||||
|
};
|
||||||
static cfg_opt_t statusbar_opts[] =
|
static cfg_opt_t statusbar_opts[] =
|
||||||
{
|
{
|
||||||
CFG_STR((char *) "position", (char *) "top", CFGF_NONE),
|
CFG_STR((char *) "position", (char *) "top", CFGF_NONE),
|
||||||
|
CFG_SEC((char *) "widget", widget_opts, CFGF_TITLE | CFGF_MULTI),
|
||||||
CFG_END()
|
CFG_END()
|
||||||
};
|
};
|
||||||
static cfg_opt_t tag_opts[] =
|
static cfg_opt_t tag_opts[] =
|
||||||
|
@ -382,7 +389,7 @@ parse_config(const char *confpatharg, awesome_config *awesomeconf)
|
||||||
CFG_END()
|
CFG_END()
|
||||||
};
|
};
|
||||||
cfg_t *cfg, *cfg_general, *cfg_colors, *cfg_screen, *cfg_statusbar, *cfg_tags,
|
cfg_t *cfg, *cfg_general, *cfg_colors, *cfg_screen, *cfg_statusbar, *cfg_tags,
|
||||||
*cfg_layouts, *cfg_rules, *cfg_keys, *cfg_mouse, *cfgsectmp, *cfg_padding;
|
*cfg_layouts, *cfg_rules, *cfg_keys, *cfg_mouse, *cfg_padding, *cfgsectmp;
|
||||||
int ret, screen;
|
int ret, screen;
|
||||||
unsigned int i = 0;
|
unsigned int i = 0;
|
||||||
const char *tmp, *homedir;
|
const char *tmp, *homedir;
|
||||||
|
@ -391,6 +398,8 @@ parse_config(const char *confpatharg, awesome_config *awesomeconf)
|
||||||
Rule *rule = NULL;
|
Rule *rule = NULL;
|
||||||
Layout *layout = NULL;
|
Layout *layout = NULL;
|
||||||
Tag *tag = NULL;
|
Tag *tag = NULL;
|
||||||
|
Widget_ptr widget = NULL;
|
||||||
|
Widget_ptr (*widget_fct)(Statusbar *);
|
||||||
FILE *defconfig = NULL;
|
FILE *defconfig = NULL;
|
||||||
|
|
||||||
if(confpatharg)
|
if(confpatharg)
|
||||||
|
@ -472,6 +481,22 @@ parse_config(const char *confpatharg, awesome_config *awesomeconf)
|
||||||
awesomeconf->screens[screen].statusbar.dposition =
|
awesomeconf->screens[screen].statusbar.dposition =
|
||||||
statusbar_get_position_from_str(cfg_getstr(cfg_statusbar, "position"));
|
statusbar_get_position_from_str(cfg_getstr(cfg_statusbar, "position"));
|
||||||
|
|
||||||
|
/* Statusbar widgets */
|
||||||
|
if(cfg_size(cfg_statusbar, "widget"))
|
||||||
|
for(i = 0; i < cfg_size(cfg_statusbar, "widget"); i++)
|
||||||
|
{
|
||||||
|
cfgsectmp = cfg_getnsec(cfg_statusbar, "widget", i);
|
||||||
|
widget_fct = (Widget_ptr **) name_func_lookup(cfg_title(cfgsectmp), WidgetList);
|
||||||
|
if(!widget)
|
||||||
|
awesomeconf->screens[screen].statusbar.widgets = widget =
|
||||||
|
widget_fct(&awesomeconf->screens[screen].statusbar);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
widget->next = widget_fct(&awesomeconf->screens[screen].statusbar);
|
||||||
|
widget = widget->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Layouts */
|
/* Layouts */
|
||||||
if(cfg_size(cfg_layouts, "layout"))
|
if(cfg_size(cfg_layouts, "layout"))
|
||||||
{
|
{
|
||||||
|
|
5
config.h
5
config.h
|
@ -81,6 +81,7 @@ struct Button
|
||||||
|
|
||||||
/** Status bar */
|
/** Status bar */
|
||||||
typedef struct Widget Widget;
|
typedef struct Widget Widget;
|
||||||
|
typedef Widget * Widget_ptr;
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
/** Bar width */
|
/** Bar width */
|
||||||
|
@ -98,7 +99,7 @@ typedef struct
|
||||||
/** Screen */
|
/** Screen */
|
||||||
int screen;
|
int screen;
|
||||||
/** Screen */
|
/** Screen */
|
||||||
Widget *widgets;
|
Widget_ptr widgets;
|
||||||
} Statusbar;
|
} Statusbar;
|
||||||
|
|
||||||
typedef struct Client Client;
|
typedef struct Client Client;
|
||||||
|
@ -229,7 +230,7 @@ struct Widget
|
||||||
VirtScreen, int, int, int, int);
|
VirtScreen, int, int, int, int);
|
||||||
Statusbar *statusbar;
|
Statusbar *statusbar;
|
||||||
int alignment;
|
int alignment;
|
||||||
Widget *next;
|
Widget_ptr next;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -86,7 +86,6 @@ statusbar_init(Display *disp, int screen, Statusbar *statusbar, Cursor cursor, X
|
||||||
XSetWindowAttributes wa;
|
XSetWindowAttributes wa;
|
||||||
int phys_screen = get_phys_screen(disp, screen);
|
int phys_screen = get_phys_screen(disp, screen);
|
||||||
ScreenInfo *si = get_screen_info(disp, screen, NULL, padding);
|
ScreenInfo *si = get_screen_info(disp, screen, NULL, padding);
|
||||||
Widget *widget;
|
|
||||||
|
|
||||||
statusbar->height = font->height * 1.5;
|
statusbar->height = font->height * 1.5;
|
||||||
|
|
||||||
|
@ -121,12 +120,6 @@ statusbar_init(Display *disp, int screen, Statusbar *statusbar, Cursor cursor, X
|
||||||
CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
|
CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
|
||||||
XDefineCursor(disp, statusbar->window, cursor);
|
XDefineCursor(disp, statusbar->window, cursor);
|
||||||
|
|
||||||
/* For now, we just create a standard set of widgets by hand. As the refactoring continues,
|
|
||||||
* these will become configurable. */
|
|
||||||
statusbar->widgets = widget = taglist_new(statusbar);
|
|
||||||
widget->next = layoutinfo_new(statusbar); widget = widget->next;
|
|
||||||
widget->next = focustitle_new(statusbar); widget = widget->next;
|
|
||||||
widget->next = textbox_new(statusbar);
|
|
||||||
calculate_alignments(statusbar->widgets);
|
calculate_alignments(statusbar->widgets);
|
||||||
|
|
||||||
statusbar_update_position(disp, *statusbar, padding);
|
statusbar_update_position(disp, *statusbar, padding);
|
||||||
|
|
9
widget.c
9
widget.c
|
@ -1,5 +1,14 @@
|
||||||
|
#include "util.h"
|
||||||
#include "widget.h"
|
#include "widget.h"
|
||||||
|
|
||||||
|
const NameFuncLink WidgetList[] =
|
||||||
|
{
|
||||||
|
{"taglist", taglist_new},
|
||||||
|
{"layoutinfo", layoutinfo_new},
|
||||||
|
{"focustitle", focustitle_new},
|
||||||
|
{"textbox", textbox_new}
|
||||||
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
calculate_alignments(Widget *widget)
|
calculate_alignments(Widget *widget)
|
||||||
{
|
{
|
||||||
|
|
10
widget.h
10
widget.h
|
@ -6,13 +6,15 @@
|
||||||
|
|
||||||
enum { AlignLeft, AlignRight, AlignFlex };
|
enum { AlignLeft, AlignRight, AlignFlex };
|
||||||
|
|
||||||
|
typedef Widget_ptr (WidgetConstructor)(Statusbar *);
|
||||||
|
|
||||||
int calculate_offset(int, int, int, int);
|
int calculate_offset(int, int, int, int);
|
||||||
void calculate_alignments(Widget *widget);
|
void calculate_alignments(Widget *widget);
|
||||||
|
|
||||||
Widget *layoutinfo_new(Statusbar*);
|
Widget_ptr layoutinfo_new(Statusbar*);
|
||||||
Widget *taglist_new(Statusbar*);
|
Widget_ptr taglist_new(Statusbar*);
|
||||||
Widget *textbox_new(Statusbar*);
|
Widget_ptr textbox_new(Statusbar*);
|
||||||
Widget *focustitle_new(Statusbar*);
|
Widget_ptr focustitle_new(Statusbar*);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue