diff options
Diffstat (limited to 'src/window.c')
-rw-r--r-- | src/window.c | 66 |
1 files changed, 30 insertions, 36 deletions
diff --git a/src/window.c b/src/window.c index ddba6a07..31af946b 100644 --- a/src/window.c +++ b/src/window.c @@ -417,6 +417,7 @@ meta_window_new (MetaDisplay *display, window->user_has_move_resized = FALSE; window->maximized = FALSE; + window->maximize_after_placement = FALSE; window->fullscreen = FALSE; window->on_all_workspaces = FALSE; window->shaded = FALSE; @@ -695,28 +696,6 @@ meta_window_new (MetaDisplay *display, } } - /* Maximize windows if they are too big for their work - * area (bit of a hack here). Assume undecorated windows - * probably don't intend to be maximized. - */ - if (window->has_maximize_func && window->decorated && - !window->fullscreen) - { - MetaRectangle workarea; - MetaRectangle outer; - - if (!window->placed) - meta_warning ("Metacity issue: using position-based current xinerama prior to placement\n"); - - meta_window_get_work_area_current_xinerama (window, &workarea); - - meta_window_get_outer_rect (window, &outer); - - if (outer.width >= workarea.width && - outer.height >= workarea.height) - meta_window_maximize (window); - } - /* Sync stack changes */ meta_stack_thaw (window->screen->stack); @@ -1841,29 +1820,44 @@ meta_window_save_rect (MetaWindow *window) } void +meta_window_maximize_internal (MetaWindow *window, + MetaRectangle *saved_rect) +{ + meta_topic (META_DEBUG_WINDOW_OPS, + "Maximizing %s\n", window->desc); + + if (saved_rect != NULL) + window->saved_rect = *saved_rect; + else + meta_window_save_rect (window); + + window->maximized = TRUE; + + recalc_window_features (window); + set_net_wm_state (window); +} + +void meta_window_maximize (MetaWindow *window) { if (!window->maximized) { - meta_topic (META_DEBUG_WINDOW_OPS, - "Maximizing %s\n", window->desc); - if (window->shaded) meta_window_unshade (window); - - meta_window_save_rect (window); - window->maximized = TRUE; + /* if the window hasn't been placed yet, we'll maximize it then + */ + if (!window->placed) + { + window->maximize_after_placement = TRUE; + return; + } + + meta_window_maximize_internal (window, NULL); - /* FIXME why did I put this here? */ - meta_window_raise (window); - /* move_resize with new maximization constraints */ meta_window_queue_move_resize (window); - - recalc_window_features (window); - set_net_wm_state (window); } } @@ -4309,9 +4303,9 @@ update_net_wm_state (MetaWindow *window) if (atoms[i] == window->display->atom_net_wm_state_shaded) window->shaded = TRUE; else if (atoms[i] == window->display->atom_net_wm_state_maximized_horz) - window->maximized = TRUE; + window->maximize_after_placement = TRUE; else if (atoms[i] == window->display->atom_net_wm_state_maximized_vert) - window->maximized = TRUE; + window->maximize_after_placement = TRUE; else if (atoms[i] == window->display->atom_net_wm_state_modal) window->wm_state_modal = TRUE; else if (atoms[i] == window->display->atom_net_wm_state_skip_taskbar) |