# the factory macros cause errors
kde4_no_enable_final(kwineffects)

# Uncomment to have the test effects built as well
#add_subdirectory( _test )

# Adds effect plugin with given name. Sources are given after the name
macro( KWIN4_ADD_EFFECT name )
    kde4_add_plugin( kwin4_effect_${name} ${ARGN} )
    target_link_libraries( kwin4_effect_${name} kwineffects ${KDE4_KDEUI_LIBS} kephal ${KDE4_PLASMA_LIBS} ${X11_Xfixes_LIB} ${X11_Xcursor_LIB})
    if (X11_Xfixes_FOUND)
        target_link_libraries(kwin4_effect_${name} ${X11_Xfixes_LIB})
    endif (X11_Xfixes_FOUND)
    install( TARGETS kwin4_effect_${name} DESTINATION ${PLUGIN_INSTALL_DIR} )
endmacro( KWIN4_ADD_EFFECT )

macro( KWIN4_ADD_EFFECT_CONFIG name )
    set( kwin4_effect_ui ) # Initially empty
    set( kwin4_effect_src ) # Initially empty

    foreach( file ${ARGN} )
        if( file MATCHES \\.ui )
            set( kwin4_effect_ui ${kwin4_effect_ui} ${file} )
        else( file MATCHES \\.ui )
            set( kwin4_effect_src ${kwin4_effect_src} ${file} )
        endif( file MATCHES \\.ui )
    endforeach( file )

    kde4_add_ui_files( kwin4_effect_src ${kwin4_effect_ui} )
    kde4_add_plugin( kcm_kwin4_effect_${name} ${kwin4_effect_src} )
    target_link_libraries( kcm_kwin4_effect_${name} kwineffects ${KDE4_KIO_LIBS} ${KDE4_KDEUI_LIBS} kephal )
    install( TARGETS kcm_kwin4_effect_${name} DESTINATION ${PLUGIN_INSTALL_DIR} )
endmacro( KWIN4_ADD_EFFECT_CONFIG )

macro( KWIN4_EFFECT_LINK_XRENDER name )
    if( KWIN_HAVE_XRENDER_COMPOSITING )
        target_link_libraries( kwin4_effect_${name} ${X11_Xrender_LIB} ${X11_LIBRARIES} kephal )
    endif( KWIN_HAVE_XRENDER_COMPOSITING )
endmacro( KWIN4_EFFECT_LINK_XRENDER )

# Make sure we can see our libraries
include_directories(
    ${KDEBASE_WORKSPACE_SOURCE_DIR}/kwin/lib
    )

# Install the KWin/Effect service type
install( FILES kwineffect.desktop DESTINATION ${SERVICETYPES_INSTALL_DIR} )

# Create initial variables
set( kwin4_effect_builtins_sources )
if( NOT KWIN_MOBILE_EFFECTS )
    set( kwin4_effect_builtins_config_sources configs_builtins.cpp )
endif( NOT KWIN_MOBILE_EFFECTS )
set( kwin4_effect_include_directories )

###############################################################################
# Built-in effects go here

# Common effects
include( dialogparent/CMakeLists.txt )
include( fade/CMakeLists.txt )
include( login/CMakeLists.txt )
include( outline/CMakeLists.txt )
include( presentwindows/CMakeLists.txt )
include( slidingpopups/CMakeLists.txt )
include( taskbarthumbnail/CMakeLists.txt )

# Common effects only relevant to desktop
if( NOT KWIN_MOBILE_EFFECTS )
    include( boxswitch/CMakeLists.txt )
    include( dashboard/CMakeLists.txt )
    include( desktopgrid/CMakeLists.txt )
    include( diminactive/CMakeLists.txt )
    include( dimscreen/CMakeLists.txt )
    include( fadedesktop/CMakeLists.txt )
    include( fallapart/CMakeLists.txt )
    include( highlightwindow/CMakeLists.txt )
    include( magiclamp/CMakeLists.txt )
    include( translucency/CMakeLists.txt )
    include( minimizeanimation/CMakeLists.txt )
    include( resize/CMakeLists.txt )
    include( scalein/CMakeLists.txt )
    include( showfps/CMakeLists.txt )
    include( showpaint/CMakeLists.txt )
    include( slide/CMakeLists.txt )
    include( slideback/CMakeLists.txt )
    include( thumbnailaside/CMakeLists.txt )
    include( windowgeometry/CMakeLists.txt )
    include( zoom/CMakeLists.txt )

    if( NOT KWIN_HAVE_OPENGLES_COMPOSITING )
    include( logout/CMakeLists.txt )
    endif( NOT KWIN_HAVE_OPENGLES_COMPOSITING )
endif( NOT KWIN_MOBILE_EFFECTS )

# OpenGL-specific effects
if( KWIN_HAVE_OPENGL_COMPOSITING )
    include( blur/CMakeLists.txt )
    include( screenshot/CMakeLists.txt )
    # OpenGL-specific effects for desktop
    if( NOT KWIN_MOBILE_EFFECTS )
        include( coverswitch/CMakeLists.txt )
        include( cube/CMakeLists.txt )
        include( explosion/CMakeLists.txt )
        include( flipswitch/CMakeLists.txt )
        include( glide/CMakeLists.txt )
        include( invert/CMakeLists.txt )
        include( lookingglass/CMakeLists.txt )
        include( magnifier/CMakeLists.txt )
        include( mousemark/CMakeLists.txt )
        include( sheet/CMakeLists.txt )
        include( snaphelper/CMakeLists.txt )
        include( startupfeedback/CMakeLists.txt )
        include( trackmouse/CMakeLists.txt )
        include( wobblywindows/CMakeLists.txt )
    endif( NOT KWIN_MOBILE_EFFECTS )
endif( KWIN_HAVE_OPENGL_COMPOSITING )

###############################################################################

# Add the builtins plugin
KWIN4_ADD_EFFECT( builtins ${kwin4_effect_builtins_sources} )
if( NOT KWIN_MOBILE_EFFECTS )
    KWIN4_ADD_EFFECT_CONFIG( builtins ${kwin4_effect_builtins_config_sources} )
endif( NOT KWIN_MOBILE_EFFECTS )
KWIN4_EFFECT_LINK_XRENDER( builtins )

# Install global data files
install( FILES
    _data/circle-edgy.png
    _data/circle.png
    DESTINATION ${DATA_INSTALL_DIR}/kwin )
