X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=556430ec53594ce1d863bf12be441937b23570e1;hb=a26cd30bf068c2cf7edbfdb5a20548d04bfb3179;hp=c44fe3436de456a527cf340f771e7c76b95b70f8;hpb=9a4ccc919c0e877f2c6e66b540f86169fac18dc1;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index c44fe343..556430ec 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -228,6 +228,7 @@ void client_unmanage(Client *client) 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); @@ -239,6 +240,7 @@ void client_unmanage(Client *client) /* 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); @@ -300,8 +302,8 @@ void client_unmanage(Client *client) 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); @@ -384,7 +386,7 @@ static void client_get_all(Client *self) /* 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; @@ -815,10 +817,9 @@ void client_setup_decor_and_functions(Client *self) 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); } @@ -947,8 +948,7 @@ void client_update_title(Client *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)) { @@ -982,8 +982,7 @@ void client_update_icon_title(Client *self) { 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)) { @@ -1016,19 +1015,19 @@ void client_update_class(Client *self) 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) @@ -1038,8 +1037,8 @@ void client_update_class(Client *self) 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(""); } @@ -1388,12 +1387,9 @@ void client_configure(Client *self, Corner anchor, int x, int y, int w, int h, /* 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; @@ -1627,7 +1623,8 @@ void client_shade(Client *self, gboolean shade) 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) @@ -1657,6 +1654,11 @@ 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;