Установка "Сохранить миниатюры окон", чтобы всегда в KDE "ломать минимизацию"? Как?
Эффекты рабочего стола KDE (композитинг) имеют настройку, когда сохранять миниатюры окон. Это говорит о том, что установка этого параметра всегда "ломает минимизацию". Кто-нибудь знает, как это ломает минимизацию?
2 ответа
Чтобы иметь возможность рисовать окна (за кадром), чтобы создавать миниатюры, KWin просто показывает их как свернутые, хотя на самом деле это не так.
Таким образом, окна могут быть сведены к минимуму, насколько может судить пользователь, но на самом деле это не так.
Это может вызвать проблемы с приложениями, которые хотят знать, свернуты они или нет, но на самом деле у вас не должно возникнуть проблем с выбором этой опции.
Приложения SDL получают события свертывания/восстановления с включенной функцией «Сохранять миниатюры окон», начиная с 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;
}
Во время цикла свертывания/восстановления следите за:
-
SDL_WINDOWEVENT_HIDDEN
-
SDL_WINDOWEVENT_MINIMIZED
-
SDL_WINDOWEVENT_RESTORED
-
SDL_WINDOWEVENT_SHOWN