summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2014-10-06 22:42:17 +0300
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2014-10-06 22:42:17 +0300
commit72d1c6a6b9a85391444bb5ff8c5de1e3aabd3fd9 (patch)
tree469386336764c78b66b17ddf29d4fbe4b72371f5
parent130f3686ffe5c914f7b721f4623bee825df7c3bb (diff)
downloadmetacity-72d1c6a6b9a85391444bb5ff8c5de1e3aabd3fd9.tar.gz
don't show shadow for maximized windows
-rw-r--r--src/compositor/compositor-private.h5
-rw-r--r--src/compositor/compositor-xrender.c43
-rw-r--r--src/compositor/compositor.c20
-rw-r--r--src/core/window.c10
-rw-r--r--src/include/compositor.h10
-rw-r--r--src/include/window.h1
6 files changed, 83 insertions, 6 deletions
diff --git a/src/compositor/compositor-private.h b/src/compositor/compositor-private.h
index 7c09a01a..11ed73b1 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 bc06fa6a..99e10b20 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 374b54e3..0dcf2b22 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 34a04845..a7c7d5a6 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 c28eba1e..38d76073 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 de43579c..011f6ebf 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