rofi  1.5.4
theme.c File Reference
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <gio/gio.h>
#include "theme.h"
#include "theme-parser.h"
#include "helper.h"
#include "settings.h"
#include "widgets/textbox.h"
#include "view.h"
#include "rofi.h"
#include "rofi-types.h"
Include dependency graph for theme.c:

Go to the source code of this file.

Macros

#define G_LOG_DOMAIN   "Theme"
 

Functions

void yyerror (YYLTYPE *yylloc, const char *, const char *)
 
static gboolean distance_compare (RofiDistance d, RofiDistance e)
 
static gpointer rofi_g_list_strdup (gconstpointer data, G_GNUC_UNUSED gpointer user_data)
 
ThemeWidgetrofi_theme_find_or_create_name (ThemeWidget *base, const char *name)
 
Propertyrofi_theme_property_create (PropertyType type)
 
Propertyrofi_theme_property_copy (Property *p)
 
void rofi_theme_property_free (Property *p)
 
void rofi_theme_reset (void)
 
void rofi_theme_free (ThemeWidget *widget)
 
static void printf_double (double d)
 
static void rofi_theme_print_distance (RofiDistance d)
 
static void int_rofi_theme_print_property (Property *p)
 
static void rofi_theme_print_property_index (size_t pnl, int depth, Property *p)
 
static void rofi_theme_print_index (ThemeWidget *widget)
 
void rofi_theme_print (ThemeWidget *widget)
 
int yyparse ()
 
void yylex_destroy (void)
 
static void rofi_theme_copy_property_int (G_GNUC_UNUSED gpointer key, gpointer value, gpointer user_data)
 
void rofi_theme_widget_add_properties (ThemeWidget *widget, GHashTable *table)
 
static ThemeWidgetrofi_theme_find_single (ThemeWidget *widget, const char *name)
 
static ThemeWidgetrofi_theme_find (ThemeWidget *widget, const char *name, const gboolean exact)
 
static void rofi_theme_resolve_link_property (Property *p, int depth)
 
Propertyrofi_theme_find_property (ThemeWidget *widget, PropertyType type, const char *property, gboolean exact)
 
ThemeWidgetrofi_theme_find_widget (const char *name, const char *state, gboolean exact)
 
int rofi_theme_get_position (const widget *widget, const char *property, int def)
 
int rofi_theme_get_integer (const widget *widget, const char *property, int def)
 
RofiDistance rofi_theme_get_distance (const widget *widget, const char *property, int def)
 
int rofi_theme_get_boolean (const widget *widget, const char *property, int def)
 
RofiOrientation rofi_theme_get_orientation (const widget *widget, const char *property, RofiOrientation def)
 
const char * rofi_theme_get_string (const widget *widget, const char *property, const char *def)
 
double rofi_theme_get_double (const widget *widget, const char *property, double def)
 
void rofi_theme_get_color (const widget *widget, const char *property, cairo_t *d)
 
RofiPadding rofi_theme_get_padding (const widget *widget, const char *property, RofiPadding pad)
 
GList * rofi_theme_get_list (const widget *widget, const char *property, const char *defaults)
 
RofiHighlightColorStyle rofi_theme_get_highlight (widget *widget, const char *property, RofiHighlightColorStyle th)
 
int distance_get_pixel (RofiDistance d, RofiOrientation ori)
 
void distance_get_linestyle (RofiDistance d, cairo_t *draw)
 
gboolean rofi_theme_is_empty (void)
 
char * rofi_theme_parse_prepare_file (const char *file, const char *parent_file)
 

Variables

const char *const WindowLocationStr [9]
 
FILE * yyin
 

Macro Definition Documentation

◆ G_LOG_DOMAIN

#define G_LOG_DOMAIN   "Theme"

Log domain used by the theme engine.

Definition at line 30 of file theme.c.

Function Documentation

◆ distance_compare()

static gboolean distance_compare ( RofiDistance  d,
RofiDistance  e 
)
static

Definition at line 48 of file theme.c.

References RofiDistance::distance, RofiDistance::style, and RofiDistance::type.

Referenced by int_rofi_theme_print_property().

Here is the caller graph for this function:

◆ distance_get_linestyle()

void distance_get_linestyle ( RofiDistance  d,
cairo_t *  draw 
)
Parameters
dThe distance handle.
drawThe cairo drawable.

Set linestyle.

Definition at line 788 of file theme.c.

References ROFI_HL_DASH, and RofiDistance::style.

Referenced by widget_draw().

Here is the caller graph for this function:

◆ distance_get_pixel()

◆ int_rofi_theme_print_property()

◆ printf_double()

static void printf_double ( double  d)
inlinestatic

print

Definition at line 154 of file theme.c.

Referenced by rofi_theme_print_distance().

Here is the caller graph for this function:

◆ rofi_g_list_strdup()

static gpointer rofi_g_list_strdup ( gconstpointer  data,
G_GNUC_UNUSED gpointer  user_data 
)
static

Definition at line 53 of file theme.c.

Referenced by rofi_theme_get_list(), and rofi_theme_property_copy().

Here is the caller graph for this function:

◆ rofi_theme_copy_property_int()

static void rofi_theme_copy_property_int ( G_GNUC_UNUSED gpointer  key,
gpointer  value,
gpointer  user_data 
)
static

Definition at line 402 of file theme.c.

References Property::name, and rofi_theme_property_copy().

Referenced by rofi_theme_widget_add_properties().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_find()

static ThemeWidget* rofi_theme_find ( ThemeWidget widget,
const char *  name,
const gboolean  exact 
)
static

Definition at line 433 of file theme.c.

References rofi_theme_find_single().

Referenced by rofi_theme_find_widget().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_find_or_create_name()

ThemeWidget* rofi_theme_find_or_create_name ( ThemeWidget base,
const char *  name 
)
Parameters
baseHandle to the current level in the theme.
nameName of the new element.

Create a new element in the theme structure.

Returns
handle to the new entry.

Definition at line 58 of file theme.c.

References ThemeWidget::name, ThemeWidget::num_widgets, ThemeWidget::parent, and ThemeWidget::widgets.

◆ rofi_theme_find_property()

Property* rofi_theme_find_property ( ThemeWidget widget,
PropertyType  type,
const char *  property,
gboolean  exact 
)
Parameters
widgetThe widget to find the property on.
typeThe PropertyType to find.
propertyThe property to find.
exactIf the property should only be found on this widget, or on parents if not found.

Find the property on the widget. If not exact, the parents are searched recursively until match is found.

Returns
the Property if found, otherwise NULL.

Definition at line 499 of file theme.c.

References _PropertyValue::link, _widget::name, P_INHERIT, P_INTEGER, P_LINK, P_PADDING, _widget::parent, PropertyTypeName, _PropertyValue::ref, rofi_theme_resolve_link_property(), Property::type, and Property::value.

Referenced by combi_mgrv(), rofi_theme_get_boolean(), rofi_theme_get_color(), rofi_theme_get_distance(), rofi_theme_get_double(), rofi_theme_get_highlight(), rofi_theme_get_integer(), rofi_theme_get_list(), rofi_theme_get_orientation(), rofi_theme_get_padding(), rofi_theme_get_position(), and rofi_theme_get_string().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_find_single()

static ThemeWidget* rofi_theme_find_single ( ThemeWidget widget,
const char *  name 
)
inlinestatic

Public API

Definition at line 423 of file theme.c.

References _widget::name.

Referenced by rofi_theme_find(), and rofi_theme_find_widget().

Here is the caller graph for this function:

◆ rofi_theme_find_widget()

ThemeWidget* rofi_theme_find_widget ( const char *  name,
const char *  state,
gboolean  exact 
)

Low-level functions. These can be used by non-widgets to obtain values.

Parameters
nameThe name of the element to find.
stateThe state of the element.
exactIf the match should be exact, or parent can be included.

Find the theme element. If not exact, the closest specified element is returned.

Returns
the ThemeWidget if found, otherwise NULL.

Definition at line 537 of file theme.c.

References rofi_theme, rofi_theme_find(), and rofi_theme_find_single().

Referenced by combi_mgrv(), rofi_theme_get_boolean(), rofi_theme_get_color(), rofi_theme_get_distance(), rofi_theme_get_double(), rofi_theme_get_highlight(), rofi_theme_get_integer(), rofi_theme_get_list(), rofi_theme_get_orientation(), rofi_theme_get_padding(), rofi_theme_get_position(), and rofi_theme_get_string().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_free()

void rofi_theme_free ( ThemeWidget widget)
Parameters
widgetFree the widget and alll children.

Definition at line 134 of file theme.c.

References _widget::name, and rofi_theme_free().

Referenced by cleanup(), main(), rofi_theme_free(), and rofi_theme_reset().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_get_boolean()

int rofi_theme_get_boolean ( const widget widget,
const char *  property,
int  def 
)
Parameters
widgetThe widget to query
propertyThe property to query.
defThe default value.

Obtain the boolean of the widget.

Returns
The boolean value of this property for this widget.

Definition at line 601 of file theme.c.

References _PropertyValue::b, _widget::name, P_BOOLEAN, P_INHERIT, _widget::parent, rofi_theme_find_property(), rofi_theme_find_widget(), rofi_theme_get_boolean(), _widget::state, Property::type, and Property::value.

Referenced by __create_window(), box_add(), listview_create(), rofi_theme_get_boolean(), and widget_init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_get_color()

void rofi_theme_get_color ( const widget widget,
const char *  property,
cairo_t *  d 
)
Parameters
widgetThe widget to query
propertyThe property to query.
dThe drawable to apply color.

Obtain the color of the widget and applies this to the drawable d.

Definition at line 677 of file theme.c.

References ThemeColor::alpha, ThemeColor::blue, _PropertyValue::color, ThemeColor::green, _widget::name, P_COLOR, P_INHERIT, _widget::parent, ThemeColor::red, rofi_theme_find_property(), rofi_theme_find_widget(), rofi_theme_get_color(), _widget::state, Property::type, and Property::value.

Referenced by rofi_theme_get_color(), scrollbar_draw(), textbox_draw(), and widget_draw().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_get_distance()

RofiDistance rofi_theme_get_distance ( const widget widget,
const char *  property,
int  def 
)

Public API

Parameters
widgetThe widget to query
propertyThe property to query.
defThe default value.

Obtain the distance of the widget.

Returns
The distance value of this property for this widget.

Definition at line 579 of file theme.c.

References _PropertyValue::i, RofiPadding::left, _widget::name, P_INHERIT, P_INTEGER, P_PADDING, _PropertyValue::padding, _widget::parent, ROFI_HL_SOLID, ROFI_PU_PX, rofi_theme_find_property(), rofi_theme_find_widget(), rofi_theme_get_distance(), _widget::state, Property::type, and Property::value.

Referenced by box_create(), box_get_desired_width(), listview_create(), rofi_theme_get_distance(), rofi_view_calculate_height(), rofi_view_calculate_window_position(), rofi_view_calculate_window_width(), scrollbar_create(), and textbox_get_desired_width().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_get_double()

double rofi_theme_get_double ( const widget widget,
const char *  property,
double  def 
)
Parameters
widgetThe widget to query
propertyThe property to query.
defThe default value.

Obtain the double of the widget.

Returns
The double value of this property for this widget.

Definition at line 650 of file theme.c.

References _PropertyValue::f, _PropertyValue::i, _widget::name, P_DOUBLE, P_INHERIT, P_INTEGER, _widget::parent, rofi_theme_find_property(), rofi_theme_find_widget(), rofi_theme_get_double(), _widget::state, Property::type, and Property::value.

Referenced by icon_create(), rofi_theme_get_double(), and textbox_create().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_get_highlight()

RofiHighlightColorStyle rofi_theme_get_highlight ( widget widget,
const char *  property,
RofiHighlightColorStyle  th 
)
Parameters
widgetThe widget to query
propertyThe property to query.
thThe default value.

Obtain the highlight .

Returns
The highlight of this property for this widget.

Definition at line 748 of file theme.c.

References _PropertyValue::highlight, _widget::name, P_HIGHLIGHT, P_INHERIT, _widget::parent, rofi_theme_find_property(), rofi_theme_find_widget(), rofi_theme_get_highlight(), _widget::state, Property::type, and Property::value.

Referenced by rofi_theme_get_highlight(), and update_callback().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_get_integer()

int rofi_theme_get_integer ( const widget widget,
const char *  property,
int  def 
)
Parameters
widgetThe widget to query
propertyThe property to query.
defThe default value.

Obtain the integer of the widget.

Returns
The integer value of this property for this widget.

Definition at line 563 of file theme.c.

References _PropertyValue::i, _widget::name, P_INHERIT, P_INTEGER, _widget::parent, rofi_theme_find_property(), rofi_theme_find_widget(), rofi_theme_get_integer(), _widget::state, Property::type, and Property::value.

Referenced by icon_create(), listview_create(), rofi_theme_get_integer(), and rofi_view_add_widget().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_get_list()

GList* rofi_theme_get_list ( const widget widget,
const char *  property,
const char *  defaults 
)
Parameters
widgetThe widget to query
propertyThe property to query.
defaultsThe default value.

Obtain list of elements (strings) of the widget.

Returns
a GList holding the names in the list of this property for this widget.

Definition at line 722 of file theme.c.

References _PropertyValue::list, _widget::name, P_INHERIT, P_LIST, _widget::parent, rofi_g_list_strdup(), rofi_theme_find_property(), rofi_theme_find_widget(), rofi_theme_get_list(), _widget::state, Property::type, and Property::value.

Referenced by rofi_theme_get_list(), rofi_view_add_widget(), and rofi_view_create().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_get_orientation()

RofiOrientation rofi_theme_get_orientation ( const widget widget,
const char *  property,
RofiOrientation  def 
)
Parameters
widgetThe widget to query
propertyThe property to query.
defThe default value.

Obtain the orientation indicated by property of the widget.

Returns
The orientation of this property for this widget or def not found.

Definition at line 617 of file theme.c.

References _PropertyValue::b, _widget::name, P_INHERIT, P_ORIENTATION, _widget::parent, rofi_theme_find_property(), rofi_theme_find_widget(), rofi_theme_get_orientation(), _widget::state, Property::type, and Property::value.

Referenced by box_create(), listview_create(), and rofi_theme_get_orientation().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_get_padding()

RofiPadding rofi_theme_get_padding ( const widget widget,
const char *  property,
RofiPadding  pad 
)
Parameters
widgetThe widget to query
propertyThe property to query.
padThe default value.

Obtain the padding of the widget.

Returns
The padding of this property for this widget.

Definition at line 699 of file theme.c.

References _PropertyValue::i, _widget::name, P_INHERIT, P_PADDING, _PropertyValue::padding, _widget::parent, ROFI_HL_SOLID, ROFI_PU_PX, rofi_theme_find_property(), rofi_theme_find_widget(), rofi_theme_get_padding(), _widget::state, Property::type, and Property::value.

Referenced by rofi_theme_get_padding(), widget_init(), and widget_set_state().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_get_position()

int rofi_theme_get_position ( const widget widget,
const char *  property,
int  def 
)
Parameters
widgetThe widget to query
propertyThe property to query.
defThe default value.

Obtain the position of the widget.

Returns
The position value of this property for this widget.

Definition at line 546 of file theme.c.

References _PropertyValue::i, _widget::name, P_INHERIT, P_POSITION, _widget::parent, rofi_theme_find_property(), rofi_theme_find_widget(), rofi_theme_get_position(), _widget::state, Property::type, and Property::value.

Referenced by rofi_theme_get_position(), and rofi_view_calculate_window_position().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_get_string()

const char* rofi_theme_get_string ( const widget widget,
const char *  property,
const char *  def 
)
Parameters
widgetThe widget to query
propertyThe property to query.
defThe default value.

Obtain the string of the widget.

Returns
The string value of this property for this widget.

Definition at line 634 of file theme.c.

References _widget::name, P_INHERIT, P_STRING, _widget::parent, rofi_theme_find_property(), rofi_theme_find_widget(), rofi_theme_get_string(), _PropertyValue::s, _widget::state, Property::type, and Property::value.

Referenced by __create_window(), icon_create(), rofi_theme_get_string(), textbox_create(), and textbox_initialize_font().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_is_empty()

gboolean rofi_theme_is_empty ( void  )

Checks if a theme is set, or is empty.

Returns
TRUE when empty.

Definition at line 799 of file theme.c.

References ThemeWidget::num_widgets, ThemeWidget::properties, and rofi_theme.

Referenced by main().

Here is the caller graph for this function:

◆ rofi_theme_parse_prepare_file()

char* rofi_theme_parse_prepare_file ( const char *  file,
const char *  parent_file 
)
Parameters
fileFile name to prepare.
parent_fileFilename of parent file.

Tries to find full path relative to parent file.

Returns
full path to file.

Definition at line 950 of file theme.c.

References rofi_expand_path().

Here is the call graph for this function:

◆ rofi_theme_print()

void rofi_theme_print ( ThemeWidget widget)
Parameters
widgetThe widget handle.

Print out the widget to the commandline.

Definition at line 352 of file theme.c.

References rofi_theme_print_index().

Referenced by main().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_print_distance()

static void rofi_theme_print_distance ( RofiDistance  d)
static

Definition at line 160 of file theme.c.

References RofiDistance::distance, printf_double(), ROFI_HL_DASH, ROFI_PU_PERCENT, ROFI_PU_PX, RofiDistance::style, and RofiDistance::type.

Referenced by int_rofi_theme_print_property().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_print_index()

static void rofi_theme_print_index ( ThemeWidget widget)
static

Definition at line 301 of file theme.c.

References Property::name, ThemeWidget::name, ThemeWidget::parent, and rofi_theme_print_property_index().

Referenced by rofi_theme_print().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_print_property_index()

static void rofi_theme_print_property_index ( size_t  pnl,
int  depth,
Property p 
)
static

Definition at line 292 of file theme.c.

References depth, int_rofi_theme_print_property(), and Property::name.

Referenced by rofi_theme_print_index().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_property_copy()

Property* rofi_theme_property_copy ( Property p)
Parameters
pThe property to free.
Returns
a copy of p

Definition at line 83 of file theme.c.

References _PropertyValue::def_value, _PropertyValue::link, _PropertyValue::list, _PropertyValue::name, Property::name, P_LINK, P_LIST, P_STRING, _PropertyValue::ref, rofi_g_list_strdup(), rofi_theme_property_copy(), rofi_theme_property_create(), _PropertyValue::s, Property::type, and Property::value.

Referenced by rofi_theme_copy_property_int(), and rofi_theme_property_copy().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_property_create()

Property* rofi_theme_property_create ( PropertyType  type)

Properties

Definition at line 77 of file theme.c.

References Property::type.

Referenced by rofi_theme_property_copy().

Here is the caller graph for this function:

◆ rofi_theme_property_free()

void rofi_theme_property_free ( Property p)
Parameters
pThe property to free.

Free the content of the property.

Definition at line 109 of file theme.c.

References _PropertyValue::def_value, _PropertyValue::link, _PropertyValue::name, Property::name, P_LINK, P_STRING, rofi_theme_property_free(), _PropertyValue::s, Property::type, and Property::value.

Referenced by rofi_theme_property_free(), and rofi_theme_widget_add_properties().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rofi_theme_reset()

void rofi_theme_reset ( void  )

Reset the current theme.

Definition at line 127 of file theme.c.

References ThemeWidget::name, rofi_theme, and rofi_theme_free().

Here is the call graph for this function:

◆ rofi_theme_resolve_link_property()

static void rofi_theme_resolve_link_property ( Property p,
int  depth 
)
static

◆ rofi_theme_widget_add_properties()

void rofi_theme_widget_add_properties ( ThemeWidget widget,
GHashTable *  table 
)
Parameters
widgetThe widget handle.
tableHashTable containing properties set.

Merge properties with widgets current property.

Definition at line 408 of file theme.c.

References rofi_theme_copy_property_int(), and rofi_theme_property_free().

Here is the call graph for this function:

◆ yyerror()

void yyerror ( YYLTYPE *  yylloc,
const char *  what,
const char *  s 
)
Parameters
yyllocThe file location.
whatWhat we are parsing, filename or string.
sError message string.

Error handler for the lex parser.

Definition at line 382 of file theme.c.

References rofi_add_error_message().

Here is the call graph for this function:

◆ yylex_destroy()

void yylex_destroy ( void  )

Destroy the internal of lex parser.

◆ yyparse()

int yyparse ( )

Main lex parser.

Variable Documentation

◆ WindowLocationStr

const char* const WindowLocationStr[9]
Initial value:
= {
"center",
"northwest",
"north",
"northeast",
"east",
"southeast",
"south",
"southwest",
"west"
}

Textual representation of Window Location

Definition at line 178 of file theme.c.

Referenced by int_rofi_theme_print_property().

◆ yyin

FILE* yyin

Global handle input file to flex parser.