KDE's Desktop effects (compositing) has a setting for when to keep window thumbnails. It says that setting this to always "breaks minimization". Does anyone know how it breaks minimization?
2 Answers
In order to be able to draw the windows (offscreen) so that it can create the thumbnails, KWin just shows them as minimized, while they aren't really.
So, the windows get minimized, as far as the user can tell, but they aren't really.
This could produce problems with applications that want to know whether they are minimized or not, but in reality, you shouldn't have any problems by choosing this option.
- 216
SDL apps get minimize/restore events with "Keep window thumbnails" on as of at least KDE 5.20:
// g++ main.cpp `pkg-config --cflags --libs sdl2`
#include <SDL.h>
#include <iostream>
#define CASE_STR( value ) case value: return #value;
const char* sdlGetWindowEventString( Uint8 event )
{
switch( event )
{
CASE_STR( SDL_WINDOWEVENT_NONE )
CASE_STR( SDL_WINDOWEVENT_SHOWN )
CASE_STR( SDL_WINDOWEVENT_HIDDEN )
CASE_STR( SDL_WINDOWEVENT_EXPOSED )
CASE_STR( SDL_WINDOWEVENT_MOVED )
CASE_STR( SDL_WINDOWEVENT_RESIZED )
CASE_STR( SDL_WINDOWEVENT_SIZE_CHANGED )
CASE_STR( SDL_WINDOWEVENT_MINIMIZED )
CASE_STR( SDL_WINDOWEVENT_MAXIMIZED )
CASE_STR( SDL_WINDOWEVENT_RESTORED )
CASE_STR( SDL_WINDOWEVENT_ENTER )
CASE_STR( SDL_WINDOWEVENT_LEAVE )
CASE_STR( SDL_WINDOWEVENT_FOCUS_GAINED )
CASE_STR( SDL_WINDOWEVENT_FOCUS_LOST )
CASE_STR( SDL_WINDOWEVENT_CLOSE )
CASE_STR( SDL_WINDOWEVENT_TAKE_FOCUS )
CASE_STR( SDL_WINDOWEVENT_HIT_TEST )
//CASE_STR( SDL_WINDOWEVENT_ICCPROF_CHANGED )
//CASE_STR( SDL_WINDOWEVENT_DISPLAY_CHANGED )
default: return "Unknown";
}
}
#undef CASE_STR
int main( int argc, char** argv )
{
SDL_Init( SDL_INIT_EVERYTHING );
SDL_Window* window = SDL_CreateWindow
(
"SDL2",
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
640, 480,
SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE
);
bool running = true;
while( running )
{
SDL_Surface* surface = SDL_GetWindowSurface( window );
SDL_FillRect( surface, nullptr, SDL_MapRGB( surface->format, 127, 127, 127 ) );
SDL_UpdateWindowSurface( window );
SDL_Event ev;
if( SDL_WaitEvent( &ev ) )
{
if( ( SDL_QUIT == ev.type ) ||
( SDL_KEYDOWN == ev.type && SDL_SCANCODE_ESCAPE == ev.key.keysym.scancode ) )
{
running = false;
break;
}
if( SDL_WINDOWEVENT == ev.type )
{
std::cout << sdlGetWindowEventString( ev.window.event );
std::cout << '\n';
}
}
}
SDL_DestroyWindow( window );
SDL_Quit();
return 0;
}
During a minimize/restore cycle watch for:
SDL_WINDOWEVENT_HIDDENSDL_WINDOWEVENT_MINIMIZEDSDL_WINDOWEVENT_RESTOREDSDL_WINDOWEVENT_SHOWN
- 555