[metacity] ui: always set the frame background to None
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [metacity] ui: always set the frame background to None
- Date: Mon, 19 Jan 2015 03:17:09 +0000 (UTC)
commit 78c283c646a69d86d0e708c39fed6dfa131663ab
Author: Giovanni Campagna <gcampagna src gnome org>
Date: Thu Jul 31 17:41:39 2014 +0200
ui: always set the frame background to None
This way the xserver never paints the frame background, even if
the client window is destroyed. This allows us to have clean
destroy window animation.
There is no problem with interactive resizing because applications
are using the XSync protocol, so we're not painting unless the
client has redrawn.
https://bugzilla.gnome.org/show_bug.cgi?id=734054
src/core/frame.c | 9 ----
src/include/ui.h | 7 ---
src/ui/frames.c | 112 ------------------------------------------------------
src/ui/frames.h | 7 ---
src/ui/ui.c | 29 ++++++--------
5 files changed, 12 insertions(+), 152 deletions(-)
---
diff --git a/src/core/frame.c b/src/core/frame.c
index 99a43b9..cb9e2df 100644
--- a/src/core/frame.c
+++ b/src/core/frame.c
@@ -149,7 +149,6 @@ meta_window_ensure_frame (MetaWindow *window)
* style and background.
*/
meta_ui_update_frame_style (window->screen->ui, frame->xwindow);
- meta_ui_reset_frame_bg (window->screen->ui, frame->xwindow);
if (window->title)
meta_ui_set_frame_title (window->screen->ui,
@@ -374,11 +373,6 @@ meta_frame_sync_to_window (MetaFrame *frame,
/* set bg to none to avoid flicker */
if (need_resize)
{
- meta_ui_unflicker_frame_bg (frame->window->screen->ui,
- frame->xwindow,
- frame->rect.width,
- frame->rect.height);
-
/* we need new shape if we're resized */
frame->need_reapply_frame_shape = TRUE;
}
@@ -400,9 +394,6 @@ meta_frame_sync_to_window (MetaFrame *frame,
if (need_resize)
{
- meta_ui_reset_frame_bg (frame->window->screen->ui,
- frame->xwindow);
-
/* If we're interactively resizing the frame, repaint
* it immediately so we don't start to lag.
*/
diff --git a/src/include/ui.h b/src/include/ui.h
index fb8db68..8f1261c 100644
--- a/src/include/ui.h
+++ b/src/include/ui.h
@@ -88,13 +88,6 @@ void meta_ui_map_frame (MetaUI *ui,
void meta_ui_unmap_frame (MetaUI *ui,
Window xwindow);
-void meta_ui_unflicker_frame_bg (MetaUI *ui,
- Window xwindow,
- int target_width,
- int target_height);
-void meta_ui_reset_frame_bg (MetaUI *ui,
- Window xwindow);
-
void meta_ui_apply_frame_shape (MetaUI *ui,
Window xwindow,
int new_window_width,
diff --git a/src/ui/frames.c b/src/ui/frames.c
index 74c9338..b26504c 100644
--- a/src/ui/frames.c
+++ b/src/ui/frames.c
@@ -71,9 +71,6 @@ static void meta_frames_paint (MetaFrames *frames,
MetaUIFrame *frame,
cairo_t *cr);
-static void meta_frames_set_window_background (MetaFrames *frames,
- MetaUIFrame *frame);
-
static void meta_frames_calc_geometry (MetaFrames *frames,
MetaUIFrame *frame,
MetaFrameGeometry *fgeom);
@@ -394,12 +391,6 @@ queue_recalc_func (gpointer key, gpointer value, gpointer data)
frames = META_FRAMES (data);
frame = value;
- /* If a resize occurs it will cause a redraw, but the
- * resize may not actually be needed so we always redraw
- * in case of color change.
- */
- meta_frames_set_window_background (frames, frame);
-
invalidate_whole_window (frames, frame);
meta_core_queue_frame_resize (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
frame->xwindow);
@@ -439,12 +430,6 @@ queue_draw_func (gpointer key, gpointer value, gpointer data)
frames = META_FRAMES (data);
frame = value;
- /* If a resize occurs it will cause a redraw, but the
- * resize may not actually be needed so we always redraw
- * in case of color change.
- */
- meta_frames_set_window_background (frames, frame);
-
invalidate_whole_window (frames, frame);
}
@@ -685,11 +670,6 @@ meta_frames_manage_window (MetaFrames *frames,
frame->shape_applied = FALSE;
frame->prelit_control = META_FRAME_CONTROL_NONE;
- /* Don't set the window background yet; we need frame->xwindow to be
- * registered with its MetaWindow, which happens after this function
- * and meta_ui_create_frame_window() return to meta_window_ensure_frame().
- */
-
meta_core_grab_buttons (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), frame->xwindow);
g_hash_table_replace (frames->frames, &frame->xwindow, frame);
@@ -842,52 +822,6 @@ meta_frames_get_corner_radiuses (MetaFrames *frames,
bottom_left, bottom_right);
}
-void
-meta_frames_reset_bg (MetaFrames *frames,
- Window xwindow)
-{
- MetaUIFrame *frame;
-
- frame = meta_frames_lookup_window (frames, xwindow);
-
- meta_frames_set_window_background (frames, frame);
-}
-
-static void
-set_background_none (Display *xdisplay,
- Window xwindow)
-{
- XSetWindowAttributes attrs;
-
- attrs.background_pixmap = None;
- XChangeWindowAttributes (xdisplay, xwindow,
- CWBackPixmap, &attrs);
-}
-
-void
-meta_frames_unflicker_bg (MetaFrames *frames,
- Window xwindow,
- int target_width,
- int target_height)
-{
- MetaUIFrame *frame;
-
- frame = meta_frames_lookup_window (frames, xwindow);
- g_return_if_fail (frame != NULL);
-
-#if 0
- pixmap = gdk_pixmap_new (frame->window,
- width, height,
- -1);
-
- /* Oops, no way to get the background here */
-
- meta_frames_paint_to_drawable (frames, frame, pixmap);
-#endif
-
- set_background_none (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), frame->xwindow);
-}
-
#ifdef HAVE_SHAPE
static void
apply_cairo_region_to_window (Display *display,
@@ -2655,52 +2589,6 @@ meta_frames_paint (MetaFrames *frames,
icon);
}
-static void
-meta_frames_set_window_background (MetaFrames *frames,
- MetaUIFrame *frame)
-{
- MetaFrameFlags flags;
- MetaFrameType type;
- MetaFrameStyle *style;
- gboolean frame_exists;
-
- meta_core_get (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), frame->xwindow,
- META_CORE_WINDOW_HAS_FRAME, &frame_exists,
- META_CORE_GET_FRAME_FLAGS, &flags,
- META_CORE_GET_FRAME_TYPE, &type,
- META_CORE_GET_END);
-
- if (frame_exists)
- {
- style = meta_theme_get_frame_style (meta_theme_get_current (),
- type, flags);
- }
-
- if (frame_exists && style->window_background_color != NULL)
- {
- GdkRGBA color;
- GdkVisual *visual;
-
- meta_color_spec_render (style->window_background_color,
- frame->style,
- &color);
-
- /* Set A in ARGB to window_background_alpha, if we have ARGB */
-
- visual = gtk_widget_get_visual (GTK_WIDGET (frames));
- if (gdk_visual_get_depth (visual) == 32) /* we have ARGB */
- {
- color.alpha = style->window_background_alpha / 255.0;
- }
-
- gdk_window_set_background_rgba (frame->window, &color);
- }
- else
- {
- gtk_style_context_set_background (frame->style, frame->window);
- }
- }
-
static gboolean
meta_frames_enter_notify_event (GtkWidget *widget,
GdkEventCrossing *event)
diff --git a/src/ui/frames.h b/src/ui/frames.h
index ad6945a..4f8705e 100644
--- a/src/ui/frames.h
+++ b/src/ui/frames.h
@@ -136,13 +136,6 @@ void meta_frames_get_borders (MetaFrames *frames,
Window xwindow,
MetaFrameBorders *borders);
-void meta_frames_reset_bg (MetaFrames *frames,
- Window xwindow);
-void meta_frames_unflicker_bg (MetaFrames *frames,
- Window xwindow,
- int target_width,
- int target_height);
-
void meta_frames_apply_shapes (MetaFrames *frames,
Window xwindow,
int new_window_width,
diff --git a/src/ui/ui.c b/src/ui/ui.c
index 2cd8559..b2147e0 100644
--- a/src/ui/ui.c
+++ b/src/ui/ui.c
@@ -324,6 +324,17 @@ meta_ui_get_corner_radiuses (MetaUI *ui,
bottom_left, bottom_right);
}
+static void
+set_background_none (Display *xdisplay,
+ Window xwindow)
+{
+ XSetWindowAttributes attrs;
+
+ attrs.background_pixmap = None;
+ XChangeWindowAttributes (xdisplay, xwindow,
+ CWBackPixmap, &attrs);
+}
+
Window
meta_ui_create_frame_window (MetaUI *ui,
Display *xdisplay,
@@ -383,6 +394,7 @@ meta_ui_create_frame_window (MetaUI *ui,
&attrs, attributes_mask);
gdk_window_resize (window, width, height);
+ set_background_none (xdisplay, GDK_WINDOW_XID (window));
meta_frames_manage_window (ui->frames, GDK_WINDOW_XID (window), window);
@@ -436,16 +448,6 @@ meta_ui_unmap_frame (MetaUI *ui,
}
void
-meta_ui_unflicker_frame_bg (MetaUI *ui,
- Window xwindow,
- int target_width,
- int target_height)
-{
- meta_frames_unflicker_bg (ui->frames, xwindow,
- target_width, target_height);
-}
-
-void
meta_ui_update_frame_style (MetaUI *ui,
Window xwindow)
{
@@ -460,13 +462,6 @@ meta_ui_repaint_frame (MetaUI *ui,
}
void
-meta_ui_reset_frame_bg (MetaUI *ui,
- Window xwindow)
-{
- meta_frames_reset_bg (ui->frames, xwindow);
-}
-
-void
meta_ui_apply_frame_shape (MetaUI *ui,
Window xwindow,
int new_window_width,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]