diff --git a/src/application.c b/src/application.c index d25f0b5..113f578 100644 --- a/src/application.c +++ b/src/application.c @@ -114,10 +114,15 @@ WApplication *wApplicationCreate(WWindow * wwin) wapp->last_workspace = 0; wapp->main_window = main_window; - wapp->main_window_desc = makeMainWindow(scr, main_window); + /* If the main_window is also the client window (Wayland native apps), + * reuse the existing WWindow which already has a frame. */ + wapp->main_window_desc = wWindowFor(main_window); if (!wapp->main_window_desc) { - wfree(wapp); - return NULL; + wapp->main_window_desc = makeMainWindow(scr, main_window); + if (!wapp->main_window_desc) { + wfree(wapp); + return NULL; + } } wapp->main_window_desc->fake_group = wwin->fake_group; diff --git a/src/window.c b/src/window.c index 80fa032..06bd6a0 100644 --- a/src/window.c +++ b/src/window.c @@ -773,6 +773,14 @@ WWindow *wManageWindow(WScreen *scr, WNativeWindow window) if (wwin->flags.is_dockapp) wwin->client_flags.shared_appicon = 0; + /* Wayland native clients have no real leader; don't merge them + * under a fake shared group which replaces main_window. */ + if (wwin->client_leader == WM_NATIVE_NONE && wwin->group_id == WM_NATIVE_NONE) { + wwin->client_flags.shared_appicon = 0; + wwin->user_flags.shared_appicon = 0; + wwin->defined_user_flags.shared_appicon = 0; + } + if (wwin->main_window) { WApplication *app = wApplicationOf(wwin->main_window); if (app && app->app_icon)