diff options
| author | Martin Wimpress <[email protected]> | 2015-06-10 18:21:45 +0100 | 
|---|---|---|
| committer | Martin Wimpress <[email protected]> | 2015-06-10 18:21:45 +0100 | 
| commit | 7770b75d007a8c303aa7bd4bdae439cc3b00d269 (patch) | |
| tree | d39ed524cb34f2292809a10b4656ae5df1cf7d9b /src | |
| parent | 78416ca9529b236d39e0701e40314b2484090cf9 (diff) | |
| parent | 060838853303871a9fbb1ddfe0228668318070e7 (diff) | |
| download | marco-7770b75d007a8c303aa7bd4bdae439cc3b00d269.tar.bz2 marco-7770b75d007a8c303aa7bd4bdae439cc3b00d269.tar.xz | |
Merge pull request #160 from micove/add-tile-keybinds
Add tile keybinds (Fix #104, #127)
Diffstat (limited to 'src')
| -rw-r--r-- | src/50-marco-window-key.xml.in | 8 | ||||
| -rw-r--r-- | src/core/keybindings.c | 26 | ||||
| -rw-r--r-- | src/core/window.c | 18 | ||||
| -rw-r--r-- | src/include/all-keybindings.h | 5 | ||||
| -rw-r--r-- | src/marco.convert | 2 | ||||
| -rw-r--r-- | src/org.mate.marco.gschema.xml | 10 | 
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 "<Control>a" or "<Shift><Alt>F1". The parser is fairly liberal and allows lower or upper case, and also abbreviations such as "<Ctl>" and "<Ctrl>". 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 "<Control>a" or "<Shift><Alt>F1". The parser is fairly liberal and allows lower or upper case, and also abbreviations such as "<Ctl>" and "<Ctrl>". 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 "<Control>a" or "<Shift><Alt>F1". The parser is fairly liberal and allows lower or upper case, and also abbreviations such as "<Ctl>" and "<Ctrl>". 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> | 
