summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--openbox/client.c14
-rw-r--r--openbox/client.h4
2 files changed, 12 insertions, 6 deletions
diff --git a/openbox/client.c b/openbox/client.c
index a685c11e..59af202a 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -461,6 +461,7 @@ void client_unmanage(ObClient *self)
g_free(self->name);
g_free(self->class);
g_free(self->role);
+ g_free(self->sm_client_id);
g_free(self);
/* update the list hints */
@@ -677,6 +678,7 @@ static void client_get_all(ObClient *self)
client_update_title(self);
client_update_class(self);
+ client_update_sm_client_id(self);
client_update_strut(self);
client_update_icons(self);
}
@@ -2795,13 +2797,15 @@ ObClient *client_search_transient(ObClient *self, ObClient *search)
return NULL;
}
-gchar* client_get_sm_client_id(ObClient *self)
+void client_update_sm_client_id(ObClient *self)
{
- gchar *id = NULL;
+ g_free(self->sm_client_id);
+ self->sm_client_id = NULL;
- if (!PROP_GETS(self->window, sm_client_id, locale, &id) && self->group)
- PROP_GETS(self->group->leader, sm_client_id, locale, &id);
- return id;
+ if (!PROP_GETS(self->window, sm_client_id, locale, &self->sm_client_id) &&
+ self->group)
+ PROP_GETS(self->group->leader, sm_client_id, locale,
+ &self->sm_client_id);
}
/* finds the nearest edge in the given direction from the current client
diff --git a/openbox/client.h b/openbox/client.h
index 06856b49..4d6ee56c 100644
--- a/openbox/client.h
+++ b/openbox/client.h
@@ -106,6 +106,8 @@ struct _ObClient
gchar *class;
/*! The specified role of the window, used for identification */
gchar *role;
+ /*! The session client id for the window. *This can be NULL!* */
+ gchar *sm_client_id;
/*! The type of window (what its function is) */
ObClientType type;
@@ -497,6 +499,6 @@ void client_set_layer(ObClient *self, int layer);
guint client_monitor(ObClient *self);
-gchar* client_get_sm_client_id(ObClient *self);
+void client_update_sm_client_id(ObClient *self);
#endif