From b71f51523a7de3bf1ac32f24f6e7dd32355e6690 Mon Sep 17 00:00:00 2001 From: Dave Davenport Date: Fri, 20 Dec 2019 15:49:33 +0100 Subject: [Window] Remove arbitrary limit of 100 windows. Fixes: #1047 --- source/dialogs/window.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/source/dialogs/window.c b/source/dialogs/window.c index ba244a03..37410f3e 100644 --- a/source/dialogs/window.c +++ b/source/dialogs/window.c @@ -470,7 +470,7 @@ static void _window_mode_load_data ( Mode *sw, unsigned int cd ) ModeModePrivateData *pd = (ModeModePrivateData *) mode_get_private_data ( sw ); // find window list int nwins = 0; - xcb_window_t wins[100]; + xcb_window_t *wins = NULL; xcb_window_t curr_win_id; // Create cache @@ -491,15 +491,15 @@ static void _window_mode_load_data ( Mode *sw, unsigned int cd ) c = xcb_ewmh_get_client_list_stacking ( &xcb->ewmh, 0 ); xcb_ewmh_get_windows_reply_t clients; if ( xcb_ewmh_get_client_list_stacking_reply ( &xcb->ewmh, c, &clients, NULL ) ) { - nwins = MIN ( 100, clients.windows_len ); - memcpy ( wins, clients.windows, nwins * sizeof ( xcb_window_t ) ); + nwins = clients.windows_len; + wins = g_memdup(clients.windows, (nwins)*sizeof(xcb_window_t)); xcb_ewmh_get_windows_reply_wipe ( &clients ); } else { c = xcb_ewmh_get_client_list ( &xcb->ewmh, xcb->screen_nbr ); if ( xcb_ewmh_get_client_list_reply ( &xcb->ewmh, c, &clients, NULL ) ) { - nwins = MIN ( 100, clients.windows_len ); - memcpy ( wins, clients.windows, nwins * sizeof ( xcb_window_t ) ); + nwins = clients.windows_len; + wins = g_memdup(clients.windows, (nwins)*sizeof(xcb_window_t)); xcb_ewmh_get_windows_reply_wipe ( &clients ); } } @@ -586,6 +586,7 @@ static void _window_mode_load_data ( Mode *sw, unsigned int cd ) xcb_ewmh_get_utf8_strings_reply_wipe ( &names ); } } + g_free ( wins ); } static int window_mode_init ( Mode *sw ) { -- cgit v1.2.3