[metacity] don't show shadow for maximized windows



commit 72d1c6a6b9a85391444bb5ff8c5de1e3aabd3fd9
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Mon Oct 6 22:42:17 2014 +0300

    don't show shadow for maximized windows

 src/compositor/compositor-private.h |    5 ++++
 src/compositor/compositor-xrender.c |   43 ++++++++++++++++++++++++++++++++++-
 src/compositor/compositor.c         |   20 ++++++++++++++++
 src/core/window.c                   |   10 ++++++++
 src/include/compositor.h            |   10 ++++----
 src/include/window.h                |    1 +
 6 files changed, 83 insertions(+), 6 deletions(-)
---
diff --git a/src/compositor/compositor-private.h b/src/compositor/compositor-private.h
index 7c09a01..11ed73b 100644
--- a/src/compositor/compositor-private.h
+++ b/src/compositor/compositor-private.h
@@ -47,6 +47,11 @@ struct _MetaCompositor
   void (*set_active_window) (MetaCompositor *compositor,
                              MetaScreen     *screen,
                              MetaWindow     *window);
+
+  void (*maximize_window)   (MetaCompositor *compositor,
+                             MetaWindow     *window);
+  void (*unmaximize_window) (MetaCompositor *compositor,
+                             MetaWindow     *window);
 };
 
 #endif
diff --git a/src/compositor/compositor-xrender.c b/src/compositor/compositor-xrender.c
index bc06fa6..99e10b2 100644
--- a/src/compositor/compositor-xrender.c
+++ b/src/compositor/compositor-xrender.c
@@ -897,6 +897,13 @@ window_has_shadow (MetaCompWindow *cw)
      as the frame might be the reason the window is shaped */
   if (cw->window)
     {
+      /* Do not add shadows for maximized windows */
+      if (meta_window_is_maximized (cw->window))
+        {
+          meta_verbose ("Window has no shadow because it is maximized\n");
+          return FALSE;
+        }
+
       if (meta_window_get_frame (cw->window)) {
         meta_verbose ("Window has shadow because it has a frame\n");
         return TRUE;
@@ -3001,6 +3008,38 @@ xrender_set_active_window (MetaCompositor *compositor,
 #endif
 }
 
+static void
+xrender_maximize_window (MetaCompositor *compositor,
+                         MetaWindow     *window)
+{
+#ifdef HAVE_COMPOSITE_EXTENSIONS
+  MetaFrame *frame = meta_window_get_frame (window);
+  Window xid = frame ? meta_frame_get_xwindow (frame) : meta_window_get_xwindow (window);
+  MetaCompWindow *cw = find_window_in_display (meta_window_get_display (window), xid);
+
+  if (!cw)
+    return;
+
+  cw->needs_shadow = window_has_shadow (cw);
+#endif
+}
+
+static void
+xrender_unmaximize_window (MetaCompositor *compositor,
+                           MetaWindow     *window)
+{
+#ifdef HAVE_COMPOSITE_EXTENSIONS
+  MetaFrame *frame = meta_window_get_frame (window);
+  Window xid = frame ? meta_frame_get_xwindow (frame) : meta_window_get_xwindow (window);
+  MetaCompWindow *cw = find_window_in_display (meta_window_get_display (window), xid);
+
+  if (!cw)
+    return;
+
+  cw->needs_shadow = window_has_shadow (cw);
+#endif
+}
+
 static MetaCompositor comp_info = {
   xrender_destroy,
   xrender_manage_screen,
@@ -3010,7 +3049,9 @@ static MetaCompositor comp_info = {
   xrender_set_updates,
   xrender_process_event,
   xrender_get_window_pixmap,
-  xrender_set_active_window
+  xrender_set_active_window,
+  xrender_maximize_window,
+  xrender_unmaximize_window,
 };
 
 MetaCompositor *
diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c
index 374b54e..0dcf2b2 100644
--- a/src/compositor/compositor.c
+++ b/src/compositor/compositor.c
@@ -155,3 +155,23 @@ void meta_compositor_free_window (MetaCompositor *compositor,
                                   MetaWindow     *window)
 {
 }
+
+void
+meta_compositor_maximize_window (MetaCompositor *compositor,
+                                 MetaWindow     *window)
+{
+#ifdef HAVE_COMPOSITE_EXTENSIONS
+  if (compositor && compositor->maximize_window)
+    compositor->maximize_window (compositor, window);
+#endif
+}
+
+void
+meta_compositor_unmaximize_window (MetaCompositor *compositor,
+                                   MetaWindow     *window)
+{
+#ifdef HAVE_COMPOSITE_EXTENSIONS
+  if (compositor && compositor->unmaximize_window)
+    compositor->unmaximize_window (compositor, window);
+#endif
+}
diff --git a/src/core/window.c b/src/core/window.c
index 34a0484..a7c7d5a 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -2616,6 +2616,8 @@ meta_window_maximize (MetaWindow        *window,
       /* move_resize with new maximization constraints
        */
       meta_window_queue(window, META_QUEUE_MOVE_RESIZE);
+
+      meta_compositor_maximize_window (window->display->compositor, window);
     }
 }
 
@@ -2797,6 +2799,8 @@ meta_window_unmaximize (MetaWindow        *window,
 
       recalc_window_features (window);
       set_net_wm_state (window);
+
+      meta_compositor_unmaximize_window (window->display->compositor, window);
     }
 }
 
@@ -8456,3 +8460,9 @@ meta_window_get_transient_for (MetaWindow *window)
   else
     return NULL;
 }
+
+gboolean
+meta_window_is_maximized (MetaWindow *window)
+{
+  return META_WINDOW_MAXIMIZED (window);
+}
diff --git a/src/include/compositor.h b/src/include/compositor.h
index c28eba1..38d7607 100644
--- a/src/include/compositor.h
+++ b/src/include/compositor.h
@@ -66,9 +66,9 @@ void meta_compositor_end_move (MetaCompositor *compositor,
 void meta_compositor_free_window (MetaCompositor *compositor,
                                   MetaWindow *window);
 
-#endif
-
-
-
-
+void meta_compositor_maximize_window   (MetaCompositor *compositor,
+                                        MetaWindow     *window);
+void meta_compositor_unmaximize_window (MetaCompositor *compositor,
+                                        MetaWindow     *window);
 
+#endif
diff --git a/src/include/window.h b/src/include/window.h
index de43579..011f6eb 100644
--- a/src/include/window.h
+++ b/src/include/window.h
@@ -34,5 +34,6 @@ MetaScreen *meta_window_get_screen (MetaWindow *window);
 MetaDisplay *meta_window_get_display (MetaWindow *window);
 Window meta_window_get_xwindow (MetaWindow *window);
 MetaWindow *meta_window_get_transient_for (MetaWindow *window);
+gboolean meta_window_is_maximized (MetaWindow *window);
 
 #endif


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]