[metacity] window: add meta_window_reframe



commit cb91162897ded460a99fa4508623c22e176e486c
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Wed Aug 21 19:24:19 2019 +0300

    window: add meta_window_reframe

 src/core/window-private.h |  5 +++++
 src/core/window.c         | 36 ++++++++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+)
---
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);
+}


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