summaryrefslogtreecommitdiff
path: root/src/ui/theme.c
diff options
context:
space:
mode:
authorinfirit <[email protected]>2014-10-24 21:59:58 +0200
committerinfirit <[email protected]>2014-10-27 12:29:24 +0100
commitbec068ef5ddc73f23ffd6298122bf818fd4d2084 (patch)
treed7db4682b85c601d069de72cf76dda77b8a5e8dc /src/ui/theme.c
parentf814451acc48aec6d2fa1c217468f74e57a84340 (diff)
downloadmarco-bec068ef5ddc73f23ffd6298122bf818fd4d2084.tar.bz2
marco-bec068ef5ddc73f23ffd6298122bf818fd4d2084.tar.xz
Rework tiling code based off Consortium
Taken from https://github.com/SolusOS-discontinued/consortium/commit/b463e03f5bdeab307ceee6b969c681f29537c76d
Diffstat (limited to 'src/ui/theme.c')
-rw-r--r--src/ui/theme.c63
1 files changed, 61 insertions, 2 deletions
diff --git a/src/ui/theme.c b/src/ui/theme.c
index aa49963a..763f4f3a 100644
--- a/src/ui/theme.c
+++ b/src/ui/theme.c
@@ -851,7 +851,9 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
rect->visible.width = button_width;
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.y = rect->visible.y;
@@ -4995,7 +4997,11 @@ meta_frame_style_set_unref (MetaFrameStyleSet *style_set)
}
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->tiled_left_and_shaded_styles);
+ free_focus_styles (style_set->tiled_right_and_shaded_styles);
if (style_set->parent)
meta_frame_style_set_unref (style_set->parent);
@@ -5047,9 +5053,21 @@ get_style (MetaFrameStyleSet *style_set,
case META_FRAME_STATE_MAXIMIZED:
styles = style_set->maximized_styles;
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:
styles = style_set->maximized_and_shaded_styles;
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_SHADED:
case META_FRAME_STATE_LAST:
@@ -5059,6 +5077,19 @@ get_style (MetaFrameStyleSet *style_set,
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 */
if (style == NULL && style_set->parent)
style = get_style (style_set->parent, state, resize, focus);
@@ -5404,7 +5435,7 @@ theme_get_style (MetaTheme *theme,
if (style_set == 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:
state = META_FRAME_STATE_NORMAL;
@@ -5412,12 +5443,24 @@ theme_get_style (MetaTheme *theme,
case META_FRAME_MAXIMIZED:
state = META_FRAME_STATE_MAXIMIZED;
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:
state = META_FRAME_STATE_SHADED;
break;
case (META_FRAME_MAXIMIZED | META_FRAME_SHADED):
state = META_FRAME_STATE_MAXIMIZED_AND_SHADED;
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:
g_assert_not_reached ();
state = META_FRAME_STATE_LAST; /* compiler */
@@ -6264,10 +6307,18 @@ meta_frame_state_from_string (const char *str)
return META_FRAME_STATE_NORMAL;
else if (strcmp ("maximized", str) == 0)
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)
return META_FRAME_STATE_SHADED;
else if (strcmp ("maximized_and_shaded", str) == 0)
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
return META_FRAME_STATE_LAST;
}
@@ -6281,10 +6332,18 @@ meta_frame_state_to_string (MetaFrameState state)
return "normal";
case META_FRAME_STATE_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:
return "shaded";
case META_FRAME_STATE_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:
break;
}