summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/50-marco-window-key.xml.in8
-rw-r--r--src/core/keybindings.c26
-rw-r--r--src/core/window.c18
-rw-r--r--src/include/all-keybindings.h5
-rw-r--r--src/marco.convert2
-rw-r--r--src/org.mate.marco.gschema.xml10
6 files changed, 46 insertions, 23 deletions
diff --git a/src/50-marco-window-key.xml.in b/src/50-marco-window-key.xml.in
index 2dcfabc3..0b3ecef4 100644
--- a/src/50-marco-window-key.xml.in
+++ b/src/50-marco-window-key.xml.in
@@ -70,6 +70,14 @@
_description="Maximize window horizontally" />
<KeyListEntry
+ name="tile-to-side-e"
+ _description="Tile window to east (right) side of screen" />
+
+ <KeyListEntry
+ name="tile-to-side-w"
+ _description="Tile window to west (left) side of screen" />
+
+ <KeyListEntry
name="move-to-corner-nw"
_description="Move window to north-west (top left) corner" />
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index d40c90d7..9e602a91 100644
--- a/src/core/keybindings.c
+++ b/src/core/keybindings.c
@@ -3050,7 +3050,6 @@ handle_toggle_above (MetaDisplay *display,
meta_window_make_above (window);
}
-/* TODO: actually use this keybinding, without messing up the existing keybinding schema */
static void
handle_toggle_tiled (MetaDisplay *display,
MetaScreen *screen,
@@ -3063,14 +3062,20 @@ handle_toggle_tiled (MetaDisplay *display,
if ((META_WINDOW_TILED_LEFT (window) && mode == META_TILE_LEFT) ||
(META_WINDOW_TILED_RIGHT (window) && mode == META_TILE_RIGHT))
{
- window->tile_mode = META_TILE_NONE;
-
if (window->saved_maximize)
- meta_window_maximize (window, META_MAXIMIZE_VERTICAL |
- META_MAXIMIZE_HORIZONTAL);
- else
- meta_window_unmaximize (window, META_MAXIMIZE_VERTICAL |
+ {
+ window->tile_mode = META_TILE_MAXIMIZED;
+ window->tile_monitor_number = meta_screen_get_xinerama_for_window (window->screen, window)->number;
+ meta_window_maximize (window, META_MAXIMIZE_VERTICAL |
META_MAXIMIZE_HORIZONTAL);
+ }
+ else
+ {
+ window->tile_mode = META_TILE_NONE;
+ window->tile_monitor_number = -1;
+ meta_window_unmaximize (window, META_MAXIMIZE_VERTICAL |
+ META_MAXIMIZE_HORIZONTAL);
+ }
}
else if (meta_window_can_tile (window))
{
@@ -3082,6 +3087,13 @@ handle_toggle_tiled (MetaDisplay *display,
* we just set the flag and rely on meta_window_tile() syncing it to
* save an additional roundtrip.
*/
+
+ /* If we skip meta_window_unmaximize we have to manually reset the
+ * window->saved_maximize flag.
+ */
+ if (!META_WINDOW_MAXIMIZED (window))
+ window->saved_maximize = FALSE;
+
window->maximized_horizontally = FALSE;
meta_window_tile (window);
}
diff --git a/src/core/window.c b/src/core/window.c
index 254eb094..9b2ad926 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -2670,14 +2670,9 @@ meta_window_maximize (MetaWindow *window,
if (window->tile_mode != META_TILE_NONE)
{
saved_rect = &window->saved_rect;
- window->maximized_vertically = FALSE;
- }
-
- if (window->tile_mode != META_TILE_NONE)
- {
- saved_rect = &window->saved_rect;
window->maximized_vertically = FALSE;
+ window->tile_mode = META_TILE_NONE;
}
meta_window_maximize_internal (window,
@@ -2751,7 +2746,7 @@ meta_window_can_tile (MetaWindow *window)
MetaRectangle tile_area;
/*if (!META_WINDOW_ALLOWS_RESIZE (window))*/
- if (!META_WINDOW_ALLOWS_RESIZE (window))
+ if (!meta_window_can_tile_maximized (window) || window->shaded)
return FALSE;
monitor = meta_screen_get_current_xinerama (window->screen);
@@ -2780,15 +2775,6 @@ meta_window_unmaximize (MetaWindow *window,
/* At least one of the two directions ought to be set */
gboolean unmaximize_horizontally, unmaximize_vertically;
- /* Restore tiling if necessary */
- if (window->tile_mode == META_TILE_LEFT ||
- window->tile_mode == META_TILE_RIGHT)
- {
- window->maximized_horizontally = FALSE;
- meta_window_tile (window);
- return;
- }
-
unmaximize_horizontally = directions & META_MAXIMIZE_HORIZONTAL;
unmaximize_vertically = directions & META_MAXIMIZE_VERTICAL;
g_assert (unmaximize_horizontally || unmaximize_vertically);
diff --git a/src/include/all-keybindings.h b/src/include/all-keybindings.h
index 5b030280..a14777e9 100644
--- a/src/include/all-keybindings.h
+++ b/src/include/all-keybindings.h
@@ -252,6 +252,11 @@ keybind (maximize-vertically, handle_maximize_vertically, 0,
keybind (maximize-horizontally, handle_maximize_horizontally, 0,
BINDING_PER_WINDOW)
+keybind (tile-to-side-e, handle_toggle_tiled, META_TILE_RIGHT,
+ BINDING_PER_WINDOW)
+keybind (tile-to-side-w, handle_toggle_tiled, META_TILE_LEFT,
+ BINDING_PER_WINDOW)
+
keybind (move-to-corner-nw, handle_move_to_corner_nw, 0,
BINDING_PER_WINDOW)
keybind (move-to-corner-ne, handle_move_to_corner_ne, 0,
diff --git a/src/marco.convert b/src/marco.convert
index eb1f623b..21c8799f 100644
--- a/src/marco.convert
+++ b/src/marco.convert
@@ -142,6 +142,8 @@ raise = /apps/marco/window_keybindings/raise
lower = /apps/marco/window_keybindings/lower
maximize-vertically = /apps/marco/window_keybindings/maximize_vertically
maximize-horizontally = /apps/marco/window_keybindings/maximize_horizontally
+tile-to-side-e = /apps/marco/window_keybindings/tile_to_side_e
+tile-to-side-w = /apps/marco/window_keybindings/tile_to_side_w
move-to-corner-nw = /apps/marco/window_keybindings/move_to_corner_nw
move-to-corner-ne = /apps/marco/window_keybindings/move_to_corner_ne
move-to-corner-sw = /apps/marco/window_keybindings/move_to_corner_sw
diff --git a/src/org.mate.marco.gschema.xml b/src/org.mate.marco.gschema.xml
index a0725382..4108355c 100644
--- a/src/org.mate.marco.gschema.xml
+++ b/src/org.mate.marco.gschema.xml
@@ -838,6 +838,16 @@
<summary>Maximize window horizontally</summary>
<description>The format looks like "&lt;Control&gt;a" or "&lt;Shift&gt;&lt;Alt&gt;F1". The parser is fairly liberal and allows lower or upper case, and also abbreviations such as "&lt;Ctl&gt;" and "&lt;Ctrl&gt;". If you set the option to the special string "disabled", then there will be no keybinding for this action.</description>
</key>
+ <key name="tile-to-side-e" type="s">
+ <default>'disabled'</default>
+ <summary>Tile window to east (right) side of screen</summary>
+ <description>The format looks like "&lt;Control&gt;a" or "&lt;Shift&gt;&lt;Alt&gt;F1". The parser is fairly liberal and allows lower or upper case, and also abbreviations such as "&lt;Ctl&gt;" and "&lt;Ctrl&gt;". If you set the option to the special string "disabled", then there will be no keybinding for this action.</description>
+ </key>
+ <key name="tile-to-side-w" type="s">
+ <default>'disabled'</default>
+ <summary>Tile window to west (left) side of screen</summary>
+ <description>The format looks like "&lt;Control&gt;a" or "&lt;Shift&gt;&lt;Alt&gt;F1". The parser is fairly liberal and allows lower or upper case, and also abbreviations such as "&lt;Ctl&gt;" and "&lt;Ctrl&gt;". If you set the option to the special string "disabled", then there will be no keybinding for this action.</description>
+ </key>
<key name="move-to-corner-nw" type="s">
<default>'disabled'</default>
<summary>Move window to north-west (top left) corner</summary>