mirror of
https://github.com/brl/mutter.git
synced 2024-11-24 17:10:40 -05:00
theme: Add tiled_left/tiled_right frame states
It may be desirable for theme authors to treat side-by-side tiled windows differently, for instance to give the edge-touching border a width of 0, so add additional frame states for tiled windows. https://bugzilla.gnome.org/show_bug.cgi?id=637330
This commit is contained in:
parent
0a2bb1b71c
commit
ed99d12e8b
@ -28,6 +28,10 @@ New Features in Theme Format Version 3.3
|
|||||||
Add two additional button background functions - left_single_background and
|
Add two additional button background functions - left_single_background and
|
||||||
right_single_background - for button groups with just a single button.
|
right_single_background - for button groups with just a single button.
|
||||||
|
|
||||||
|
There are now additional frame states to style left/right tiled windows
|
||||||
|
differently ("tiled_left", "tiled_right", "tiled_left_and_shaded",
|
||||||
|
"tiled_right_and_shaded").
|
||||||
|
|
||||||
New Features in Theme Format Version 3.2
|
New Features in Theme Format Version 3.2
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
|
@ -291,6 +291,12 @@ meta_frame_get_flags (MetaFrame *frame)
|
|||||||
if (META_WINDOW_MAXIMIZED (frame->window))
|
if (META_WINDOW_MAXIMIZED (frame->window))
|
||||||
flags |= META_FRAME_MAXIMIZED;
|
flags |= META_FRAME_MAXIMIZED;
|
||||||
|
|
||||||
|
if (META_WINDOW_TILED_LEFT (frame->window))
|
||||||
|
flags |= META_FRAME_TILED_LEFT;
|
||||||
|
|
||||||
|
if (META_WINDOW_TILED_RIGHT (frame->window))
|
||||||
|
flags |= META_FRAME_TILED_RIGHT;
|
||||||
|
|
||||||
if (frame->window->fullscreen)
|
if (frame->window->fullscreen)
|
||||||
flags |= META_FRAME_FULLSCREEN;
|
flags |= META_FRAME_FULLSCREEN;
|
||||||
|
|
||||||
|
@ -413,6 +413,10 @@ struct _MetaWindowClass
|
|||||||
#define META_WINDOW_TILED_SIDE_BY_SIDE(w) ((w)->maximized_vertically && \
|
#define META_WINDOW_TILED_SIDE_BY_SIDE(w) ((w)->maximized_vertically && \
|
||||||
!(w)->maximized_horizontally && \
|
!(w)->maximized_horizontally && \
|
||||||
(w)->tile_mode != META_TILE_NONE)
|
(w)->tile_mode != META_TILE_NONE)
|
||||||
|
#define META_WINDOW_TILED_LEFT(w) (META_WINDOW_TILED_SIDE_BY_SIDE(w) && \
|
||||||
|
(w)->tile_mode == META_TILE_LEFT)
|
||||||
|
#define META_WINDOW_TILED_RIGHT(w) (META_WINDOW_TILED_SIDE_BY_SIDE(w) && \
|
||||||
|
(w)->tile_mode == META_TILE_RIGHT)
|
||||||
#define META_WINDOW_ALLOWS_MOVE(w) ((w)->has_move_func && !(w)->fullscreen)
|
#define META_WINDOW_ALLOWS_MOVE(w) ((w)->has_move_func && !(w)->fullscreen)
|
||||||
#define META_WINDOW_ALLOWS_RESIZE_EXCEPT_HINTS(w) ((w)->has_resize_func && !META_WINDOW_MAXIMIZED (w) && !META_WINDOW_TILED_SIDE_BY_SIDE(w) && !(w)->fullscreen && !(w)->shaded)
|
#define META_WINDOW_ALLOWS_RESIZE_EXCEPT_HINTS(w) ((w)->has_resize_func && !META_WINDOW_MAXIMIZED (w) && !META_WINDOW_TILED_SIDE_BY_SIDE(w) && !(w)->fullscreen && !(w)->shaded)
|
||||||
#define META_WINDOW_ALLOWS_RESIZE(w) (META_WINDOW_ALLOWS_RESIZE_EXCEPT_HINTS (w) && \
|
#define META_WINDOW_ALLOWS_RESIZE(w) (META_WINDOW_ALLOWS_RESIZE_EXCEPT_HINTS (w) && \
|
||||||
|
@ -47,7 +47,9 @@ typedef enum
|
|||||||
META_FRAME_ALLOWS_MOVE = 1 << 11,
|
META_FRAME_ALLOWS_MOVE = 1 << 11,
|
||||||
META_FRAME_FULLSCREEN = 1 << 12,
|
META_FRAME_FULLSCREEN = 1 << 12,
|
||||||
META_FRAME_IS_FLASHING = 1 << 13,
|
META_FRAME_IS_FLASHING = 1 << 13,
|
||||||
META_FRAME_ABOVE = 1 << 14
|
META_FRAME_ABOVE = 1 << 14,
|
||||||
|
META_FRAME_TILED_LEFT = 1 << 15,
|
||||||
|
META_FRAME_TILED_RIGHT = 1 << 16
|
||||||
} MetaFrameFlags;
|
} MetaFrameFlags;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
|
@ -3190,6 +3190,31 @@ parse_style_set_element (GMarkupParseContext *context,
|
|||||||
meta_frame_style_ref (frame_style);
|
meta_frame_style_ref (frame_style);
|
||||||
info->style_set->maximized_styles[frame_focus] = frame_style;
|
info->style_set->maximized_styles[frame_focus] = frame_style;
|
||||||
break;
|
break;
|
||||||
|
case META_FRAME_STATE_TILED_LEFT:
|
||||||
|
if (info->style_set->tiled_left_styles[frame_focus])
|
||||||
|
{
|
||||||
|
set_error (error, context, G_MARKUP_ERROR, G_MARKUP_ERROR_PARSE,
|
||||||
|
_("Style has already been specified for state %s focus %s"),
|
||||||
|
state, focus);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
meta_frame_style_ref (frame_style);
|
||||||
|
info->style_set->tiled_left_styles[frame_focus] = frame_style;
|
||||||
|
break;
|
||||||
|
case META_FRAME_STATE_TILED_RIGHT:
|
||||||
|
if (info->style_set->tiled_right_styles[frame_focus])
|
||||||
|
{
|
||||||
|
set_error (error, context, G_MARKUP_ERROR, G_MARKUP_ERROR_PARSE,
|
||||||
|
_("Style has already been specified for state %s focus %s"),
|
||||||
|
state, focus);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
meta_frame_style_ref (frame_style);
|
||||||
|
info->style_set->tiled_right_styles[frame_focus] = frame_style;
|
||||||
|
break;
|
||||||
|
meta_frame_style_ref (frame_style);
|
||||||
|
info->style_set->tiled_right_styles[frame_focus] = frame_style;
|
||||||
|
break;
|
||||||
case META_FRAME_STATE_SHADED:
|
case META_FRAME_STATE_SHADED:
|
||||||
if (info->style_set->shaded_styles[frame_resize][frame_focus])
|
if (info->style_set->shaded_styles[frame_resize][frame_focus])
|
||||||
{
|
{
|
||||||
@ -3212,6 +3237,28 @@ parse_style_set_element (GMarkupParseContext *context,
|
|||||||
meta_frame_style_ref (frame_style);
|
meta_frame_style_ref (frame_style);
|
||||||
info->style_set->maximized_and_shaded_styles[frame_focus] = frame_style;
|
info->style_set->maximized_and_shaded_styles[frame_focus] = frame_style;
|
||||||
break;
|
break;
|
||||||
|
case META_FRAME_STATE_TILED_LEFT_AND_SHADED:
|
||||||
|
if (info->style_set->tiled_left_and_shaded_styles[frame_focus])
|
||||||
|
{
|
||||||
|
set_error (error, context, G_MARKUP_ERROR, G_MARKUP_ERROR_PARSE,
|
||||||
|
_("Style has already been specified for state %s focus %s"),
|
||||||
|
state, focus);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
meta_frame_style_ref (frame_style);
|
||||||
|
info->style_set->tiled_left_and_shaded_styles[frame_focus] = frame_style;
|
||||||
|
break;
|
||||||
|
case META_FRAME_STATE_TILED_RIGHT_AND_SHADED:
|
||||||
|
if (info->style_set->tiled_right_and_shaded_styles[frame_focus])
|
||||||
|
{
|
||||||
|
set_error (error, context, G_MARKUP_ERROR, G_MARKUP_ERROR_PARSE,
|
||||||
|
_("Style has already been specified for state %s focus %s"),
|
||||||
|
state, focus);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
meta_frame_style_ref (frame_style);
|
||||||
|
info->style_set->tiled_right_and_shaded_styles[frame_focus] = frame_style;
|
||||||
|
break;
|
||||||
case META_FRAME_STATE_LAST:
|
case META_FRAME_STATE_LAST:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
break;
|
break;
|
||||||
|
@ -776,8 +776,12 @@ typedef enum
|
|||||||
{
|
{
|
||||||
META_FRAME_STATE_NORMAL,
|
META_FRAME_STATE_NORMAL,
|
||||||
META_FRAME_STATE_MAXIMIZED,
|
META_FRAME_STATE_MAXIMIZED,
|
||||||
|
META_FRAME_STATE_TILED_LEFT,
|
||||||
|
META_FRAME_STATE_TILED_RIGHT,
|
||||||
META_FRAME_STATE_SHADED,
|
META_FRAME_STATE_SHADED,
|
||||||
META_FRAME_STATE_MAXIMIZED_AND_SHADED,
|
META_FRAME_STATE_MAXIMIZED_AND_SHADED,
|
||||||
|
META_FRAME_STATE_TILED_LEFT_AND_SHADED,
|
||||||
|
META_FRAME_STATE_TILED_RIGHT_AND_SHADED,
|
||||||
META_FRAME_STATE_LAST
|
META_FRAME_STATE_LAST
|
||||||
} MetaFrameState;
|
} MetaFrameState;
|
||||||
|
|
||||||
@ -814,8 +818,12 @@ struct _MetaFrameStyleSet
|
|||||||
MetaFrameStyleSet *parent;
|
MetaFrameStyleSet *parent;
|
||||||
MetaFrameStyle *normal_styles[META_FRAME_RESIZE_LAST][META_FRAME_FOCUS_LAST];
|
MetaFrameStyle *normal_styles[META_FRAME_RESIZE_LAST][META_FRAME_FOCUS_LAST];
|
||||||
MetaFrameStyle *maximized_styles[META_FRAME_FOCUS_LAST];
|
MetaFrameStyle *maximized_styles[META_FRAME_FOCUS_LAST];
|
||||||
|
MetaFrameStyle *tiled_left_styles[META_FRAME_FOCUS_LAST];
|
||||||
|
MetaFrameStyle *tiled_right_styles[META_FRAME_FOCUS_LAST];
|
||||||
MetaFrameStyle *shaded_styles[META_FRAME_RESIZE_LAST][META_FRAME_FOCUS_LAST];
|
MetaFrameStyle *shaded_styles[META_FRAME_RESIZE_LAST][META_FRAME_FOCUS_LAST];
|
||||||
MetaFrameStyle *maximized_and_shaded_styles[META_FRAME_FOCUS_LAST];
|
MetaFrameStyle *maximized_and_shaded_styles[META_FRAME_FOCUS_LAST];
|
||||||
|
MetaFrameStyle *tiled_left_and_shaded_styles[META_FRAME_FOCUS_LAST];
|
||||||
|
MetaFrameStyle *tiled_right_and_shaded_styles[META_FRAME_FOCUS_LAST];
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -873,7 +873,9 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
|
|||||||
rect->visible.width = button_width;
|
rect->visible.width = button_width;
|
||||||
rect->visible.height = button_height;
|
rect->visible.height = button_height;
|
||||||
|
|
||||||
if (flags & META_FRAME_MAXIMIZED)
|
if (flags & META_FRAME_MAXIMIZED ||
|
||||||
|
flags & META_FRAME_TILED_LEFT ||
|
||||||
|
flags & META_FRAME_TILED_RIGHT)
|
||||||
{
|
{
|
||||||
rect->clickable.x = rect->visible.x;
|
rect->clickable.x = rect->visible.x;
|
||||||
rect->clickable.y = 0;
|
rect->clickable.y = 0;
|
||||||
@ -4780,7 +4782,11 @@ meta_frame_style_set_unref (MetaFrameStyleSet *style_set)
|
|||||||
}
|
}
|
||||||
|
|
||||||
free_focus_styles (style_set->maximized_styles);
|
free_focus_styles (style_set->maximized_styles);
|
||||||
|
free_focus_styles (style_set->tiled_left_styles);
|
||||||
|
free_focus_styles (style_set->tiled_right_styles);
|
||||||
free_focus_styles (style_set->maximized_and_shaded_styles);
|
free_focus_styles (style_set->maximized_and_shaded_styles);
|
||||||
|
free_focus_styles (style_set->tiled_left_and_shaded_styles);
|
||||||
|
free_focus_styles (style_set->tiled_right_and_shaded_styles);
|
||||||
|
|
||||||
if (style_set->parent)
|
if (style_set->parent)
|
||||||
meta_frame_style_set_unref (style_set->parent);
|
meta_frame_style_set_unref (style_set->parent);
|
||||||
@ -4832,9 +4838,21 @@ get_style (MetaFrameStyleSet *style_set,
|
|||||||
case META_FRAME_STATE_MAXIMIZED:
|
case META_FRAME_STATE_MAXIMIZED:
|
||||||
styles = style_set->maximized_styles;
|
styles = style_set->maximized_styles;
|
||||||
break;
|
break;
|
||||||
|
case META_FRAME_STATE_TILED_LEFT:
|
||||||
|
styles = style_set->tiled_left_styles;
|
||||||
|
break;
|
||||||
|
case META_FRAME_STATE_TILED_RIGHT:
|
||||||
|
styles = style_set->tiled_right_styles;
|
||||||
|
break;
|
||||||
case META_FRAME_STATE_MAXIMIZED_AND_SHADED:
|
case META_FRAME_STATE_MAXIMIZED_AND_SHADED:
|
||||||
styles = style_set->maximized_and_shaded_styles;
|
styles = style_set->maximized_and_shaded_styles;
|
||||||
break;
|
break;
|
||||||
|
case META_FRAME_STATE_TILED_LEFT_AND_SHADED:
|
||||||
|
styles = style_set->tiled_left_and_shaded_styles;
|
||||||
|
break;
|
||||||
|
case META_FRAME_STATE_TILED_RIGHT_AND_SHADED:
|
||||||
|
styles = style_set->tiled_right_and_shaded_styles;
|
||||||
|
break;
|
||||||
case META_FRAME_STATE_NORMAL:
|
case META_FRAME_STATE_NORMAL:
|
||||||
case META_FRAME_STATE_SHADED:
|
case META_FRAME_STATE_SHADED:
|
||||||
case META_FRAME_STATE_LAST:
|
case META_FRAME_STATE_LAST:
|
||||||
@ -4844,6 +4862,19 @@ get_style (MetaFrameStyleSet *style_set,
|
|||||||
|
|
||||||
style = styles[focus];
|
style = styles[focus];
|
||||||
|
|
||||||
|
/* Tiled states are optional, try falling back to non-tiled states */
|
||||||
|
if (style == NULL)
|
||||||
|
{
|
||||||
|
if (state == META_FRAME_STATE_TILED_LEFT ||
|
||||||
|
state == META_FRAME_STATE_TILED_RIGHT)
|
||||||
|
style = get_style (style_set, META_FRAME_STATE_NORMAL,
|
||||||
|
resize, focus);
|
||||||
|
else if (state == META_FRAME_STATE_TILED_LEFT_AND_SHADED ||
|
||||||
|
state == META_FRAME_STATE_TILED_RIGHT_AND_SHADED)
|
||||||
|
style = get_style (style_set, META_FRAME_STATE_SHADED,
|
||||||
|
resize, focus);
|
||||||
|
}
|
||||||
|
|
||||||
/* Try parent if we failed here */
|
/* Try parent if we failed here */
|
||||||
if (style == NULL && style_set->parent)
|
if (style == NULL && style_set->parent)
|
||||||
style = get_style (style_set->parent, state, resize, focus);
|
style = get_style (style_set->parent, state, resize, focus);
|
||||||
@ -5206,7 +5237,8 @@ theme_get_style (MetaTheme *theme,
|
|||||||
if (style_set == NULL)
|
if (style_set == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
switch (flags & (META_FRAME_MAXIMIZED | META_FRAME_SHADED))
|
switch (flags & (META_FRAME_MAXIMIZED | META_FRAME_SHADED |
|
||||||
|
META_FRAME_TILED_LEFT | META_FRAME_TILED_RIGHT))
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
state = META_FRAME_STATE_NORMAL;
|
state = META_FRAME_STATE_NORMAL;
|
||||||
@ -5214,12 +5246,24 @@ theme_get_style (MetaTheme *theme,
|
|||||||
case META_FRAME_MAXIMIZED:
|
case META_FRAME_MAXIMIZED:
|
||||||
state = META_FRAME_STATE_MAXIMIZED;
|
state = META_FRAME_STATE_MAXIMIZED;
|
||||||
break;
|
break;
|
||||||
|
case META_FRAME_TILED_LEFT:
|
||||||
|
state = META_FRAME_STATE_TILED_LEFT;
|
||||||
|
break;
|
||||||
|
case META_FRAME_TILED_RIGHT:
|
||||||
|
state = META_FRAME_STATE_TILED_RIGHT;
|
||||||
|
break;
|
||||||
case META_FRAME_SHADED:
|
case META_FRAME_SHADED:
|
||||||
state = META_FRAME_STATE_SHADED;
|
state = META_FRAME_STATE_SHADED;
|
||||||
break;
|
break;
|
||||||
case (META_FRAME_MAXIMIZED | META_FRAME_SHADED):
|
case (META_FRAME_MAXIMIZED | META_FRAME_SHADED):
|
||||||
state = META_FRAME_STATE_MAXIMIZED_AND_SHADED;
|
state = META_FRAME_STATE_MAXIMIZED_AND_SHADED;
|
||||||
break;
|
break;
|
||||||
|
case (META_FRAME_TILED_LEFT | META_FRAME_SHADED):
|
||||||
|
state = META_FRAME_STATE_TILED_LEFT_AND_SHADED;
|
||||||
|
break;
|
||||||
|
case (META_FRAME_TILED_RIGHT | META_FRAME_SHADED):
|
||||||
|
state = META_FRAME_STATE_TILED_RIGHT_AND_SHADED;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
state = META_FRAME_STATE_LAST; /* compiler */
|
state = META_FRAME_STATE_LAST; /* compiler */
|
||||||
@ -6031,10 +6075,18 @@ meta_frame_state_from_string (const char *str)
|
|||||||
return META_FRAME_STATE_NORMAL;
|
return META_FRAME_STATE_NORMAL;
|
||||||
else if (strcmp ("maximized", str) == 0)
|
else if (strcmp ("maximized", str) == 0)
|
||||||
return META_FRAME_STATE_MAXIMIZED;
|
return META_FRAME_STATE_MAXIMIZED;
|
||||||
|
else if (strcmp ("tiled_left", str) == 0)
|
||||||
|
return META_FRAME_STATE_TILED_LEFT;
|
||||||
|
else if (strcmp ("tiled_right", str) == 0)
|
||||||
|
return META_FRAME_STATE_TILED_RIGHT;
|
||||||
else if (strcmp ("shaded", str) == 0)
|
else if (strcmp ("shaded", str) == 0)
|
||||||
return META_FRAME_STATE_SHADED;
|
return META_FRAME_STATE_SHADED;
|
||||||
else if (strcmp ("maximized_and_shaded", str) == 0)
|
else if (strcmp ("maximized_and_shaded", str) == 0)
|
||||||
return META_FRAME_STATE_MAXIMIZED_AND_SHADED;
|
return META_FRAME_STATE_MAXIMIZED_AND_SHADED;
|
||||||
|
else if (strcmp ("tiled_left_and_shaded", str) == 0)
|
||||||
|
return META_FRAME_STATE_TILED_LEFT_AND_SHADED;
|
||||||
|
else if (strcmp ("tiled_right_and_shaded", str) == 0)
|
||||||
|
return META_FRAME_STATE_TILED_RIGHT_AND_SHADED;
|
||||||
else
|
else
|
||||||
return META_FRAME_STATE_LAST;
|
return META_FRAME_STATE_LAST;
|
||||||
}
|
}
|
||||||
@ -6048,10 +6100,18 @@ meta_frame_state_to_string (MetaFrameState state)
|
|||||||
return "normal";
|
return "normal";
|
||||||
case META_FRAME_STATE_MAXIMIZED:
|
case META_FRAME_STATE_MAXIMIZED:
|
||||||
return "maximized";
|
return "maximized";
|
||||||
|
case META_FRAME_STATE_TILED_LEFT:
|
||||||
|
return "tiled_left";
|
||||||
|
case META_FRAME_STATE_TILED_RIGHT:
|
||||||
|
return "tiled_right";
|
||||||
case META_FRAME_STATE_SHADED:
|
case META_FRAME_STATE_SHADED:
|
||||||
return "shaded";
|
return "shaded";
|
||||||
case META_FRAME_STATE_MAXIMIZED_AND_SHADED:
|
case META_FRAME_STATE_MAXIMIZED_AND_SHADED:
|
||||||
return "maximized_and_shaded";
|
return "maximized_and_shaded";
|
||||||
|
case META_FRAME_STATE_TILED_LEFT_AND_SHADED:
|
||||||
|
return "tiled_left_and_shaded";
|
||||||
|
case META_FRAME_STATE_TILED_RIGHT_AND_SHADED:
|
||||||
|
return "tiled_right_and_shaded";
|
||||||
case META_FRAME_STATE_LAST:
|
case META_FRAME_STATE_LAST:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user