void unmanage_client(Window win) { Client* client = get_client_from_window(win); if (!client) return; // remove from tag frame_remove_window(client->tag->frame, win); // and arrange monitor Monitor* m = find_monitor_with_tag(client->tag); if (m) monitor_apply_layout(m); // ignore events from it XSelectInput(gDisplay, win, 0); XUngrabButton(gDisplay, AnyButton, AnyModifier, win); // permanently remove it for(int i=0; i<g_clients->len; i++){ if(g_array_index(g_clients, Client*, i) == client) g_array_remove_index(g_clients, i); } }
void unmanage_client(Window win) { HSClient* client = get_client_from_window(win); if (!client) { return; } if (client->dragged) { mouse_stop_drag(); } // remove from tag frame_remove_window(client->tag->frame, win); // ignore events from it XSelectInput(g_display, win, 0); //XUngrabButton(g_display, AnyButton, AnyModifier, win); // permanently remove it HSTag* tag = client->tag; g_hash_table_remove(g_clients, &win); // and arrange monitor after the client has been removed from the stack HSMonitor* m = find_monitor_with_tag(tag); tag_update_focus_layer(tag); if (m) monitor_apply_layout(m); ewmh_remove_client(win); tag_set_flags_dirty(); }