diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/window-private.h | 8 | ||||
| -rw-r--r-- | src/core/window.c | 70 | ||||
| -rw-r--r-- | src/include/window.h | 8 | 
3 files changed, 62 insertions, 24 deletions
| diff --git a/src/core/window-private.h b/src/core/window-private.h index 6b57c4b2..02b7df42 100644 --- a/src/core/window-private.h +++ b/src/core/window-private.h @@ -45,6 +45,8 @@  #include <gdk-pixbuf/gdk-pixbuf.h>  #include <gtk/gtk.h> +G_BEGIN_DECLS +  typedef struct _MetaGroup MetaGroup;  typedef struct _MetaWindowQueue MetaWindowQueue; @@ -97,6 +99,8 @@ typedef enum {  struct _MetaWindow  { +  GObject parent; +    MetaDisplay *display;    MetaScreen *screen;    MetaWorkspace *workspace; @@ -700,4 +704,6 @@ void meta_window_update_net_wm_type (MetaWindow *window);  gboolean meta_window_can_tile (MetaWindow *window); -#endif +G_END_DECLS + +#endif /* META_WINDOW_PRIVATE_H */ diff --git a/src/core/window.c b/src/core/window.c index 5f75e901..e377d7df 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -139,6 +139,8 @@ static gboolean idle_calc_showing (gpointer data);  static gboolean idle_move_resize (gpointer data);  static gboolean idle_update_icon (gpointer data); +G_DEFINE_TYPE (MetaWindow, meta_window, G_TYPE_OBJECT) +  #ifdef WITH_VERBOSE_MODE  static const char*  wm_state_to_string (int state) @@ -386,7 +388,7 @@ meta_window_new_with_attrs (MetaDisplay       *display,    g_assert (!attrs->override_redirect); -  window = g_new (MetaWindow, 1); +  window = g_object_new (META_TYPE_WINDOW, NULL);    window->constructing = TRUE; @@ -1209,28 +1211,7 @@ meta_window_free (MetaWindow  *window,    meta_error_trap_pop (window->display, FALSE); -  if (window->icon) -    g_object_unref (G_OBJECT (window->icon)); - -  if (window->mini_icon) -    g_object_unref (G_OBJECT (window->mini_icon)); - -  if (window->frame_bounds) -    cairo_region_destroy (window->frame_bounds); - -  meta_icon_cache_free (&window->icon_cache); - -  g_free (window->sm_client_id); -  g_free (window->wm_client_machine); -  g_free (window->startup_id); -  g_free (window->role); -  g_free (window->res_class); -  g_free (window->res_name); -  g_free (window->title); -  g_free (window->icon_name); -  g_free (window->desc); -  g_free (window->gtk_theme_variant); -  g_free (window); +  g_object_unref (window);  }  static void @@ -8889,3 +8870,46 @@ meta_window_get_frame_bounds (MetaWindow *window)    return window->frame_bounds;  } + +static void +meta_window_finalize (GObject *object) +{ +  MetaWindow *window; + +  window = META_WINDOW (object); + +  g_clear_object (&window->icon); +  g_clear_object (&window->mini_icon); + +  g_clear_pointer (&window->frame_bounds, cairo_region_destroy); + +  meta_icon_cache_free (&window->icon_cache); + +  g_clear_pointer (&window->sm_client_id, g_free); +  g_clear_pointer (&window->wm_client_machine, g_free); +  g_clear_pointer (&window->startup_id, g_free); +  g_clear_pointer (&window->role, g_free); +  g_clear_pointer (&window->res_class, g_free); +  g_clear_pointer (&window->res_name, g_free); +  g_clear_pointer (&window->title, g_free); +  g_clear_pointer (&window->icon_name, g_free); +  g_clear_pointer (&window->desc, g_free); +  g_clear_pointer (&window->gtk_theme_variant, g_free); + +  G_OBJECT_CLASS (meta_window_parent_class)->finalize (object); +} + +static void +meta_window_class_init (MetaWindowClass *window_class) +{ +  GObjectClass *object_class; + +  object_class = G_OBJECT_CLASS (window_class); + +  object_class->finalize = meta_window_finalize; +} + +static void +meta_window_init (MetaWindow *window) +{ +} diff --git a/src/include/window.h b/src/include/window.h index 0aa208e4..6dece7d3 100644 --- a/src/include/window.h +++ b/src/include/window.h @@ -23,12 +23,18 @@  #define META_WINDOW_H  #include <glib.h> +#include <glib-object.h>  #include <cairo.h>  #include <X11/Xlib.h>  #include "boxes.h"  #include "types.h" +G_BEGIN_DECLS + +#define META_TYPE_WINDOW meta_window_get_type () +G_DECLARE_FINAL_TYPE (MetaWindow, meta_window, META, WINDOW, GObject) +  MetaFrame *meta_window_get_frame (MetaWindow *window);  gboolean meta_window_has_focus (MetaWindow *window);  gboolean meta_window_is_shaded (MetaWindow *window); @@ -40,4 +46,6 @@ MetaWindow *meta_window_get_transient_for (MetaWindow *window);  gboolean meta_window_is_maximized (MetaWindow *window);  cairo_region_t *meta_window_get_frame_bounds (MetaWindow *window); +G_END_DECLS +  #endif | 
