summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOmar Zeidan <[email protected]>2017-12-30 03:52:32 +0100
committerraveit65 <[email protected]>2018-01-15 17:29:48 +0100
commit7e14f82c4b5e3137bbdc3a4e55dbfe01e5af28c0 (patch)
treeeec7bbf38d1ac51f46b06e516d67dc3498bdeaa0
parent11d5b89c337e0ba5a9ffd25dc3404db6afbbefbb (diff)
downloadmarco-7e14f82c4b5e3137bbdc3a4e55dbfe01e5af28c0.tar.bz2
marco-7e14f82c4b5e3137bbdc3a4e55dbfe01e5af28c0.tar.xz
Implemented simple shourtcuts to move window to another monitor
-rw-r--r--src/50-marco-window-key.xml.in16
-rw-r--r--src/core/keybindings.c41
-rw-r--r--src/include/all-keybindings.h14
-rw-r--r--src/org.mate.marco.gschema.xml20
4 files changed, 91 insertions, 0 deletions
diff --git a/src/50-marco-window-key.xml.in b/src/50-marco-window-key.xml.in
index 6d826d5f..217354e6 100644
--- a/src/50-marco-window-key.xml.in
+++ b/src/50-marco-window-key.xml.in
@@ -130,6 +130,22 @@
_description="Move window to center of screen" />
<KeyListEntry
+ name="move-to-monitor-n"
+ _description="Move window to north (top) monitor" />
+
+ <KeyListEntry
+ name="move-to-monitor-s"
+ _description="Move window to south (bottom) monitor" />
+
+ <KeyListEntry
+ name="move-to-monitor-e"
+ _description="Move window to east (right) monitor" />
+
+ <KeyListEntry
+ name="move-to-monitor-w"
+ _description="Move window to west (left) monitor" />
+
+ <KeyListEntry
name="move-to-workspace-1"
_description="Move window to workspace 1"
value="1"
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index 2b71b3fa..11b8daf4 100644
--- a/src/core/keybindings.c
+++ b/src/core/keybindings.c
@@ -2672,6 +2672,47 @@ handle_move_to_center (MetaDisplay *display,
window->rect.height);
}
+
+static void
+handle_move_to_monitor (MetaDisplay *display,
+ MetaScreen *screen,
+ MetaWindow *window,
+ XEvent *event,
+ MetaKeyBinding *binding)
+{
+ MetaScreenDirection move_direction = binding->handler->data;
+ MetaXineramaScreenInfo* current;
+ MetaXineramaScreenInfo* neighbour;
+ MetaRectangle current_window_rect;
+ int new_x;
+ int new_y;
+
+
+ current = meta_screen_get_xinerama_for_window(screen, window);
+ neighbour = meta_screen_get_xinerama_neighbor(screen, current->number, move_direction);
+
+ if(neighbour == NULL ||
+ current->number == neighbour->number)
+ return;
+
+ if(META_WINDOW_TILED (window))
+ {
+ window->tile_monitor_number = neighbour->number;
+ return;
+ }
+
+ meta_window_get_client_root_coords(window, &current_window_rect);
+
+ new_x = current_window_rect.x - current->rect.x + neighbour->rect.x;
+ new_y = current_window_rect.y - current->rect.y + neighbour->rect.y;
+ /* target_rect.width = window->rect.width; */
+ /* target_rect.height = window->rect.height; */
+ /* Maybe do some resizing? */
+
+ meta_window_move(window, TRUE, new_x, new_y);
+
+}
+
static gboolean
process_workspace_switch_grab (MetaDisplay *display,
MetaScreen *screen,
diff --git a/src/include/all-keybindings.h b/src/include/all-keybindings.h
index 2cba3df2..cba8e9fd 100644
--- a/src/include/all-keybindings.h
+++ b/src/include/all-keybindings.h
@@ -279,6 +279,7 @@ keybind (move-to-corner-sw, handle_move_to_corner_sw, 0,
keybind (move-to-corner-se, handle_move_to_corner_se, 0,
BINDING_PER_WINDOW)
+
keybind (move-to-side-n, handle_move_to_side_n, 0,
BINDING_PER_WINDOW)
keybind (move-to-side-s, handle_move_to_side_s, 0,
@@ -290,6 +291,19 @@ keybind (move-to-side-w, handle_move_to_side_w, 0,
keybind (move-to-center, handle_move_to_center, 0,
BINDING_PER_WINDOW)
+keybind (move-to-monitor-n, handle_move_to_monitor, META_SCREEN_UP,
+ BINDING_PER_WINDOW)
+keybind (move-to-monitor-s, handle_move_to_monitor, META_SCREEN_DOWN,
+ BINDING_PER_WINDOW)
+keybind (move-to-monitor-e, handle_move_to_monitor, META_SCREEN_RIGHT,
+ BINDING_PER_WINDOW)
+keybind (move-to-monitor-w, handle_move_to_monitor, META_SCREEN_LEFT,
+ BINDING_PER_WINDOW)
+
+
+
+
+
keybind (switch-to-workspace-prev, handle_switch_to_workspace,
META_MOTION_PREV, 0)
diff --git a/src/org.mate.marco.gschema.xml b/src/org.mate.marco.gschema.xml
index 70a72337..6632e6b1 100644
--- a/src/org.mate.marco.gschema.xml
+++ b/src/org.mate.marco.gschema.xml
@@ -948,6 +948,26 @@
<summary>Move window to center 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-monitor-n" type="s">
+ <default>'disabled'</default>
+ <summary>Move window to north (top) monitor</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-monitor-s" type="s">
+ <default>'disabled'</default>
+ <summary>Move window to south (bottom) monitor</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-monitor-e" type="s">
+ <default>'disabled'</default>
+ <summary>Move window to east (right) monitor</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-monitor-w" type="s">
+ <default>'disabled'</default>
+ <summary>Move window to west (left) monitor</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>
</schema>
</schemalist>