summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compositor.c27
-rw-r--r--src/display.c19
-rw-r--r--src/screen.c24
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);
}