diff --git a/ChangeLog b/ChangeLog index 4405b6e21..d173678f3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2008-09-01 Thomas Thurman + + 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 * src/core/prefs.[ch] (meta_prefs_set_compositing_manager): new diff --git a/src/core/keybindings.c b/src/core/keybindings.c index 769ed95e6..33fd4bf04 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 82a4c2c99..f8cc3d5ca 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 3e188531d..4a76f4093 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 5e4f1dc38..20d348623 100644 --- a/src/metacity.schemas.in +++ b/src/metacity.schemas.in @@ -1329,6 +1329,30 @@ you set + + /schemas/apps/metacity/window_keybindings/move_to_center + /apps/metacity/window_keybindings/move_to_center + metacity + string + + + Move window to center of screen + + This keybinding moves a window into the center + of the screen. + + 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. + + + +