/* -*-c-*- */

#ifndef FVWM_STYLE_H
#define FVWM_STYLE_H

#include "fvwm.h"
#include "update.h"

/* access to the special flags of a style */
/* call these with a pointer to a style_flags struct */
#define SDO_DECORATE_TRANSIENT(sf) \
	((sf)->do_decorate_transient)
#define SDO_SAVE_UNDER(sf) \
	((sf)->do_save_under)
#define SDO_START_LOWERED(sf) \
	((sf)->do_start_lowered)
#define SDO_START_SHADED(sf) \
	((sf)->do_start_shaded)
#define SHAS_BORDER_WIDTH(sf) \
	((sf)->has_border_width)
#define SHAS_HANDLE_WIDTH(sf) \
	((sf)->has_handle_width)
#define SHAS_CORNER_LENGTH(sf) \
	((sf)->has_corner_length)
#define SHAS_ICON(sf) \
	((sf)->has_icon)
#define SHAS_ICON_BOXES(sf) \
	((sf)->has_icon_boxes)
#define SHAS_ICON_SIZE_LIMITS(sf) \
	((sf)->has_icon_size_limits)
#define SHAS_ICON_BACKGROUND_PADDING(sf) \
	((sf)->has_icon_background_padding)
#define SHAS_ICON_BACKGROUND_RELIEF(sf) \
	((sf)->has_icon_background_relief)
#define SHAS_ICON_TITLE_RELIEF(sf) \
	((sf)->has_icon_title_relief)
#define SHAS_MIN_WINDOW_SIZE(sf) \
	((sf)->has_min_window_size)
#define SHAS_MAX_WINDOW_SIZE(sf) \
	((sf)->has_max_window_size)
#define SHAS_WINDOW_SHADE_STEPS(sf) \
	((sf)->has_window_shade_steps)
#define SHAS_MINI_ICON(sf) \
	((sf)->has_mini_icon)
#define SHAS_MWM_DECOR(sf) \
	((sf)->has_mwm_decor)
#define SHAS_MWM_FUNCTIONS(sf) \
	((sf)->has_mwm_functions)
#define SHAS_NO_HANDLES(sf) \
	((sf)->has_no_handles)
#define SHAS_NO_TITLE(sf) \
	((sf)->has_no_title)
#define SHAS_OL_DECOR(sf) \
	((sf)->has_ol_decor)
#define SIS_BUTTON_DISABLED(sf) \
	((sf)->is_button_disabled)
#define SIS_UNMANAGED(sf) \
	((sf)->is_unmanaged)
#define SPLACEMENT_MODE(sf) \
	((sf)->placement_mode)
#define SEWMH_PLACEMENT_MODE(sf) \
	((sf)->ewmh_placement_mode)
#define SUSE_BACKING_STORE(sf) \
	((sf)->use_backing_store)
#define SUSE_PARENT_RELATIVE(sf) \
	((sf)->use_parent_relative)
#define SUSE_COLORSET(sf) \
	((sf)->use_colorset)
#define SUSE_COLORSET_HI(sf) \
	((sf)->use_colorset_hi)
#define SUSE_BORDER_COLORSET(sf) \
	((sf)->use_border_colorset)
#define SUSE_BORDER_COLORSET_HI(sf) \
	((sf)->use_border_colorset_hi)
#define SUSE_ICON_TITLE_COLORSET(sf) \
	((sf)->use_icon_title_colorset)
#define SUSE_ICON_TITLE_COLORSET_HI(sf) \
	((sf)->use_icon_title_colorset_hi)
#define SUSE_ICON_BACKGROUND_COLORSET(sf) \
	((sf)->use_icon_background_colorset)
#define SUSE_LAYER(sf) \
	((sf)->use_layer)
#define SUSE_NO_PPOSITION(sf) \
	((sf)->use_no_pposition)
#define SUSE_NO_USPOSITION(sf) \
	((sf)->use_no_usposition)
#define SUSE_NO_TRANSIENT_PPOSITION(sf) \
	((sf)->use_no_transient_pposition)
#define SUSE_NO_TRANSIENT_USPOSITION(sf) \
	((sf)->use_no_transient_usposition)
#define SUSE_START_ON_DESK(sf) \
	((sf)->use_start_on_desk)
#define SUSE_START_ON_PAGE_FOR_TRANSIENT(sf) \
	((sf)->use_start_on_page_for_transient)
#define SUSE_START_ON_SCREEN(sf) \
	((sf)->use_start_on_screen)
#define SMANUAL_PLACEMENT_HONORS_STARTS_ON_PAGE(sf) \
	((sf)->manual_placement_honors_starts_on_page)
#define SCAPTURE_HONORS_STARTS_ON_PAGE(sf) \
	((sf)->capture_honors_starts_on_page)
#define SRECAPTURE_HONORS_STARTS_ON_PAGE(sf) \
	((sf)->recapture_honors_starts_on_page)
#define SHAS_PLACEMENT_PENALTY(sf) \
	((sf)->has_placement_penalty)
#define SHAS_PLACEMENT_PERCENTAGE_PENALTY(sf) \
	((sf)->has_placement_percentage_penalty)
#define SHAS_PLACEMENT_POSITION_STRING(sf) \
	((sf)->has_placement_position_string
#define SCR_MOTION_METHOD(sf) \
	((sf)->ws_cr_motion_method)

/* access the various copies of the common flags structure. */
#define SCF(st) \
	((st).flags.common)
#define SCFS(st) \
	((st).flags.common.s)
#define SCM(st) \
	((st).flag_mask.common)
#define SCMS(st) \
	((st).flag_mask.common.s)
#define SCD(st) \
	((st).flag_default.common)
#define SCDS(st) \
	((st).flag_default.common.s)
#define SCC(st) \
	((st).change_mask.common)
#define SCCS(st) \
	((st).change_mask.common.s)
#define SFC(sf) \
	((sf).common)

/* access to common flags */
#define S_FOCUS_POLICY(c) \
	((c).s.focus_policy)
#define S_TITLE_DIR(c) \
	((c).title_dir)
#define S_SET_TITLE_DIR(c,x) \
	((c).title_dir = (x))
#define S_USER_STATES(c) \
	((c).user_states)
#define S_SET_USER_STATES(c,x) \
	((c).user_states = (x))
#define S_ADD_USER_STATES(c,x) \
	((c).user_states = ((c).user_states | (x)))
#define S_IS_STICKY_ACROSS_PAGES(c) \
	((c).is_sticky_across_pages)
#define S_SET_IS_STICKY_ACROSS_PAGES(c,x) \
	((c).is_sticky_across_pages = !!(x))
#define S_IS_STICKY_ACROSS_DESKS(c) \
	((c).is_sticky_across_desks)
#define S_SET_IS_STICKY_ACROSS_DESKS(c,x) \
	((c).is_sticky_across_desks = !!(x))
#define S_DO_CIRCULATE_SKIP(c) \
	((c).s.do_circulate_skip)
#define S_SET_DO_CIRCULATE_SKIP(c,x) \
	((c).s.do_circulate_skip = !!(x))
#define S_DO_CIRCULATE_SKIP_ICON(c) \
	((c).s.do_circulate_skip_icon)
#define S_SET_DO_CIRCULATE_SKIP_ICON(c,x) \
	((c).s.do_circulate_skip_icon = !!(x))
#define S_DO_CIRCULATE_SKIP_SHADED(c) \
	((c).s.do_circulate_skip_shaded)
#define S_SET_DO_CIRCULATE_SKIP_SHADED(c,x) \
	((c).s.do_circulate_skip_shaded = !!(x))
#define S_DO_ICONIFY_WINDOW_GROUPS(c) \
	((c).s.do_iconify_window_groups)
#define S_SET_DO_ICONIFY_WINDOW_GROUPS(c,x) \
	((c).s.do_iconify_window_groups = !!(x))
#define S_DO_IGNORE_ICON_BOXES(c) \
	((c).s.do_ignore_icon_boxes)
#define S_SET_DO_IGNORE_ICON_BOXES(c,x) \
	((c).s.do_ignore_icon_boxes = !!(x))
#define S_DO_IGNORE_RESTACK(c) \
	((c).s.do_ignore_restack)
#define S_SET_DO_IGNORE_RESTACK(c,x) \
	((c).s.do_ignore_restack = !!(x))
#define S_DO_USE_WINDOW_GROUP_HINT(c) \
	((c).s.do_use_window_group_hint)
#define S_SET_DO_USE_WINDOW_GROUP_HINT(c,x) \
	((c).s.do_use_window_group_hint = !!(x))
#define S_DO_LOWER_TRANSIENT(c) \
	((c).s.do_lower_transient)
#define S_SET_DO_LOWER_TRANSIENT(c,x) \
	((c).s.do_lower_transient = !!(x))
#define S_DO_NOT_SHOW_ON_MAP(c) \
	((c).s.do_not_show_on_map)
#define S_SET_DO_NOT_SHOW_ON_MAP(c,x) \
	((c).s.do_not_show_on_map = !!(x))
#define S_DO_RAISE_TRANSIENT(c) \
	((c).s.do_raise_transient)
#define S_SET_DO_RAISE_TRANSIENT(c,x) \
	((c).s.do_raise_transient = !!(x))
#define S_DO_RESIZE_OPAQUE(c) \
	((c).s.do_resize_opaque)
#define S_SET_DO_RESIZE_OPAQUE(c,x) \
	((c).s.do_resize_opaque = !!(x))
#define S_DO_SHRINK_WINDOWSHADE(c) \
	((c).s.do_shrink_windowshade)
#define S_SET_DO_SHRINK_WINDOWSHADE(c,x) \
	((c).s.do_shrink_windowshade = !!(x))
#define S_DO_STACK_TRANSIENT_PARENT(c) \
	((c).s.do_stack_transient_parent)
#define S_SET_DO_STACK_TRANSIENT_PARENT(c,x) \
	((c).s.do_stack_transient_parent = !!(x))
#define S_DO_WINDOW_LIST_SKIP(c) \
	((c).s.do_window_list_skip)
#define S_SET_DO_WINDOW_LIST_SKIP(c,x) \
	((c).s.do_window_list_skip = !!(x))
#define S_HAS_NO_BORDER(c) \
	((c).has_no_border)
#define S_SET_HAS_NO_BORDER(c,x) \
	((c).has_no_border = !!(x))
#define S_HAS_DEPRESSABLE_BORDER(c) \
	((c).s.has_depressable_border)
#define S_SET_HAS_DEPRESSABLE_BORDER(c,x) \
	((c).s.has_depressable_border = !!(x))
#define S_HAS_ICON_FONT(c) \
	((c).has_icon_font)
#define S_SET_HAS_ICON_FONT(c,x) \
	((c).has_icon_font = !!(x))
#define S_HAS_MWM_BORDER(c) \
	((c).s.has_mwm_border)
#define S_SET_HAS_MWM_BORDER(c,x) \
	((c).s.has_mwm_border = !!(x))
#define S_HAS_MWM_BUTTONS(c) \
	((c).s.has_mwm_buttons)
#define S_SET_HAS_MWM_BUTTONS(c,x) \
	((c).s.has_mwm_buttons = !!(x))
#define S_HAS_MWM_OVERRIDE(c) \
	((c).s.has_mwm_override)
#define S_SET_HAS_MWM_OVERRIDE(c,x) \
	((c).s.has_mwm_override = !!(x))
#define S_HAS_NO_STICKY_STIPPLED_ICON_TITLE(c) \
	((c).s.has_no_sticky_stippled_icon_title)
#define S_SET_HAS_NO_STICKY_STIPPLED_ICON_TITLE(c,x) \
	((c).s.has_no_sticky_stippled_icon_title = !!(x))
#define S_HAS_NO_ICON_TITLE(c) \
	((c).s.has_no_icon_title)
#define S_SET_HAS_NO_ICON_TITLE(c,x) \
	((c).s.has_no_icon_title = !!(x))
#define S_HAS_OVERRIDE_SIZE(c) \
	((c).s.has_override_size)
#define S_SET_HAS_OVERRIDE_SIZE(c,x) \
	((c).s.has_override_size = !!(x))
#define S_HAS_STIPPLED_TITLE(c) \
	((c).s.has_stippled_title)
#define S_SET_HAS_STIPPLED_TITLE(c,x) \
	((c).s.has_stippled_title = !!(x))
#define S_HAS_NO_STICKY_STIPPLED_TITLE(c) \
	((c).s.has_no_sticky_stippled_title)
#define S_SET_HAS_NO_STICKY_STIPPLED_TITLE(c,x) \
	((c).s.has_no_sticky_stippled_title = !!(x))
#define S_HAS_STIPPLED_ICON_TITLE(c) \
	((c).s.has_stippled_icon_title)
#define S_SET_HAS_STIPPLED_ICON_TITLE(c,x) \
	((c).s.has_stippled_icon_title = !!(x))
#define S_HAS_WINDOW_FONT(c) \
	((c).has_window_font)
#define S_SET_HAS_WINDOW_FONT(c,x) \
	((c).has_window_font = !!(x))
#define S_ICON_OVERRIDE(c) \
	((c).s.icon_override)
#define S_SET_ICON_OVERRIDE(c,x) \
	((c).s.icon_override = (x))
#define S_IS_BOTTOM_TITLE_ROTATED(c) \
	((c).s.is_bottom_title_rotated)
#define S_SET_IS_BOTTOM_TITLE_ROTATED(c,x) \
	((c).s.is_bottom_title_rotated = !!(x))
#define S_IS_FIXED(c) \
	((c).s.is_fixed)
#define S_SET_IS_FIXED(c,x) \
	((c).s.is_fixed = !!(x))
#define S_IS_FIXED_PPOS(c) \
	((c).s.is_fixed_ppos)
#define S_SET_IS_FIXED_PPOS(c,x) \
	((c).s.is_fixed_ppos = !!(x))
#define S_SET_IS_UNICONIFIABLE(c,x) \
	((c).s.is_uniconifiable = !!(x))
#define S_SET_IS_UNMAXIMIZABLE(c,x) \
	((c).s.is_unmaximizable = !!(x))
#define S_SET_IS_UNCLOSABLE(c,x) \
	((c).s.is_unclosable = !!(x))
#define S_SET_MAXIMIZE_FIXED_SIZE_DISALLOWED(c,x) \
	((c).s.is_maximize_fixed_size_disallowed = !!(x))
#define S_IS_ICON_STICKY_ACROSS_PAGES(c) \
	((c).s.is_icon_sticky_across_pages)
#define S_SET_IS_ICON_STICKY_ACROSS_PAGES(c,x) \
	((c).s.is_icon_sticky_across_pages = !!(x))
#define S_IS_ICON_STICKY_ACROSS_DESKS(c) \
	((c).s.is_icon_sticky_across_desks)
#define S_SET_IS_ICON_STICKY_ACROSS_DESKS(c,x) \
	((c).s.is_icon_sticky_across_desks = !!(x))
#define S_IS_ICON_SUPPRESSED(c) \
	((c).s.is_icon_suppressed)
#define S_SET_IS_ICON_SUPPRESSED(c,x) \
	((c).s.is_icon_suppressed = !!(x))
#define S_IS_LEFT_TITLE_ROTATED_CW(c) \
	((c).s.is_left_title_rotated_cw)
#define S_SET_IS_LEFT_TITLE_ROTATED_CW(c,x) \
	((c).s.is_left_title_rotated_cw = !!(x))
#define S_IS_SIZE_FIXED(c) \
	((c).s.is_size_fixed)
#define S_SET_IS_SIZE_FIXED(c,x) \
	((c).s.is_size_fixed = !!(x))
#define S_IS_PSIZE_FIXED(c) \
	((c).s.is_psize_fixed)
#define S_SET_IS_PSIZE_FIXED(c,x) \
	((c).s.is_psize_fixed = !!(x))
#define S_IS_RIGHT_TITLE_ROTATED_CW(c) \
	((c).s.is_right_title_rotated_cw)
#define S_SET_IS_RIGHT_TITLE_ROTATED_CW(c,x) \
	((c).s.is_right_title_rotated_cw = !!(x))
#define S_IS_TOP_TITLE_ROTATED(c) \
	((c).s.is_top_title_rotated)
#define S_SET_IS_TOP_TITLE_ROTATED(c,x) \
	((c).s.is_top_title_rotated = !!(x))
#define S_USE_ICON_POSITION_HINT(c) \
	((c).s.use_icon_position_hint)
#define S_SET_USE_ICON_POSITION_HINT(c,x) \
	((c).s.use_icon_position_hint = !!(x))
#define S_USE_INDEXED_WINDOW_NAME(c) \
	((c).s.use_indexed_window_name)
#define S_SET_USE_INDEXED_WINDOW_NAME(c,x) \
	((c).s.use_indexed_window_name = !!(x))
#define S_USE_INDEXED_ICON_NAME(c) \
	((c).s.use_indexed_icon_name)
#define S_SET_USE_INDEXED_ICON_NAME(c,x) \
	((c).s.use_indexed_icon_name = !!(x))
#define S_WINDOWSHADE_LAZINESS(c) \
	((c).s.windowshade_laziness)
#define S_SET_WINDOWSHADE_LAZINESS(c,x) \
	((c).s.windowshade_laziness = (x))
#define S_USE_TITLE_DECOR_ROTATION(c) \
	((c).s.use_title_decor_rotation)
#define S_SET_USE_TITLE_DECOR_ROTATION(c,x) \
	((c).s.use_title_decor_rotation = !!(x))
#define S_DO_EWMH_MINI_ICON_OVERRIDE(c) \
	((c).s.do_ewmh_mini_icon_override)
#define S_SET_DO_EWMH_MINI_ICON_OVERRIDE(c,x) \
	((c).s.do_ewmh_mini_icon_override = !!(x))
#define S_DO_EWMH_DONATE_ICON(c) \
	((c).s.do_ewmh_donate_icon)
#define S_SET_DO_EWMH_DONATE_ICON(c,x) \
	((c).s.do_ewmh_donate_icon = !!(x))
#define S_DO_EWMH_DONATE_MINI_ICON(c) \
	((c).s.do_ewmh_donate_mini_icon)
#define S_SET_DO_EWMH_DONATE_MINI_ICON(c,x) \
	((c).s.do_ewmh_donate_mini_icon = !!(x))
#define S_DO_EWMH_USE_STACKING_HINTS(c) \
	((c).s.do_ewmh_use_stacking_hints)
#define S_SET_DO_EWMH_USE_STACKING_HINTS(c,x) \
	((c).s.do_ewmh_use_stacking_hints = !!(x))
#define S_DO_EWMH_IGNORE_STRUT_HINTS(c) \
	((c).s.do_ewmh_ignore_strut_hints)
#define S_SET_DO_EWMH_IGNORE_STRUT_HINTS(c,x) \
	((c).s.do_ewmh_ignore_strut_hints = !!(x))
#define S_DO_EWMH_IGNORE_STATE_HINTS(c) \
	((c).s.do_ewmh_ignore_state_hints)
#define S_SET_DO_EWMH_IGNORE_STATE_HINTS(c,x) \
	((c).s.do_ewmh_ignore_state_hints = !!(x))
#define S_DO_EWMH_IGNORE_WINDOW_TYPE(c) \
	((c).s.do_ewmh_ignore_window_type)
#define S_SET_DO_EWMH_IGNORE_WINDOW_TYPE(c,x) \
	((c).s.do_ewmh_ignore_window_type = !!(x))
#define S_EWMH_MAXIMIZE_MODE(c) \
	((c).s.ewmh_maximize_mode)
#define S_SET_EWMH_MAXIMIZE_MODE(c,x) \
	((c).s.ewmh_maximize_mode = (x))

#define SID_GET_RESOURCE(id) \
	((id).resource)
#define SID_SET_RESOURCE(id,x) \
	((id).resource = (x))
#define SID_GET_CLASS(id) \
	((id).class)
#define SID_SET_CLASS(id,x) \
	((id).class = (x))
#define SID_GET_ICON(id) \
	((id).icon)
#define SID_SET_ICON(id,x) \
	((id).icon = (x))
#define SID_GET_NAME(id) \
	((id).name)
#define SID_SET_NAME(id,x) \
	((id).name = (x))
#define SID_GET_WINDOW_ID(id) \
	((id).window_id)
#define SID_SET_WINDOW_ID(id,x) \
	((id).window_id = (x))
#define SID_SET_IS_COMPATIBILITY_MODE(id,x) \
        ((id).flags.is_compatibility_mode = !!(x))
#define SID_GET_IS_COMPATIBILITY_MODE(id) \
        ((id).flags.is_compatibility_mode)

/* access to style_id */
#define SID_GET_NAME(id) \
	((id).name)
#define SID_SET_NAME(id,x) \
	((id).name = (x))
#define SID_GET_WINDOW_ID(id) \
	((id).window_id)
#define SID_SET_WINDOW_ID(id,x) \
	((id).window_id = (x))
#define SID_SET_HAS_NAME(id,x) \
	((id).flags.has_name = !!(x))
#define SID_GET_HAS_NAME(id) \
	((id).flags.has_name)
#define SID_SET_HAS_WINDOW_ID(id,x) \
	((id).flags.has_window_id = !!(x))
#define SID_GET_HAS_WINDOW_ID(id) \
	((id).flags.has_window_id)
#define SID_GET_HAS_RESOURCE(id) \
	((id).flags.has_resource)
#define SID_SET_HAS_RESOURCE(id,x) \
	((id).flags.has_resource = (x))
#define SID_GET_HAS_CLASS(id) \
	((id).flags.has_class)
#define SID_SET_HAS_CLASS(id,x) \
	((id).flags.has_class = (x))
#define SID_GET_HAS_ICON(id) \
	((id).flags.has_icon)
#define SID_SET_HAS_ICON(id,x) \
	((id).flags.has_icon = (x))

/* access to other parts of a style (call with the style itself) */
#define SGET_NEXT_STYLE(s) \
	((s).next)
#define SSET_NEXT_STYLE(s,x) \
	((s).next = (x))
#define SGET_PREV_STYLE(s) \
	((s).prev)
#define SSET_PREV_STYLE(s,x) \
	((s).prev = (x))
#define SGET_ID(s) \
	((s).id)
#define SGET_NAME(s) \
	SID_GET_NAME(SGET_ID(s))
#define SSET_NAME(s,x) \
	SID_SET_NAME(SGET_ID(s),x)
#define SGET_WINDOW_ID(s) \
	SID_GET_WINDOW_ID(SGET_ID(s))
#define SSET_WINDOW_ID(s,x) \
	SID_SET_WINDOW_ID(SGET_ID(s),x)
#define SSET_ID_HAS_NAME(s,x) \
        SID_SET_HAS_NAME(SGET_ID(s), x)
#define SGET_ID_HAS_NAME(s) \
	SID_GET_HAS_NAME(SGET_ID(s))
#define SSET_ID_HAS_WINDOW_ID(s,x) \
	SID_SET_HAS_WINDOW_ID(SGET_ID(s),x)
#define SGET_ID_HAS_WINDOW_ID(s) \
	SID_GET_HAS_WINDOW_ID(SGET_ID(s))
#define SGET_ICON_NAME(s) \
	((s).icon_name)
#define SSET_ICON_NAME(s,x) \
	((s).icon_name = (x))
#define SGET_MINI_ICON_NAME(s) \
	((s).mini_icon_name)
#define SSET_MINI_ICON_NAME(s,x) \
	((s).mini_icon_name = (x))
#define SGET_DECOR_NAME(s) \
	((s).decor_name)
#define SSET_DECOR_NAME(s,x) \
	((s).decor_name = (x))
#define SGET_ICON_FONT(s) \
	((s).icon_font)
#define SSET_ICON_FONT(s,x) \
	((s).icon_font = (x))
#define SGET_WINDOW_FONT(s) \
	((s).window_font)
#define SSET_WINDOW_FONT(s,x) \
	((s).window_font = (x))
#define SGET_COLORSET(s) \
	((s).colorset)
#define SSET_COLORSET(s,x) \
	((s).colorset = (x))
#define SGET_COLORSET_HI(s) \
	((s).colorset_hi)
#define SSET_COLORSET_HI(s,x) \
	((s).colorset_hi = (x))
#define SSET_BORDER_COLORSET(s,p,x) \
	((s).border_colorset[(p)] = (x))
#define SGET_BORDER_COLORSET(s, p) \
	((s).border_colorset[(p)])
#define SGET_BORDER_COLORSET_HI(s,p) \
	((s).border_colorset_hi[(p)])
#define SSET_BORDER_COLORSET_HI(s,p,x) \
	((s).border_colorset_hi[(p)] = (x))
#define SSET_ICON_TITLE_COLORSET(s,x) \
        ((s).icon_title_colorset = (x))
#define SGET_ICON_TITLE_COLORSET(s) \
	((s).icon_title_colorset)
#define SSET_ICON_TITLE_COLORSET_HI(s,x) \
	((s).icon_title_colorset_hi = (x))
#define SGET_ICON_TITLE_COLORSET_HI(s) \
	((s).icon_title_colorset_hi)
#define SSET_ICON_BACKGROUND_COLORSET(s,x) \
	((s).icon_background_colorset = (x))
#define SGET_ICON_BACKGROUND_COLORSET(s) \
	((s).icon_background_colorset)
#define SGET_FLAGS_POINTER(s) \
	(&((s).flags))
#define SGET_BORDER_WIDTH(s) \
	((s).border_width)
#define SSET_BORDER_WIDTH(s,x) \
	((s).border_width = (x))
#define SGET_HANDLE_WIDTH(s) \
	((s).handle_width)
#define SSET_HANDLE_WIDTH(s,x) \
	((s).handle_width = (x))
#define SGET_CORNER_LENGTH(s) \
	((s).corner_length)
#define SSET_CORNER_LENGTH(s,x) \
	((s).corner_length = (x))
#define SGET_LAYER(s) \
	((s).layer)
#define SSET_LAYER(s,x) \
	((s).layer = (x))
#define SGET_START_DESK(s) \
	((s).start_desk)
#define SSET_START_DESK(s,x) \
	((s).start_desk = (x))
#define SGET_START_PAGE_X(s) \
	((s).start_page_x)
#define SSET_START_PAGE_X(s,x) \
	((s).start_page_x = (x))
#define SGET_START_PAGE_Y(s) \
	((s).start_page_y)
#define SSET_START_PAGE_Y(s,x) \
	((s).start_page_y = (x))
#define SGET_START_SCREEN(s) \
	((s).start_screen)
#define SSET_START_SCREEN(s,x) \
	((s).start_screen = (x))
#define SSET_STARTS_SHADED_DIR(s,x) \
	((s).flags.start_shaded_dir = (x))
#define SGET_STARTS_SHADED_DIR(s)		\
	((s).flags.start_shaded_dir)
#define SGET_MIN_ICON_WIDTH(s) \
	((s).min_icon_width)
#define SSET_MIN_ICON_WIDTH(s,x) \
	((s).min_icon_width = (x))
#define SGET_MIN_ICON_HEIGHT(s) \
	((s).min_icon_height)
#define SSET_MIN_ICON_HEIGHT(s,x) \
	((s).min_icon_height = (x))
#define SGET_MAX_ICON_WIDTH(s) \
	((s).max_icon_width)
#define SSET_MAX_ICON_WIDTH(s,x) \
	((s).max_icon_width = (x))
#define SGET_MAX_ICON_HEIGHT(s) \
	((s).max_icon_height)
#define SSET_MAX_ICON_HEIGHT(s,x) \
	((s).max_icon_height = (x))
#define SGET_ICON_RESIZE_TYPE(s) \
	((s).icon_resize_type)
#define SSET_ICON_RESIZE_TYPE(s,x) \
	((s).icon_resize_type = (x))
#define SGET_ICON_BACKGROUND_RELIEF(s) \
	((s).icon_background_relief)
#define SSET_ICON_BACKGROUND_RELIEF(s,x) \
	((s).icon_background_relief = (x))
#define SGET_ICON_BACKGROUND_PADDING(s) \
	((s).icon_background_padding)
#define SSET_ICON_BACKGROUND_PADDING(s,x) \
	((s).icon_background_padding = (x))
#define SGET_ICON_TITLE_RELIEF(s) \
	((s).icon_title_relief)
#define SSET_ICON_TITLE_RELIEF(s,x) \
	((s).icon_title_relief = (x))
#define SGET_MIN_WINDOW_WIDTH(s) \
	((s).min_window_width)
#define SGET_MIN_WINDOW_WIDTH_IS_C(s) \
	((s).min_window_width_is_c)
#define SSET_MIN_WINDOW_WIDTH(s,x) \
	((s).min_window_width = (x))
#define SSET_MIN_WINDOW_WIDTH_IS_C(s,x) \
	((s).min_window_width_is_c = (x))
#define SGET_MAX_WINDOW_WIDTH(s) \
	((s).max_window_width)
#define SGET_MAX_WINDOW_WIDTH_IS_C(s) \
	((s).max_window_width_is_c)
#define SSET_MAX_WINDOW_WIDTH(s,x) \
	((s).max_window_width = (x))
#define SSET_MAX_WINDOW_WIDTH_IS_C(s,x) \
	((s).max_window_width_is_c = (x))
#define SGET_MIN_WINDOW_HEIGHT(s) \
	((s).min_window_height)
#define SGET_MIN_WINDOW_HEIGHT_IS_C(s) \
	((s).min_window_height_is_c)
#define SSET_MIN_WINDOW_HEIGHT(s,x) \
	((s).min_window_height = (x))
#define SSET_MIN_WINDOW_HEIGHT_IS_C(s,x) \
	((s).min_window_height_is_c = (x))
#define SGET_MAX_WINDOW_HEIGHT(s) \
	((s).max_window_height)
#define SGET_MAX_WINDOW_HEIGHT_IS_C(s) \
	((s).max_window_height_is_c)
#define SSET_MAX_WINDOW_HEIGHT(s,x) \
	((s).max_window_height = (x))
#define SSET_MAX_WINDOW_HEIGHT_IS_C(s,x) \
	((s).max_window_height_is_c = (x))
#define SGET_WINDOW_SHADE_STEPS(s) \
	((s).shade_anim_steps)
#define SSET_WINDOW_SHADE_STEPS(s,x) \
	((s).shade_anim_steps = (x))
#define SGET_SNAP_PROXIMITY(s) \
	((s).snap_attraction.proximity)
#define SSET_SNAP_PROXIMITY(s,x) \
	((s).snap_attraction.proximity = (x))
#define SGET_SNAP_MODE(s) \
	((s).snap_attraction.mode)
#define SSET_SNAP_MODE(s,x) \
	((s).snap_attraction.mode = (x))
#define SGET_SNAP_GRID_X(s) \
	((s).snap_grid_x)
#define SSET_SNAP_GRID_X(s,x) \
	((s).snap_grid_x = (x))
#define SGET_SNAP_GRID_Y(s) \
	((s).snap_grid_y)
#define SSET_SNAP_GRID_Y(s,x) \
	((s).snap_grid_y = (x))
#define SGET_EDGE_DELAY_MS_MOVE(s) \
	((s).edge_delay_ms_move)
#define SSET_EDGE_DELAY_MS_MOVE(s,x) \
	((s).edge_delay_ms_move = (x))
#define SGET_EDGE_DELAY_MS_RESIZE(s) \
	((s).edge_delay_ms_resize)
#define SSET_EDGE_DELAY_MS_RESIZE(s,x) \
	((s).edge_delay_ms_resize = (x))
#define SGET_EDGE_RESISTANCE_MOVE(s) \
	((s).edge_resistance_move)
#define SSET_EDGE_RESISTANCE_MOVE(s,x) \
	((s).edge_resistance_move = (x))
#define SGET_EDGE_RESISTANCE_SCREEN_MOVE(s) \
	((s).edge_resistance_screen_move)
#define SSET_EDGE_RESISTANCE_SCREEN_MOVE(s,x) \
	((s).edge_resistance_screen_move = (x))
#define SGET_ICON_BOXES(s) \
	((s).icon_boxes)
#define SSET_ICON_BOXES(s,x) \
	((s).icon_boxes = (x))
#define SGET_PLACEMENT_PENALTY_PTR(s) \
	(&(s).pl_penalty)
#define SGET_NORMAL_PLACEMENT_PENALTY(s) \
	((s).pl_penalty.normal)
#define SGET_ONTOP_PLACEMENT_PENALTY(s) \
	((s).pl_penalty.ontop)
#define SGET_ICON_PLACEMENT_PENALTY(s) \
	((s).pl_penalty.icon)
#define SGET_STICKY_PLACEMENT_PENALTY(s) \
	((s).pl_penalty.sticky)
#define SGET_BELOW_PLACEMENT_PENALTY(s) \
	((s).pl_penalty.below)
#define SGET_EWMH_STRUT_PLACEMENT_PENALTY(s) \
	((s).pl_penalty.strut)
#define SSET_NORMAL_PLACEMENT_PENALTY(s,x) \
	((s).pl_penalty.normal = (x))
#define SSET_ONTOP_PLACEMENT_PENALTY(s,x) \
	((s).pl_penalty.ontop = (x))
#define SSET_ICON_PLACEMENT_PENALTY(s,x) \
	((s).pl_penalty.icon = (x))
#define SSET_STICKY_PLACEMENT_PENALTY(s,x) \
	((s).pl_penalty.sticky = (x))
#define SSET_BELOW_PLACEMENT_PENALTY(s,x) \
	((s).pl_penalty.below = (x))
#define SSET_EWMH_STRUT_PLACEMENT_PENALTY(s,x) \
	((s).pl_penalty.strut = (x))
#define SGET_PLACEMENT_PERCENTAGE_PENALTY_PTR(s) \
	(&(s).pl_percent_penalty)
#define SGET_99_PLACEMENT_PERCENTAGE_PENALTY(s) \
	((s).pl_percent_penalty.p99)
#define SGET_95_PLACEMENT_PERCENTAGE_PENALTY(s) \
	((s).pl_percent_penalty.p95)
#define SGET_85_PLACEMENT_PERCENTAGE_PENALTY(s) \
	((s).pl_percent_penalty.p85)
#define SGET_75_PLACEMENT_PERCENTAGE_PENALTY(s) \
	((s).pl_percent_penalty.p75)
#define SSET_99_PLACEMENT_PERCENTAGE_PENALTY(s,x) \
	((s).pl_percent_penalty.p99 = (x))
#define SSET_95_PLACEMENT_PERCENTAGE_PENALTY(s,x) \
	((s).pl_percent_penalty.p95 = (x))
#define SSET_85_PLACEMENT_PERCENTAGE_PENALTY(s,x) \
	((s).pl_percent_penalty.p85 = (x))
#define SSET_75_PLACEMENT_PERCENTAGE_PENALTY(s,x) \
	((s).pl_percent_penalty.p75 = (x))
#define SGET_PLACEMENT_POSITION_STRING(s) \
	((s).pl_position_string)
#define SSET_PLACEMENT_POSITION_STRING(s,x)	\
	((s).pl_position_string = (x))
#define SGET_INITIAL_MAP_COMMAND_STRING(s) \
	((s).initial_map_command_string)
#define SSET_INITIAL_MAP_COMMAND_STRING(s,x)	\
	((s).initial_map_command_string = (x))
#define SGET_TITLE_FORMAT_STRING(s) \
	((s).title_format_string)
#define SSET_TITLE_FORMAT_STRING(s,x) \
	((s).title_format_string = (x))
#define SGET_ICON_TITLE_FORMAT_STRING(s) \
	((s).icon_title_format_string)
#define SSET_ICON_TITLE_FORMAT_STRING(s,x) \
	((s).icon_title_format_string = (x))

/* access to style lists */
#define SLGET_NEXT_LIST(s) \
	((s).next)
#define SLSET_NEXT_LIST(s,x) \
	((s).next = (x))

/* function prototypes */
void lookup_style(FvwmWindow *fw, window_style *styles);
Bool blockcmpmask(char *blk1, char *blk2, char *mask, int length);
void check_window_style_change(
	FvwmWindow *t, update_win *flags, window_style *ret_style);
void reset_style_changes(void);
void update_style_colorset(int colorset);
void update_window_color_style(FvwmWindow *fw, window_style *style);
void update_window_color_hi_style(FvwmWindow *fw, window_style *style);
void update_icon_title_cs_style(FvwmWindow *fw, window_style *pstyle);
void update_icon_title_cs_hi_style(FvwmWindow *fw, window_style *pstyle);
void update_icon_background_cs_style(FvwmWindow *fw, window_style *pstyle);
void free_icon_boxes(icon_boxes *ib);
void style_destroy_style(style_id_t s_id);
void print_styles(int verbose);

#endif /* FVWM_STYLE_H */
