diff options
author | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2019-08-21 19:24:19 +0300 |
---|---|---|
committer | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2019-08-22 18:21:45 +0300 |
commit | cb91162897ded460a99fa4508623c22e176e486c (patch) | |
tree | 9a165eb65d9914c1dca17689b56fb2e21dbc419d | |
parent | 55dacbf595590aa656a04c4d516ac8f3c1fbbd27 (diff) | |
download | metacity-cb91162897ded460a99fa4508623c22e176e486c.tar.gz |
window: add meta_window_reframe
-rw-r--r-- | src/core/window-private.h | 5 | ||||
-rw-r--r-- | src/core/window.c | 36 |
2 files changed, 41 insertions, 0 deletions
diff --git a/src/core/window-private.h b/src/core/window-private.h index faa546c7..7f7eb276 100644 --- a/src/core/window-private.h +++ b/src/core/window-private.h @@ -99,8 +99,11 @@ struct _MetaWindow MetaScreen *screen; MetaWorkspace *workspace; Window xwindow; + /* may be NULL! not all windows get decorated */ MetaFrame *frame; + guint reframe_id; + int depth; Visual *xvisual; Colormap colormap; @@ -718,6 +721,8 @@ gboolean meta_window_updates_are_frozen (MetaWindow *window); void meta_window_update_shape_region (MetaWindow *window); +void meta_window_reframe (MetaWindow *window); + G_END_DECLS #endif diff --git a/src/core/window.c b/src/core/window.c index 6aea86d9..50118752 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -9203,6 +9203,24 @@ meta_window_update_shape_region (MetaWindow *window) meta_compositor_window_shape_region_changed (window->display->compositor, window); } +static gboolean +reframe_cb (gpointer user_data) +{ + MetaWindow *window; + + window = META_WINDOW (user_data); + window->reframe_id = 0; + + if (!window->decorated) + return G_SOURCE_REMOVE; + + meta_window_ensure_frame (window); + meta_window_queue (window, META_QUEUE_MOVE_RESIZE | META_QUEUE_CALC_SHOWING); + g_object_notify_by_pspec (G_OBJECT (window), properties[PROP_DECORATED]); + + return G_SOURCE_REMOVE; +} + static void meta_window_finalize (GObject *object) { @@ -9210,6 +9228,12 @@ meta_window_finalize (GObject *object) window = META_WINDOW (object); + if (window->reframe_id != 0) + { + g_source_remove (window->reframe_id); + window->reframe_id = 0; + } + g_clear_object (&window->icon); g_clear_object (&window->mini_icon); @@ -9289,3 +9313,15 @@ static void meta_window_init (MetaWindow *window) { } + +void +meta_window_reframe (MetaWindow *window) +{ + if (!window->decorated) + return; + + meta_window_destroy_frame (window); + meta_window_move_resize_now (window); + + window->reframe_id = g_idle_add (reframe_cb, window); +} |