diff options
-rw-r--r-- | src/compositor.c | 27 | ||||
-rw-r--r-- | src/display.c | 19 | ||||
-rw-r--r-- | src/screen.c | 24 |
3 files changed, 49 insertions, 21 deletions
diff --git a/src/compositor.c b/src/compositor.c index 0ff57d8a..abe8fa3a 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -654,6 +654,22 @@ paint_root (MetaScreen *screen, screen->rect.width, screen->rect.height); } +static gboolean +window_has_shadow (MetaCompWindow *cw) +{ + /* Always put a shadow around windows with a frame */ + if (cw->window) + { + if (cw->window->frame) + return TRUE; + } + + if (cw->mode != WINDOW_ARGB) + return TRUE; + + return FALSE; +} + static XserverRegion win_extents (MetaCompWindow *cw) { @@ -671,16 +687,7 @@ win_extents (MetaCompWindow *cw) r.width = cw->attrs.width + cw->attrs.border_width * 2; r.height = cw->attrs.height + cw->attrs.border_width * 2; - /* - We apply a shadow to the window if: - * the window is ARGB and not override redirected. - * the window is shaped and not override redirected. - * if it has a frame - */ - - if ((! (cw->mode == WINDOW_ARGB && cw->attrs.override_redirect)) && - (! (cw->shaped && cw->attrs.override_redirect)) && - ( (cw->window && cw->window->frame))) + if (window_has_shadow (cw)) { XRectangle sr; diff --git a/src/display.c b/src/display.c index 63e80530..03925cba 100644 --- a/src/display.c +++ b/src/display.c @@ -191,7 +191,8 @@ sn_error_trap_pop (SnDisplay *sn_display, #endif static void -enable_compositor (MetaDisplay *display) +enable_compositor (MetaDisplay *display, + gboolean composite_windows) { GSList *list; @@ -208,7 +209,8 @@ enable_compositor (MetaDisplay *display) meta_compositor_manage_screen (screen->display->compositor, screen); - meta_screen_composite_all_windows (screen); + if (composite_windows) + meta_screen_composite_all_windows (screen); } } @@ -816,7 +818,13 @@ meta_display_open (void) meta_display_close (display, timestamp); return FALSE; } - + + /* We don't composite the windows here because they will be composited + faster with the call to meta_screen_manage_all_windows further down + the code */ + if (meta_prefs_get_compositing_manager ()) + enable_compositor (display, FALSE); + meta_display_grab (display); /* Now manage all existing windows */ @@ -870,9 +878,6 @@ meta_display_open (void) meta_display_ungrab (display); - if (meta_prefs_get_compositing_manager ()) - enable_compositor (display); - /* Done opening new display */ display->display_opening = FALSE; @@ -4904,7 +4909,7 @@ prefs_changed_callback (MetaPreference pref, gboolean cm = meta_prefs_get_compositing_manager (); if (cm) - enable_compositor (display); + enable_compositor (display, TRUE); else disable_compositor (display); } diff --git a/src/screen.c b/src/screen.c index eb21fdc8..7eb8c409 100644 --- a/src/screen.c +++ b/src/screen.c @@ -812,9 +812,21 @@ meta_screen_manage_all_windows (MetaScreen *screen) for (list = windows; list != NULL; list = list->next) { WindowInfo *info = list->data; + MetaWindow *window; - meta_window_new_with_attrs (screen->display, info->xwindow, TRUE, - &info->attrs); + window = meta_window_new_with_attrs (screen->display, info->xwindow, TRUE, + &info->attrs); + if (info->xwindow == screen->no_focus_window || + info->xwindow == screen->flash_window || + info->xwindow == screen->wm_sn_selection_window || + info->xwindow == screen->wm_cm_selection_window) { + g_print ("Not managing our own windows\n"); + continue; + } + + if (screen->display->compositor) + meta_compositor_add_window (screen->display->compositor, window, + info->xwindow, &info->attrs); } meta_stack_thaw (screen->stack); @@ -828,9 +840,11 @@ void meta_screen_composite_all_windows (MetaScreen *screen) { #ifdef HAVE_COMPOSITE_EXTENSIONS + MetaDisplay *display; GList *windows, *list; - if (!screen->display->compositor) + display = screen->display; + if (!display->compositor) return; windows = list_windows (screen); @@ -849,7 +863,9 @@ meta_screen_composite_all_windows (MetaScreen *screen) continue; } - meta_compositor_add_window (screen->display->compositor, NULL, + meta_compositor_add_window (display->compositor, + meta_display_lookup_x_window (display, + info->xwindow), info->xwindow, &info->attrs); } |