summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Untz <vuntz@gnome.org>2012-01-30 14:22:33 +0100
committerVincent Untz <vuntz@gnome.org>2012-01-30 15:05:41 +0100
commitbb27586c2cb81bb650d2a2d8a183ac89fccf5960 (patch)
tree7610abf920d2c5de6cd3b87e708dcb0bb1f51a1e
parent0dde8be271f19cfc2368aaf59f25a48f5ee51f08 (diff)
downloadlibwnck-bb27586c2cb81bb650d2a2d8a183ac89fccf5960.tar.gz
core: Rely on finalize() instead of manual shutdown() functions
For WnckScreen and WnckWindow, there was a manual shutdown function called for each object. However, when we shut down, we know that the object will have no reference left and will get finalized. So we can simply rely on the finalize() functions.
-rw-r--r--libwnck/private.h2
-rw-r--r--libwnck/screen.c26
-rw-r--r--libwnck/window.c12
3 files changed, 14 insertions, 26 deletions
diff --git a/libwnck/private.h b/libwnck/private.h
index 4175f70..d92eda7 100644
--- a/libwnck/private.h
+++ b/libwnck/private.h
@@ -55,7 +55,6 @@ WnckWindow* _wnck_window_create (Window xwindow,
WnckScreen *screen,
gint sort_order);
void _wnck_window_destroy (WnckWindow *window);
-void _wnck_window_shutdown (WnckWindow *window);
char* _wnck_window_get_name_for_display (WnckWindow *window,
gboolean use_icon_name,
@@ -106,7 +105,6 @@ void _wnck_screen_change_workspace_name (WnckScreen *screen,
int number,
const char *name);
-void _wnck_screen_shutdown (WnckScreen *screen);
void _wnck_screen_shutdown_all (void);
gboolean _wnck_workspace_set_geometry (WnckWorkspace *space, int w, int h);
diff --git a/libwnck/screen.c b/libwnck/screen.c
index 11f4e30..c47640c 100644
--- a/libwnck/screen.c
+++ b/libwnck/screen.c
@@ -513,6 +513,11 @@ wnck_screen_finalize (GObject *object)
screen = WNCK_SCREEN (object);
+ _wnck_select_input (screen->priv->xscreen,
+ screen->priv->xroot,
+ 0,
+ FALSE);
+
unqueue_update (screen);
for (tmp = screen->priv->stacked_windows; tmp; tmp = tmp->next)
@@ -2758,21 +2763,6 @@ _wnck_screen_change_workspace_name (WnckScreen *screen,
}
void
-_wnck_screen_shutdown (WnckScreen *screen)
-{
- GList *item;
- g_return_if_fail (WNCK_IS_SCREEN (screen));
-
- _wnck_select_input (screen->priv->xscreen,
- screen->priv->xroot,
- 0,
- FALSE);
- for (item = screen->priv->mapped_windows; item != NULL; item = g_list_next (item))
- _wnck_window_shutdown (WNCK_WINDOW (item->data));
- wnck_screen_finalize (G_OBJECT (screen));
-}
-
-void
_wnck_screen_shutdown_all (void)
{
int i;
@@ -2785,8 +2775,10 @@ _wnck_screen_shutdown_all (void)
for (i = 0; i < ScreenCount (display); ++i)
{
- if (screens[i] != NULL)
- _wnck_screen_shutdown (screens[i]);
+ if (screens[i] != NULL) {
+ g_object_unref (screens[i]);
+ screens[i] = NULL;
+ }
}
g_free (screens);
diff --git a/libwnck/window.c b/libwnck/window.c
index 8d77a50..e78af89 100644
--- a/libwnck/window.c
+++ b/libwnck/window.c
@@ -418,6 +418,11 @@ wnck_window_finalize (GObject *object)
window = WNCK_WINDOW (object);
+ _wnck_select_input (WNCK_SCREEN_XSCREEN (window->priv->screen),
+ window->priv->xwindow,
+ window->priv->orig_event_mask,
+ FALSE);
+
unqueue_update (window);
if (window->priv->app)
@@ -590,13 +595,6 @@ _wnck_window_destroy (WnckWindow *window)
g_return_if_fail (wnck_window_get (xwindow) == NULL);
}
-void
-_wnck_window_shutdown (WnckWindow *window)
-{
- _wnck_select_input (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow, window->priv->orig_event_mask, FALSE);
-}
-
static Display *
_wnck_window_get_display (WnckWindow *window)
{