g_message("Unmanaging window: %lx", client->window);
dispatch_client(Event_Client_Destroy, client, 0, 0);
+ g_assert(client != NULL);
/* remove the window from our save set */
XChangeSaveSet(ob_display, client->window, SetModeDelete);
/* dispatch the unmapped event */
dispatch_client(Event_Client_Unmapped, client, 0, 0);
+ g_assert(client != NULL);
/* give the client its border back */
client_toggle_border(client, TRUE);
g_free(client->icons);
g_free(client->title);
g_free(client->icon_title);
- g_free(client->res_name);
- g_free(client->res_class);
+ g_free(client->name);
+ g_free(client->class);
g_free(client->role);
g_free(client);
/* defaults */
self->frame = NULL;
self->title = self->icon_title = NULL;
- self->res_name = self->res_class = self->role = NULL;
+ self->name = self->class = self->role = NULL;
self->wmstate = NormalState;
self->transient = FALSE;
self->transients = NULL;
client_change_allowed_actions(self);
if (self->frame) {
- /* change the decors on the frame */
- engine_frame_adjust_size(self->frame);
- /* with more/less decorations, we may need to be repositioned */
- engine_frame_adjust_position(self->frame);
+ /* change the decors on the frame, and with more/less decorations,
+ we may also need to be repositioned */
+ engine_frame_adjust_area(self->frame);
/* with new decor, the window's maximized size may change */
client_remaximize(self);
}
{
gchar *data = NULL;
- if (self->title != NULL)
- g_free(self->title);
+ g_free(self->title);
/* try netwm */
if (!PROP_GETS(self->window, net_wm_name, utf8, data)) {
{
gchar *data = NULL;
- if (self->icon_title != NULL)
- g_free(self->icon_title);
+ g_free(self->icon_title);
/* try netwm */
if (!PROP_GETS(self->window, net_wm_icon_name, utf8, data)) {
gchar *s;
guint i;
- if (self->res_name) g_free(self->res_name);
- if (self->res_class) g_free(self->res_class);
+ if (self->name) g_free(self->name);
+ if (self->class) g_free(self->class);
if (self->role) g_free(self->role);
- self->res_name = self->res_class = self->role = NULL;
+ self->name = self->class = self->role = NULL;
data = g_ptr_array_new();
if (PROP_GETSA(self->window, wm_class, string, data)) {
if (data->len > 0)
- self->res_name = g_strdup(g_ptr_array_index(data, 0));
+ self->name = g_strdup(g_ptr_array_index(data, 0));
if (data->len > 1)
- self->res_class = g_strdup(g_ptr_array_index(data, 1));
+ self->class = g_strdup(g_ptr_array_index(data, 1));
}
for (i = 0; i < data->len; ++i)
if (PROP_GETS(self->window, wm_window_role, string, s))
self->role = g_strdup(s);
- if (self->res_name == NULL) self->res_name = g_strdup("");
- if (self->res_class == NULL) self->res_class = g_strdup("");
+ if (self->name == NULL) self->name = g_strdup("");
+ if (self->class == NULL) self->class = g_strdup("");
if (self->role == NULL) self->role = g_strdup("");
}
/* move/resize the frame to match the request */
if (self->frame) {
- /* Adjust the size and then the position, as required by the EWMH */
- if (resized)
- engine_frame_adjust_size(self->frame);
- if (moved) {
- engine_frame_adjust_position(self->frame);
+ engine_frame_adjust_area(self->frame);
+ if (moved) {
if (!user || final) {
XEvent event;
event.type = ConfigureNotify;
self->wmstate = shade ? IconicState : NormalState;
self->shaded = shade;
client_change_state(self);
- engine_frame_adjust_size(self->frame);
+ /* resize the frame to just the titlebar */
+ engine_frame_adjust_area(self->frame);
}
void client_close(Client *self)
XSendEvent(ob_display, self->window, FALSE, NoEventMask, &ce);
}
+void client_kill(Client *self)
+{
+ XKillClient(ob_display, self->window);
+}
+
void client_set_desktop(Client *self, guint target)
{
guint old, i;