From 7587daf105c72f55916a82b34ae0f58cfd592c42 Mon Sep 17 00:00:00 2001 From: Stefano Karapetsas Date: Wed, 20 Feb 2013 21:59:56 +0100 Subject: Add option to open new windows on the center of the screen Adapted from patch by Chad Glendenin available at: http://chad.glendenin.com/metacity/patch.html Closes: http://chad.glendenin.com/metacity/patch.html --- src/core/place.c | 19 +++++++++++++++---- src/core/prefs.c | 29 +++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 6 deletions(-) (limited to 'src/core') diff --git a/src/core/place.c b/src/core/place.c index c59d9588..b837adb7 100644 --- a/src/core/place.c +++ b/src/core/place.c @@ -487,6 +487,13 @@ center_tile_rect_in_area (MetaRectangle *rect, rect->y = work_area->y + fluff; } +center_rect_in_area (MetaRectangle *rect, + MetaRectangle *work_area) +{ + rect->x = (work_area->width - rect->width) / 2; + rect->y = (work_area->height - rect->height) / 2; +} + /* Find the leftmost, then topmost, empty area on the workspace * that can contain the new window. * @@ -554,10 +561,14 @@ find_first_fit (MetaWindow *window, meta_window_get_work_area_for_xinerama (window, xinerama, &work_area); - center_tile_rect_in_area (&rect, &work_area); + if (meta_prefs_get_center_new_windows ()) + center_rect_in_area (&rect, &work_area); + else + center_tile_rect_in_area (&rect, &work_area); if (meta_rectangle_contains_rect (&work_area, &rect) && - !rectangle_overlaps_some_window (&rect, windows)) + (meta_prefs_get_center_new_windows () || + !rectangle_overlaps_some_window (&rect, windows))) { *new_x = rect.x; *new_y = rect.y; @@ -874,7 +885,7 @@ meta_window_place (MetaWindow *window, /* If no placement has been done, revert to cascade to avoid * fully overlapping window (e.g. starting multiple terminals) * */ - if (x == xi->rect.x && y == xi->rect.y) + if (!meta_prefs_get_center_new_windows() && (x == xi->rect.x && y == xi->rect.y)) find_next_cascade (window, fgeom, windows, x, y, &x, &y); done_check_denied_focus: @@ -900,7 +911,7 @@ meta_window_place (MetaWindow *window, /* Try to do a first fit again, this time only taking into account the * focus window. */ - if (!found_fit) + if (!meta_prefs_get_center_new_windows() && !found_fit) { GList *focus_window_list; focus_window_list = g_list_prepend (NULL, focus_window); diff --git a/src/core/prefs.c b/src/core/prefs.c index 2581acc2..a3c24132 100644 --- a/src/core/prefs.c +++ b/src/core/prefs.c @@ -50,6 +50,7 @@ #define KEY_GENERAL_NUM_WORKSPACES "num-workspaces" #define KEY_GENERAL_COMPOSITOR "compositing-manager" #define KEY_GENERAL_COMPOSITOR_FAST_ALT_TAB "compositing-fast-alt-tab" +#define KEY_GENERAL_CENTER_NEW_WINDOWS "center-new-windows" #define KEY_COMMAND_SCHEMA "org.mate.Marco.keybinding-commands" #define KEY_COMMAND_PREFIX "command-" @@ -114,6 +115,7 @@ static int cursor_size = 24; static gboolean compositing_manager = FALSE; static gboolean compositing_fast_alt_tab = FALSE; static gboolean resize_with_right_button = FALSE; +static gboolean center_new_windows = FALSE; static gboolean force_fullscreen = TRUE; static MetaVisualBellType visual_bell_type = META_VISUAL_BELL_FULLSCREEN_FLASH; @@ -393,6 +395,12 @@ static MetaBoolPreference preferences_bool[] = &resize_with_right_button, FALSE, }, + { "center-new-windows", + KEY_GENERAL_SCHEMA, + META_PREF_CENTER_NEW_WINDOWS, + ¢er_new_windows, + FALSE, + }, { NULL, NULL, 0, NULL, FALSE }, }; @@ -1529,6 +1537,9 @@ meta_preference_to_string (MetaPreference pref) case META_PREF_COMPOSITING_FAST_ALT_TAB: return "COMPOSITING_FAST_ALT_TAB"; + case META_PREF_CENTER_NEW_WINDOWS: + return "CENTER_NEW_WINDOWS"; + case META_PREF_RESIZE_WITH_RIGHT_BUTTON: return "RESIZE_WITH_RIGHT_BUTTON"; @@ -2183,11 +2194,17 @@ meta_prefs_get_compositing_manager (void) } gboolean -meta_prefs_get_compositing_fast_alt_tab(void) +meta_prefs_get_compositing_fast_alt_tab (void) { return compositing_fast_alt_tab; } +gboolean +meta_prefs_get_center_new_windows (void) +{ + return center_new_windows; +} + guint meta_prefs_get_mouse_button_resize (void) { @@ -2216,13 +2233,21 @@ meta_prefs_set_compositing_manager (gboolean whether) } void -meta_prefs_set_compositing_fast_alt_tab(gboolean whether) +meta_prefs_set_compositing_fast_alt_tab (gboolean whether) { g_settings_set_boolean (settings_general, KEY_GENERAL_COMPOSITOR_FAST_ALT_TAB, whether); } +void +meta_prefs_set_center_new_windows (gboolean whether) +{ + g_settings_set_boolean (settings_general, + KEY_GENERAL_CENTER_NEW_WINDOWS, + whether); +} + void meta_prefs_set_force_fullscreen (gboolean whether) { -- cgit v1.2.1