summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Thurman <tthurman@gnome.org>2008-09-01 01:32:39 +0000
committerThomas James Alexander Thurman <tthurman@src.gnome.org>2008-09-01 01:32:39 +0000
commit2095cce3ab47c70672e953ceda7633cab264227c (patch)
tree81f579f7627d3c6caa7b64d3da21ad603043cf5c
parent5128bd4f2884ff625b945ccff5947a2330242b2f (diff)
downloadmetacity-2095cce3ab47c70672e953ceda7633cab264227c.tar.gz
Add new move_to_center keybinding, requested by Khanh-Dang Nguyen Thu Lam;
2008-09-01 Thomas Thurman <tthurman@gnome.org> Add new move_to_center keybinding, requested by Khanh-Dang Nguyen Thu Lam; closes #549979. * src/include/prefs.h (void): add name of new binding * src/core/prefs.c: added pref for it * src/core/keybindings.c (handle_move_to_center): new function * src/metacity.schemas.in: included new binding svn path=/trunk/; revision=3839
-rw-r--r--ChangeLog10
-rw-r--r--src/core/keybindings.c36
-rw-r--r--src/core/prefs.c1
-rw-r--r--src/include/prefs.h1
-rw-r--r--src/metacity.schemas.in24
5 files changed, 72 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 4405b6e2..d173678f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2008-09-01 Thomas Thurman <tthurman@gnome.org>
+
+ Add new move_to_center keybinding, requested by Khanh-Dang Nguyen
+ Thu Lam; closes #549979.
+
+ * src/include/prefs.h (void): add name of new binding
+ * src/core/prefs.c: added pref for it
+ * src/core/keybindings.c (handle_move_to_center): new function
+ * src/metacity.schemas.in: included new binding
+
2008-08-31 Thomas Thurman <tthurman@gnome.org>
* src/core/prefs.[ch] (meta_prefs_set_compositing_manager): new
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index 769ed95e..33fd4bf0 100644
--- a/src/core/keybindings.c
+++ b/src/core/keybindings.c
@@ -234,6 +234,11 @@ static void handle_move_to_corner_se (MetaDisplay *display,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding);
+static void handle_move_to_center (MetaDisplay *display,
+ MetaScreen *screen,
+ MetaWindow *window,
+ XEvent *event,
+ MetaKeyBinding *binding);
static void handle_spew_mark (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
@@ -489,6 +494,7 @@ static const MetaKeyHandler window_handlers[] = {
{ META_KEYBINDING_MOVE_TO_CORNER_NE, handle_move_to_corner_ne, NULL },
{ META_KEYBINDING_MOVE_TO_CORNER_SW, handle_move_to_corner_sw, NULL },
{ META_KEYBINDING_MOVE_TO_CORNER_SE, handle_move_to_corner_se, NULL },
+ { META_KEYBINDING_MOVE_TO_CENTER, handle_move_to_center, NULL },
{ NULL, NULL, NULL }
};
@@ -3037,6 +3043,36 @@ handle_move_to_side_w (MetaDisplay *display,
}
}
+static void
+handle_move_to_center (MetaDisplay *display,
+ MetaScreen *screen,
+ MetaWindow *window,
+ XEvent *event,
+ MetaKeyBinding *binding)
+{
+ MetaRectangle work_area;
+ MetaRectangle outer;
+ int orig_x, orig_y;
+ int frame_width, frame_height;
+
+ if (!window)
+ return;
+
+ meta_window_get_work_area_all_xineramas (window, &work_area);
+ meta_window_get_outer_rect (window, &outer);
+ meta_window_get_position (window, &orig_x, &orig_y);
+
+ frame_width = (window->frame ? window->frame->child_x : 0);
+ frame_height = (window->frame ? window->frame->child_y : 0);
+
+ meta_window_move_resize (window,
+ TRUE,
+ work_area.x + (work_area.width +frame_width -outer.width )/2,
+ work_area.y + (work_area.height+frame_height-outer.height)/2,
+ window->rect.width,
+ window->rect.height);
+}
+
static gboolean
process_workspace_switch_grab (MetaDisplay *display,
MetaScreen *screen,
diff --git a/src/core/prefs.c b/src/core/prefs.c
index 82a4c2c9..f8cc3d5c 100644
--- a/src/core/prefs.c
+++ b/src/core/prefs.c
@@ -1929,6 +1929,7 @@ static MetaKeyPref window_bindings[] = {
{ META_KEYBINDING_MOVE_TO_SIDE_S, NULL, FALSE },
{ META_KEYBINDING_MOVE_TO_SIDE_E, NULL, FALSE },
{ META_KEYBINDING_MOVE_TO_SIDE_W, NULL, FALSE },
+ { META_KEYBINDING_MOVE_TO_CENTER, NULL, FALSE },
{ NULL, NULL, FALSE }
};
diff --git a/src/include/prefs.h b/src/include/prefs.h
index 3e188531..4a76f409 100644
--- a/src/include/prefs.h
+++ b/src/include/prefs.h
@@ -231,6 +231,7 @@ void meta_prefs_set_compositing_manager (gboolean whether);
#define META_KEYBINDING_MOVE_TO_SIDE_S "move_to_side_s"
#define META_KEYBINDING_MOVE_TO_SIDE_E "move_to_side_e"
#define META_KEYBINDING_MOVE_TO_SIDE_W "move_to_side_w"
+#define META_KEYBINDING_MOVE_TO_CENTER "move_to_center"
typedef enum _MetaKeyBindingAction
{
diff --git a/src/metacity.schemas.in b/src/metacity.schemas.in
index 5e4f1dc3..20d34862 100644
--- a/src/metacity.schemas.in
+++ b/src/metacity.schemas.in
@@ -1329,6 +1329,30 @@ you set
</locale>
</schema>
+ <schema>
+ <key>/schemas/apps/metacity/window_keybindings/move_to_center</key>
+ <applyto>/apps/metacity/window_keybindings/move_to_center</applyto>
+ <owner>metacity</owner>
+ <type>string</type>
+ <!-- no default for this one -->
+ <locale name="C">
+ <short>Move window to center of screen</short>
+ <long>
+ This keybinding moves a window into the center
+ of the screen.
+
+ 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.
+ </long>
+ </locale>
+ </schema>
+
<!-- Global Keybindings -->