diff --git a/src/dock.c b/src/dock.c index 2449d88f..29091e3e 100644 --- a/src/dock.c +++ b/src/dock.c @@ -4382,13 +4382,26 @@ static void drawerDestroy(WDock *drawer) wDefaultPurgeInfo(scr, drawer->icon_array[0]->wm_instance, drawer->icon_array[0]->wm_class); - icons = WMCreateArray(drawer->icon_count - 1); - for (i = 1; i < drawer->max_icons; i++) { - if (!(aicon = drawer->icon_array[i])) - continue; - WMAddToArray(icons, aicon); + if (drawer->icon_count == 2) { + // Drawer contains a single appicon: dock it where the drawer was + for (i = 1; i < drawer->max_icons; i++) { + if ((aicon = drawer->icon_array[i])) + break; + } + wDockMoveIconBetweenDocks(drawer, scr->dock, aicon, + 0, (drawer->y_pos - scr->dock->y_pos) / ICON_SIZE); + XMoveWindow(dpy, aicon->icon->core->window, drawer->x_pos, drawer->y_pos); + XMapWindow(dpy, aicon->icon->core->window); + } + else if (drawer->icon_count > 2) { + icons = WMCreateArray(drawer->icon_count - 1); + for (i = 1; i < drawer->max_icons; i++) { + if (!(aicon = drawer->icon_array[i])) + continue; + WMAddToArray(icons, aicon); + } + removeIcons(icons, drawer); } - removeIcons(icons, drawer); if (drawer->auto_collapse_magic) { WMDeleteTimerHandler(drawer->auto_collapse_magic); @@ -4416,7 +4429,7 @@ static void removeDrawerCallback(WMenu *menu, WMenuEntry *entry) WDock *dock = ((WAppIcon*)entry->clientdata)->dock; assert(dock != NULL); - if (dock->icon_count > 1) { + if (dock->icon_count > 2) { if (wMessageDialog(dock->screen_ptr, _("Drawer"), _("All icons in this drawer will be detached!"), _("OK"), _("Cancel"), NULL) != WAPRDefault)