diff options
Diffstat (limited to 'libwnck/application.c')
-rw-r--r-- | libwnck/application.c | 42 |
1 files changed, 16 insertions, 26 deletions
diff --git a/libwnck/application.c b/libwnck/application.c index 8d78209..08b8f6e 100644 --- a/libwnck/application.c +++ b/libwnck/application.c @@ -25,6 +25,7 @@ #include <glib/gi18n-lib.h> #include "application.h" #include "private.h" +#include "wnck-handle-private.h" #include "wnck-icon-cache-private.h" /** @@ -49,8 +50,6 @@ #define FALLBACK_NAME _("Untitled application") -static GHashTable *app_hash = NULL; - struct _WnckApplicationPrivate { Window xwindow; /* group leader */ @@ -96,16 +95,6 @@ static void wnck_application_finalize (GObject *object); static guint signals[LAST_SIGNAL] = { 0 }; -void -_wnck_application_shutdown_all (void) -{ - if (app_hash != NULL) - { - g_hash_table_destroy (app_hash); - app_hash = NULL; - } -} - static void wnck_application_init (WnckApplication *application) { @@ -203,10 +192,7 @@ wnck_application_finalize (GObject *object) WnckApplication* wnck_application_get (gulong xwindow) { - if (app_hash == NULL) - return NULL; - else - return g_hash_table_lookup (app_hash, &xwindow); + return _wnck_handle_get_application (_wnck_get_handle (), xwindow); } /** @@ -514,15 +500,14 @@ WnckApplication* _wnck_application_create (Window xwindow, WnckScreen *screen) { + WnckHandle *handle; WnckApplication *application; Screen *xscreen; - if (app_hash == NULL) - app_hash = g_hash_table_new_full (_wnck_xid_hash, _wnck_xid_equal, - NULL, g_object_unref); + handle = _wnck_screen_get_handle (screen); + application = _wnck_handle_get_application (handle, xwindow); - g_return_val_if_fail (g_hash_table_lookup (app_hash, &xwindow) == NULL, - NULL); + g_return_val_if_fail (application == NULL, NULL); xscreen = WNCK_SCREEN_XSCREEN (screen); @@ -545,9 +530,11 @@ _wnck_application_create (Window xwindow, application->priv->xwindow, _wnck_atom_get ("_NET_STARTUP_ID")); - g_hash_table_insert (app_hash, &application->priv->xwindow, application); + _wnck_handle_insert_application (handle, + &application->priv->xwindow, + application); - /* Hash now owns one ref, caller gets none */ + /* Handle now owns one ref, caller gets none */ /* Note that xwindow may correspond to a WnckWindow's xwindow, * so we select events needed by either @@ -563,13 +550,16 @@ _wnck_application_create (Window xwindow, void _wnck_application_destroy (WnckApplication *application) { + WnckHandle *handle; Window xwindow = application->priv->xwindow; - g_return_if_fail (wnck_application_get (xwindow) == application); + handle = _wnck_screen_get_handle (application->priv->screen); + + g_return_if_fail (_wnck_handle_get_application (handle, xwindow) == application); - g_hash_table_remove (app_hash, &xwindow); + _wnck_handle_remove_application (handle, &xwindow); - /* Removing from hash also removes the only ref WnckApplication had */ + /* Removing from handle also removes the only ref WnckApplication had */ g_return_if_fail (wnck_application_get (xwindow) == NULL); } |