diff options
-rw-r--r-- | source/dialogs/window.c | 11 |
1 files 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 ) { |