diff options
author | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2014-10-06 22:42:17 +0300 |
---|---|---|
committer | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2014-10-06 22:42:17 +0300 |
commit | 72d1c6a6b9a85391444bb5ff8c5de1e3aabd3fd9 (patch) | |
tree | 469386336764c78b66b17ddf29d4fbe4b72371f5 | |
parent | 130f3686ffe5c914f7b721f4623bee825df7c3bb (diff) | |
download | metacity-72d1c6a6b9a85391444bb5ff8c5de1e3aabd3fd9.tar.gz |
don't show shadow for maximized windows
-rw-r--r-- | src/compositor/compositor-private.h | 5 | ||||
-rw-r--r-- | src/compositor/compositor-xrender.c | 43 | ||||
-rw-r--r-- | src/compositor/compositor.c | 20 | ||||
-rw-r--r-- | src/core/window.c | 10 | ||||
-rw-r--r-- | src/include/compositor.h | 10 | ||||
-rw-r--r-- | 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 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 |