diff --git a/compiz_remove_kde.patch b/compiz_remove_kde.patch new file mode 100644 index 0000000..e56c759 --- /dev/null +++ b/compiz_remove_kde.patch @@ -0,0 +1,12927 @@ +diff -uprN compiz-0.8.8-orig/compiz-kconfig.pc.in compiz-0.8.8/compiz-kconfig.pc.in +--- compiz-0.8.8-orig/compiz-kconfig.pc.in 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/compiz-kconfig.pc.in 1970-01-01 01:00:00.000000000 +0100 +@@ -1,7 +0,0 @@ +-prefix=@prefix@ +-xsltdir=@datarootdir@/compiz +-kcfgdir=@kcfgdir@ +- +-Name: compiz-kconfig +-Description: Kconfig plugin for compiz +-Version: @VERSION@ +diff -uprN compiz-0.8.8-orig/configure.ac compiz-0.8.8/configure.ac +--- compiz-0.8.8-orig/configure.ac 2013-04-19 11:25:07.375310000 +0200 ++++ compiz-0.8.8/configure.ac 2013-04-19 11:37:51.368916779 +0200 +@@ -400,174 +400,6 @@ if test "$use_mate_keybindings" = yes; t + AC_DEFINE(USE_MATE_KEYBINDINGS, 1, [Install custom keybindings]) + fi + +-AC_ARG_ENABLE(kde, +- [ --disable-kde Disable kde window decorator], +- [use_kde=$enableval], [use_kde=yes]) +- +-if test "x$use_kde" = "xyes"; then +- qt_incdirs="$QTINC /usr/local/qt/include /usr/include/qt /usr/include /usr/X11R6/include/X11/qt /usr/X11R6/include/qt /usr/lib/qt3/include /usr/lib/qt/include /usr/share/qt3/include" +- qt_libdirs="$QTLIB /usr/local/qt/lib /usr/lib/qt /usr/lib /usr/X11R6/lib/X11/qt /usr/X11R6/lib/qt /usr/lib/qt3/lib /usr/lib/qt/lib /usr/share/qt3/lib" +- +- if test -n "$QTDIR" ; then +- qt_incdirs="$QTDIR/include $qt_incdirs" +- qt_libdirs="$QTDIR/lib $qt_libdirs" +- fi +- +- qt_test_include="qstyle.h" +- qt_test_library="libqt-mt.so" +- +- dnl Check for Qt headers +- AC_MSG_CHECKING([for Qt headers]) +- qt_incdir="no" +- for it in $qt_incdirs ; do +- if test -r "$it/$qt_test_include" ; then +- qt_incdir="$it" +- break +- fi +- done +- AC_MSG_RESULT([$qt_incdir]) +- +- dnl Check for Qt libraries +- AC_MSG_CHECKING([for Qt libraries]) +- qt_libdir="no" +- for qt_check in $qt_libdirs ; do +- if test -r "$qt_check/$qt_test_library" ; then +- qt_libdir="$qt_check" +- break +- fi +- done +- AC_MSG_RESULT([$qt_libdir]) +- +- use_kde=no; +- if test "x$qt_libdir" != "xno" ; then +- if test "x$qt_incdir" != "xno" ; then +- use_kde=yes; +- fi +- fi +- +- QT_CXXFLAGS="-I$qt_incdir" +- QT_LIBS="-L$qt_libdir" +- +- if test "x$use_kde" = xyes; then +- kdedir=`kde-config --prefix --expandvars 2>/dev/null` +- kdelibs=`kde-config --install lib --expandvars 2>/dev/null` +- kdeincs=`kde-config --install include --expandvars 2>/dev/null` +- if test -d "$kdelibs"; then +- PKG_CHECK_MODULES(KDE_WINDOW_DECORATOR, +- dbus-1 xdamage xcomposite, +- [use_kde=yes], [use_kde=no]) +- +- KDE_CFLAGS="$QT_CXXFLAGS -I$kdeincs" +- KDE_LIBS="$QT_LIBS -L$kdelibs -lkdecore -lkdecorations -ldbus-qt-1" +- +- QT_MOC=$QTDIR/bin/moc +- DCOPIDL=$kdedir/bin/dcopidl +- DCOPIDL2CPP=$kdedir/bin/dcopidl2cpp +- else +- use_kde=no; +- fi +- fi +-fi +- +-AM_CONDITIONAL(USE_KDE, test "x$use_kde" = "xyes") +-if test "$use_kde" = yes; then +- AC_DEFINE(USE_KDE, 1, [Build kde window decorator]) +-fi +- +-AC_SUBST(KDE_CFLAGS) +-AC_SUBST(KDE_LIBS) +-AC_SUBST(QT_MOC) +-AC_SUBST(DCOPIDL) +-AC_SUBST(DCOPIDL2CPP) +- +-AC_ARG_ENABLE(kde4, +- [ --disable-kde4 Disable kde4 window decorator], +- [use_kde4=$enableval], [use_kde4=yes]) +- +-if test "x$use_kde4" = "xyes"; then +- +- kde4dir=`kde4-config --prefix --expandvars 2>/dev/null` +- kde4libs=`kde4-config --install lib --expandvars 2>/dev/null` +- kde4incs=`kde4-config --install include --expandvars 2>/dev/null` +- +- kde4_test_includes="kdecoration.h kcommondecoration.h kdecorationbridge.h plasma/framesvg.h" +- +- dnl Check for KWin headers +- AC_MSG_CHECKING([for KWin headers]) +- +- kde4_notfound="" +- for file in $kde4_test_includes ; do +- status=" $file" +- for it in $kde4incs ; do +- if test -r "$it/$file" ; then +- status="" +- break; +- fi +- done +- kde4_notfound="$kde4_notfound$status" +- done +- if test -z "$kde4_notfound" ; then +- kde4_notfound="yes" +- else +- kde4_notfound="$kde4_notfound not found" +- kde4libs="" +- fi +- +- AC_MSG_RESULT([$kde4_notfound]) +- +- if test -d "$kde4libs"; then +- PKG_CHECK_MODULES(KDE4_WINDOW_DECORATOR, +- dbus-1 xdamage xext xcomposite QtCore >= 4.5.0 QtGui QtDBus, +- [use_kde4=yes], [use_kde4=no]) +- +- KDE4_CFLAGS="-I$kde4incs" +- KDE4_LIBS="-L$kde4libs -lkdecore -lkdecorations -lkdeui -lplasma" +- +- QT4_MOC=`pkg-config QtGui --variable=moc_location` +- QDBUSXML2CPP=`pkg-config QtGui --variable=exec_prefix`"/bin/qdbusxml2cpp" +- else +- use_kde4=no; +- fi +-fi +- +-AM_CONDITIONAL(USE_KDE4, test "x$use_kde4" = "xyes") +-if test "$use_kde4" = yes; then +- AC_DEFINE(USE_KDE4, 1, [Build kde4 window decorator]) +-fi +- +-AC_SUBST(KDE4_CFLAGS) +-AC_SUBST(KDE4_LIBS) +-AC_SUBST(QT4_MOC) +-AC_SUBST(QDBUSXML2CPP) +- +-AC_ARG_ENABLE(kconfig, +- [ --disable-kconfig Disable kconfig plugin], +- [use_kconfig=$enableval], [use_kconfig=yes]) +- +-if test "x$use_kde" != "xyes"; then +- use_kconfig=no; +-fi +- +-if test "x$use_kconfig" = "xyes"; then +- KCONFIG_CFLAGS=$KDE_CFLAGS +- KCONFIG_LIBS=$KDE_LIBS +- KDE_KCFG_DIR=`kde-config --install kcfg --expandvars 2>/dev/null` +- KDE_KCONFIG_DIR=`kde-config --install config --expandvars 2>/dev/null` +-fi +- +-AM_CONDITIONAL(USE_KCONFIG, test "x$use_kconfig" = "xyes") +-if test "$use_kconfig" = yes; then +- AC_DEFINE(USE_KCONFIG, 1, [Build kconfig plugin]) +-fi +- +-AC_SUBST(KCONFIG_CFLAGS) +-AC_SUBST(KCONFIG_LIBS) +-AC_SUBST(KDE_KCFG_DIR) +-AC_SUBST(KDE_KCONFIG_DIR) +- +-kcfgdir=$KDE_KCFG_DIR +-AC_SUBST(kcfgdir) +- + AC_ARG_WITH(max-desktops, + [ --with-max-desktops Max reasonable desktops], + [MAX_DESKTOPS=$withval], +@@ -620,7 +452,6 @@ compiz.pc + compiz-cube.pc + compiz-scale.pc + compiz-mateconf.pc +-compiz-kconfig.pc + Makefile + src/Makefile + libdecoration/Makefile +@@ -631,9 +462,6 @@ images/Makefile + gtk/Makefile + gtk/window-decorator/Makefile + gtk/mate/Makefile +-kde/Makefile +-kde/window-decorator/Makefile +-kde/window-decorator-kde4/Makefile + po/Makefile.in + metadata/Makefile + ]) +@@ -642,7 +470,6 @@ echo "" + echo "the following optional plugins will be compiled:" + echo " glib: $use_glib" + echo " mateconf: $use_mateconf" +-echo " kconfig: $use_kconfig" + echo " dbus: $use_dbus" + echo " annotate: $use_annotate" + echo " svg: $use_librsvg" +@@ -653,6 +480,4 @@ echo "and the following optional feature + echo " gtk: $use_gtk" + echo " marco: $use_marco" + echo " mate: $use_mate" +-echo " kde: $use_kde" +-echo " kde4: $use_kde4" + echo "" +diff -uprN compiz-0.8.8-orig/kde/Makefile.am compiz-0.8.8/kde/Makefile.am +--- compiz-0.8.8-orig/kde/Makefile.am 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +-SUBDIRS = window-decorator window-decorator-kde4 +diff -uprN compiz-0.8.8-orig/kde/Makefile.in compiz-0.8.8/kde/Makefile.in +--- compiz-0.8.8-orig/kde/Makefile.in 2013-04-19 11:25:07.305309000 +0200 ++++ compiz-0.8.8/kde/Makefile.in 1970-01-01 01:00:00.000000000 +0100 +@@ -1,646 +0,0 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. +-# @configure_input@ +- +-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +-# Inc. +-# This Makefile.in is free software; the Free Software Foundation +-# gives unlimited permission to copy and/or distribute it, +-# with or without modifications, as long as this notice is preserved. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +-# PARTICULAR PURPOSE. +- +-@SET_MAKE@ +-VPATH = @srcdir@ +-pkgdatadir = $(datadir)/@PACKAGE@ +-pkgincludedir = $(includedir)/@PACKAGE@ +-pkglibdir = $(libdir)/@PACKAGE@ +-pkglibexecdir = $(libexecdir)/@PACKAGE@ +-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +-install_sh_DATA = $(install_sh) -c -m 644 +-install_sh_PROGRAM = $(install_sh) -c +-install_sh_SCRIPT = $(install_sh) -c +-INSTALL_HEADER = $(INSTALL_DATA) +-transform = $(program_transform_name) +-NORMAL_INSTALL = : +-PRE_INSTALL = : +-POST_INSTALL = : +-NORMAL_UNINSTALL = : +-PRE_UNINSTALL = : +-POST_UNINSTALL = : +-build_triplet = @build@ +-host_triplet = @host@ +-subdir = kde +-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/configure.ac +-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ +- $(ACLOCAL_M4) +-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +-CONFIG_HEADER = $(top_builddir)/config.h +-CONFIG_CLEAN_FILES = +-CONFIG_CLEAN_VPATH_FILES = +-SOURCES = +-DIST_SOURCES = +-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ +- html-recursive info-recursive install-data-recursive \ +- install-dvi-recursive install-exec-recursive \ +- install-html-recursive install-info-recursive \ +- install-pdf-recursive install-ps-recursive install-recursive \ +- installcheck-recursive installdirs-recursive pdf-recursive \ +- ps-recursive uninstall-recursive +-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ +- distclean-recursive maintainer-clean-recursive +-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ +- $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ +- distdir +-ETAGS = etags +-CTAGS = ctags +-DIST_SUBDIRS = $(SUBDIRS) +-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +-am__relativize = \ +- dir0=`pwd`; \ +- sed_first='s,^\([^/]*\)/.*$$,\1,'; \ +- sed_rest='s,^[^/]*/*,,'; \ +- sed_last='s,^.*/\([^/]*\)$$,\1,'; \ +- sed_butlast='s,/*[^/]*$$,,'; \ +- while test -n "$$dir1"; do \ +- first=`echo "$$dir1" | sed -e "$$sed_first"`; \ +- if test "$$first" != "."; then \ +- if test "$$first" = ".."; then \ +- dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ +- dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ +- else \ +- first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ +- if test "$$first2" = "$$first"; then \ +- dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ +- else \ +- dir2="../$$dir2"; \ +- fi; \ +- dir0="$$dir0"/"$$first"; \ +- fi; \ +- fi; \ +- dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ +- done; \ +- reldir="$$dir2" +-ACLOCAL = @ACLOCAL@ +-ALL_LINGUAS = @ALL_LINGUAS@ +-AMTAR = @AMTAR@ +-ANNOTATE_CFLAGS = @ANNOTATE_CFLAGS@ +-ANNOTATE_LIBS = @ANNOTATE_LIBS@ +-AR = @AR@ +-AUTOCONF = @AUTOCONF@ +-AUTOHEADER = @AUTOHEADER@ +-AUTOMAKE = @AUTOMAKE@ +-AWK = @AWK@ +-CATALOGS = @CATALOGS@ +-CATOBJEXT = @CATOBJEXT@ +-CC = @CC@ +-CCDEPMODE = @CCDEPMODE@ +-CFLAGS = @CFLAGS@ +-COMPIZ_CFLAGS = @COMPIZ_CFLAGS@ +-COMPIZ_LIBS = @COMPIZ_LIBS@ +-COMPIZ_REQUIRES = @COMPIZ_REQUIRES@ +-COMPIZ_VERSION_MAJOR = @COMPIZ_VERSION_MAJOR@ +-COMPIZ_VERSION_MICRO = @COMPIZ_VERSION_MICRO@ +-COMPIZ_VERSION_MINOR = @COMPIZ_VERSION_MINOR@ +-CPP = @CPP@ +-CPPFLAGS = @CPPFLAGS@ +-CXX = @CXX@ +-CXXCPP = @CXXCPP@ +-CXXDEPMODE = @CXXDEPMODE@ +-CXXFLAGS = @CXXFLAGS@ +-CYGPATH_W = @CYGPATH_W@ +-DATADIRNAME = @DATADIRNAME@ +-DBUS_CFLAGS = @DBUS_CFLAGS@ +-DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@ +-DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@ +-DBUS_LIBS = @DBUS_LIBS@ +-DCOPIDL = @DCOPIDL@ +-DCOPIDL2CPP = @DCOPIDL2CPP@ +-DECORATION_CFLAGS = @DECORATION_CFLAGS@ +-DECORATION_LIBS = @DECORATION_LIBS@ +-DECORATION_REQUIRES = @DECORATION_REQUIRES@ +-DEFS = @DEFS@ +-DEPDIR = @DEPDIR@ +-DSYMUTIL = @DSYMUTIL@ +-DUMPBIN = @DUMPBIN@ +-ECHO_C = @ECHO_C@ +-ECHO_N = @ECHO_N@ +-ECHO_T = @ECHO_T@ +-EGREP = @EGREP@ +-EXEEXT = @EXEEXT@ +-FGREP = @FGREP@ +-FUSE_CFLAGS = @FUSE_CFLAGS@ +-FUSE_LIBS = @FUSE_LIBS@ +-MATECONFTOOL = @MATECONFTOOL@ +-MATECONF_CFLAGS = @MATECONF_CFLAGS@ +-MATECONF_LIBS = @MATECONF_LIBS@ +-MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@ +-MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@ +-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +-GLIB_CFLAGS = @GLIB_CFLAGS@ +-GLIB_LIBS = @GLIB_LIBS@ +-GL_CFLAGS = @GL_CFLAGS@ +-GL_LIBS = @GL_LIBS@ +-GMOFILES = @GMOFILES@ +-GMSGFMT = @GMSGFMT@ +-MATE_KEY_BINDINGS_CFLAGS = @MATE_KEY_BINDINGS_CFLAGS@ +-MATE_KEY_BINDINGS_LIBS = @MATE_KEY_BINDINGS_LIBS@ +-MATE_WINDOW_SETTINGS_CFLAGS = @MATE_WINDOW_SETTINGS_CFLAGS@ +-MATE_WINDOW_SETTINGS_LIBS = @MATE_WINDOW_SETTINGS_LIBS@ +-GREP = @GREP@ +-GTK_WINDOW_DECORATOR_CFLAGS = @GTK_WINDOW_DECORATOR_CFLAGS@ +-GTK_WINDOW_DECORATOR_LIBS = @GTK_WINDOW_DECORATOR_LIBS@ +-INSTALL = @INSTALL@ +-INSTALL_DATA = @INSTALL_DATA@ +-INSTALL_PROGRAM = @INSTALL_PROGRAM@ +-INSTALL_SCRIPT = @INSTALL_SCRIPT@ +-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +-INSTOBJEXT = @INSTOBJEXT@ +-INTLLIBS = @INTLLIBS@ +-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +-INTLTOOL_MERGE = @INTLTOOL_MERGE@ +-INTLTOOL_PERL = @INTLTOOL_PERL@ +-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +-KCONFIG_CFLAGS = @KCONFIG_CFLAGS@ +-KCONFIG_LIBS = @KCONFIG_LIBS@ +-KDE4_CFLAGS = @KDE4_CFLAGS@ +-KDE4_LIBS = @KDE4_LIBS@ +-KDE4_WINDOW_DECORATOR_CFLAGS = @KDE4_WINDOW_DECORATOR_CFLAGS@ +-KDE4_WINDOW_DECORATOR_LIBS = @KDE4_WINDOW_DECORATOR_LIBS@ +-KDE_CFLAGS = @KDE_CFLAGS@ +-KDE_KCFG_DIR = @KDE_KCFG_DIR@ +-KDE_KCONFIG_DIR = @KDE_KCONFIG_DIR@ +-KDE_LIBS = @KDE_LIBS@ +-KDE_WINDOW_DECORATOR_CFLAGS = @KDE_WINDOW_DECORATOR_CFLAGS@ +-KDE_WINDOW_DECORATOR_LIBS = @KDE_WINDOW_DECORATOR_LIBS@ +-LD = @LD@ +-LDFLAGS = @LDFLAGS@ +-LIBOBJS = @LIBOBJS@ +-LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ +-LIBPNG_LIBS = @LIBPNG_LIBS@ +-LIBRSVG_CFLAGS = @LIBRSVG_CFLAGS@ +-LIBRSVG_LIBS = @LIBRSVG_LIBS@ +-LIBS = @LIBS@ +-LIBTOOL = @LIBTOOL@ +-LIPO = @LIPO@ +-LN_S = @LN_S@ +-LTLIBOBJS = @LTLIBOBJS@ +-MAINT = @MAINT@ +-MAKEINFO = @MAKEINFO@ +-MARCO_CFLAGS = @MARCO_CFLAGS@ +-MARCO_LIBS = @MARCO_LIBS@ +-MKDIR_P = @MKDIR_P@ +-MKINSTALLDIRS = @MKINSTALLDIRS@ +-MSGFMT = @MSGFMT@ +-MSGFMT_OPTS = @MSGFMT_OPTS@ +-MSGMERGE = @MSGMERGE@ +-NM = @NM@ +-NMEDIT = @NMEDIT@ +-OBJDUMP = @OBJDUMP@ +-OBJEXT = @OBJEXT@ +-OTOOL = @OTOOL@ +-OTOOL64 = @OTOOL64@ +-PACKAGE = @PACKAGE@ +-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +-PACKAGE_NAME = @PACKAGE_NAME@ +-PACKAGE_STRING = @PACKAGE_STRING@ +-PACKAGE_TARNAME = @PACKAGE_TARNAME@ +-PACKAGE_URL = @PACKAGE_URL@ +-PACKAGE_VERSION = @PACKAGE_VERSION@ +-PATH_SEPARATOR = @PATH_SEPARATOR@ +-PKG_CONFIG = @PKG_CONFIG@ +-PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +-PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +-POFILES = @POFILES@ +-POSUB = @POSUB@ +-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +-QDBUSXML2CPP = @QDBUSXML2CPP@ +-QT4_MOC = @QT4_MOC@ +-QT_MOC = @QT_MOC@ +-RANLIB = @RANLIB@ +-SED = @SED@ +-SET_MAKE = @SET_MAKE@ +-SHELL = @SHELL@ +-STRIP = @STRIP@ +-USE_NLS = @USE_NLS@ +-VERSION = @VERSION@ +-XGETTEXT = @XGETTEXT@ +-XSLTPROC = @XSLTPROC@ +-abs_builddir = @abs_builddir@ +-abs_srcdir = @abs_srcdir@ +-abs_top_builddir = @abs_top_builddir@ +-abs_top_srcdir = @abs_top_srcdir@ +-ac_ct_CC = @ac_ct_CC@ +-ac_ct_CXX = @ac_ct_CXX@ +-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +-am__include = @am__include@ +-am__leading_dot = @am__leading_dot@ +-am__quote = @am__quote@ +-am__tar = @am__tar@ +-am__untar = @am__untar@ +-bindir = @bindir@ +-build = @build@ +-build_alias = @build_alias@ +-build_cpu = @build_cpu@ +-build_os = @build_os@ +-build_vendor = @build_vendor@ +-builddir = @builddir@ +-datadir = @datadir@ +-datarootdir = @datarootdir@ +-default_plugins = @default_plugins@ +-docdir = @docdir@ +-dvidir = @dvidir@ +-exec_prefix = @exec_prefix@ +-host = @host@ +-host_alias = @host_alias@ +-host_cpu = @host_cpu@ +-host_os = @host_os@ +-host_vendor = @host_vendor@ +-htmldir = @htmldir@ +-imagedir = @imagedir@ +-includedir = @includedir@ +-infodir = @infodir@ +-install_sh = @install_sh@ +-kcfgdir = @kcfgdir@ +-keybindingsdir = @keybindingsdir@ +-libdir = @libdir@ +-libexecdir = @libexecdir@ +-localedir = @localedir@ +-localstatedir = @localstatedir@ +-mandir = @mandir@ +-metadatadir = @metadatadir@ +-mkdir_p = @mkdir_p@ +-oldincludedir = @oldincludedir@ +-pdfdir = @pdfdir@ +-plugindir = @plugindir@ +-prefix = @prefix@ +-program_transform_name = @program_transform_name@ +-psdir = @psdir@ +-sbindir = @sbindir@ +-sharedstatedir = @sharedstatedir@ +-srcdir = @srcdir@ +-stylesheetdir = @stylesheetdir@ +-sysconfdir = @sysconfdir@ +-target_alias = @target_alias@ +-top_build_prefix = @top_build_prefix@ +-top_builddir = @top_builddir@ +-top_srcdir = @top_srcdir@ +-windowsettingsdatadir = @windowsettingsdatadir@ +-windowsettingslibdir = @windowsettingslibdir@ +-SUBDIRS = window-decorator window-decorator-kde4 +-all: all-recursive +- +-.SUFFIXES: +-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) +- @for dep in $?; do \ +- case '$(am__configure_deps)' in \ +- *$$dep*) \ +- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ +- && { if test -f $@; then exit 0; else break; fi; }; \ +- exit 1;; \ +- esac; \ +- done; \ +- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kde/Makefile'; \ +- $(am__cd) $(top_srcdir) && \ +- $(AUTOMAKE) --gnu kde/Makefile +-.PRECIOUS: Makefile +-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status +- @case '$?' in \ +- *config.status*) \ +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ +- *) \ +- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ +- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ +- esac; +- +-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +- +-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +-$(am__aclocal_m4_deps): +- +-mostlyclean-libtool: +- -rm -f *.lo +- +-clean-libtool: +- -rm -rf .libs _libs +- +-# This directory's subdirectories are mostly independent; you can cd +-# into them and run `make' without going through this Makefile. +-# To change the values of `make' variables: instead of editing Makefiles, +-# (1) if the variable is set in `config.status', edit `config.status' +-# (which will cause the Makefiles to be regenerated when you run `make'); +-# (2) otherwise, pass the desired values on the `make' command line. +-$(RECURSIVE_TARGETS): +- @fail= failcom='exit 1'; \ +- for f in x $$MAKEFLAGS; do \ +- case $$f in \ +- *=* | --[!k]*);; \ +- *k*) failcom='fail=yes';; \ +- esac; \ +- done; \ +- dot_seen=no; \ +- target=`echo $@ | sed s/-recursive//`; \ +- list='$(SUBDIRS)'; for subdir in $$list; do \ +- echo "Making $$target in $$subdir"; \ +- if test "$$subdir" = "."; then \ +- dot_seen=yes; \ +- local_target="$$target-am"; \ +- else \ +- local_target="$$target"; \ +- fi; \ +- ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ +- || eval $$failcom; \ +- done; \ +- if test "$$dot_seen" = "no"; then \ +- $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ +- fi; test -z "$$fail" +- +-$(RECURSIVE_CLEAN_TARGETS): +- @fail= failcom='exit 1'; \ +- for f in x $$MAKEFLAGS; do \ +- case $$f in \ +- *=* | --[!k]*);; \ +- *k*) failcom='fail=yes';; \ +- esac; \ +- done; \ +- dot_seen=no; \ +- case "$@" in \ +- distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ +- *) list='$(SUBDIRS)' ;; \ +- esac; \ +- rev=''; for subdir in $$list; do \ +- if test "$$subdir" = "."; then :; else \ +- rev="$$subdir $$rev"; \ +- fi; \ +- done; \ +- rev="$$rev ."; \ +- target=`echo $@ | sed s/-recursive//`; \ +- for subdir in $$rev; do \ +- echo "Making $$target in $$subdir"; \ +- if test "$$subdir" = "."; then \ +- local_target="$$target-am"; \ +- else \ +- local_target="$$target"; \ +- fi; \ +- ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ +- || eval $$failcom; \ +- done && test -z "$$fail" +-tags-recursive: +- list='$(SUBDIRS)'; for subdir in $$list; do \ +- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ +- done +-ctags-recursive: +- list='$(SUBDIRS)'; for subdir in $$list; do \ +- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ +- done +- +-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ +- mkid -fID $$unique +-tags: TAGS +- +-TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- set x; \ +- here=`pwd`; \ +- if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ +- include_option=--etags-include; \ +- empty_fix=.; \ +- else \ +- include_option=--include; \ +- empty_fix=; \ +- fi; \ +- list='$(SUBDIRS)'; for subdir in $$list; do \ +- if test "$$subdir" = .; then :; else \ +- test ! -f $$subdir/TAGS || \ +- set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ +- fi; \ +- done; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ +- shift; \ +- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ +- test -n "$$unique" || unique=$$empty_fix; \ +- if test $$# -gt 0; then \ +- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +- "$$@" $$unique; \ +- else \ +- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +- $$unique; \ +- fi; \ +- fi +-ctags: CTAGS +-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ +- test -z "$(CTAGS_ARGS)$$unique" \ +- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ +- $$unique +- +-GTAGS: +- here=`$(am__cd) $(top_builddir) && pwd` \ +- && $(am__cd) $(top_srcdir) \ +- && gtags -i $(GTAGS_ARGS) "$$here" +- +-distclean-tags: +- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +- +-distdir: $(DISTFILES) +- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ +- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ +- list='$(DISTFILES)'; \ +- dist_files=`for file in $$list; do echo $$file; done | \ +- sed -e "s|^$$srcdirstrip/||;t" \ +- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ +- case $$dist_files in \ +- */*) $(MKDIR_P) `echo "$$dist_files" | \ +- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ +- sort -u` ;; \ +- esac; \ +- for file in $$dist_files; do \ +- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ +- if test -d $$d/$$file; then \ +- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ +- if test -d "$(distdir)/$$file"; then \ +- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ +- fi; \ +- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ +- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ +- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ +- fi; \ +- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ +- else \ +- test -f "$(distdir)/$$file" \ +- || cp -p $$d/$$file "$(distdir)/$$file" \ +- || exit 1; \ +- fi; \ +- done +- @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ +- if test "$$subdir" = .; then :; else \ +- test -d "$(distdir)/$$subdir" \ +- || $(MKDIR_P) "$(distdir)/$$subdir" \ +- || exit 1; \ +- fi; \ +- done +- @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ +- if test "$$subdir" = .; then :; else \ +- dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ +- $(am__relativize); \ +- new_distdir=$$reldir; \ +- dir1=$$subdir; dir2="$(top_distdir)"; \ +- $(am__relativize); \ +- new_top_distdir=$$reldir; \ +- echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ +- echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ +- ($(am__cd) $$subdir && \ +- $(MAKE) $(AM_MAKEFLAGS) \ +- top_distdir="$$new_top_distdir" \ +- distdir="$$new_distdir" \ +- am__remove_distdir=: \ +- am__skip_length_check=: \ +- am__skip_mode_fix=: \ +- distdir) \ +- || exit 1; \ +- fi; \ +- done +-check-am: all-am +-check: check-recursive +-all-am: Makefile +-installdirs: installdirs-recursive +-installdirs-am: +-install: install-recursive +-install-exec: install-exec-recursive +-install-data: install-data-recursive +-uninstall: uninstall-recursive +- +-install-am: all-am +- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +- +-installcheck: installcheck-recursive +-install-strip: +- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ +- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ +- `test -z '$(STRIP)' || \ +- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +-mostlyclean-generic: +- +-clean-generic: +- +-distclean-generic: +- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) +- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) +- +-maintainer-clean-generic: +- @echo "This command is intended for maintainers to use" +- @echo "it deletes files that may require special tools to rebuild." +-clean: clean-recursive +- +-clean-am: clean-generic clean-libtool mostlyclean-am +- +-distclean: distclean-recursive +- -rm -f Makefile +-distclean-am: clean-am distclean-generic distclean-tags +- +-dvi: dvi-recursive +- +-dvi-am: +- +-html: html-recursive +- +-html-am: +- +-info: info-recursive +- +-info-am: +- +-install-data-am: +- +-install-dvi: install-dvi-recursive +- +-install-dvi-am: +- +-install-exec-am: +- +-install-html: install-html-recursive +- +-install-html-am: +- +-install-info: install-info-recursive +- +-install-info-am: +- +-install-man: +- +-install-pdf: install-pdf-recursive +- +-install-pdf-am: +- +-install-ps: install-ps-recursive +- +-install-ps-am: +- +-installcheck-am: +- +-maintainer-clean: maintainer-clean-recursive +- -rm -f Makefile +-maintainer-clean-am: distclean-am maintainer-clean-generic +- +-mostlyclean: mostlyclean-recursive +- +-mostlyclean-am: mostlyclean-generic mostlyclean-libtool +- +-pdf: pdf-recursive +- +-pdf-am: +- +-ps: ps-recursive +- +-ps-am: +- +-uninstall-am: +- +-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ +- install-am install-strip tags-recursive +- +-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ +- all all-am check check-am clean clean-generic clean-libtool \ +- ctags ctags-recursive distclean distclean-generic \ +- distclean-libtool distclean-tags distdir dvi dvi-am html \ +- html-am info info-am install install-am install-data \ +- install-data-am install-dvi install-dvi-am install-exec \ +- install-exec-am install-html install-html-am install-info \ +- install-info-am install-man install-pdf install-pdf-am \ +- install-ps install-ps-am install-strip installcheck \ +- installcheck-am installdirs installdirs-am maintainer-clean \ +- maintainer-clean-generic mostlyclean mostlyclean-generic \ +- mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ +- uninstall uninstall-am +- +- +-# Tell versions [3.59,3.63) of GNU make to not export all variables. +-# Otherwise a system limit (for SysV at least) may be exceeded. +-.NOEXPORT: +diff -uprN compiz-0.8.8-orig/kde/window-decorator/decorator.cpp compiz-0.8.8/kde/window-decorator/decorator.cpp +--- compiz-0.8.8-orig/kde/window-decorator/decorator.cpp 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator/decorator.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,1055 +0,0 @@ +-/* +- * Copyright © 2006 Novell, Inc. +- * Copyright © 2006 Dennis Kasprzyk +- * Copyright © 2006 Volker Krause +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: David Reveman +- */ +- +-#include +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include +-#include +- +-#include "decorator.h" +-#include "options.h" +-#include "utils.h" +- +-#include +- +-#define SHADOW_RADIUS 8.0 +-#define SHADOW_OPACITY 0.5 +-#define SHADOW_OFFSET_X 1 +-#define SHADOW_OFFSET_Y 1 +-#define SHADOW_COLOR_RED 0x0000 +-#define SHADOW_COLOR_GREEN 0x0000 +-#define SHADOW_COLOR_BLUE 0x0000 +- +-#define DBUS_DEST "org.freedesktop.compiz" +-#define DBUS_PATH "/org/freedesktop/compiz/decoration/display" +-#define DBUS_INTERFACE "org.freedesktop.compiz" +-#define DBUS_METHOD_GET "get" +- +-double decorationOpacity = 0.75; +-bool decorationOpacityShade = false; +-double activeDecorationOpacity = 1.0; +-bool activeDecorationOpacityShade = false; +-int blurType = BLUR_TYPE_NONE; +- +-decor_context_t KWD::Decorator::mDefaultContext; +-decor_extents_t KWD::Decorator::mDefaultBorder; +-decor_shadow_t *KWD::Decorator::mNoBorderShadow = 0; +-decor_shadow_t *KWD::Decorator::mDefaultShadow = 0; +-KWD::PluginManager *KWD::Decorator::mPlugins = 0; +-KWD::Options *KWD::Decorator::mOptions = 0; +-NETRootInfo *KWD::Decorator::mRootInfo; +-WId KWD::Decorator::mActiveId; +-decor_shadow_options_t KWD::Decorator::mShadowOptions; +- +-extern Time qt_x_time; +- +-struct _cursor cursors[3][3] = { +- { C (top_left_corner), C (top_side), C (top_right_corner) }, +- { C (left_side), C (left_ptr), C (right_side) }, +- { C (bottom_left_corner), C (bottom_side), C (bottom_right_corner) } +-}; +- +-KWD::PluginManager::PluginManager (KConfig *config): KDecorationPlugins (config) +-{ +- defaultPlugin = "kwin3_plastik"; +-} +- +-static DBusHandlerResult +-dbusHandleMessage (DBusConnection *connection, +- DBusMessage *message, +- void *userData) +-{ +- KWD::Decorator *d = (KWD::Decorator *) userData; +- char **path; +- const char *interface, *member; +- DBusHandlerResult result = DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +- +- interface = dbus_message_get_interface (message); +- member = dbus_message_get_member (message); +- +- (void) connection; +- +- if (!interface || !member) +- return result; +- +- if (!dbus_message_is_signal (message, interface, member)) +- return result; +- +- if (strcmp (member, "changed")) +- return result; +- +- if (!dbus_message_get_path_decomposed (message, &path)) +- return result; +- +- if (!path[0] || !path[1] || !path[2] || !path[3] || !path[4] || !path[5]) +- { +- dbus_free_string_array (path); +- return result; +- } +- +- if (!strcmp (path[0], "org") && +- !strcmp (path[1], "freedesktop") && +- !strcmp (path[2], "compiz") && +- !strcmp (path[3], "decoration") && +- !strcmp (path[4], "display")) +- { +- decor_shadow_options_t opt = *d->shadowOptions (); +- +- result = DBUS_HANDLER_RESULT_HANDLED; +- +- if (strcmp (path[5], "shadow_radius") == 0) +- { +- dbus_message_get_args (message, NULL, +- DBUS_TYPE_DOUBLE, &opt.shadow_radius, +- DBUS_TYPE_INVALID); +- } +- else if (strcmp (path[5], "shadow_opacity") == 0) +- { +- dbus_message_get_args (message, NULL, +- DBUS_TYPE_DOUBLE, &opt.shadow_opacity, +- DBUS_TYPE_INVALID); +- } +- else if (strcmp (path[5], "shadow_color") == 0) +- { +- DBusError error; +- char *str; +- +- dbus_error_init (&error); +- +- dbus_message_get_args (message, &error, +- DBUS_TYPE_STRING, &str, +- DBUS_TYPE_INVALID); +- +- if (!dbus_error_is_set (&error)) +- { +- int c[4]; +- +- if (sscanf (str, "#%2x%2x%2x%2x", +- &c[0], &c[1], &c[2], &c[3]) == 4) +- { +- opt.shadow_color[0] = c[0] << 8 | c[0]; +- opt.shadow_color[1] = c[1] << 8 | c[1]; +- opt.shadow_color[2] = c[2] << 8 | c[2]; +- } +- } +- +- dbus_error_free (&error); +- } +- else if (strcmp (path[5], "shadow_x_offset") == 0) +- { +- dbus_message_get_args (message, NULL, +- DBUS_TYPE_INT32, &opt.shadow_offset_x, +- DBUS_TYPE_INVALID); +- } +- else if (strcmp (path[5], "shadow_y_offset") == 0) +- { +- dbus_message_get_args (message, NULL, +- DBUS_TYPE_INT32, &opt.shadow_offset_y, +- DBUS_TYPE_INVALID); +- } +- +- d->changeShadowOptions (&opt); +- } +- +- dbus_free_string_array (path); +- +- return result; +-} +- +-KWD::Decorator::Decorator (void) : DCOPObject ("KWinInterface"), +- KApplication (), +- mConfig (0), +- mKWinModule (new KWinModule (this, KWinModule::INFO_ALL)), +- mDBusQtConnection (this), +- mCompositeWindow (0) +-{ +- XSetWindowAttributes attr; +- DCOPClient *client; +- int i, j; +- +- mRootInfo = new NETRootInfo (qt_xdisplay (), 0); +- +- mActiveId = 0; +- +- Atoms::init (); +- +- mConfig = new KConfig ("kwinrc"); +- mConfig->setGroup ("Style"); +- +- mOptions = new KWD::Options (mConfig); +- mPlugins = new PluginManager (mConfig); +- +- for (i = 0; i < 3; i++) +- { +- for (j = 0; j < 3; j++) +- { +- if (cursors[i][j].shape != XC_left_ptr) +- cursors[i][j].cursor = +- XCreateFontCursor (qt_xdisplay (), cursors[i][j].shape); +- } +- } +- +- client = dcopClient (); +- client->registerAs ("kwin", false); +- client->setDefaultObject ("KWinInterface"); +- +- mShadowOptions.shadow_radius = SHADOW_RADIUS; +- mShadowOptions.shadow_opacity = SHADOW_OPACITY; +- mShadowOptions.shadow_offset_x = SHADOW_OFFSET_X; +- mShadowOptions.shadow_offset_y = SHADOW_OFFSET_Y; +- mShadowOptions.shadow_color[0] = SHADOW_COLOR_RED; +- mShadowOptions.shadow_color[1] = SHADOW_COLOR_GREEN; +- mShadowOptions.shadow_color[2] = SHADOW_COLOR_BLUE; +- +- attr.override_redirect = True; +- +- mCompositeWindow = XCreateWindow (qt_xdisplay (), qt_xrootwin (), +- -ROOT_OFF_X, -ROOT_OFF_Y, 1, 1, 0, +- CopyFromParent, +- CopyFromParent, +- CopyFromParent, +- CWOverrideRedirect, &attr); +- +- XCompositeRedirectSubwindows (qt_xdisplay (), mCompositeWindow, +- CompositeRedirectManual); +- +- XMapWindow (qt_xdisplay (), mCompositeWindow); +-} +- +-KWD::Decorator::~Decorator (void) +-{ +- QMap ::ConstIterator it; +- +- for (it = mClients.begin (); it != mClients.end (); it++) +- delete (*it); +- +- if (mDecorNormal) +- delete mDecorNormal; +- +- if (mDecorActive) +- delete mDecorActive; +- +- XDestroyWindow (qt_xdisplay (), mCompositeWindow); +- +- delete mOptions; +- delete mPlugins; +- delete mConfig; +- delete mKWinModule; +- delete mRootInfo; +-} +- +-bool +-KWD::Decorator::enableDecorations (Time timestamp, +- int damageEvent) +-{ +- QValueList ::ConstIterator it; +- DBusError error; +- +- mDmSnTimestamp = timestamp; +- mDamageEvent = damageEvent; +- +- if (!pluginManager ()->loadPlugin ("")) +- return false; +- +- dbus_error_init (&error); +- +- mDBusConnection = dbus_bus_get (DBUS_BUS_SESSION, &error); +- if (!dbus_error_is_set (&error)) +- { +- dbus_bus_add_match (mDBusConnection, "type='signal'", &error); +- +- dbus_connection_add_filter (mDBusConnection, +- dbusHandleMessage, +- this, NULL); +- +- mDBusQtConnection.dbus_connection_setup_with_qt_main (mDBusConnection); +- +- updateAllShadowOptions (); +- } +- +- dbus_error_free (&error); +- +- updateShadow (); +- +- mDecorNormal = new KWD::Window (mCompositeWindow, qt_xrootwin (), +- 0, Window::Default); +- mDecorActive = new KWD::Window (mCompositeWindow, qt_xrootwin (), +- 0, Window::DefaultActive); +- +- connect (mKWinModule, SIGNAL (windowAdded (WId)), +- SLOT (handleWindowAdded (WId))); +- connect (mKWinModule, SIGNAL (windowRemoved (WId)), +- SLOT (handleWindowRemoved (WId))); +- connect (mKWinModule, SIGNAL (activeWindowChanged (WId)), +- SLOT (handleActiveWindowChanged (WId))); +- connect (mKWinModule, +- SIGNAL (windowChanged (WId, const unsigned long *)), +- SLOT (handleWindowChanged (WId, const unsigned long *))); +- +- connect (&mIdleTimer, SIGNAL (timeout ()), SLOT (processDamage ())); +- +- mActiveId = mKWinModule->activeWindow (); +- +- it = mKWinModule->windows ().begin (); +- for (; it != mKWinModule->windows ().end (); it++) +- handleWindowAdded ((*it)); +- +- connect (this, SIGNAL (appearanceChanged ()), SLOT (reconfigure ())); +- +- (void) QApplication::desktop (); // trigger creation of desktop widget +- +- // select for client messages +- XSelectInput (qt_xdisplay(), qt_xrootwin (), +- StructureNotifyMask | PropertyChangeMask); +- +- return true; +-} +- +-void +-KWD::Decorator::updateDefaultShadow (KWD::Window *w) +-{ +- bool uniqueHorzShape, uniqueVertShape; +- +- if (mDefaultShadow) +- { +- decor_shadow_destroy (qt_xdisplay (), mDefaultShadow); +- mDefaultShadow = NULL; +- } +- +- w->getShapeInfo (&uniqueHorzShape, &uniqueVertShape); +- +- /* only return shadow if decoration doesn't use a unique shape */ +- if (uniqueHorzShape || uniqueVertShape) +- return; +- +- mDefaultContext = *w->context (); +- mDefaultBorder = *w->border (); +- mDefaultShadow = w->shadow (); +- +- if (mDefaultShadow) +- decor_shadow_reference (mDefaultShadow); +-} +- +-DBusMessage * +-KWD::Decorator::sendAndBlockForShadowOptionReply (const char *path) +-{ +- DBusMessage *message; +- +- message = dbus_message_new_method_call (NULL, +- path, +- DBUS_INTERFACE, +- DBUS_METHOD_GET); +- if (message) +- { +- DBusMessage *reply; +- DBusError error; +- +- dbus_message_set_destination (message, DBUS_DEST); +- +- dbus_error_init (&error); +- reply = dbus_connection_send_with_reply_and_block (mDBusConnection, +- message, -1, +- &error); +- dbus_message_unref (message); +- +- if (!dbus_error_is_set (&error)) +- return reply; +- } +- +- return NULL; +-} +- +-void +-KWD::Decorator::updateAllShadowOptions (void) +-{ +- DBusMessage *reply; +- +- reply = sendAndBlockForShadowOptionReply (DBUS_PATH "/shadow_radius"); +- if (reply) +- { +- dbus_message_get_args (reply, NULL, +- DBUS_TYPE_DOUBLE, &mShadowOptions.shadow_radius, +- DBUS_TYPE_INVALID); +- +- dbus_message_unref (reply); +- } +- +- reply = sendAndBlockForShadowOptionReply (DBUS_PATH "/shadow_opacity"); +- if (reply) +- { +- dbus_message_get_args (reply, NULL, +- DBUS_TYPE_DOUBLE, &mShadowOptions.shadow_opacity, +- DBUS_TYPE_INVALID); +- dbus_message_unref (reply); +- } +- +- reply = sendAndBlockForShadowOptionReply (DBUS_PATH "/shadow_color"); +- if (reply) +- { +- DBusError error; +- char *str; +- +- dbus_error_init (&error); +- +- dbus_message_get_args (reply, &error, +- DBUS_TYPE_STRING, &str, +- DBUS_TYPE_INVALID); +- +- if (!dbus_error_is_set (&error)) +- { +- int c[4]; +- +- if (sscanf (str, "#%2x%2x%2x%2x", &c[0], &c[1], &c[2], &c[3]) == 4) +- { +- mShadowOptions.shadow_color[0] = c[0] << 8 | c[0]; +- mShadowOptions.shadow_color[1] = c[1] << 8 | c[1]; +- mShadowOptions.shadow_color[2] = c[2] << 8 | c[2]; +- } +- } +- +- dbus_error_free (&error); +- +- dbus_message_unref (reply); +- } +- +- reply = sendAndBlockForShadowOptionReply (DBUS_PATH "/shadow_x_offset"); +- if (reply) +- { +- dbus_message_get_args (reply, NULL, +- DBUS_TYPE_INT32, &mShadowOptions.shadow_offset_x, +- DBUS_TYPE_INVALID); +- dbus_message_unref (reply); +- } +- +- reply = sendAndBlockForShadowOptionReply (DBUS_PATH "/shadow_y_offset"); +- if (reply) +- { +- dbus_message_get_args (reply, NULL, +- DBUS_TYPE_INT32, &mShadowOptions.shadow_offset_y, +- DBUS_TYPE_INVALID); +- dbus_message_unref (reply); +- } +-} +- +-void +-KWD::Decorator::changeShadowOptions (decor_shadow_options_t *opt) +-{ +- QMap ::ConstIterator it; +- +- if (!memcmp (opt, &mShadowOptions, sizeof (decor_shadow_options_t))) +- return; +- +- mShadowOptions = *opt; +- +- updateShadow (); +- +- mDecorNormal->reloadDecoration (); +- mDecorActive->reloadDecoration (); +- +- for (it = mClients.constBegin (); it != mClients.constEnd (); it++) +- it.data ()->reloadDecoration (); +-} +- +-void +-KWD::Decorator::updateShadow (void) +-{ +- Display *xdisplay = qt_xdisplay (); +- Screen *xscreen = ScreenOfDisplay (xdisplay, qt_xscreen ()); +- decor_context_t context; +- +- if (mDefaultShadow) +- { +- decor_shadow_destroy (xdisplay, mDefaultShadow); +- mDefaultShadow = NULL; +- } +- +- if (mNoBorderShadow) +- decor_shadow_destroy (xdisplay, mNoBorderShadow); +- +- mNoBorderShadow = decor_shadow_create (xdisplay, +- xscreen, +- 1, 1, +- 0, +- 0, +- 0, +- 0, +- 0, 0, 0, 0, +- &mShadowOptions, +- &context, +- decor_draw_simple, +- 0); +- +- if (mNoBorderShadow) +- { +- decor_extents_t extents = { 0, 0, 0, 0 }; +- long data[256]; +- decor_quad_t quads[N_QUADS_MAX]; +- int nQuad; +- decor_layout_t layout; +- +- decor_get_default_layout (&context, 1, 1, &layout); +- +- nQuad = decor_set_lSrStSbS_window_quads (quads, &context, &layout); +- +- decor_quads_to_property (data, mNoBorderShadow->pixmap, +- &extents, &extents, +- 0, 0, quads, nQuad); +- +- KWD::trapXError (); +- XChangeProperty (qt_xdisplay (), qt_xrootwin (), +- Atoms::netWindowDecorBare, +- XA_INTEGER, +- 32, PropModeReplace, (unsigned char *) data, +- BASE_PROP_SIZE + QUAD_PROP_SIZE * nQuad); +- KWD::popXError (); +- } +-} +- +-void +-KWD::Decorator::processDamage (void) +-{ +- QMap ::ConstIterator it; +- +- mDecorNormal->processDamage (); +- mDecorActive->processDamage (); +- +- for (it = mClients.constBegin (); it != mClients.constEnd (); it++) +- it.data ()->processDamage (); +-} +- +-bool +-KWD::Decorator::x11EventFilter (XEvent *xevent) +-{ +- KWD::Window *client; +- int status; +- +- switch (xevent->type) { +- case MapNotify: { +- XMapEvent *xme = reinterpret_cast (xevent); +- +- if (mWindows.contains (xme->window)) +- client = mWindows[xme->window]; +- else if (mDecorNormal->winId () == xme->window) +- client = mDecorNormal; +- else if (mDecorActive->winId () == xme->window) +- client = mDecorActive; +- else +- break; +- +- if (client->handleMap ()) +- { +- if (!mIdleTimer.isActive ()) +- mIdleTimer.start (0, TRUE); +- } +- } break; +- case ConfigureNotify: { +- XConfigureEvent *xce = reinterpret_cast (xevent); +- +- if (mFrames.contains (xce->window)) +- mFrames[xce->window]->updateFrame (xce->window); +- +- if (mWindows.contains (xce->window)) +- client = mWindows[xce->window]; +- else if (mDecorNormal->winId () == xce->window) +- client = mDecorNormal; +- else if (mDecorActive->winId () == xce->window) +- client = mDecorActive; +- else +- break; +- +- if (client->handleConfigure (QSize (xce->width, xce->height))) +- { +- if (!mIdleTimer.isActive ()) +- mIdleTimer.start (0, TRUE); +- } +- } break; +- case SelectionRequest: +- decor_handle_selection_request (qt_xdisplay (), xevent, mDmSnTimestamp); +- break; +- case SelectionClear: +- status = decor_handle_selection_clear (qt_xdisplay (), +- xevent, 0); +- if (status == DECOR_SELECTION_GIVE_UP) +- KApplication::exit (0); +- +- break; +- case PropertyNotify: +- if (xevent->xproperty.atom == Atoms::netFrameWindow) +- { +- handleWindowAdded (xevent->xproperty.window); +- } +- else if (xevent->xproperty.atom == Atoms::switchSelectWindow) +- { +- if (!mClients.contains (xevent->xproperty.window)) +- { +- handleWindowAdded (xevent->xproperty.window); +- } +- else +- { +- WId id; +- +- if (KWD::readWindowProperty (xevent->xproperty.window, +- Atoms::switchSelectWindow, +- (long *) &id)) +- mClients[xevent->xproperty.window]->updateSelected (id); +- } +- } +- else if (xevent->xproperty.atom == Atoms::netWmWindowOpacity) +- { +- if (mClients.contains (xevent->xproperty.window)) +- mClients[xevent->xproperty.window]->updateOpacity (); +- } +- break; +- case EnterNotify: +- { +- XCrossingEvent *xce = reinterpret_cast (xevent); +- QWidget *widget, *child; +- +- if (!mFrames.contains (xce->window)) +- break; +- +- client = mFrames[xce->window]; +- +- widget = client->decoration ()->widget (); +- child = widget->childAt (xce->x, xce->y, true); +- if (child) +- { +- QEvent qe (QEvent::Enter); +- +- QApplication::sendEvent (child, &qe); +- +- client->setActiveChild (child); +- client->updateCursor (QPoint (xce->x, xce->y)); +- } +- } break; +- case LeaveNotify: +- { +- XCrossingEvent *xce = reinterpret_cast (xevent); +- +- if (mFrames.contains (xce->window)) +- { +- QEvent qe (QEvent::Leave); +- +- client = mFrames[xce->window]; +- +- QApplication::sendEvent (client->activeChild (), &qe); +- +- XUndefineCursor (qt_xdisplay (), client->frameId ()); +- } +- } break; +- case MotionNotify: +- { +- XMotionEvent *xme = reinterpret_cast < XMotionEvent * >(xevent); +- QWidget *widget, *child; +- +- if (!mFrames.contains (xme->window)) +- break; +- +- client = mFrames[xme->window]; +- +- widget = client->decoration ()->widget (); +- child = widget->childAt (xme->x, xme->y, true); +- if (child) +- { +- QPoint qp (xme->x, xme->y); +- +- if (child != client->activeChild ()) +- { +- QEvent qee (QEvent::Enter); +- QEvent qle (QEvent::Leave); +- +- if (client->activeChild ()) +- QApplication::sendEvent (client->activeChild (), &qle); +- +- QApplication::sendEvent (child, &qee); +- +- client->setActiveChild (child); +- } +- +- if (widget != child) +- qp -= QPoint (child->pos ().x (), child->pos ().y ()); +- +- QMouseEvent qme (QEvent::MouseMove, qp, Qt::NoButton, Qt::NoButton); +- +- QApplication::sendEvent (child, &qme); +- +- client->updateCursor (QPoint (xme->x, xme->y)); +- } +- } break; +- case ButtonPress: +- case ButtonRelease: +- { +- XButtonEvent *xbe = reinterpret_cast (xevent); +- QWidget *widget, *child; +- +- if (!mFrames.contains (xbe->window)) +- break; +- +- client = mFrames[xbe->window]; +- +- widget = client->decoration ()->widget (); +- child = widget->childAt (xbe->x, xbe->y, true); +- +- if (child) +- { +- XButtonEvent xbe2 = *xbe; +- +- xbe2.window = child->winId (); +- if (widget != child) +- { +- xbe2.x = xbe->x - child->pos ().x (); +- xbe2.y = xbe->y - child->pos ().y (); +- } +- +- QApplication::x11ProcessEvent ((XEvent *) &xbe2); +- +- return true; +- } +- } break; +- case ClientMessage: +- if (xevent->xclient.message_type == Atoms::toolkitActionAtom) +- { +- unsigned long action; +- +- action = xevent->xclient.data.l[0]; +- if (action == Atoms::toolkitActionWindowMenuAtom) +- { +- if (mClients.contains (xevent->xclient.window)) +- { +- QPoint pos; +- +- client = mClients[xevent->xclient.window]; +- +- if (xevent->xclient.data.l[2]) +- { +- pos = QPoint (xevent->xclient.data.l[3], +- xevent->xclient.data.l[4]); +- } +- else +- { +- pos = client->clientGeometry ().topLeft (); +- } +- +- client->showWindowMenu (pos); +- } +- } +- else if (action == Atoms::toolkitActionForceQuitDialogAtom) +- { +- if (mClients.contains (xevent->xclient.window)) +- { +- Time timestamp = xevent->xclient.data.l[1]; +- +- client = mClients[xevent->xclient.window]; +- +- if (xevent->xclient.data.l[2]) +- client->showKillProcessDialog (timestamp); +- else +- client->hideKillProcessDialog (); +- } +- } +- } +- break; +- default: +- if (xevent->type == mDamageEvent + XDamageNotify) +- { +- XDamageNotifyEvent *xde = +- reinterpret_cast (xevent); +- +- if (mWindows.contains (xde->drawable)) +- client = mWindows[xde->drawable]; +- else if (mDecorNormal->winId () == xde->drawable) +- client = mDecorNormal; +- else if (mDecorActive->winId () == xde->drawable) +- client = mDecorActive; +- else +- break; +- +- client->addDamageRect (xde->area.x, +- xde->area.y, +- xde->area.width, +- xde->area.height); +- +- if (client->pixmapId ()) +- { +- if (!mIdleTimer.isActive ()) +- mIdleTimer.start (0, TRUE); +- } +- +- return true; +- } +- break; +- } +- +- return KApplication::x11EventFilter (xevent); +-} +- +-void +-KWD::Decorator::reconfigure (void) +-{ +- unsigned long changed; +- +- mConfig->reparseConfiguration (); +- +- changed = mOptions->updateSettings (); +- if (mPlugins->reset (changed)) +- { +- QMap < WId, KWD::Window * >::ConstIterator it; +- +- updateShadow (); +- +- mDecorNormal->reloadDecoration (); +- mDecorActive->reloadDecoration (); +- +- for (it = mClients.constBegin (); it != mClients.constEnd (); it++) +- it.data ()->reloadDecoration (); +- +- mPlugins->destroyPreviousPlugin (); +- } +-} +- +-void +-KWD::Decorator::handleWindowAdded (WId id) +-{ +- QMap ::ConstIterator it; +- KWD::Window *client = 0; +- WId select, frame = 0; +- KWD::Window::Type type; +- unsigned int width, height, border, depth; +- int x, y; +- XID root; +- QWidgetList *widgets; +- +- /* avoid adding any of our own top level windows */ +- widgets = QApplication::topLevelWidgets (); +- if (widgets) +- { +- for (QWidgetListIt it (*widgets); it.current (); ++it) +- { +- if (it.current ()->winId () == id) +- { +- delete widgets; +- return; +- } +- } +- +- delete widgets; +- } +- +- KWD::trapXError (); +- XGetGeometry (qt_xdisplay (), id, &root, &x, &y, &width, &height, +- &border, &depth); +- if (KWD::popXError ()) +- return; +- +- KWD::readWindowProperty (id, Atoms::netFrameWindow, (long *) &frame); +- if (KWD::readWindowProperty (id, Atoms::switchSelectWindow, +- (long *) &select)) +- { +- type = KWD::Window::Switcher; +- } +- else +- { +- KWin::WindowInfo wInfo = KWin::windowInfo (id, NET::WMWindowType, 0); +- +- switch (wInfo.windowType (~0)) { +- case NET::Normal: +- case NET::Dialog: +- case NET::Toolbar: +- case NET::Menu: +- case NET::Utility: +- case NET::Splash: +- case NET::Unknown: +- /* decorate these window types */ +- break; +- default: +- return; +- } +- +- type = KWD::Window::Normal; +- } +- +- KWD::trapXError (); +- XSelectInput (qt_xdisplay (), id, StructureNotifyMask | PropertyChangeMask); +- KWD::popXError (); +- +- if (frame) +- { +- if (!mClients.contains (id)) +- { +- client = new KWD::Window (mCompositeWindow, id, frame, type, +- x, y, +- width + border * 2, +- height + border * 2); +- +- mClients.insert (id, client); +- mWindows.insert (client->winId (), client); +- mFrames.insert (frame, client); +- } +- else +- { +- client = mClients[id]; +- mFrames.remove (client->frameId ()); +- mFrames.insert (frame, client); +- +- client->updateFrame (frame); +- } +- } +- else if (type == KWD::Window::Switcher) +- { +- if (!mClients.contains (id)) +- { +- client = new KWD::Window (mCompositeWindow, id, 0, type, +- x, y, +- width + border * 2, +- height + border * 2); +- mClients.insert (id, client); +- mWindows.insert (client->winId (), client); +- } +- } +- else +- { +- if (mClients.contains (id)) +- client = mClients[id]; +- +- if (client) +- { +- mClients.remove (client->windowId ()); +- mWindows.remove (client->winId ()); +- mFrames.remove (client->frameId ()); +- +- delete client; +- } +- } +-} +- +-void +-KWD::Decorator::handleWindowRemoved (WId id) +-{ +- KWD::Window *window = 0; +- +- if (mClients.contains (id)) +- window = mClients[id]; +- else if (mFrames.contains (id)) +- window = mFrames[id]; +- +- if (window) +- { +- mClients.remove (window->windowId ()); +- mWindows.remove (window->winId ()); +- mFrames.remove (window->frameId ()); +- +- delete window; +- } +-} +- +-void +-KWD::Decorator::handleActiveWindowChanged (WId id) +-{ +- if (id != mActiveId) +- { +- KWD::Window *newActiveWindow = 0; +- KWD::Window *oldActiveWindow = 0; +- +- if (mClients.contains (id)) +- newActiveWindow = mClients[id]; +- +- if (mClients.contains (mActiveId)) +- oldActiveWindow = mClients[mActiveId]; +- +- mActiveId = id; +- +- if (oldActiveWindow) +- oldActiveWindow->handleActiveChange (); +- +- if (newActiveWindow) +- newActiveWindow->handleActiveChange (); +- } +-} +- +-void +-KWD::Decorator::handleWindowChanged (WId id, +- const unsigned long *properties) +-{ +- KWD::Window *client; +- +- if (!mClients.contains (id)) +- return; +- +- client = mClients[id]; +- +- if (properties[0] & NET::WMName) +- client->updateName (); +- if (properties[0] & NET::WMVisibleName) +- client->updateName (); +- if (properties[0] & NET::WMState) +- client->updateState (); +- if (properties[0] & NET::WMIcon) +- client->updateIcons (); +- if (properties[0] & NET::WMGeometry) +- client->updateWindowGeometry (); +-} +- +-void +-KWD::Decorator::sendClientMessage (WId eventWid, +- WId wid, +- Atom atom, +- Atom value, +- long data1, +- long data2, +- long data3) +-{ +- XEvent ev; +- long mask = 0; +- +- memset (&ev, 0, sizeof (ev)); +- +- ev.xclient.type = ClientMessage; +- ev.xclient.window = wid; +- ev.xclient.message_type = atom; +- ev.xclient.format = 32; +- +- ev.xclient.data.l[0] = value; +- ev.xclient.data.l[1] = qt_x_time; +- ev.xclient.data.l[2] = data1; +- ev.xclient.data.l[3] = data2; +- ev.xclient.data.l[4] = data3; +- +- if (eventWid == qt_xrootwin ()) +- mask = SubstructureRedirectMask | SubstructureNotifyMask; +- +- KWD::trapXError (); +- XSendEvent (qt_xdisplay (), eventWid, false, mask, &ev); +- KWD::popXError (); +-} +diff -uprN compiz-0.8.8-orig/kde/window-decorator/decorator.h compiz-0.8.8/kde/window-decorator/decorator.h +--- compiz-0.8.8-orig/kde/window-decorator/decorator.h 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator/decorator.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,183 +0,0 @@ +-/* +- * Copyright © 2006 Novell, Inc. +- * Copyright © 2006 Dennis Kasprzyk +- * Copyright © 2006 Volker Krause +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: David Reveman +- */ +- +-#ifndef _DECORATOR_H +-#define _DECORATOR_H +- +-#include +- +-#include +-#include +-#include +- +-#include +- +-#include +-#include +-#include +-#include +-#include +- +-#include +- +-#define DBUS_API_SUBJECT_TO_CHANGE +-#include +- +-#include "window.h" +-#include "KWinInterface.h" +- +-#define ROOT_OFF_X 8192 +-#define ROOT_OFF_Y 8192 +- +-#define C(name) { 0, XC_ ## name } +- +-struct _cursor { +- Cursor cursor; +- unsigned int shape; +-}; +- +-extern struct _cursor cursors[3][3]; +- +-extern double decorationOpacity; +-extern bool decorationOpacityShade; +-extern double activeDecorationOpacity; +-extern bool activeDecorationOpacityShade; +- +-#define BLUR_TYPE_NONE 0 +-#define BLUR_TYPE_TITLEBAR 1 +-#define BLUR_TYPE_ALL 2 +- +-extern int blurType; +- +-class KConfig; +-class KWinModule; +- +-namespace KWD +-{ +- class Options; +- +-class PluginManager:public KDecorationPlugins { +- public: +- PluginManager (KConfig *config); +- virtual bool provides (Requirement) +- { +- return false; +- } +- }; +- +- +-class Decorator:public KApplication, public KWinInterface { +- Q_OBJECT public: +- Decorator (void); +- ~Decorator (void); +- +- static NETRootInfo *rootInfo (void) +- { +- return mRootInfo; +- } +- static PluginManager *pluginManager (void) +- { +- return mPlugins; +- } +- static KWD::Options *options (void) +- { +- return mOptions; +- } +- static WId activeId (void) +- { +- return mActiveId; +- } +- static decor_shadow_options_t *shadowOptions (void) +- { +- return &mShadowOptions; +- } +- static decor_shadow_t *defaultWindowShadow (decor_context_t *context, +- decor_extents_t *border) +- { +- if (!mDefaultShadow) +- return NULL; +- +- if (memcmp (border, &mDefaultBorder, sizeof (decor_extents_t)) != 0) +- return NULL; +- +- *context = mDefaultContext; +- return mDefaultShadow; +- } +- static void sendClientMessage (WId eventWid, +- WId wid, +- Atom atom, +- Atom value, +- long data1 = 0, +- long data2 = 0, +- long data3 = 0); +- static void updateDefaultShadow (KWD::Window *w); +- +- bool enableDecorations (Time timestamp, int damageEvent); +- bool x11EventFilter (XEvent *xevent); +- void changeShadowOptions (decor_shadow_options_t *opt); +- +- public slots: +- void reconfigure (void); +- +- private: +- DBusMessage *sendAndBlockForShadowOptionReply (const char *path); +- WId fetchFrame (WId window); +- void updateShadow (void); +- void updateAllShadowOptions (void); +- +- private slots: +- void handleWindowAdded (WId id); +- void handleWindowRemoved (WId id); +- void handleActiveWindowChanged (WId id); +- void handleWindowChanged (WId id, +- const unsigned long *properties); +- void processDamage (void); +- +- private: +- static PluginManager *mPlugins; +- static KWD::Options *mOptions; +- static decor_extents_t mDefaultBorder; +- static decor_context_t mDefaultContext; +- static decor_shadow_t *mDefaultShadow; +- static decor_shadow_t *mNoBorderShadow; +- static decor_shadow_options_t mShadowOptions; +- static NETRootInfo *mRootInfo; +- static WId mActiveId; +- +- KWD::Window *mDecorNormal; +- KWD::Window *mDecorActive; +- QMap mClients; +- QMap mFrames; +- QMap mWindows; +- KConfig *mConfig; +- Time mDmSnTimestamp; +- int mDamageEvent; +- QTimer mIdleTimer; +- KWinModule *mKWinModule; +- DBusConnection *mDBusConnection; +- DBusQt::Connection mDBusQtConnection; +- WId mCompositeWindow; +- }; +-} +- +-#endif +diff -uprN compiz-0.8.8-orig/kde/window-decorator/KWinInterface.h compiz-0.8.8/kde/window-decorator/KWinInterface.h +--- compiz-0.8.8-orig/kde/window-decorator/KWinInterface.h 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator/KWinInterface.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,17 +0,0 @@ +-// taken from KWin +- +-#ifndef KWIN_INTERFACE_H +-#define KWIN_INTERFACE_H +- +-#include +- +-class KWinInterface:virtual public DCOPObject +-{ +- K_DCOP +- +- k_dcop: +- +- virtual ASYNC reconfigure () = 0; +-}; +- +-#endif +diff -uprN compiz-0.8.8-orig/kde/window-decorator/main.cpp compiz-0.8.8/kde/window-decorator/main.cpp +--- compiz-0.8.8-orig/kde/window-decorator/main.cpp 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator/main.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,143 +0,0 @@ +-/* +- * Copyright © 2006 Novell, Inc. +- * Copyright © 2006 Dennis Kasprzyk +- * Copyright © 2006 Volker Krause +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: David Reveman +- */ +- +-#include +-#include +- +-#include +-#include +-#include +-#include +- +-#include "decorator.h" +- +-static const KCmdLineOptions options[] = { +- { "replace", "Replace existing window decorator", 0 }, +- { "sm-disable", "Disable connection to session manager", 0 }, +- { "opacity ", "Decoration opacity", "0.75" }, +- { "no-opacity-shade", "No decoration opacity shading", 0 }, +- { "active-opacity ", "Active decoration opacity", "1.0" }, +- { "no-active-opacity-shade", "No active decoration opacity shading", 0 }, +- { "blur ", "Blur type", "none" }, +- KCmdLineLastOption +-}; +- +-#include +-int +-main (int argc, char **argv) +-{ +- KWD::Decorator *app; +- KCmdLineArgs *args; +- int status; +- int event, error; +- Time timestamp; +- +- KLocale::setMainCatalogue("kwin"); +- +- KCmdLineArgs::init (argc, argv, +- "kde-window-decorator", +- "KWD", +- "KDE Window Decorator", +- "0.0.1"); +- KCmdLineArgs::addCmdLineOptions (options); +- args = KCmdLineArgs::parsedArgs (); +- +- if (args->isSet ("opacity")) +- decorationOpacity = args->getOption ("opacity").toDouble (); +- +- if (args->isSet ("-opacity-shade")) +- decorationOpacityShade = true; +- +- if (args->isSet ("active-opacity")) +- activeDecorationOpacity = +- args->getOption ("active-opacity").toDouble (); +- +- if (args->isSet ("-active-opacity-shade")) +- activeDecorationOpacityShade = true; +- +- if (args->isSet ("blur")) +- { +- QString blur = args->getOption ("blur"); +- +- if (blur == QString ("titlebar")) +- blurType = BLUR_TYPE_TITLEBAR; +- else if (blur == QString ("all")) +- blurType = BLUR_TYPE_ALL; +- } +- +- app = new KWD::Decorator (); +- +- if (args->isSet ("sm-disable")) +- app->disableSessionManagement (); +- +- if (!XDamageQueryExtension (qt_xdisplay (), &event, &error)) +- { +- fprintf (stderr, +- "%s: Damage extension is missing on display \"%s\"\n", +- argv[0], DisplayString (qt_xdisplay ())); +- +- return 1; +- } +- +- status = decor_acquire_dm_session (qt_xdisplay (), qt_xscreen (), "kwd", +- args->isSet ("replace"), +- ×tamp); +- if (status != DECOR_ACQUIRE_STATUS_SUCCESS) +- { +- if (status == DECOR_ACQUIRE_STATUS_FAILED) +- { +- fprintf (stderr, +- "%s: Could not acquire decoration manager " +- "selection on screen %d display \"%s\"\n", +- argv[0], qt_xscreen (), DisplayString (qt_xdisplay ())); +- } +- else if (status == DECOR_ACQUIRE_STATUS_OTHER_DM_RUNNING) +- { +- fprintf (stderr, +- "%s: Screen %d on display \"%s\" already " +- "has a decoration manager; try using the " +- "--replace option to replace the current " +- "decoration manager.\n", +- argv[0], qt_xscreen (), DisplayString (qt_xdisplay ())); +- } +- +- return 1; +- } +- +- decor_set_dm_check_hint (qt_xdisplay (), qt_xscreen ()); +- +- if (!app->enableDecorations (timestamp, event)) +- { +- fprintf (stderr, +- "%s: Could not enable decorations on display \"%s\"\n", +- argv[0], DisplayString (qt_xdisplay ())); +- +- return 1; +- } +- +- status = app->exec (); +- +- delete app; +- +- return status; +-} +diff -uprN compiz-0.8.8-orig/kde/window-decorator/Makefile.am compiz-0.8.8/kde/window-decorator/Makefile.am +--- compiz-0.8.8-orig/kde/window-decorator/Makefile.am 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +@@ -1,44 +0,0 @@ +-if USE_KDE +- +-BUILDSOURCES = \ +- decorator.moc.cpp \ +- window.moc.cpp \ +- KWinInterface_skel.cpp +- +-kde_window_decorator_DEPENDENCIES = \ +- $(top_builddir)/libdecoration/libdecoration.la +-kde_window_decorator_LDADD = \ +- $(top_builddir)/libdecoration/libdecoration.la \ +- @KDE_WINDOW_DECORATOR_LIBS@ @KDE_LIBS@ +-dist_kde_window_decorator_SOURCES = \ +- main.cpp \ +- utils.cpp \ +- utils.h \ +- decorator.cpp \ +- decorator.h \ +- window.cpp \ +- window.h \ +- options.cpp \ +- options.h \ +- KWinInterface.h +- +-nodist_kde_window_decorator_SOURCES = $(BUILDSOURCES) +- +-kde_window_decorator_program = kde-window-decorator +- +-INCLUDES = -I$(top_srcdir)/include @KDE_WINDOW_DECORATOR_CFLAGS@ @KDE_CFLAGS@ +- +-bin_PROGRAMS = $(kde_window_decorator_program) +- +-%.moc.cpp: %.h +- $(QT_MOC) $< > $@ +- +-%.kidl: %.h +- $(DCOPIDL) $< > $@ +- +-%_skel.cpp: %.kidl +- $(DCOPIDL2CPP) $< > $@ +- +-CLEANFILES = $(BUILDSOURCES) KWinInterface_skel.* KWinInterface_stub.* +- +-endif +diff -uprN compiz-0.8.8-orig/kde/window-decorator/Makefile.in compiz-0.8.8/kde/window-decorator/Makefile.in +--- compiz-0.8.8-orig/kde/window-decorator/Makefile.in 2013-04-19 11:25:07.305309000 +0200 ++++ compiz-0.8.8/kde/window-decorator/Makefile.in 1970-01-01 01:00:00.000000000 +0100 +@@ -1,662 +0,0 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. +-# @configure_input@ +- +-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +-# Inc. +-# This Makefile.in is free software; the Free Software Foundation +-# gives unlimited permission to copy and/or distribute it, +-# with or without modifications, as long as this notice is preserved. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +-# PARTICULAR PURPOSE. +- +-@SET_MAKE@ +- +-VPATH = @srcdir@ +-pkgdatadir = $(datadir)/@PACKAGE@ +-pkgincludedir = $(includedir)/@PACKAGE@ +-pkglibdir = $(libdir)/@PACKAGE@ +-pkglibexecdir = $(libexecdir)/@PACKAGE@ +-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +-install_sh_DATA = $(install_sh) -c -m 644 +-install_sh_PROGRAM = $(install_sh) -c +-install_sh_SCRIPT = $(install_sh) -c +-INSTALL_HEADER = $(INSTALL_DATA) +-transform = $(program_transform_name) +-NORMAL_INSTALL = : +-PRE_INSTALL = : +-POST_INSTALL = : +-NORMAL_UNINSTALL = : +-PRE_UNINSTALL = : +-POST_UNINSTALL = : +-build_triplet = @build@ +-host_triplet = @host@ +-@USE_KDE_TRUE@bin_PROGRAMS = $(am__EXEEXT_1) +-subdir = kde/window-decorator +-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/configure.ac +-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ +- $(ACLOCAL_M4) +-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +-CONFIG_HEADER = $(top_builddir)/config.h +-CONFIG_CLEAN_FILES = +-CONFIG_CLEAN_VPATH_FILES = +-@USE_KDE_TRUE@am__EXEEXT_1 = kde-window-decorator$(EXEEXT) +-am__installdirs = "$(DESTDIR)$(bindir)" +-PROGRAMS = $(bin_PROGRAMS) +-am__dist_kde_window_decorator_SOURCES_DIST = main.cpp utils.cpp \ +- utils.h decorator.cpp decorator.h window.cpp window.h \ +- options.cpp options.h KWinInterface.h +-@USE_KDE_TRUE@dist_kde_window_decorator_OBJECTS = main.$(OBJEXT) \ +-@USE_KDE_TRUE@ utils.$(OBJEXT) decorator.$(OBJEXT) \ +-@USE_KDE_TRUE@ window.$(OBJEXT) options.$(OBJEXT) +-@USE_KDE_TRUE@am__objects_1 = decorator.moc.$(OBJEXT) \ +-@USE_KDE_TRUE@ window.moc.$(OBJEXT) \ +-@USE_KDE_TRUE@ KWinInterface_skel.$(OBJEXT) +-@USE_KDE_TRUE@nodist_kde_window_decorator_OBJECTS = $(am__objects_1) +-kde_window_decorator_OBJECTS = $(dist_kde_window_decorator_OBJECTS) \ +- $(nodist_kde_window_decorator_OBJECTS) +-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +-depcomp = $(SHELL) $(top_srcdir)/depcomp +-am__depfiles_maybe = depfiles +-am__mv = mv -f +-CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ +- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +-LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ +- --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ +- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +-CXXLD = $(CXX) +-CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ +- --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ +- $(LDFLAGS) -o $@ +-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ +- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ +- --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ +- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +-CCLD = $(CC) +-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ +- --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ +- $(LDFLAGS) -o $@ +-SOURCES = $(dist_kde_window_decorator_SOURCES) \ +- $(nodist_kde_window_decorator_SOURCES) +-DIST_SOURCES = $(am__dist_kde_window_decorator_SOURCES_DIST) +-ETAGS = etags +-CTAGS = ctags +-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +-ACLOCAL = @ACLOCAL@ +-ALL_LINGUAS = @ALL_LINGUAS@ +-AMTAR = @AMTAR@ +-ANNOTATE_CFLAGS = @ANNOTATE_CFLAGS@ +-ANNOTATE_LIBS = @ANNOTATE_LIBS@ +-AR = @AR@ +-AUTOCONF = @AUTOCONF@ +-AUTOHEADER = @AUTOHEADER@ +-AUTOMAKE = @AUTOMAKE@ +-AWK = @AWK@ +-CATALOGS = @CATALOGS@ +-CATOBJEXT = @CATOBJEXT@ +-CC = @CC@ +-CCDEPMODE = @CCDEPMODE@ +-CFLAGS = @CFLAGS@ +-COMPIZ_CFLAGS = @COMPIZ_CFLAGS@ +-COMPIZ_LIBS = @COMPIZ_LIBS@ +-COMPIZ_REQUIRES = @COMPIZ_REQUIRES@ +-COMPIZ_VERSION_MAJOR = @COMPIZ_VERSION_MAJOR@ +-COMPIZ_VERSION_MICRO = @COMPIZ_VERSION_MICRO@ +-COMPIZ_VERSION_MINOR = @COMPIZ_VERSION_MINOR@ +-CPP = @CPP@ +-CPPFLAGS = @CPPFLAGS@ +-CXX = @CXX@ +-CXXCPP = @CXXCPP@ +-CXXDEPMODE = @CXXDEPMODE@ +-CXXFLAGS = @CXXFLAGS@ +-CYGPATH_W = @CYGPATH_W@ +-DATADIRNAME = @DATADIRNAME@ +-DBUS_CFLAGS = @DBUS_CFLAGS@ +-DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@ +-DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@ +-DBUS_LIBS = @DBUS_LIBS@ +-DCOPIDL = @DCOPIDL@ +-DCOPIDL2CPP = @DCOPIDL2CPP@ +-DECORATION_CFLAGS = @DECORATION_CFLAGS@ +-DECORATION_LIBS = @DECORATION_LIBS@ +-DECORATION_REQUIRES = @DECORATION_REQUIRES@ +-DEFS = @DEFS@ +-DEPDIR = @DEPDIR@ +-DSYMUTIL = @DSYMUTIL@ +-DUMPBIN = @DUMPBIN@ +-ECHO_C = @ECHO_C@ +-ECHO_N = @ECHO_N@ +-ECHO_T = @ECHO_T@ +-EGREP = @EGREP@ +-EXEEXT = @EXEEXT@ +-FGREP = @FGREP@ +-FUSE_CFLAGS = @FUSE_CFLAGS@ +-FUSE_LIBS = @FUSE_LIBS@ +-MATECONFTOOL = @MATECONFTOOL@ +-MATECONF_CFLAGS = @MATECONF_CFLAGS@ +-MATECONF_LIBS = @MATECONF_LIBS@ +-MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@ +-MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@ +-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +-GLIB_CFLAGS = @GLIB_CFLAGS@ +-GLIB_LIBS = @GLIB_LIBS@ +-GL_CFLAGS = @GL_CFLAGS@ +-GL_LIBS = @GL_LIBS@ +-GMOFILES = @GMOFILES@ +-GMSGFMT = @GMSGFMT@ +-MATE_KEY_BINDINGS_CFLAGS = @MATE_KEY_BINDINGS_CFLAGS@ +-MATE_KEY_BINDINGS_LIBS = @MATE_KEY_BINDINGS_LIBS@ +-MATE_WINDOW_SETTINGS_CFLAGS = @MATE_WINDOW_SETTINGS_CFLAGS@ +-MATE_WINDOW_SETTINGS_LIBS = @MATE_WINDOW_SETTINGS_LIBS@ +-GREP = @GREP@ +-GTK_WINDOW_DECORATOR_CFLAGS = @GTK_WINDOW_DECORATOR_CFLAGS@ +-GTK_WINDOW_DECORATOR_LIBS = @GTK_WINDOW_DECORATOR_LIBS@ +-INSTALL = @INSTALL@ +-INSTALL_DATA = @INSTALL_DATA@ +-INSTALL_PROGRAM = @INSTALL_PROGRAM@ +-INSTALL_SCRIPT = @INSTALL_SCRIPT@ +-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +-INSTOBJEXT = @INSTOBJEXT@ +-INTLLIBS = @INTLLIBS@ +-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +-INTLTOOL_MERGE = @INTLTOOL_MERGE@ +-INTLTOOL_PERL = @INTLTOOL_PERL@ +-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +-KCONFIG_CFLAGS = @KCONFIG_CFLAGS@ +-KCONFIG_LIBS = @KCONFIG_LIBS@ +-KDE4_CFLAGS = @KDE4_CFLAGS@ +-KDE4_LIBS = @KDE4_LIBS@ +-KDE4_WINDOW_DECORATOR_CFLAGS = @KDE4_WINDOW_DECORATOR_CFLAGS@ +-KDE4_WINDOW_DECORATOR_LIBS = @KDE4_WINDOW_DECORATOR_LIBS@ +-KDE_CFLAGS = @KDE_CFLAGS@ +-KDE_KCFG_DIR = @KDE_KCFG_DIR@ +-KDE_KCONFIG_DIR = @KDE_KCONFIG_DIR@ +-KDE_LIBS = @KDE_LIBS@ +-KDE_WINDOW_DECORATOR_CFLAGS = @KDE_WINDOW_DECORATOR_CFLAGS@ +-KDE_WINDOW_DECORATOR_LIBS = @KDE_WINDOW_DECORATOR_LIBS@ +-LD = @LD@ +-LDFLAGS = @LDFLAGS@ +-LIBOBJS = @LIBOBJS@ +-LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ +-LIBPNG_LIBS = @LIBPNG_LIBS@ +-LIBRSVG_CFLAGS = @LIBRSVG_CFLAGS@ +-LIBRSVG_LIBS = @LIBRSVG_LIBS@ +-LIBS = @LIBS@ +-LIBTOOL = @LIBTOOL@ +-LIPO = @LIPO@ +-LN_S = @LN_S@ +-LTLIBOBJS = @LTLIBOBJS@ +-MAINT = @MAINT@ +-MAKEINFO = @MAKEINFO@ +-MARCO_CFLAGS = @MARCO_CFLAGS@ +-MARCO_LIBS = @MARCO_LIBS@ +-MKDIR_P = @MKDIR_P@ +-MKINSTALLDIRS = @MKINSTALLDIRS@ +-MSGFMT = @MSGFMT@ +-MSGFMT_OPTS = @MSGFMT_OPTS@ +-MSGMERGE = @MSGMERGE@ +-NM = @NM@ +-NMEDIT = @NMEDIT@ +-OBJDUMP = @OBJDUMP@ +-OBJEXT = @OBJEXT@ +-OTOOL = @OTOOL@ +-OTOOL64 = @OTOOL64@ +-PACKAGE = @PACKAGE@ +-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +-PACKAGE_NAME = @PACKAGE_NAME@ +-PACKAGE_STRING = @PACKAGE_STRING@ +-PACKAGE_TARNAME = @PACKAGE_TARNAME@ +-PACKAGE_URL = @PACKAGE_URL@ +-PACKAGE_VERSION = @PACKAGE_VERSION@ +-PATH_SEPARATOR = @PATH_SEPARATOR@ +-PKG_CONFIG = @PKG_CONFIG@ +-PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +-PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +-POFILES = @POFILES@ +-POSUB = @POSUB@ +-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +-QDBUSXML2CPP = @QDBUSXML2CPP@ +-QT4_MOC = @QT4_MOC@ +-QT_MOC = @QT_MOC@ +-RANLIB = @RANLIB@ +-SED = @SED@ +-SET_MAKE = @SET_MAKE@ +-SHELL = @SHELL@ +-STRIP = @STRIP@ +-USE_NLS = @USE_NLS@ +-VERSION = @VERSION@ +-XGETTEXT = @XGETTEXT@ +-XSLTPROC = @XSLTPROC@ +-abs_builddir = @abs_builddir@ +-abs_srcdir = @abs_srcdir@ +-abs_top_builddir = @abs_top_builddir@ +-abs_top_srcdir = @abs_top_srcdir@ +-ac_ct_CC = @ac_ct_CC@ +-ac_ct_CXX = @ac_ct_CXX@ +-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +-am__include = @am__include@ +-am__leading_dot = @am__leading_dot@ +-am__quote = @am__quote@ +-am__tar = @am__tar@ +-am__untar = @am__untar@ +-bindir = @bindir@ +-build = @build@ +-build_alias = @build_alias@ +-build_cpu = @build_cpu@ +-build_os = @build_os@ +-build_vendor = @build_vendor@ +-builddir = @builddir@ +-datadir = @datadir@ +-datarootdir = @datarootdir@ +-default_plugins = @default_plugins@ +-docdir = @docdir@ +-dvidir = @dvidir@ +-exec_prefix = @exec_prefix@ +-host = @host@ +-host_alias = @host_alias@ +-host_cpu = @host_cpu@ +-host_os = @host_os@ +-host_vendor = @host_vendor@ +-htmldir = @htmldir@ +-imagedir = @imagedir@ +-includedir = @includedir@ +-infodir = @infodir@ +-install_sh = @install_sh@ +-kcfgdir = @kcfgdir@ +-keybindingsdir = @keybindingsdir@ +-libdir = @libdir@ +-libexecdir = @libexecdir@ +-localedir = @localedir@ +-localstatedir = @localstatedir@ +-mandir = @mandir@ +-metadatadir = @metadatadir@ +-mkdir_p = @mkdir_p@ +-oldincludedir = @oldincludedir@ +-pdfdir = @pdfdir@ +-plugindir = @plugindir@ +-prefix = @prefix@ +-program_transform_name = @program_transform_name@ +-psdir = @psdir@ +-sbindir = @sbindir@ +-sharedstatedir = @sharedstatedir@ +-srcdir = @srcdir@ +-stylesheetdir = @stylesheetdir@ +-sysconfdir = @sysconfdir@ +-target_alias = @target_alias@ +-top_build_prefix = @top_build_prefix@ +-top_builddir = @top_builddir@ +-top_srcdir = @top_srcdir@ +-windowsettingsdatadir = @windowsettingsdatadir@ +-windowsettingslibdir = @windowsettingslibdir@ +-@USE_KDE_TRUE@BUILDSOURCES = \ +-@USE_KDE_TRUE@ decorator.moc.cpp \ +-@USE_KDE_TRUE@ window.moc.cpp \ +-@USE_KDE_TRUE@ KWinInterface_skel.cpp +- +-@USE_KDE_TRUE@kde_window_decorator_DEPENDENCIES = \ +-@USE_KDE_TRUE@ $(top_builddir)/libdecoration/libdecoration.la +- +-@USE_KDE_TRUE@kde_window_decorator_LDADD = \ +-@USE_KDE_TRUE@ $(top_builddir)/libdecoration/libdecoration.la \ +-@USE_KDE_TRUE@ @KDE_WINDOW_DECORATOR_LIBS@ @KDE_LIBS@ +- +-@USE_KDE_TRUE@dist_kde_window_decorator_SOURCES = \ +-@USE_KDE_TRUE@ main.cpp \ +-@USE_KDE_TRUE@ utils.cpp \ +-@USE_KDE_TRUE@ utils.h \ +-@USE_KDE_TRUE@ decorator.cpp \ +-@USE_KDE_TRUE@ decorator.h \ +-@USE_KDE_TRUE@ window.cpp \ +-@USE_KDE_TRUE@ window.h \ +-@USE_KDE_TRUE@ options.cpp \ +-@USE_KDE_TRUE@ options.h \ +-@USE_KDE_TRUE@ KWinInterface.h +- +-@USE_KDE_TRUE@nodist_kde_window_decorator_SOURCES = $(BUILDSOURCES) +-@USE_KDE_TRUE@kde_window_decorator_program = kde-window-decorator +-@USE_KDE_TRUE@INCLUDES = -I$(top_srcdir)/include @KDE_WINDOW_DECORATOR_CFLAGS@ @KDE_CFLAGS@ +-@USE_KDE_TRUE@CLEANFILES = $(BUILDSOURCES) KWinInterface_skel.* KWinInterface_stub.* +-all: all-am +- +-.SUFFIXES: +-.SUFFIXES: .cpp .lo .o .obj +-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) +- @for dep in $?; do \ +- case '$(am__configure_deps)' in \ +- *$$dep*) \ +- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ +- && { if test -f $@; then exit 0; else break; fi; }; \ +- exit 1;; \ +- esac; \ +- done; \ +- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kde/window-decorator/Makefile'; \ +- $(am__cd) $(top_srcdir) && \ +- $(AUTOMAKE) --gnu kde/window-decorator/Makefile +-.PRECIOUS: Makefile +-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status +- @case '$?' in \ +- *config.status*) \ +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ +- *) \ +- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ +- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ +- esac; +- +-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +- +-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +-$(am__aclocal_m4_deps): +-install-binPROGRAMS: $(bin_PROGRAMS) +- @$(NORMAL_INSTALL) +- test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" +- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ +- for p in $$list; do echo "$$p $$p"; done | \ +- sed 's/$(EXEEXT)$$//' | \ +- while read p p1; do if test -f $$p || test -f $$p1; \ +- then echo "$$p"; echo "$$p"; else :; fi; \ +- done | \ +- sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ +- -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ +- sed 'N;N;N;s,\n, ,g' | \ +- $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ +- { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ +- if ($$2 == $$4) files[d] = files[d] " " $$1; \ +- else { print "f", $$3 "/" $$4, $$1; } } \ +- END { for (d in files) print "f", d, files[d] }' | \ +- while read type dir files; do \ +- if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ +- test -z "$$files" || { \ +- echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ +- $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ +- } \ +- ; done +- +-uninstall-binPROGRAMS: +- @$(NORMAL_UNINSTALL) +- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ +- files=`for p in $$list; do echo "$$p"; done | \ +- sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ +- -e 's/$$/$(EXEEXT)/' `; \ +- test -n "$$list" || exit 0; \ +- echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ +- cd "$(DESTDIR)$(bindir)" && rm -f $$files +- +-clean-binPROGRAMS: +- @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ +- echo " rm -f" $$list; \ +- rm -f $$list || exit $$?; \ +- test -n "$(EXEEXT)" || exit 0; \ +- list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ +- echo " rm -f" $$list; \ +- rm -f $$list +-kde-window-decorator$(EXEEXT): $(kde_window_decorator_OBJECTS) $(kde_window_decorator_DEPENDENCIES) +- @rm -f kde-window-decorator$(EXEEXT) +- $(CXXLINK) $(kde_window_decorator_OBJECTS) $(kde_window_decorator_LDADD) $(LIBS) +- +-mostlyclean-compile: +- -rm -f *.$(OBJEXT) +- +-distclean-compile: +- -rm -f *.tab.c +- +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/KWinInterface_skel.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decorator.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decorator.moc.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/options.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/window.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/window.moc.Po@am__quote@ +- +-.cpp.o: +-@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +-@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< +- +-.cpp.obj: +-@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +-@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` +- +-.cpp.lo: +-@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +-@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< +- +-mostlyclean-libtool: +- -rm -f *.lo +- +-clean-libtool: +- -rm -rf .libs _libs +- +-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ +- mkid -fID $$unique +-tags: TAGS +- +-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- set x; \ +- here=`pwd`; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ +- shift; \ +- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ +- test -n "$$unique" || unique=$$empty_fix; \ +- if test $$# -gt 0; then \ +- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +- "$$@" $$unique; \ +- else \ +- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +- $$unique; \ +- fi; \ +- fi +-ctags: CTAGS +-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ +- test -z "$(CTAGS_ARGS)$$unique" \ +- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ +- $$unique +- +-GTAGS: +- here=`$(am__cd) $(top_builddir) && pwd` \ +- && $(am__cd) $(top_srcdir) \ +- && gtags -i $(GTAGS_ARGS) "$$here" +- +-distclean-tags: +- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +- +-distdir: $(DISTFILES) +- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ +- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ +- list='$(DISTFILES)'; \ +- dist_files=`for file in $$list; do echo $$file; done | \ +- sed -e "s|^$$srcdirstrip/||;t" \ +- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ +- case $$dist_files in \ +- */*) $(MKDIR_P) `echo "$$dist_files" | \ +- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ +- sort -u` ;; \ +- esac; \ +- for file in $$dist_files; do \ +- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ +- if test -d $$d/$$file; then \ +- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ +- if test -d "$(distdir)/$$file"; then \ +- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ +- fi; \ +- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ +- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ +- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ +- fi; \ +- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ +- else \ +- test -f "$(distdir)/$$file" \ +- || cp -p $$d/$$file "$(distdir)/$$file" \ +- || exit 1; \ +- fi; \ +- done +-check-am: all-am +-check: check-am +-all-am: Makefile $(PROGRAMS) +-installdirs: +- for dir in "$(DESTDIR)$(bindir)"; do \ +- test -z "$$dir" || $(MKDIR_P) "$$dir"; \ +- done +-install: install-am +-install-exec: install-exec-am +-install-data: install-data-am +-uninstall: uninstall-am +- +-install-am: all-am +- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +- +-installcheck: installcheck-am +-install-strip: +- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ +- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ +- `test -z '$(STRIP)' || \ +- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +-mostlyclean-generic: +- +-clean-generic: +- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) +- +-distclean-generic: +- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) +- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) +- +-maintainer-clean-generic: +- @echo "This command is intended for maintainers to use" +- @echo "it deletes files that may require special tools to rebuild." +-clean: clean-am +- +-clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am +- +-distclean: distclean-am +- -rm -rf ./$(DEPDIR) +- -rm -f Makefile +-distclean-am: clean-am distclean-compile distclean-generic \ +- distclean-tags +- +-dvi: dvi-am +- +-dvi-am: +- +-html: html-am +- +-html-am: +- +-info: info-am +- +-info-am: +- +-install-data-am: +- +-install-dvi: install-dvi-am +- +-install-dvi-am: +- +-install-exec-am: install-binPROGRAMS +- +-install-html: install-html-am +- +-install-html-am: +- +-install-info: install-info-am +- +-install-info-am: +- +-install-man: +- +-install-pdf: install-pdf-am +- +-install-pdf-am: +- +-install-ps: install-ps-am +- +-install-ps-am: +- +-installcheck-am: +- +-maintainer-clean: maintainer-clean-am +- -rm -rf ./$(DEPDIR) +- -rm -f Makefile +-maintainer-clean-am: distclean-am maintainer-clean-generic +- +-mostlyclean: mostlyclean-am +- +-mostlyclean-am: mostlyclean-compile mostlyclean-generic \ +- mostlyclean-libtool +- +-pdf: pdf-am +- +-pdf-am: +- +-ps: ps-am +- +-ps-am: +- +-uninstall-am: uninstall-binPROGRAMS +- +-.MAKE: install-am install-strip +- +-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ +- clean-generic clean-libtool ctags distclean distclean-compile \ +- distclean-generic distclean-libtool distclean-tags distdir dvi \ +- dvi-am html html-am info info-am install install-am \ +- install-binPROGRAMS install-data install-data-am install-dvi \ +- install-dvi-am install-exec install-exec-am install-html \ +- install-html-am install-info install-info-am install-man \ +- install-pdf install-pdf-am install-ps install-ps-am \ +- install-strip installcheck installcheck-am installdirs \ +- maintainer-clean maintainer-clean-generic mostlyclean \ +- mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ +- pdf pdf-am ps ps-am tags uninstall uninstall-am \ +- uninstall-binPROGRAMS +- +- +-@USE_KDE_TRUE@%.moc.cpp: %.h +-@USE_KDE_TRUE@ $(QT_MOC) $< > $@ +- +-@USE_KDE_TRUE@%.kidl: %.h +-@USE_KDE_TRUE@ $(DCOPIDL) $< > $@ +- +-@USE_KDE_TRUE@%_skel.cpp: %.kidl +-@USE_KDE_TRUE@ $(DCOPIDL2CPP) $< > $@ +- +-# Tell versions [3.59,3.63) of GNU make to not export all variables. +-# Otherwise a system limit (for SysV at least) may be exceeded. +-.NOEXPORT: +diff -uprN compiz-0.8.8-orig/kde/window-decorator/options.cpp compiz-0.8.8/kde/window-decorator/options.cpp +--- compiz-0.8.8-orig/kde/window-decorator/options.cpp 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator/options.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,187 +0,0 @@ +-/* +- * Copyright © 2006 Novell, Inc. +- * Copyright © 2006 Dennis Kasprzyk +- * Copyright © 2006 Volker Krause +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: David Reveman +- */ +- +-#include "options.h" +- +-#include +-#include +- +-KWD::Options::Options (KConfig *config): KDecorationOptions (), mConfig (config) +-{ +- d = new KDecorationOptionsPrivate; +- updateSettings (); +-} +- +-unsigned long +-KWD::Options::updateSettings (void) +-{ +- unsigned long changed = 0; +- +- changed |= d->updateKWinSettings (mConfig); +- +- mConfig->setGroup ("Windows"); +- +- OpTitlebarDblClick = +- windowOperation (mConfig->readEntry ("TitlebarDoubleClickCommand", +- "Shade"), true); +- d->OpMaxButtonLeftClick = +- windowOperation (mConfig->readEntry ("MaximizeButtonLeftClickCommand", +- "Maximize"), true); +- d->OpMaxButtonMiddleClick = +- windowOperation (mConfig->readEntry ("MaximizeButtonMiddleClickCommand", +- "Maximize (vertical only)"), true); +- d->OpMaxButtonRightClick = +- windowOperation (mConfig->readEntry ("MaximizeButtonRightClickCommand", +- "Maximize (horizontal only)"), +- true); +- +- mConfig->setGroup ("MouseBindings"); +- +- CmdActiveTitlebar1 = +- mouseCommand (mConfig->readEntry ("CommandActiveTitlebar1", +- "Raise"), true); +- CmdActiveTitlebar2 = +- mouseCommand (mConfig->readEntry ("CommandActiveTitlebar2", +- "Lower"), true); +- CmdActiveTitlebar3 = +- mouseCommand (mConfig->readEntry ("CommandActiveTitlebar3", +- "Operations menu"), true); +- CmdInactiveTitlebar1 = +- mouseCommand (mConfig->readEntry ("CommandInactiveTitlebar1", +- "Activate and raise"), true); +- CmdInactiveTitlebar2 = +- mouseCommand (mConfig->readEntry ("CommandInactiveTitlebar2", +- "Activate and lower"), true); +- CmdInactiveTitlebar3 = +- mouseCommand (mConfig->readEntry ("CommandInactiveTitlebar3", +- "Operations menu"), true); +- +- CmdTitlebarWheel = +- mouseWheelCommand (mConfig->readEntry ("CommandTitlebarWheel", +- "Nothing")); +- +- return changed; +-} +- +-// restricted should be true for operations that the user may not be able to +-// repeat if the window is moved out of the workspace (e.g. if the user moves +-// a window by the titlebar, and moves it too high beneath Kicker at the top +-// edge, they may not be able to move it back, unless they know about Alt+LMB) +-KDecorationDefines::WindowOperation +-KWD::Options::windowOperation (const QString &name, bool restricted) +-{ +- if (name == "Move") +- return restricted ? KWD::Options::MoveOp : +- KWD::Options::UnrestrictedMoveOp; +- else if (name == "Resize") +- return restricted ? KWD::Options::ResizeOp : +- KWD::Options::UnrestrictedResizeOp; +- else if (name == "Maximize") +- return KWD::Options::MaximizeOp; +- else if (name == "Minimize") +- return KWD::Options::MinimizeOp; +- else if (name == "Close") +- return KWD::Options::CloseOp; +- else if (name == "OnAllDesktops") +- return KWD::Options::OnAllDesktopsOp; +- else if (name == "Shade") +- return KWD::Options::ShadeOp; +- else if (name == "Operations") +- return KWD::Options::OperationsOp; +- else if (name == "Maximize (vertical only)") +- return KWD::Options::VMaximizeOp; +- else if (name == "Maximize (horizontal only)") +- return KWD::Options::HMaximizeOp; +- else if (name == "Lower") +- return KWD::Options::LowerOp; +- return KWD::Options::NoOp; +-} +- +-KWD::Options::MouseCommand +-KWD::Options::mouseCommand (const QString &name, +- bool restricted) +-{ +- QString lowerName = name.lower (); +- +- if (lowerName == "raise") return MouseRaise; +- if (lowerName == "lower") return MouseLower; +- if (lowerName == "operations menu") return MouseOperationsMenu; +- if (lowerName == "toggle raise and lower") return MouseToggleRaiseAndLower; +- if (lowerName == "activate and raise") return MouseActivateAndRaise; +- if (lowerName == "activate and lower") return MouseActivateAndLower; +- if (lowerName == "activate") return MouseActivate; +- if (lowerName == "activate, raise and pass click") +- return MouseActivateRaiseAndPassClick; +- if (lowerName == "activate and pass click") +- return MouseActivateAndPassClick; +- if (lowerName == "activate, raise and move") +- return restricted ? MouseActivateRaiseAndMove : +- MouseActivateRaiseAndUnrestrictedMove; +- if (lowerName == "move") +- return restricted ? MouseMove : MouseUnrestrictedMove; +- if (lowerName == "resize") +- return restricted ? MouseResize : MouseUnrestrictedResize; +- if (lowerName == "shade") return MouseShade; +- if (lowerName == "minimize") return MouseMinimize; +- if (lowerName == "nothing") return MouseNothing; +- +- return MouseNothing; +-} +- +-KWD::Options::MouseWheelCommand +-KWD::Options::mouseWheelCommand (const QString &name) +-{ +- QString lowerName = name.lower (); +- +- if (lowerName == "raise/lower") return MouseWheelRaiseLower; +- if (lowerName == "shade/unshade") return MouseWheelShadeUnshade; +- if (lowerName == "maximize/restore") return MouseWheelMaximizeRestore; +- if (lowerName == "above/below") return MouseWheelAboveBelow; +- if (lowerName == "previous/next desktop") +- return MouseWheelPreviousNextDesktop; +- if (lowerName == "change opacity") return MouseWheelChangeOpacity; +- +- return MouseWheelNothing; +-} +- +-KWD::Options::MouseCommand +-KWD::Options::wheelToMouseCommand (MouseWheelCommand com, +- int delta) +-{ +- switch (com) { +- case MouseWheelRaiseLower: +- return delta > 0 ? MouseRaise : MouseLower; +- case MouseWheelShadeUnshade: +- return delta > 0 ? MouseSetShade : MouseUnsetShade; +- case MouseWheelMaximizeRestore: +- return delta > 0 ? MouseMaximize : MouseRestore; +- case MouseWheelAboveBelow: +- return delta > 0 ? MouseAbove : MouseBelow; +- case MouseWheelPreviousNextDesktop: +- return delta > 0 ? MousePreviousDesktop : MouseNextDesktop; +- case MouseWheelChangeOpacity: +- return delta > 0 ? MouseOpacityMore : MouseOpacityLess; +- default: +- return MouseNothing; +- } +-} +diff -uprN compiz-0.8.8-orig/kde/window-decorator/options.h compiz-0.8.8/kde/window-decorator/options.h +--- compiz-0.8.8-orig/kde/window-decorator/options.h 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator/options.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,140 +0,0 @@ +-/* +- * Copyright © 2006 Novell, Inc. +- * Copyright © 2006 Dennis Kasprzyk +- * Copyright © 2006 Volker Krause +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: David Reveman +- */ +- +-#ifndef _OPTIONS_H +-#define _OPTIONS_H +- +-#include +- +-class KConfig; +- +-namespace KWD +-{ +- +-class Options : public KDecorationOptions +- { +- public: +- enum MouseCommand +- { +- MouseRaise, +- MouseLower, +- MouseOperationsMenu, +- MouseToggleRaiseAndLower, +- MouseActivateAndRaise, +- MouseActivateAndLower, +- MouseActivate, +- MouseActivateRaiseAndPassClick, +- MouseActivateAndPassClick, +- MouseMove, +- MouseUnrestrictedMove, +- MouseActivateRaiseAndMove, +- MouseActivateRaiseAndUnrestrictedMove, +- MouseResize, +- MouseUnrestrictedResize, +- MouseShade, +- MouseSetShade, +- MouseUnsetShade, +- MouseMaximize, +- MouseRestore, +- MouseMinimize, +- MouseNextDesktop, +- MousePreviousDesktop, +- MouseAbove, +- MouseBelow, +- MouseOpacityMore, +- MouseOpacityLess, +- MouseNothing +- }; +- enum MouseWheelCommand +- { +- MouseWheelRaiseLower, +- MouseWheelShadeUnshade, +- MouseWheelMaximizeRestore, +- MouseWheelAboveBelow, +- MouseWheelPreviousNextDesktop, +- MouseWheelChangeOpacity, +- MouseWheelNothing +- }; +- +- Options (KConfig *config); +- +- virtual unsigned long updateSettings (void); +- +- WindowOperation operationTitlebarDblClick (void) +- { +- return OpTitlebarDblClick; +- } +- +- MouseCommand commandActiveTitlebar1 (void) +- { +- return CmdActiveTitlebar1; +- } +- MouseCommand commandActiveTitlebar2 (void) +- { +- return CmdActiveTitlebar2; +- } +- MouseCommand commandActiveTitlebar3 (void) +- { +- return CmdActiveTitlebar3; +- } +- MouseCommand commandInactiveTitlebar1 (void) +- { +- return CmdInactiveTitlebar1; +- } +- MouseCommand commandInactiveTitlebar2 (void) +- { +- return CmdInactiveTitlebar2; +- } +- MouseCommand commandInactiveTitlebar3 (void) +- { +- return CmdInactiveTitlebar3; +- } +- +- MouseCommand operationTitlebarMouseWheel (int delta) +- { +- return wheelToMouseCommand (CmdTitlebarWheel, delta); +- } +- +- private: +- static KDecorationDefines::WindowOperation +- windowOperation (const QString &name, bool restricted); +- MouseCommand mouseCommand (const QString &name, bool restricted); +- MouseWheelCommand mouseWheelCommand (const QString &name); +- MouseCommand wheelToMouseCommand (MouseWheelCommand com, int delta); +- +- private: +- KDecorationDefines::WindowOperation OpTitlebarDblClick; +- MouseCommand CmdActiveTitlebar1; +- MouseCommand CmdActiveTitlebar2; +- MouseCommand CmdActiveTitlebar3; +- MouseCommand CmdInactiveTitlebar1; +- MouseCommand CmdInactiveTitlebar2; +- MouseCommand CmdInactiveTitlebar3; +- MouseWheelCommand CmdTitlebarWheel; +- +- KConfig *mConfig; +- }; +- +-} +- +-#endif +diff -uprN compiz-0.8.8-orig/kde/window-decorator/utils.cpp compiz-0.8.8/kde/window-decorator/utils.cpp +--- compiz-0.8.8-orig/kde/window-decorator/utils.cpp 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator/utils.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,205 +0,0 @@ +-/* +- * Copyright © 2006 Novell, Inc. +- * Copyright © 2006 Dennis Kasprzyk +- * Copyright © 2006 Volker Krause +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: David Reveman +- */ +- +-#include "utils.h" +- +-#include +- +-#include +-#include +-#include +- +-#include +- +-static int trappedErrorCode = 0; +- +-namespace KWD +-{ +- namespace Atoms +- { +- Atom switchSelectWindow; +- Atom netWmWindowOpacity; +- Atom netFrameWindow; +- Atom netWindowDecor; +- Atom netWindowDecorNormal; +- Atom netWindowDecorActive; +- Atom netWindowDecorBare; +- Atom wmTakeFocus; +- Atom netWmContextHelp; +- Atom wmProtocols; +- Atom toolkitActionAtom; +- Atom toolkitActionWindowMenuAtom; +- Atom toolkitActionForceQuitDialogAtom; +- Atom compizWindowBlurDecor; +- } +-} +- +-static int (*oldErrorHandler) (Display *display, XErrorEvent *error); +- +-static int +-xErrorHandler (Display *display, +- XErrorEvent *error) +-{ +- (void) display; +- +- trappedErrorCode = error->error_code; +- +- return 0; +-} +- +-void +-KWD::trapXError (void) +-{ +- trappedErrorCode = 0; +- oldErrorHandler = XSetErrorHandler (xErrorHandler); +-} +- +-int +-KWD::popXError (void) +-{ +- XSync (qt_xdisplay(), false); +- XSetErrorHandler (oldErrorHandler); +- +- return trappedErrorCode; +-} +- +-void * +-KWD::readXProperty (WId window, +- Atom property, +- Atom type, +- int *items) +-{ +- long offset = 0, length = 2048L; +- Atom actualType; +- int format; +- unsigned long nItems, bytesRemaining; +- unsigned char *data = 0l; +- int result; +- +- KWD::trapXError (); +- result = XGetWindowProperty (qt_xdisplay (), window, property, offset, +- length, false, type, +- &actualType, &format, &nItems, +- &bytesRemaining, &data); +- +- if (KWD::popXError ()) +- return NULL; +- +- if (result == Success && actualType == type && format == 32 && nItems > 0) +- { +- if (items) +- *items = nItems; +- +- return reinterpret_cast (data); +- } +- +- if (data) +- XFree (data); +- +- if (items) +- *items = 0; +- +- return NULL; +-} +- +-bool +-KWD::readWindowProperty (long window, +- long property, +- long *value) +-{ +- void *data = readXProperty (window, property, XA_WINDOW, NULL); +- +- if (data) +- { +- if (value) +- *value = *reinterpret_cast (data); +- +- XFree (data); +- +- return true; +- } +- +- return false; +-} +- +-unsigned short +-KWD::readPropertyShort (WId id, +- Atom property, +- unsigned short defaultValue) +-{ +- Atom actual; +- int result, format; +- unsigned long n, left; +- unsigned char *data; +- +- KWD::trapXError (); +- result = XGetWindowProperty (qt_xdisplay (), id, property, +- 0L, 1L, FALSE, XA_CARDINAL, &actual, &format, +- &n, &left, &data); +- if (KWD::popXError ()) +- return defaultValue; +- +- if (result == Success && n && data) +- { +- unsigned int value; +- +- memcpy (&value, data, sizeof (unsigned int)); +- +- XFree (data); +- +- return value >> 16; +- } +- +- return defaultValue; +-} +- +-void +-KWD::Atoms::init (void) +-{ +- Display *xdisplay = qt_xdisplay (); +- +- netFrameWindow = XInternAtom (xdisplay, "_NET_FRAME_WINDOW", false); +- netWindowDecor = XInternAtom (xdisplay, DECOR_WINDOW_ATOM_NAME, false); +- netWindowDecorNormal = +- XInternAtom (xdisplay, DECOR_NORMAL_ATOM_NAME, false); +- netWindowDecorActive = +- XInternAtom (xdisplay, DECOR_ACTIVE_ATOM_NAME, false); +- netWindowDecorBare = +- XInternAtom (xdisplay, DECOR_BARE_ATOM_NAME, false); +- switchSelectWindow = +- XInternAtom (xdisplay, DECOR_SWITCH_WINDOW_ATOM_NAME, false); +- wmTakeFocus = XInternAtom (xdisplay, "WM_TAKE_FOCUS", false); +- netWmContextHelp = +- XInternAtom (xdisplay, "_NET_WM_CONTEXT_HELP", false); +- wmProtocols = XInternAtom (xdisplay, "WM_PROTOCOLS", false); +- netWmWindowOpacity = +- XInternAtom (xdisplay, "_NET_WM_WINDOW_OPACITY", false); +- toolkitActionAtom = XInternAtom (xdisplay, "_COMPIZ_TOOLKIT_ACTION", false); +- toolkitActionWindowMenuAtom = +- XInternAtom (xdisplay, "_COMPIZ_TOOLKIT_ACTION_WINDOW_MENU", false); +- toolkitActionForceQuitDialogAtom = +- XInternAtom (xdisplay, "_COMPIZ_TOOLKIT_ACTION_FORCE_QUIT_DIALOG", +- false); +- compizWindowBlurDecor = +- XInternAtom (xdisplay, DECOR_BLUR_ATOM_NAME, false); +-} +diff -uprN compiz-0.8.8-orig/kde/window-decorator/utils.h compiz-0.8.8/kde/window-decorator/utils.h +--- compiz-0.8.8-orig/kde/window-decorator/utils.h 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator/utils.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,63 +0,0 @@ +-/* +- * Copyright © 2006 Novell, Inc. +- * Copyright © 2006 Dennis Kasprzyk +- * Copyright © 2006 Volker Krause +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: David Reveman +- */ +- +-#ifndef _UTILS_H +-#define _UTILS_H +- +-#include +-#include +-#include +- +-namespace KWD +-{ +- namespace Atoms +- { +- extern Atom switchSelectWindow; +- extern Atom netWmWindowOpacity; +- extern Atom netFrameWindow; +- extern Atom netWindowDecor; +- extern Atom netWindowDecorNormal; +- extern Atom netWindowDecorActive; +- extern Atom netWindowDecorBare; +- extern Atom wmTakeFocus; +- extern Atom netWmContextHelp; +- extern Atom wmProtocols; +- extern Atom toolkitActionAtom; +- extern Atom toolkitActionWindowMenuAtom; +- extern Atom toolkitActionForceQuitDialogAtom; +- extern Atom compizWindowBlurDecor; +- +- void init (void); +- } +- +- void trapXError (void); +- int popXError (void); +- bool eventFilter (void *message, long *result); +- void *readXProperty (WId window, Atom property, Atom type, int *items); +- bool readWindowProperty (long wId, long property, long *value); +- unsigned short readPropertyShort (WId id, +- Atom property, +- unsigned short defaultValue); +-} +- +-#endif +diff -uprN compiz-0.8.8-orig/kde/window-decorator/window.cpp compiz-0.8.8/kde/window-decorator/window.cpp +--- compiz-0.8.8-orig/kde/window-decorator/window.cpp 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator/window.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,2091 +0,0 @@ +-/* +- * Copyright © 2006 Novell, Inc. +- * Copyright © 2006 Dennis Kasprzyk +- * Copyright © 2006 Volker Krause +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: David Reveman +- */ +- +-#include "window.h" +-#include "decorator.h" +-#include "options.h" +-#include "utils.h" +- +-#include +-#include +-#include +-#include +- +-#include +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-KWD::Window::Window (WId parentId, +- WId clientId, +- WId frame, +- Type type, +- int x, +- int y, +- int w, +- int h): QWidget (0, 0), +- mType (type), +- mParentId (parentId), +- mFrame (0), +- mClientId (clientId), +- mSelectedId (0), +- mDecor (0), +- mPixmap (0), +- mDamageId (0), +- mShadow (0), +- mPicture (0), +- mTexturePicture (0), +- mDecorationPicture (0), +- mUpdateProperty (false), +- mShapeSet (false), +- mUniqueHorzShape (false), +- mUniqueVertShape (false), +- mPopup (0), +- mAdvancedMenu (0), +- mDesktopMenu (0), +- mMapped (false), +- mPendingMap (0), +- mPendingConfigure (0), +- mProcessKiller (0) +-{ +- memset (&mBorder, 0, sizeof (mBorder)); +- +- if (mType == Normal || mType == Switcher) +- { +- KWin::WindowInfo wInfo = KWin::windowInfo (mClientId, NET::WMState | +- NET::WMVisibleName, 0); +- +- mState = wInfo.state (); +- +- if (mType == Normal) +- { +- mName = wInfo.visibleName (); +- +- mIcons = QIconSet (KWin::icon (mClientId, 16, 16, TRUE), +- KWin::icon (mClientId, 32, 32, TRUE)); +- mOpacity = readPropertyShort (mClientId, Atoms::netWmWindowOpacity, +- 0xffff); +- } +- else +- { +- mIcons = QIconSet (); +- mName = QString (""); +- } +- +- updateFrame (frame); +- +- mGeometry = QRect (x, y, w, h); +- +- getWindowProtocols (); +- } +- else +- { +- mIcons = QIconSet (); +- mName = QString (""); +- mGeometry = QRect (50, 50, 30, 1); +- } +- +- setGeometry (QRect (mGeometry.x () + ROOT_OFF_X, +- mGeometry.y () + ROOT_OFF_Y, +- mGeometry.width (), mGeometry.height ())); +- +- createDecoration (); +- +- mActiveChild = NULL; +-} +- +-KWD::Window::~Window (void) +-{ +- if (mShadow) +- decor_shadow_destroy (qt_xdisplay (), mShadow); +- +- if (mPicture) +- XRenderFreePicture (qt_xdisplay (), mPicture); +- +- if (mPixmap) +- XFreePixmap (qt_xdisplay (), mPixmap); +- +- if (mTexturePicture) +- XRenderFreePicture (qt_xdisplay (), mTexturePicture); +- +- if (mDecorationPicture) +- XRenderFreePicture (qt_xdisplay (), mDecorationPicture); +- +- if (mDecor) +- delete mDecor; +- +- if (mPopup) +- delete mPopup; +- +- if (mProcessKiller) +- delete mProcessKiller; +-} +- +-bool +-KWD::Window::isActive (void) const +-{ +- if (mType == DefaultActive) +- return true; +- +- if (mType == Switcher) +- return true; +- +- return Decorator::activeId () == mClientId; +-} +- +-bool +-KWD::Window::isCloseable (void) const +-{ +- KWin::WindowInfo wInfo; +- +- if (mType != Normal) +- return false; +- +- wInfo = KWin::windowInfo (mClientId, NET::WMPid, NET::WM2AllowedActions); +- return wInfo.actionSupported (NET::ActionClose); +-} +- +-bool +-KWD::Window::isMaximizable (void) const +-{ +- KWin::WindowInfo wInfo; +- +- if (mType != Normal) +- return false; +- +- wInfo = KWin::windowInfo (mClientId, NET::WMPid, NET::WM2AllowedActions); +- return wInfo.actionSupported (NET::ActionMax); +-} +- +-KDecoration::MaximizeMode +-KWD::Window::maximizeMode (void) const +-{ +- MaximizeMode mode = MaximizeRestore; +- +- if (mType != Normal) +- return mode; +- +- mode = +- ((mState & NET::MaxVert) ? MaximizeVertical : MaximizeRestore) | +- ((mState & NET::MaxHoriz) ? MaximizeHorizontal : MaximizeRestore); +- +- return mode; +-} +- +-bool +-KWD::Window::isMinimizable (void) const +-{ +- KWin::WindowInfo wInfo; +- +- if (mType != Normal) +- return false; +- +- wInfo = KWin::windowInfo (mClientId, NET::WMPid, NET::WM2AllowedActions); +- return wInfo.actionSupported (NET::ActionMinimize); +-} +- +-bool +-KWD::Window::providesContextHelp (void) const +-{ +- if (mType != Normal) +- return false; +- +- return mSupportContextHelp; +-} +- +-int +-KWD::Window::desktop (void) const +-{ +- KWin::WindowInfo wInfo = KWin::windowInfo (mClientId, NET::WMDesktop, 0); +- +- return wInfo.desktop (); +-} +- +-bool +-KWD::Window::isModal (void) const +-{ +- return mState & NET::Modal; +-} +- +-bool +-KWD::Window::isShadeable (void) const +-{ +- KWin::WindowInfo wInfo = KWin::windowInfo (mClientId, NET::WMPid, +- NET::WM2AllowedActions); +- +- return wInfo.actionSupported (NET::ActionShade); +-} +- +-bool +-KWD::Window::isShade (void) const +-{ +- if (mType != Normal) +- return false; +- +- return (mState & NET::Shaded); +-} +- +-bool +-KWD::Window::isSetShade (void) const +-{ +- return isShade (); +-} +- +-bool +-KWD::Window::keepAbove (void) const +-{ +- if (mType != Normal) +- return false; +- +- return (mState & NET::KeepAbove); +-} +- +-bool +-KWD::Window::keepBelow (void) const +-{ +- if (mType != Normal) +- return false; +- +- return (mState & NET::KeepBelow); +-} +- +-bool +-KWD::Window::isMovable (void) const +-{ +- KWin::WindowInfo wInfo = KWin::windowInfo (mClientId, NET::WMPid, +- NET::WM2AllowedActions); +- +- return wInfo.actionSupported (NET::ActionMove); +-} +- +-NET::WindowType +-KWD::Window::windowType (unsigned long mask) const +-{ +- KWin::WindowInfo wInfo = KWin::windowInfo (mClientId, NET::WMWindowType, 0); +- +- return wInfo.windowType (mask); +-} +- +-bool +-KWD::Window::isResizable (void) const +-{ +- KWin::WindowInfo wInfo = KWin::windowInfo (mClientId, NET::WMPid, +- NET::WM2AllowedActions); +- +- return wInfo.actionSupported (NET::ActionResize); +-} +- +-QIconSet +-KWD::Window::icon (void) const +-{ +- return mIcons; +-} +- +-QString +-KWD::Window::caption (void) const +-{ +- return mName; +-} +- +-/* TODO: We should use libtaskmanager, which is part of kdebase to create +- the window menu instead but the headers for that library are currently +- not installed. If kdebase could install those headers, we wouldn't have +- to have our own window menu implementaion here. */ +-void +-KWD::Window::showWindowMenu (QPoint pos) +-{ +- if (!mPopup) +- { +- mPopup = new QPopupMenu (); +- mPopup->setCheckable (true); +- mPopup->setFont (KGlobalSettings::menuFont ()); +- +- mAdvancedMenu = new QPopupMenu (mPopup); +- mAdvancedMenu->setCheckable (true); +- mAdvancedMenu->setFont (KGlobalSettings::menuFont ()); +- +- connect (mAdvancedMenu, SIGNAL (activated (int)), +- SLOT (handlePopupActivated (int))); +- +- mAdvancedMenu->insertItem (SmallIconSet ("up"), +- i18n ("Keep &Above Others"), +- Options::KeepAboveOp); +- mAdvancedMenu->insertItem (SmallIconSet ("down"), +- i18n ("Keep &Below Others"), +- Options::KeepBelowOp); +- mAdvancedMenu->insertItem (SmallIconSet ("window_fullscreen"), +- i18n ("&Fullscreen"), +- Options::FullScreenOp); +- +- mPopup->insertItem (i18n ("Ad&vanced"), mAdvancedMenu); +- +- mDesktopMenu = new QPopupMenu (mPopup); +- mDesktopMenu->setCheckable (true); +- mDesktopMenu->setFont (KGlobalSettings::menuFont ()); +- +- connect (mDesktopMenu, SIGNAL (activated (int)), +- SLOT (handleDesktopPopupActivated (int))); +- +- mPopup->insertItem (i18n ("To &Desktop"), mDesktopMenu, Options::NoOp); +- +- mPopup->insertItem (SmallIconSet ("move"), i18n ("&Move"), +- Options::MoveOp); +- mPopup->insertItem (i18n ("Re&size"), Options::ResizeOp); +- +- mPopup->insertItem (i18n ("Mi&nimize"), Options::MinimizeOp); +- mPopup->insertItem (i18n ("Ma&ximize"), Options::MaximizeOp); +- mPopup->insertItem (i18n ("Sh&ade"), Options::ShadeOp); +- +- mPopup->insertSeparator (); +- +- mPopup->insertItem (SmallIconSet ("fileclose"), i18n ("&Close"), +- Options::CloseOp); +- +- connect (mPopup, SIGNAL (aboutToShow ()), +- SLOT (handlePopupAboutToShow ())); +- connect (mPopup, SIGNAL (activated (int)), +- SLOT (handlePopupActivated (int))); +- } +- +- mPopup->exec (pos); +-} +- +-void +-KWD::Window::showWindowMenu (const QRect &pos) +-{ +- showWindowMenu (pos.bottomLeft ()); +-} +- +-void +-KWD::Window::processMousePressEvent (QMouseEvent *qme) +-{ +- Options::MouseCommand com = Options::MouseNothing; +- bool active = isActive (); +- +- if (!mSupportTakeFocus) +- active = TRUE; +- +- switch (qme->button ()) { +- case Qt::LeftButton: +- com = active ? Decorator::options ()->commandActiveTitlebar1 () : +- Decorator::options()->commandInactiveTitlebar1 (); +- break; +- case Qt::MidButton: +- com = active ? Decorator::options ()->commandActiveTitlebar2 () : +- Decorator::options()->commandInactiveTitlebar2 (); +- break; +- case Qt::RightButton: +- com = active ? Decorator::options ()->commandActiveTitlebar3 () : +- Decorator::options()->commandInactiveTitlebar3 (); +- default: +- break; +- } +- +- if (qme->button () == Qt::LeftButton) +- { +- // actions where it's not possible to get the matching release event +- if (com != Options::MouseOperationsMenu && +- com != Options::MouseMinimize) +- { +- moveWindow (qme); +- return; +- } +- } +- +- performMouseCommand (com, qme); +-} +- +-void +-KWD::Window::performWindowOperation (WindowOperation wo) +-{ +- switch (wo) { +- case KDecoration::MaximizeOp: +- maximize (maximizeMode () == KDecoration::MaximizeFull ? +- KDecoration::MaximizeRestore : KDecoration::MaximizeFull); +- break; +- case KDecoration::HMaximizeOp: +- maximize (maximizeMode () ^ KDecoration::MaximizeHorizontal); +- break; +- case KDecoration::VMaximizeOp: +- maximize (maximizeMode () ^ KDecoration::MaximizeVertical); +- break; +- case KDecoration::MinimizeOp: +- minimize (); +- break; +- case KDecoration::ShadeOp: +- setShade (!isShade ()); +- break; +- case KDecoration::CloseOp: +- closeWindow (); +- break; +- case KDecoration::KeepAboveOp: +- setKeepAbove (!keepAbove ()); +- break; +- case KDecoration::KeepBelowOp: +- setKeepBelow (!keepBelow ()); +- break; +- case KDecoration::FullScreenOp: +- if (mState & NET::FullScreen) +- KWin::clearState (mClientId, NET::FullScreen); +- else +- KWin::setState (mClientId, NET::FullScreen); +- break; +- case KDecoration::MoveOp: +- Decorator::rootInfo ()->moveResizeRequest (mClientId, +- mGeometry.x () + +- mGeometry.width () / 2, +- mGeometry.y () + +- mGeometry.height () / 2, +- NET::KeyboardMove); +- break; +- case KDecoration::ResizeOp: +- Decorator::rootInfo ()->moveResizeRequest (mClientId, +- mGeometry.x () + +- mGeometry.width () / 2, +- mGeometry.y () + +- mGeometry.height () / 2, +- NET::KeyboardSize); +- default: +- break; +- } +-} +- +-bool +-KWD::Window::isPreview (void) const +-{ +- return false; +-} +- +-QRect +-KWD::Window::geometry (void) const +-{ +- QRect rect = QWidget::geometry (); +- +- return QRect (rect.x () - ROOT_OFF_X, +- rect.y () - ROOT_OFF_Y, +- rect.width (), +- rect.height ()); +-} +- +-QRect +-KWD::Window::iconGeometry (void) const +-{ +- return QRect (); +-} +- +-QRect +-KWD::Window::clientGeometry (void) +-{ +- QRect frame = geometry (); +- +- return QRect (frame.x () + mBorder.left, +- frame.y () + mBorder.top, +- frame.width () - mBorder.left - mBorder.right, +- frame.height () - mBorder.top - mBorder.bottom); +-} +- +-QRegion +-KWD::Window::unobscuredRegion (const QRegion & r) const +-{ +- return r; +-} +- +-QWidget * +-KWD::Window::workspaceWidget (void) const +-{ +- return const_cast (this); +-} +- +-WId +-KWD::Window::windowId (void) const +-{ +- return mClientId; +-} +- +-void +-KWD::Window::closeWindow (void) +-{ +- Decorator::rootInfo ()->closeWindowRequest (mClientId); +-} +- +-void +-KWD::Window::maximize (MaximizeMode mode) +-{ +- KWin::setState (mClientId, +- ((mode & MaximizeVertical) ? NET::MaxVert : 0) | +- ((mode & MaximizeHorizontal) ? NET::MaxHoriz : 0)); +- KWin::clearState (mClientId, +- ((mode & MaximizeVertical) ? 0 : NET::MaxVert) | +- ((mode & MaximizeHorizontal) ? 0 : NET::MaxHoriz)); +-} +- +-void +-KWD::Window::minimize (void) +-{ +- KWin::iconifyWindow (mClientId, false); +-} +- +-void +-KWD::Window::showContextHelp (void) +-{ +- if (mSupportContextHelp) +- KWD::Decorator::sendClientMessage (mClientId, mClientId, +- Atoms::wmProtocols, +- Atoms::netWmContextHelp); +-} +- +-void +-KWD::Window::titlebarDblClickOperation (void) +-{ +- WindowOperation op; +- +- op = KWD::Decorator::options ()->operationTitlebarDblClick (); +- performWindowOperation (op); +-} +- +-void +-KWD::Window::setDesktop (int desktop) +-{ +- KWin::setOnDesktop (mClientId, desktop); +-} +- +-void +-KWD::Window::setKeepBelow (bool set) +-{ +- if (set) +- { +- KWin::clearState (mClientId, NET::KeepAbove); +- KWin::setState (mClientId, NET::KeepBelow); +- } +- else +- { +- KWin::clearState (mClientId, NET::KeepBelow); +- } +-} +- +-void +-KWD::Window::setKeepAbove (bool set) +-{ +- if (set) +- { +- KWin::clearState (mClientId, NET::KeepBelow); +- KWin::setState (mClientId, NET::KeepAbove); +- } +- else +- { +- KWin::clearState (mClientId, NET::KeepAbove); +- } +-} +- +-void +-KWD::Window::setShade (bool set) +-{ +- if (set) +- KWin::setState (mClientId, NET::Shaded); +- else +- KWin::clearState (mClientId, NET::Shaded); +- +- mDecor->shadeChange (); +-} +- +-void +-KWD::Window::titlebarMouseWheelOperation (int delta) +-{ +- Options::MouseCommand com; +- +- com = Decorator::options()->operationTitlebarMouseWheel (delta); +- performMouseCommand (com, 0); +-} +- +-int +-KWD::Window::currentDesktop (void) const +-{ +- return KWin::currentDesktop (); +-} +- +-QWidget * +-KWD::Window::initialParentWidget (void) const +-{ +- return const_cast (this); +-} +- +-Qt::WFlags +-KWD::Window::initialWFlags (void) const +-{ +- return 0; +-} +- +-void +-KWD::Window::helperShowHide (bool) +-{ +-} +- +-void +-KWD::Window::grabXServer (bool) +-{ +-} +- +-void +-KWD::Window::createDecoration (void) +-{ +- KDecoration *decor; +- +- if (mDecor) +- return; +- +- decor = Decorator::pluginManager ()->createDecoration (this); +- decor->init (); +- +- mDecor = decor; +- +- if (mType == Normal && mFrame) +- { +- KWD::trapXError (); +- XSelectInput (qt_xdisplay (), mFrame, +- StructureNotifyMask | PropertyChangeMask | +- ButtonPressMask | ButtonReleaseMask | PointerMotionMask | +- EnterWindowMask | LeaveWindowMask); +- if (KWD::popXError ()) +- return; +- } +- +- resizeDecoration (true); +-} +- +-static void +-fillQRegion (Display *xdisplay, +- Picture picture, +- int clipX1, +- int clipY1, +- int clipX2, +- int clipY2, +- int xOff, +- int yOff, +- QRegion *region) +-{ +- static XRenderColor white = { 0xffff, 0xffff, 0xffff, 0xffff }; +- QMemArray rects = region->rects (); +- QMemArray ::ConstIterator it; +- int x1, y1, x2, y2; +- +- for (it = rects.begin (); it != rects.end (); it++) +- { +- x1 = it->x (); +- y1 = it->y (); +- x2 = x1 + it->width (); +- y2 = y1 + it->height (); +- +- if (x1 < clipX1) +- x1 = clipX1; +- if (y1 < clipY1) +- y1 = clipY1; +- if (x2 > clipX2) +- x2 = clipX2; +- if (y2 > clipY2) +- y2 = clipY2; +- +- if (x1 < x2 && y1 < y2) +- XRenderFillRectangle (xdisplay, PictOpSrc, picture, &white, +- xOff + x1, +- yOff + y1, +- x2 - x1, +- y2 - y1); +- } +-} +- +-static void +-drawBorderShape (Display *xdisplay, +- Pixmap pixmap, +- Picture picture, +- int width, +- int height, +- decor_context_t *c, +- void *closure) +-{ +- static XRenderColor clear = { 0x0000, 0x0000, 0x0000, 0x0000 }; +- static XRenderColor white = { 0xffff, 0xffff, 0xffff, 0xffff }; +- KWD::Window *w = (KWD::Window *) closure; +- QRegion *shape; +- bool uniqueHorzShade; +- bool uniqueVertShade; +- int xOffLeft, yOffTop, xOffRight, yOffBottom; +- QRect rect = w->geometry (); +- int x1, y1, x2, y2; +- +- (void) pixmap; +- +- XRenderFillRectangle (xdisplay, PictOpSrc, picture, &clear, +- 0, 0, width, height); +- +- shape = w->getShape (); +- w->getShapeInfo (&uniqueHorzShade, &uniqueVertShade); +- +- xOffLeft = c->left_space - c->extents.left; +- yOffTop = c->top_space - c->extents.top; +- +- xOffRight = c->left_space - c->extents.left; +- yOffBottom = c->top_space - c->extents.top; +- +- x1 = c->left_space; +- y1 = c->top_space; +- x2 = width - c->right_space; +- y2 = height - c->bottom_space; +- +- if (shape) +- { +- if (uniqueHorzShade && uniqueVertShade) +- { +- fillQRegion (xdisplay, picture, +- 0, 0, +- rect.width (), rect.height (), +- xOffLeft, yOffTop, shape); +- } +- else +- { +- if (!uniqueHorzShade) +- xOffRight = x2 - (rect.width () - c->extents.right); +- +- if (!uniqueVertShade) +- yOffBottom = y2 - (rect.height () - c->extents.bottom); +- +- if (uniqueHorzShade) +- { +- fillQRegion (xdisplay, picture, +- 0, 0, +- rect.width (), c->extents.top, +- xOffLeft, yOffTop, shape); +- fillQRegion (xdisplay, picture, +- 0, rect.height () - c->extents.bottom, +- rect.width (), rect.height (), +- xOffLeft, yOffBottom, shape); +- } +- else +- { +- fillQRegion (xdisplay, picture, +- 0, 0, +- c->extents.left, c->extents.top, +- xOffLeft, yOffTop, shape); +- fillQRegion (xdisplay, picture, +- rect.width () - c->extents.right, 0, +- rect.width (), c->extents.top, +- xOffRight, yOffTop, shape); +- fillQRegion (xdisplay, picture, +- 0, rect.height () - c->extents.bottom, +- c->extents.left, rect.height (), +- xOffLeft, yOffBottom, shape); +- fillQRegion (xdisplay, picture, +- rect.width () - c->extents.right, +- rect.height () - c->extents.bottom, +- rect.width (), rect.height (), +- xOffRight, yOffBottom, shape); +- +- y1 -= c->extents.top; +- y2 += c->extents.bottom; +- } +- +- if (uniqueVertShade) +- { +- fillQRegion (xdisplay, picture, +- 0, c->extents.top, +- c->extents.left, +- rect.height () - c->extents.bottom, +- xOffLeft, yOffTop, shape); +- fillQRegion (xdisplay, picture, +- rect.width () - c->extents.right, c->extents.top, +- rect.width (), +- rect.height () - c->extents.bottom, +- xOffRight, yOffTop, shape); +- } +- else +- { +- x1 -= c->extents.left; +- x2 += c->extents.right; +- } +- } +- } +- else +- { +- x1 -= c->extents.left; +- x2 += c->extents.right; +- y1 -= c->extents.top; +- y2 += c->extents.bottom; +- } +- +- XRenderFillRectangle (xdisplay, PictOpSrc, picture, &white, +- x1, +- y1, +- x2 - x1, +- y2 - y1); +-} +- +-static void +-cornersFromQRegion (QRegion *region, +- int width, +- int height, +- int left, +- int right, +- int top, +- int bottom, +- int *leftCorner, +- int *rightCorner, +- int *topCorner, +- int *bottomCorner) +-{ +- QRegion l, r, t, b; +- +- l = QRegion (0, top, left, height - top - bottom) - *region; +- r = QRegion (width - right, top, right, height - top - bottom) - *region; +- t = QRegion (0, 0, width, top) - *region; +- b = QRegion (0, height - bottom, width, bottom) - *region; +- +- if (l.isEmpty ()) +- *leftCorner = left; +- else +- *leftCorner = left - +- (l.boundingRect ().x () + l.boundingRect ().width ()); +- +- if (r.isEmpty ()) +- *rightCorner = right; +- else +- *rightCorner = r.boundingRect ().x () - width + right; +- +- if (t.isEmpty ()) +- *topCorner = top; +- else +- *topCorner = top - +- (t.boundingRect ().y () + t.boundingRect ().height ()); +- +- if (b.isEmpty ()) +- *bottomCorner = bottom; +- else +- *bottomCorner = b.boundingRect ().y () - height + bottom; +-} +- +-void +-KWD::Window::updateShadow (void) +-{ +- Display *xdisplay = qt_xdisplay (); +- Screen *xscreen = ScreenOfDisplay (xdisplay, qt_xscreen ()); +- XRenderPictFormat *xformat; +- int leftCorner, rightCorner, topCorner, bottomCorner; +- +- if (mShadow) +- { +- decor_shadow_destroy (qt_xdisplay (), mShadow); +- mShadow = NULL; +- } +- +- if (mShapeSet) +- { +- cornersFromQRegion (&mShape, +- mGeometry.width () + mBorder.left + mBorder.right, +- mGeometry.height () + mBorder.top + mBorder.bottom, +- mBorder.left, +- mBorder.right, +- mBorder.top, +- mBorder.bottom, +- &leftCorner, +- &rightCorner, +- &topCorner, +- &bottomCorner); +- } +- else +- { +- leftCorner = mBorder.left; +- rightCorner = mBorder.right; +- topCorner = mBorder.top; +- bottomCorner = mBorder.bottom; +- } +- +- /* use default shadow if such exist */ +- if (!mUniqueHorzShape && !mUniqueVertShape) +- { +- mShadow = Decorator::defaultWindowShadow (&mContext, &mBorder); +- if (mShadow) +- decor_shadow_reference (mShadow); +- } +- +- if (!mShadow) +- { +- mShadow = decor_shadow_create (xdisplay, +- xscreen, +- mUniqueHorzShape ? +- mGeometry.width () : 1, +- mUniqueVertShape ? +- mGeometry.height () : 1, +- mBorder.left, +- mBorder.right, +- mBorder.top, +- mBorder.bottom, +- leftCorner, +- rightCorner, +- topCorner, +- bottomCorner, +- KWD::Decorator::shadowOptions (), +- &mContext, +- drawBorderShape, +- (void *) this); +- +- if (mType == Default) +- KWD::Decorator::updateDefaultShadow (this); +- } +- +- /* create new layout */ +- if (mType == Normal || mType == Switcher) +- decor_get_best_layout (&mContext, +- mGeometry.width (), +- mGeometry.height (), +- &mLayout); +- else +- decor_get_default_layout (&mContext, +- mGeometry.width (), +- mGeometry.height (), +- &mLayout); +- +- if (mDecorationPicture) +- XRenderFreePicture (qt_xdisplay (), mDecorationPicture); +- +- if (mTexturePicture) +- XRenderFreePicture (qt_xdisplay (), mTexturePicture); +- +- if (!mTexturePixmapBuffer.isNull ()) +- mTexturePixmapBuffer.resize (0, 0); +- +- if (!mTexturePixmap.isNull ()) +- mTexturePixmap.resize (0, 0); +- +- mTexturePixmap = QPixmap (mLayout.width, mLayout.height, 32); +- mTexturePixmapBuffer = QPixmap (mLayout.width, mLayout.height, 32); +- +- xformat = XRenderFindStandardFormat (qt_xdisplay (), +- PictStandardARGB32); +- +- mDecorationPicture = +- XRenderCreatePicture (qt_xdisplay (), +- mTexturePixmap.handle (), +- xformat, 0, NULL); +- mTexturePicture = +- XRenderCreatePicture (qt_xdisplay (), +- mTexturePixmapBuffer.handle (), +- xformat, 0, NULL); +- +- decor_fill_picture_extents_with_shadow (qt_xdisplay (), +- mShadow, +- &mContext, +- mTexturePicture, +- &mLayout); +- +- if (mPixmap) +- mDecor->widget ()->repaint (); +- +- mUpdateProperty = true; +-} +- +-void +-KWD::Window::setMask (const QRegion ®, int) +-{ +- QRegion top, bottom, left, right; +- bool uniqueHorzShape, uniqueVertShape; +- +- if (mShapeSet && reg == mShape) +- return; +- +- mShape = reg; +- mShapeSet = true; +- +- if (mFrame) +- { +- QRegion r; +- +- r = reg - QRegion (mBorder.left, mBorder.top, +- mGeometry.width (), mGeometry.height ()); +- +- KWD::trapXError (); +- XShapeCombineRegion (qt_xdisplay (), +- mFrame, +- ShapeInput, +- 0, +- 0, +- r.handle (), +- ShapeSet); +- KWD::popXError (); +- } +- +- top = QRegion (mBorder.left, 0, +- mGeometry.width (), mBorder.top) - reg; +- bottom = QRegion (mBorder.left, mGeometry.height () + mBorder.top, +- mGeometry.width (), mBorder.bottom) - reg; +- left = QRegion (0, mBorder.top, mBorder.left, +- mGeometry.height ()) - reg; +- right = QRegion (mBorder.left + mGeometry.width (), mBorder.top, +- mBorder.right, mGeometry.height ()) - reg; +- +- uniqueHorzShape = !top.isEmpty () || !bottom.isEmpty (); +- uniqueVertShape = !left.isEmpty () || !right.isEmpty (); +- +- if (uniqueHorzShape || mUniqueHorzShape || +- uniqueVertShape || mUniqueVertShape) +- { +- mUniqueHorzShape = uniqueHorzShape; +- mUniqueVertShape = uniqueVertShape; +- +- if (mPixmap) +- updateShadow (); +- } +-} +- +-bool +-KWD::Window::resizeDecoration (bool force) +-{ +- int w, h; +- +- mDecor->borders (mBorder.left, mBorder.right, mBorder.top, mBorder.bottom); +- +- w = mGeometry.width () + mBorder.left + mBorder.right; +- h = mGeometry.height () + mBorder.top + mBorder.bottom; +- +- if (!force) +- { +- if (w == width () && h == height ()) +- return FALSE; +- } +- +- /* reset shape */ +- mShapeSet = false; +- mUniqueHorzShape = false; +- mUniqueVertShape = false; +- +- if (mType != Normal && mType != Switcher) +- { +- Display *xdisplay = qt_xdisplay (); +- Screen *xscreen = ScreenOfDisplay (xdisplay, qt_xscreen ()); +- decor_shadow_t *tmpShadow; +- decor_context_t c; +- +- /* XXX: we have to create a temporary shadow to get the client +- geometry. libdecoration should be fixed so it's able to just +- fill out a context struct and not necessarily generate a +- shadow for this purpose. */ +- tmpShadow = decor_shadow_create (xdisplay, +- xscreen, +- 1, 1, +- mBorder.left, +- mBorder.right, +- mBorder.top, +- mBorder.bottom, +- mBorder.left, +- mBorder.right, +- mBorder.top, +- mBorder.bottom, +- KWD::Decorator::shadowOptions (), +- &c, +- decor_draw_simple, +- (void *) 0); +- +- decor_shadow_destroy (xdisplay, tmpShadow); +- +- w = c.left_corner_space + 1 + c.right_corner_space; +- +- /* most styles render something useful at least 30 px width */ +- if (w < 30) +- w = 30; +- +- mGeometry = QRect (50, 50, w, +- c.top_corner_space + 1 + c.bottom_corner_space); +- } +- +- w = mGeometry.width () + mBorder.left + mBorder.right; +- h = mGeometry.height () + mBorder.top + mBorder.bottom; +- +- if (mPixmap) +- { +- XFreePixmap (qt_xdisplay (), mPixmap); +- mPixmap = None; +- } +- +- if (mPicture) +- { +- XRenderFreePicture (qt_xdisplay (), mPicture); +- mPicture = 0; +- } +- +- if (w != width() || h != height()) +- { +- mPendingConfigure = 1; +- } +- +- setGeometry (QRect (mGeometry.x () + ROOT_OFF_X - mBorder.left, +- mGeometry.y () + ROOT_OFF_Y - mBorder.top, +- w, h)); +- +- mSize = QSize (w, h); +- +- if (!mMapped) +- { +- mPendingMap = 1; +- +- XReparentWindow (qt_xdisplay (), winId (), mParentId, 0, 0); +- +- show (); +- +- mMapped = true; +- +- if (mDamageId != winId ()) +- { +- mDamageId = winId (); +- XDamageCreate (qt_xdisplay (), mDamageId, +- XDamageReportRawRectangles); +- } +- } +- +- mDecor->resize (QSize (w, h)); +- mDecor->widget ()->show (); +- mDecor->widget ()->repaint (); +- +- return TRUE; +-} +- +-void +-KWD::Window::rebindPixmap (void) +-{ +- XRenderPictFormat *xformat; +- QPaintEvent *e; +- +- if (mPicture) +- XRenderFreePicture (qt_xdisplay (), mPicture); +- +- if (mPixmap) +- XFreePixmap (qt_xdisplay (), mPixmap); +- +- mPixmap = XCompositeNameWindowPixmap (qt_xdisplay (), winId ()); +- +- xformat = XRenderFindVisualFormat (qt_xdisplay (), +- (Visual *) x11Visual ()); +- +- mPicture = XRenderCreatePicture (qt_xdisplay (), mPixmap, +- xformat, 0, NULL); +- +- updateShadow (); +- +- e = new QPaintEvent (mDecor->widget ()->rect (), false); +- QApplication::postEvent (mDecor->widget (), e); +-} +- +-bool +-KWD::Window::handleMap (void) +-{ +- if (!mPendingMap) +- return FALSE; +- +- mPendingMap = 0; +- if (mPendingConfigure) +- return FALSE; +- +- rebindPixmap (); +- +- return TRUE; +-} +- +-bool +-KWD::Window::handleConfigure (QSize size) +-{ +- if (!mPendingConfigure) +- return FALSE; +- +- if (size != mSize) +- return FALSE; +- +- mPendingConfigure = 0; +- if (mPendingConfigure || mPendingMap) +- return FALSE; +- +- rebindPixmap (); +- +- return TRUE; +-} +- +-void +-KWD::Window::updateBlurProperty (int topOffset, +- int bottomOffset, +- int leftOffset, +- int rightOffset) +-{ +- Atom atom = Atoms::compizWindowBlurDecor; +- QRegion topQRegion, bottomQRegion, leftQRegion, rightQRegion; +- Region topRegion = NULL; +- Region bottomRegion = NULL; +- Region leftRegion = NULL; +- Region rightRegion = NULL; +- int size = 0; +- int w, h; +- +- w = mGeometry.width () + mContext.extents.left + mContext.extents.right; +- h = mGeometry.height () + mContext.extents.top + mContext.extents.bottom; +- +- if (blurType != BLUR_TYPE_NONE) +- { +- QRegion r, shape = QRegion (0, 0, w, h); +- +- if (mShapeSet) +- shape = mShape; +- +- r = QRegion (0, 0, w, mContext.extents.top); +- topQRegion = r.intersect (shape); +- if (!topQRegion.isEmpty ()) +- { +- topQRegion.translate (-mContext.extents.left, +- -mContext.extents.top); +- topRegion = topQRegion.handle (); +- } +- +- if (blurType == BLUR_TYPE_ALL) +- { +- r = QRegion (0, h - mContext.extents.bottom, +- w, mContext.extents.bottom); +- bottomQRegion = r.intersect (shape); +- if (!bottomQRegion.isEmpty ()) +- { +- bottomQRegion.translate (-mContext.extents.left, +- -(h - mContext.extents.bottom)); +- bottomRegion = bottomQRegion.handle (); +- } +- +- r = QRegion (0, mContext.extents.top, +- mContext.extents.left, mGeometry.height ()); +- leftQRegion = r.intersect (shape); +- if (!leftQRegion.isEmpty ()) +- { +- leftQRegion.translate (-mContext.extents.left, +- -mContext.extents.top); +- leftRegion = leftQRegion.handle (); +- } +- +- r = QRegion (w - mContext.extents.right, mContext.extents.top, +- mContext.extents.right, mGeometry.height ()); +- rightQRegion = r.intersect (shape); +- if (!rightQRegion.isEmpty ()) +- { +- rightQRegion.translate (-(w - mContext.extents.right), +- -mContext.extents.top); +- rightRegion = rightQRegion.handle (); +- } +- } +- } +- +- if (topRegion) +- size += topRegion->numRects; +- if (bottomRegion) +- size += bottomRegion->numRects; +- if (leftRegion) +- size += leftRegion->numRects; +- if (rightRegion) +- size += rightRegion->numRects; +- +- if (size) +- { +- long data[size * 6 + 2]; +- +- decor_region_to_blur_property (data, 4, 0, +- mGeometry.width (), +- mGeometry.height (), +- topRegion, topOffset, +- bottomRegion, bottomOffset, +- leftRegion, leftOffset, +- rightRegion, rightOffset); +- +- KWD::trapXError (); +- XChangeProperty (qt_xdisplay (), mClientId, atom, +- XA_INTEGER, +- 32, PropModeReplace, (unsigned char *) data, +- 2 + size * 6); +- KWD::popXError (); +- } +- else +- { +- KWD::trapXError (); +- XDeleteProperty (qt_xdisplay (), mClientId, atom); +- KWD::popXError (); +- } +-} +- +-void +-KWD::Window::updateProperty (void) +-{ +- Atom atom = Atoms::netWindowDecor; +- decor_extents_t maxExtents; +- long data[256]; +- decor_quad_t quads[N_QUADS_MAX]; +- int nQuad; +- int lh, rh; +- int w; +- int minWidth; +- unsigned int saveState; +- +- if (mType == Default) +- atom = Atoms::netWindowDecorNormal; +- else if (mType == DefaultActive) +- atom = Atoms::netWindowDecorActive; +- +- saveState = mState; +- mState = NET::MaxVert | NET::MaxHoriz; +- mDecor->borders (maxExtents.left, maxExtents.right, +- maxExtents.top, maxExtents.bottom); +- mState = saveState; +- mDecor->borders (mBorder.left, mBorder.right, mBorder.top, mBorder.bottom); +- +- if (mLayout.rotation) +- lh = mLayout.left.x2 - mLayout.left.x1; +- else +- lh = mLayout.left.y2 - mLayout.left.y1; +- +- if (mLayout.rotation) +- rh = mLayout.right.x2 - mLayout.right.x1; +- else +- rh = mLayout.right.y2 - mLayout.right.y1; +- +- w = mLayout.top.x2 - mLayout.top.x1 - mContext.left_space - +- mContext.right_space; +- +- if (mType == Normal || mType == Switcher) +- { +- int topXOffset = w / 2; +- QWidget *widget = mDecor->widget (); +- int x; +- +- x = w - mContext.left_space - mContext.left_corner_space; +- if (x > topXOffset) +- topXOffset = x; +- +- if (widget) +- { +- const QObjectList *children = widget->children (); +- +- if (children) +- { +- QWidget *child; +- +- for (QObjectListIt it(*children); it.current (); ++it) +- { +- if (!it.current ()->isWidgetType ()) +- continue; +- +- child = static_cast (it.current ()); +- +- x = child->x () - mBorder.left - 2; +- if (x > w / 2 && x < topXOffset) +- topXOffset = x; +- } +- } +- } +- +- nQuad = decor_set_lXrXtXbX_window_quads (quads, +- &mContext, +- &mLayout, +- lh / 2, +- rh / 2, +- topXOffset, +- w / 2); +- +- updateBlurProperty (topXOffset, w / 2, lh / 2, rh / 2); +- +- minWidth = mContext.left_corner_space + 1 + mContext.right_corner_space; +- } +- else +- { +- nQuad = decor_set_lSrStSbS_window_quads (quads, &mContext, &mLayout); +- +- minWidth = 1; +- } +- +- decor_quads_to_property (data, mTexturePixmap.handle (), +- &mBorder, &maxExtents, +- minWidth, 0, +- quads, nQuad); +- +- KWD::trapXError (); +- XChangeProperty (qt_xdisplay (), mClientId, atom, +- XA_INTEGER, +- 32, PropModeReplace, (unsigned char *) data, +- BASE_PROP_SIZE + QUAD_PROP_SIZE * nQuad); +- KWD::popXError (); +- +- mUpdateProperty = false; +-} +- +-void +-KWD::Window::handleActiveChange (void) +-{ +- mDecor->activeChange (); +- resizeDecoration (); +-} +- +-void +-KWD::Window::updateFrame (WId frame) +-{ +- mFrame = frame; +- +- KWD::trapXError (); +- XSelectInput (qt_xdisplay (), mFrame, +- StructureNotifyMask | PropertyChangeMask | +- ButtonPressMask | ButtonReleaseMask | PointerMotionMask | +- EnterWindowMask | LeaveWindowMask); +- KWD::popXError (); +-} +- +-void +-KWD::Window::updateSelected (WId selectedId) +-{ +- mSelectedId = selectedId; +- +- updateName (); +-} +- +-void +-KWD::Window::updateWindowGeometry (void) +-{ +- KWin::WindowInfo wInfo = KWin::windowInfo (mClientId, NET::WMGeometry); +- QRect geometry = wInfo.geometry (); +- +- if (mGeometry.width () != geometry.width () || +- mGeometry.height () != geometry.height ()) +- { +- mGeometry = geometry; +- +- if (resizeDecoration ()) +- return; +- } +- else +- { +- mGeometry = geometry; +- } +- +- move (mGeometry.x () + ROOT_OFF_X - mBorder.left, +- mGeometry.y () + ROOT_OFF_Y - mBorder.top); +-} +- +-void +-KWD::Window::reloadDecoration (void) +-{ +- delete mDecor; +- mDecor = 0; +- +- mMapped = false; +- mShapeSet = false; +- +- if (mShadow) +- { +- decor_shadow_destroy (qt_xdisplay (), mShadow); +- mShadow = NULL; +- } +- +- createDecoration (); +-} +- +-Cursor +-KWD::Window::positionToCursor (QPoint pos) +-{ +- switch (mDecor->mousePosition (pos)) { +- case PositionCenter: +- return cursors[1][1].cursor; +- case PositionLeft: +- return cursors[1][0].cursor; +- case PositionRight: +- return cursors[1][2].cursor; +- case PositionTop: +- return cursors[0][1].cursor; +- case PositionBottom: +- return cursors[2][1].cursor; +- case PositionTopLeft: +- return cursors[0][0].cursor; +- case PositionTopRight: +- return cursors[0][2].cursor; +- case PositionBottomLeft: +- return cursors[2][0].cursor; +- case PositionBottomRight: +- return cursors[2][2].cursor; +- default: +- break; +- } +- +- return cursors[1][1].cursor; +-} +- +-void +-KWD::Window::updateCursor (QPoint pos) +-{ +- KWD::trapXError (); +- XDefineCursor (qt_xdisplay (), mFrame, positionToCursor (pos)); +- KWD::popXError (); +-} +- +-void +-KWD::Window::getWindowProtocols (void) +-{ +- Atom *p; +- int n; +- int status; +- +- mSupportTakeFocus = false; +- mSupportContextHelp = false; +- +- KWD::trapXError (); +- status = XGetWMProtocols (qt_xdisplay (), mClientId, &p, &n); +- if (KWD::popXError ()) +- return; +- +- if (status) +- { +- int i; +- +- for (i = 0; i < n; i++) +- { +- if (p[i] == Atoms::wmTakeFocus) +- mSupportTakeFocus = true; +- else if (p[i] == Atoms::netWmContextHelp) +- mSupportContextHelp = true; +- } +- +- if (n > 0) +- XFree (p); +- } +-} +- +-void +-KWD::Window::handlePopupActivated (int id) +-{ +- WindowOperation op = static_cast (id); +- +- performWindowOperation (op); +-} +- +-void +-KWD::Window::handleDesktopPopupActivated (int id) +-{ +- if (id) +- setDesktop (id); +- else +- KWin::setOnAllDesktops (mClientId, true); +-} +- +-void +-KWD::Window::handlePopupAboutToShow (void) +-{ +- int numberOfDesktops; +- +- numberOfDesktops = KWin::numberOfDesktops (); +- if (numberOfDesktops > 1) +- { +- NETRootInfo *rootInfo = Decorator::rootInfo (); +- QString name; +- int id, i; +- int winDesktop = desktop (); +- +- mDesktopMenu->clear (); +- +- id = mDesktopMenu->insertItem (i18n ("&All Desktops"), 0); +- +- mDesktopMenu->setItemChecked (id, (winDesktop == NET::OnAllDesktops)); +- mDesktopMenu->insertSeparator (); +- +- for (i = 1; i <= numberOfDesktops; i++) +- { +- QString name; +- +- name = +- QString ("&%1 ").arg (i) + +- QString (rootInfo->desktopName (i)).replace ('&', "&&"); +- +- id = mDesktopMenu->insertItem (name, i); +- mDesktopMenu->setItemChecked (id, (winDesktop == i)); +- } +- +- mPopup->setItemVisible (Options::NoOp, true); +- } +- else +- { +- mPopup->setItemVisible (Options::NoOp, false); +- } +- +- mPopup->setItemEnabled (Options::ResizeOp, isResizable ()); +- mPopup->setItemEnabled (Options::MoveOp, isMovable ()); +- +- mPopup->setItemEnabled (Options::MaximizeOp, isMaximizable ()); +- mPopup->setItemChecked (Options::MaximizeOp, +- maximizeMode () == MaximizeFull); +- +- mPopup->setItemChecked (Options::ShadeOp, isShade ()); +- mPopup->setItemEnabled (Options::ShadeOp, isShadeable ()); +- +- mAdvancedMenu->setItemChecked (Options::KeepAboveOp, keepAbove ()); +- mAdvancedMenu->setItemChecked (Options::KeepBelowOp, keepBelow ()); +- mAdvancedMenu->setItemChecked (Options::FullScreenOp, +- mState & NET::FullScreen); +- +- mPopup->setItemEnabled (Options::MinimizeOp, isMinimizable ()); +- mPopup->setItemEnabled (Options::CloseOp, isCloseable ()); +-} +- +-void +-KWD::Window::updateState (void) +-{ +- KWin::WindowInfo wInfo = KWin::windowInfo (mClientId, NET::WMState, 0); +- unsigned long newState = wInfo.state (); +- unsigned long stateChange = mState ^ newState; +- +- mState = newState; +- +- if (stateChange & NET::Max) +- { +- mDecor->maximizeChange (); +- resizeDecoration (false); +- } +- +- if (stateChange & NET::KeepAbove && !(mState & NET::KeepAbove)) +- mDecor->emitKeepAboveChanged (mState & NET::KeepAbove); +- if (stateChange & NET::KeepBelow && !(mState & NET::KeepBelow)) +- mDecor->emitKeepBelowChanged (mState & NET::KeepBelow); +- if (stateChange & NET::KeepAbove && mState & NET::KeepAbove) +- mDecor->emitKeepAboveChanged (mState & NET::KeepAbove); +- if (stateChange & NET::KeepBelow && mState & NET::KeepBelow) +- mDecor->emitKeepBelowChanged (mState & NET::KeepBelow); +- if (stateChange & NET::Shaded) +- mDecor->shadeChange (); +- if (stateChange & NET::Sticky) +- mDecor->desktopChange (); +-} +- +-void +-KWD::Window::updateName (void) +-{ +- KWin::WindowInfo wInfo; +- WId window; +- +- if (mType == Switcher) +- { +- if (!mSelectedId) +- return; +- window = mSelectedId; +- } +- else +- window = mClientId; +- +- wInfo = KWin::windowInfo (window, NET::WMVisibleName, 0); +- +- mName = wInfo.visibleName (); +- +- mDecor->captionChange (); +-} +- +-void +-KWD::Window::updateIcons (void) +-{ +- mIcons = QIconSet (KWin::icon (mClientId, 16, 16, TRUE), +- KWin::icon (mClientId, 32, 32, TRUE)); +- mDecor->iconChange (); +-} +- +-NET::Direction +-KWD::Window::positionToDirection (int pos) +-{ +- switch (pos) { +- case PositionLeft: +- return NET::Left; +- case PositionRight: +- return NET::Right; +- case PositionTop: +- return NET::Top; +- case PositionBottom: +- return NET::Bottom; +- case PositionTopLeft: +- return NET::TopLeft; +- case PositionTopRight: +- return NET::TopRight; +- case PositionBottomLeft: +- return NET::BottomLeft; +- case PositionBottomRight: +- return NET::BottomRight; +- default: +- break; +- } +- +- return NET::Move; +-} +- +-void +-KWD::Window::moveWindow (QMouseEvent *qme) +-{ +- NET::Direction direction; +- +- direction = positionToDirection (mDecor->mousePosition (qme->pos ())); +- +- XUngrabPointer (qt_xdisplay (), CurrentTime); +- XUngrabKeyboard (qt_xdisplay (), CurrentTime); +- +- Decorator::rootInfo ()->restackRequest (mClientId, None, Above); +- Decorator::rootInfo ()->moveResizeRequest (mClientId, +- qme->globalX (), +- qme->globalY (), +- direction); +-} +- +-#define OPACITY_STEP (0xffff / 10) +- +-void +-KWD::Window::performMouseCommand (Options::MouseCommand command, +- QMouseEvent *qme) +-{ +- switch (command) { +- case Options::MouseRaise: +- KWin::raiseWindow (mClientId); +- break; +- case Options::MouseLower: +- KWin::lowerWindow (mClientId); +- break; +- case Options::MouseShade : +- setShade (!isShade ()); +- break; +- case Options::MouseSetShade: +- setShade (true); +- break; +- case Options::MouseUnsetShade: +- setShade (false); +- break; +- case Options::MouseOperationsMenu: +- { +- QPoint mp (0, 0); +- +- if (qme) +- mp = QPoint (qme->globalX (), qme->globalY ()); +- +- showWindowMenu (mp); +- } break; +- case Options::MouseMaximize: +- maximize (KDecoration::MaximizeFull); +- break; +- case Options::MouseRestore: +- maximize (KDecoration::MaximizeRestore); +- break; +- case Options::MouseMinimize: +- minimize (); +- break; +- case Options::MouseAbove: +- if (keepBelow ()) +- setKeepBelow (false); +- else +- setKeepAbove (true); +- break; +- case Options::MouseBelow: +- if (keepAbove ()) +- setKeepAbove (false); +- else +- setKeepBelow (true); +- break; +- case Options::MousePreviousDesktop: +- break; +- case Options::MouseNextDesktop: +- break; +- case Options::MouseOpacityMore: +- { +- int opacity = mOpacity; +- +- if (opacity < 0xffff) +- { +- opacity += OPACITY_STEP; +- if (opacity > 0xffff) +- opacity = 0xffff; +- +- Decorator::sendClientMessage (qt_xrootwin (), +- mClientId, +- Atoms::netWmWindowOpacity, +- (opacity << 16) | opacity); +- } +- } break; +- case Options::MouseOpacityLess: +- { +- int opacity = mOpacity; +- +- if (opacity > OPACITY_STEP) +- { +- opacity -= OPACITY_STEP; +- if (opacity < OPACITY_STEP) +- opacity = OPACITY_STEP; +- +- Decorator::sendClientMessage (qt_xrootwin (), +- mClientId, +- Atoms::netWmWindowOpacity, +- (opacity << 16) | opacity); +- } +- } break; +- case Options::MouseActivateRaiseAndMove: +- case Options::MouseActivateRaiseAndUnrestrictedMove: +- case Options::MouseMove: +- case Options::MouseUnrestrictedMove: +- case Options::MouseResize: +- case Options::MouseUnrestrictedResize: +- if (qme) +- moveWindow (qme); +- case Options::MouseNothing: +- default: +- break; +- } +-} +- +-void +-KWD::Window::processDamage (void) +-{ +- QRegion r1, r2; +- int xOff, yOff, w; +- double alpha; +- int shade_alpha; +- +- if (isActive ()) +- { +- alpha = activeDecorationOpacity; +- shade_alpha = activeDecorationOpacityShade; +- } +- else +- { +- alpha = decorationOpacity; +- shade_alpha = decorationOpacityShade; +- } +- +- if (!mPixmap) +- return; +- +- if (mDamage.isEmpty ()) +- return; +- +- if (mShapeSet) +- mDamage = mShape.intersect (mDamage); +- +- w = mGeometry.width () + mContext.extents.left + mContext.extents.right; +- +- if (mType == Switcher) +- shade_alpha = 0; +- +- xOff = 0; +- yOff = 0; +- +- r1 = QRegion (xOff, yOff, w, mContext.extents.top); +- r2 = r1.intersect (mDamage); +- +- if (!r2.isEmpty ()) +- { +- r2.translate (-xOff, -yOff); +- +- decor_blend_border_picture (qt_xdisplay (), +- &mContext, +- mPicture, +- xOff, xOff, +- mTexturePicture, +- &mLayout, +- BORDER_TOP, +- r2.handle (), +- (unsigned short) (alpha * 0xffff), +- shade_alpha, +- TRUE); +- } +- +- xOff = 0; +- yOff = mContext.extents.top + mGeometry.height (); +- +- r1 = QRegion (xOff, yOff, w, mContext.extents.bottom); +- r2 = r1.intersect (mDamage); +- +- if (!r2.isEmpty ()) +- { +- r2.translate (-xOff, -yOff); +- +- decor_blend_border_picture (qt_xdisplay (), +- &mContext, +- mPicture, +- xOff, yOff, +- mTexturePicture, +- &mLayout, +- BORDER_BOTTOM, +- r2.handle (), +- (unsigned short) (alpha * 0xffff), +- shade_alpha, +- TRUE); +- } +- +- xOff = 0; +- yOff = mContext.extents.top; +- +- r1 = QRegion (xOff, yOff, mContext.extents.left, mGeometry.height ()); +- r2 = r1.intersect (mDamage); +- +- if (!r2.isEmpty ()) +- { +- r2.translate (-xOff, -yOff); +- +- decor_blend_border_picture (qt_xdisplay (), +- &mContext, +- mPicture, +- xOff, yOff, +- mTexturePicture, +- &mLayout, +- BORDER_LEFT, +- r2.handle (), +- (unsigned short) (alpha * 0xffff), +- shade_alpha, +- TRUE); +- } +- +- xOff = mContext.extents.left + mGeometry.width (); +- yOff = mContext.extents.top; +- +- r1 = QRegion (xOff, yOff, mContext.extents.right, mGeometry.height ()); +- r2 = r1.intersect (mDamage); +- +- if (!r2.isEmpty ()) +- { +- r2.translate (-xOff, -yOff); +- +- decor_blend_border_picture (qt_xdisplay (), +- &mContext, +- mPicture, +- xOff, yOff, +- mTexturePicture, +- &mLayout, +- BORDER_RIGHT, +- r2.handle (), +- (unsigned short) (alpha * 0xffff), +- shade_alpha, +- TRUE); +- } +- +- mDamage = QRegion (); +- +- XRenderComposite (qt_xdisplay (), +- PictOpSrc, +- mTexturePicture, +- None, +- mDecorationPicture, +- 0, 0, +- 0, 0, +- 0, 0, +- mTexturePixmap.width (), +- mTexturePixmap.height ()); +- +- if (mUpdateProperty) +- { +- if (mType == Switcher) +- { +- QPainter p (this); +- unsigned long pixel; +- QColor bg = p.backgroundColor (); +- +- pixel = (((int) (alpha * 0xff) << 24) | +- ((int) (alpha * bg.red ()) << 16) | +- ((int) (alpha * bg.green ()) << 8) | +- ((int) (alpha * bg.blue ()) << 0)); +- +- KWD::trapXError (); +- XSetWindowBackground (qt_xdisplay (), mClientId, pixel); +- XClearWindow (qt_xdisplay (), mClientId); +- KWD::popXError (); +- } +- +- updateProperty (); +- } +-} +- +-void +-KWD::Window::handleProcessKillerExited (void) +-{ +- if (mProcessKiller) +- { +- delete mProcessKiller; +- mProcessKiller = NULL; +- } +-} +- +-void +-KWD::Window::showKillProcessDialog (Time timestamp) +-{ +- KWin::WindowInfo kWinInfo = +- KWin::windowInfo (mClientId, 0, +- NET::WM2WindowClass | NET::WM2ClientMachine); +- NETWinInfo wInfo = NETWinInfo (qt_xdisplay(), mClientId, +- qt_xrootwin (), NET::WMPid); +- QCString clientMachine, resourceClass; +- pid_t pid; +- char buf[257]; +- +- if (mProcessKiller) +- return; +- +- clientMachine = kWinInfo.clientMachine (); +- resourceClass = kWinInfo.windowClassClass (); +- pid = wInfo.pid (); +- +- if (gethostname (buf, sizeof (buf) - 1) == 0) +- { +- if (strcmp (buf, clientMachine) == 0) +- clientMachine = "localhost"; +- } +- +- mProcessKiller = new KProcess (this); +- +- *mProcessKiller << KStandardDirs::findExe ("kwin_killer_helper") << +- "--pid" << QCString ().setNum (pid) << +- "--hostname" << clientMachine << +- "--windowname" << mName.utf8 () << +- "--applicationname" << resourceClass << +- "--wid" << QCString ().setNum (mClientId) << +- "--timestamp" << QCString ().setNum (timestamp); +- +- connect (mProcessKiller, SIGNAL (processExited (KProcess *)), +- SLOT (handleProcessKillerExited ())); +- +- if (!mProcessKiller->start (KProcess::NotifyOnExit)) +- { +- delete mProcessKiller; +- mProcessKiller = NULL; +- } +-} +- +-void +-KWD::Window::hideKillProcessDialog (void) +-{ +- handleProcessKillerExited (); +-} +diff -uprN compiz-0.8.8-orig/kde/window-decorator/window.h compiz-0.8.8/kde/window-decorator/window.h +--- compiz-0.8.8-orig/kde/window-decorator/window.h 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator/window.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,243 +0,0 @@ +-/* +- * Copyright © 2006 Novell, Inc. +- * Copyright © 2006 Dennis Kasprzyk +- * Copyright © 2006 Volker Krause +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: David Reveman +- */ +- +-#ifndef _WINDOW_H +-#define _WINDOW_H +- +-#include +- +-#include +-#include +- +-#include +- +-#include +- +-#include "utils.h" +-#include "options.h" +- +-class KProcess; +-class KDecoration; +-class QPopupMenu; +- +-namespace KWD +-{ +-class Window:public QWidget, public KDecorationBridge { +- Q_OBJECT public: +- +- enum Type +- { +- Normal, +- Switcher, +- Default, +- DefaultActive +- }; +- +- public: +- Window (WId parentId, WId clientId, WId frame, Type type, +- int x = 0, int y = 0, int w = 1, int h = 1); +- ~Window (void); +- +- virtual bool isActive (void) const; +- virtual bool isCloseable (void) const; +- virtual bool isMaximizable (void) const; +- virtual MaximizeMode maximizeMode (void) const; +- virtual bool isMinimizable (void) const; +- virtual bool providesContextHelp (void) const; +- virtual int desktop (void) const; +- virtual bool isModal (void) const; +- virtual bool isShadeable (void) const; +- virtual bool isShade (void) const; +- virtual bool isSetShade (void) const; +- virtual bool keepAbove (void) const; +- virtual bool keepBelow (void) const; +- virtual bool isMovable (void) const; +- virtual bool isResizable (void) const; +- virtual NET::WindowType +- windowType (unsigned long supported_types) const; +- virtual QIconSet icon (void) const; +- virtual QString caption (void) const; +- virtual void processMousePressEvent (QMouseEvent *); +- virtual void showWindowMenu (const QRect &); +- virtual void showWindowMenu (QPoint); +- virtual void performWindowOperation (WindowOperation); +- virtual void setMask (const QRegion &, int); +- virtual bool isPreview (void) const; +- virtual QRect geometry (void) const; +- virtual QRect iconGeometry (void) const; +- virtual QRegion unobscuredRegion (const QRegion & r) const; +- virtual QWidget *workspaceWidget (void) const; +- virtual WId windowId (void) const; +- virtual void closeWindow (void); +- virtual void maximize (MaximizeMode mode); +- virtual void minimize (void); +- virtual void showContextHelp (void); +- virtual void setDesktop (int desktop); +- virtual void titlebarDblClickOperation (void); +- virtual void titlebarMouseWheelOperation (int delta); +- virtual void setShade (bool set); +- virtual void setKeepAbove (bool); +- virtual void setKeepBelow (bool); +- virtual int currentDesktop (void) const; +- virtual QWidget *initialParentWidget (void) const; +- virtual Qt::WFlags initialWFlags (void) const; +- virtual void helperShowHide (bool); +- virtual void grabXServer (bool grab); +- +- void handleActiveChange (void); +- void updateFrame (WId frame); +- void updateWindowGeometry (void); +- void updateCursor (QPoint pos); +- void updateSelected (WId selected); +- WId frameId (void) const +- { +- return mFrame; +- } +- KDecoration *decoration (void) const +- { +- return mDecor; +- } +- QWidget *activeChild (void) const +- { +- return mActiveChild; +- } +- void setActiveChild (QWidget * child) +- { +- mActiveChild = child; +- } +- QRegion *getShape (void) +- { +- if (mShapeSet) +- return &mShape; +- +- return NULL; +- } +- void getShapeInfo (bool *horz, bool *vert) +- { +- *horz = mUniqueHorzShape; +- *vert = mUniqueVertShape; +- } +- void moveWindow (QMouseEvent *qme); +- void reloadDecoration (void); +- void updateState (void); +- void updateName (void); +- void updateIcons (void); +- void updateOpacity (void) +- { +- mOpacity = readPropertyShort (mClientId, Atoms::netWmWindowOpacity, +- 0xffff); +- } +- Drawable pixmapId (void) const +- { +- return mPixmap; +- } +- void addDamageRect (int x, int y, int w, int h) +- { +- mDamage += QRegion (x, y, w, h); +- } +- bool handleMap (void); +- bool handleConfigure (QSize size); +- void processDamage (void); +- decor_context_t *context (void) +- { +- return &mContext; +- } +- decor_shadow_t *shadow (void) +- { +- return mShadow; +- } +- decor_extents_t *border (void) +- { +- return &mBorder; +- } +- QRect clientGeometry (void); +- void showKillProcessDialog (Time timestamp); +- void hideKillProcessDialog (void); +- +- private: +- void createDecoration (void); +- void updateShadow (void); +- bool resizeDecoration (bool force = false); +- void updateBlurProperty (int topOffset, +- int bottomOffset, +- int leftOffset, +- int rightOffset); +- void updateProperty (void); +- void getWindowProtocols (void); +- void performMouseCommand (KWD::Options::MouseCommand command, +- QMouseEvent *qme); +- NET::Direction positionToDirection (int pos); +- Cursor positionToCursor (QPoint pos); +- void rebindPixmap (void); +- +- +- private slots: +- void handlePopupActivated (int id); +- void handleDesktopPopupActivated (int id); +- void handlePopupAboutToShow (void); +- void handleProcessKillerExited (void); +- +- private: +- Type mType; +- WId mParentId; +- WId mFrame; +- WId mClientId; +- WId mSelectedId; +- QRect mGeometry; +- QString mName; +- QIconSet mIcons; +- decor_extents_t mBorder; +- unsigned short mOpacity; +- KDecoration *mDecor; +- QPixmap mTexturePixmap; +- QPixmap mTexturePixmapBuffer; +- Pixmap mPixmap; +- QRegion mDamage; +- WId mDamageId; +- decor_layout_t mLayout; +- decor_context_t mContext; +- decor_shadow_t *mShadow; +- Picture mPicture; +- Picture mTexturePicture; +- Picture mDecorationPicture; +- bool mUpdateProperty; +- bool mShapeSet; +- bool mUniqueHorzShape; +- bool mUniqueVertShape; +- QRegion mShape; +- QWidget *mActiveChild; +- bool mSupportTakeFocus; +- bool mSupportContextHelp; +- QPopupMenu *mPopup; +- QPopupMenu *mAdvancedMenu; +- QPopupMenu *mDesktopMenu; +- unsigned long mState; +- bool mMapped; +- int mPendingMap; +- int mPendingConfigure; +- QSize mSize; +- KProcess *mProcessKiller; +- }; +-} +- +-#endif +diff -uprN compiz-0.8.8-orig/kde/window-decorator-kde4/decorator.cpp compiz-0.8.8/kde/window-decorator-kde4/decorator.cpp +--- compiz-0.8.8-orig/kde/window-decorator-kde4/decorator.cpp 2010-12-14 14:56:09.000000000 +0100 ++++ compiz-0.8.8/kde/window-decorator-kde4/decorator.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,890 +0,0 @@ +-/* +- * Copyright © 2008 Dennis Kasprzyk +- * Copyright © 2006 Novell, Inc. +- * Copyright © 2006 Volker Krause +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: David Reveman +- */ +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include +-#include +-#include +- +-#include +-#include +- +-#include "decorator.h" +-#include "options.h" +-#include "utils.h" +- +-#include "kwinadaptor.h" +- +-#include +- +-#define SHADOW_RADIUS 8.0 +-#define SHADOW_OPACITY 0.5 +-#define SHADOW_OFFSET_X 1 +-#define SHADOW_OFFSET_Y 1 +-#define SHADOW_COLOR_RED 0x0000 +-#define SHADOW_COLOR_GREEN 0x0000 +-#define SHADOW_COLOR_BLUE 0x0000 +- +-#define DBUS_DEST "org.freedesktop.compiz" +-#define DBUS_SIGNAL_PATH "/org/freedesktop/compiz/decoration/display" +-#define DBUS_QUERY_PATH "/org/freedesktop/compiz/decoration/allscreens" +-#define DBUS_INTERFACE "org.freedesktop.compiz" +-#define DBUS_METHOD_GET "get" +-#define DBUS_SIGNAL_CHANGED "changed" +- +-int blurType = BLUR_TYPE_NONE; +- +-decor_shadow_t *KWD::Decorator::mNoBorderShadow = 0; +-KWD::PluginManager *KWD::Decorator::mPlugins = 0; +-KWD::Options *KWD::Decorator::mOptions = 0; +-NETRootInfo *KWD::Decorator::mRootInfo; +-WId KWD::Decorator::mActiveId; +-decor_shadow_options_t KWD::Decorator::mShadowOptions; +- +-struct _cursor cursors[3][3] = { +- { C (top_left_corner), C (top_side), C (top_right_corner) }, +- { C (left_side), C (left_ptr), C (right_side) }, +- { C (bottom_left_corner), C (bottom_side), C (bottom_right_corner) } +-}; +- +-KWD::PluginManager::PluginManager (KSharedConfigPtr config): +- KWD::KDecorationPlugins (config) +-{ +- defaultPlugin = (QPixmap::defaultDepth() > 8) ? +- "kwin3_oxygen" : "kwin3_plastik"; +-} +- +- +-KWD::Decorator::Decorator () : +- KApplication (), +- mConfig (0), +- mCompositeWindow (0), +- mSwitcher (0) +-{ +- XSetWindowAttributes attr; +- int i, j; +- QDBusConnection dbus = QDBusConnection::sessionBus(); +- +- mRootInfo = new NETRootInfo (QX11Info::display(), 0); +- +- mActiveId = 0; +- +- KConfigGroup cfg (KSharedConfig::openConfig("plasmarc"), QString("Theme")); +- Plasma::Theme::defaultTheme ()->setThemeName (cfg.readEntry ("name")); +- +- Atoms::init (); +- +- (void *) new KWinAdaptor (this); +- dbus.registerObject ("/KWin", this); +- dbus.connect (QString (), "/KWin", "org.kde.KWin", "reloadConfig", this, +- SLOT (reconfigure ())); +- +- dbus.connect (QString (), DBUS_SIGNAL_PATH "/shadow_radius", +- DBUS_INTERFACE, DBUS_SIGNAL_CHANGED, this, +- SLOT (shadowRadiusChanged (double))); +- +- dbus.connect (QString (), DBUS_SIGNAL_PATH "/shadow_opacity", +- DBUS_INTERFACE, DBUS_SIGNAL_CHANGED, this, +- SLOT (shadowOpacityChanged (double))); +- +- dbus.connect (QString (), DBUS_SIGNAL_PATH "/shadow_x_offset", +- DBUS_INTERFACE, DBUS_SIGNAL_CHANGED, this, +- SLOT (shadowXOffsetChanged (int))); +- +- dbus.connect (QString (), DBUS_SIGNAL_PATH "/shadow_y_offset", +- DBUS_INTERFACE, DBUS_SIGNAL_CHANGED, this, +- SLOT (shadowYOffsetChanged (int))); +- +- dbus.connect (QString (), DBUS_SIGNAL_PATH "/shadow_color", +- DBUS_INTERFACE, DBUS_SIGNAL_CHANGED, this, +- SLOT (shadowColorChanged (QString))); +- +- mConfig = new KConfig ("kwinrc"); +- +- mOptions = new KWD::Options (mConfig); +- mPlugins = new PluginManager (KSharedConfig::openConfig("kwinrc")); +- +- mShadowOptions.shadow_radius = SHADOW_RADIUS; +- mShadowOptions.shadow_opacity = SHADOW_OPACITY; +- mShadowOptions.shadow_offset_x = SHADOW_OFFSET_X; +- mShadowOptions.shadow_offset_y = SHADOW_OFFSET_Y; +- mShadowOptions.shadow_color[0] = SHADOW_COLOR_RED; +- mShadowOptions.shadow_color[1] = SHADOW_COLOR_GREEN; +- mShadowOptions.shadow_color[2] = SHADOW_COLOR_BLUE; +- +- for (i = 0; i < 3; i++) +- { +- for (j = 0; j < 3; j++) +- { +- if (cursors[i][j].shape != XC_left_ptr) +- cursors[i][j].cursor = +- XCreateFontCursor (QX11Info::display(), cursors[i][j].shape); +- } +- } +- +- attr.override_redirect = True; +- +- mCompositeWindow = XCreateWindow (QX11Info::display(), QX11Info::appRootWindow(), +- -ROOT_OFF_X, -ROOT_OFF_Y, 1, 1, 0, +- CopyFromParent, +- CopyFromParent, +- CopyFromParent, +- CWOverrideRedirect, &attr); +- +- long data = 1; +- XChangeProperty (QX11Info::display(), mCompositeWindow, Atoms::enlightmentDesktop, +- XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &data, 1); +- +- XCompositeRedirectSubwindows (QX11Info::display(), mCompositeWindow, +- CompositeRedirectManual); +- +- XMapWindow (QX11Info::display(), mCompositeWindow); +-} +- +-KWD::Decorator::~Decorator (void) +-{ +- QMap ::ConstIterator it; +- +- for (it = mClients.begin (); it != mClients.end (); it++) +- delete (*it); +- +- if (mDecorNormal) +- delete mDecorNormal; +- +- if (mDecorActive) +- delete mDecorActive; +- +- if (mSwitcher) +- delete mSwitcher; +- +- XDestroyWindow (QX11Info::display(), mCompositeWindow); +- +- delete mOptions; +- delete mPlugins; +- delete mConfig; +- delete mRootInfo; +-} +- +-bool +-KWD::Decorator::enableDecorations (Time timestamp) +-{ +- QList ::ConstIterator it; +- +- mDmSnTimestamp = timestamp; +- +- if (!pluginManager ()->loadPlugin ("")) +- return false; +- +- updateAllShadowOptions (); +- +- KWD::trapXError (); +- (void) QApplication::desktop (); // trigger creation of desktop widget +- KWD::popXError (); +- +- updateShadow (); +- +- mDecorNormal = new KWD::Window (mCompositeWindow, QX11Info::appRootWindow(), +- 0, Window::Default); +- mDecorActive = new KWD::Window (mCompositeWindow, QX11Info::appRootWindow(), +- 0, Window::DefaultActive); +- +- mActiveId = KWindowSystem::activeWindow (); +- +- connect (KWindowSystem::self (), SIGNAL (windowAdded (WId)), +- SLOT (handleWindowAdded (WId))); +- connect (KWindowSystem::self (), SIGNAL (windowRemoved (WId)), +- SLOT (handleWindowRemoved (WId))); +- connect (KWindowSystem::self (), SIGNAL (activeWindowChanged (WId)), +- SLOT (handleActiveWindowChanged (WId))); +- connect (KWindowSystem::self (), +- SIGNAL (windowChanged (WId, const unsigned long *)), +- SLOT (handleWindowChanged (WId, const unsigned long *))); +- +- foreach (WId id, KWindowSystem::windows ()) +- handleWindowAdded (id); +- +- connect (Plasma::Theme::defaultTheme (), SIGNAL (themeChanged ()), +- SLOT (plasmaThemeChanged ())); +- +- // select for client messages +- XSelectInput (QX11Info::display(), QX11Info::appRootWindow(), +- StructureNotifyMask | PropertyChangeMask); +- +- return true; +-} +- +-void +-KWD::Decorator::updateAllShadowOptions (void) +-{ +- QDBusInterface *compiz; +- QDBusReply stringReply; +- QDBusReply doubleReply; +- QDBusReply intReply; +- int c[4]; +- +- compiz = new QDBusInterface (DBUS_DEST, DBUS_QUERY_PATH "/shadow_radius", +- DBUS_INTERFACE); +- doubleReply = compiz->call (DBUS_METHOD_GET); +- delete compiz; +- +- if (doubleReply.isValid ()) +- mShadowOptions.shadow_radius = doubleReply.value (); +- +- compiz = new QDBusInterface (DBUS_DEST, DBUS_QUERY_PATH "/shadow_opacity", +- DBUS_INTERFACE); +- doubleReply = compiz->call (DBUS_METHOD_GET); +- delete compiz; +- +- if (doubleReply.isValid ()) +- mShadowOptions.shadow_opacity = doubleReply.value (); +- +- compiz = new QDBusInterface (DBUS_DEST, DBUS_QUERY_PATH "/shadow_x_offset", +- DBUS_INTERFACE); +- intReply = compiz->call (DBUS_METHOD_GET); +- delete compiz; +- +- if (intReply.isValid ()) +- mShadowOptions.shadow_offset_x = intReply.value (); +- +- compiz = new QDBusInterface (DBUS_DEST, DBUS_QUERY_PATH "/shadow_y_offset", +- DBUS_INTERFACE); +- intReply = compiz->call (DBUS_METHOD_GET); +- delete compiz; +- +- if (intReply.isValid ()) +- mShadowOptions.shadow_offset_y = intReply.value (); +- else +- mShadowOptions.shadow_offset_y = SHADOW_OFFSET_Y; +- +- compiz = new QDBusInterface (DBUS_DEST, DBUS_QUERY_PATH "/shadow_color", +- DBUS_INTERFACE); +- stringReply = compiz->call (DBUS_METHOD_GET); +- delete compiz; +- +- if (stringReply.isValid () && +- sscanf (stringReply.value ().toAscii ().data (), "#%2x%2x%2x%2x", +- &c[0], &c[1], &c[2], &c[3]) == 4) +- { +- mShadowOptions.shadow_color[0] = c[0] << 8 | c[0]; +- mShadowOptions.shadow_color[1] = c[1] << 8 | c[1]; +- mShadowOptions.shadow_color[2] = c[2] << 8 | c[2]; +- } +-} +- +-void +-KWD::Decorator::changeShadowOptions (decor_shadow_options_t *opt) +-{ +- QMap ::ConstIterator it; +- +- if (!memcmp (opt, &mShadowOptions, sizeof (decor_shadow_options_t))) +- return; +- +- mShadowOptions = *opt; +- +- updateShadow (); +-} +- +-void +-KWD::Decorator::updateShadow (void) +-{ +- Display *xdisplay = QX11Info::display(); +- Screen *xscreen; +- decor_context_t context; +- +- xscreen = ScreenOfDisplay (xdisplay, QX11Info::appScreen ()); +- +- if (mNoBorderShadow) +- decor_shadow_destroy (xdisplay, mNoBorderShadow); +- +- mNoBorderShadow = decor_shadow_create (xdisplay, +- xscreen, +- 1, 1, +- 0, +- 0, +- 0, +- 0, +- 0, 0, 0, 0, +- &mShadowOptions, +- &context, +- decor_draw_simple, +- 0); +- +- if (mNoBorderShadow) +- { +- decor_extents_t extents = { 0, 0, 0, 0 }; +- long data[256]; +- decor_quad_t quads[N_QUADS_MAX]; +- int nQuad; +- decor_layout_t layout; +- +- decor_get_default_layout (&context, 1, 1, &layout); +- +- nQuad = decor_set_lSrStSbS_window_quads (quads, &context, &layout); +- +- decor_quads_to_property (data, mNoBorderShadow->pixmap, +- &extents, &extents, +- 0, 0, quads, nQuad); +- +- KWD::trapXError (); +- XChangeProperty (QX11Info::display(), QX11Info::appRootWindow(), +- Atoms::netWindowDecorBare, +- XA_INTEGER, +- 32, PropModeReplace, (unsigned char *) data, +- BASE_PROP_SIZE + QUAD_PROP_SIZE * nQuad); +- KWD::popXError (); +- } +-} +- +-bool +-KWD::Decorator::x11EventFilter (XEvent *xevent) +-{ +- KWD::Window *client; +- int status; +- +- switch (xevent->type) { +- case ConfigureNotify: { +- XConfigureEvent *xce = reinterpret_cast (xevent); +- +- if (mFrames.contains (xce->window)) +- mFrames[xce->window]->updateFrame (xce->window); +- +- } break; +- case SelectionRequest: +- decor_handle_selection_request (QX11Info::display(), xevent, mDmSnTimestamp); +- break; +- case SelectionClear: +- status = decor_handle_selection_clear (QX11Info::display(), +- xevent, 0); +- if (status == DECOR_SELECTION_GIVE_UP) +- KApplication::exit (0); +- +- break; +- case PropertyNotify: +- if (xevent->xproperty.atom == Atoms::netFrameWindow) +- { +- handleWindowAdded (xevent->xproperty.window); +- } +- else if (xevent->xproperty.atom == Atoms::switchSelectWindow) +- { +- WId id = xevent->xproperty.window; +- +- if (!mSwitcher || mSwitcher->xid () != id) +- handleWindowAdded (id); +- mSwitcher->update (); +- } +- else if (xevent->xproperty.atom == Atoms::netWmWindowOpacity) +- { +- if (mClients.contains (xevent->xproperty.window)) +- mClients[xevent->xproperty.window]->updateOpacity (); +- } +- break; +- case EnterNotify: +- { +- XCrossingEvent *xce = reinterpret_cast (xevent); +- QWidget *child; +- +- if (!mFrames.contains (xce->window)) +- break; +- +- client = mFrames[xce->window]; +- +- if (!client->decorWidget ()) +- break; +- +- child = client->childAt (xce->x, xce->y); +- if (child) +- { +- QEvent qe (QEvent::Enter); +- +- QApplication::sendEvent (child, &qe); +- +- client->setActiveChild (child); +- client->updateCursor (QPoint (xce->x, xce->y)); +- } +- } break; +- case LeaveNotify: +- { +- XCrossingEvent *xce = reinterpret_cast (xevent); +- +- if (mFrames.contains (xce->window)) +- { +- QEvent qe (QEvent::Leave); +- +- client = mFrames[xce->window]; +- +- if (client->activeChild ()) +- QApplication::sendEvent (client->activeChild (), &qe); +- +- XUndefineCursor (QX11Info::display(), client->frameId ()); +- } +- } break; +- case MotionNotify: +- { +- XMotionEvent *xme = reinterpret_cast < XMotionEvent * >(xevent); +- QWidget *child; +- +- if (!mFrames.contains (xme->window)) +- break; +- +- client = mFrames[xme->window]; +- +- if (!client->decorWidget ()) +- break; +- +- child = client->childAt (xme->x, xme->y); +- +- if (child) +- { +- QPoint qp (xme->x, xme->y); +- +- if (child != client->activeChild ()) +- { +- QEvent qee (QEvent::Enter); +- QEvent qle (QEvent::Leave); +- +- if (client->activeChild ()) +- QApplication::sendEvent (client->activeChild (), &qle); +- +- QApplication::sendEvent (child, &qee); +- +- client->setActiveChild (child); +- } +- +- if (client->decorWidget () != child) +- qp = child->mapFrom (client->decorWidget (), qp); +- +- QMouseEvent qme (QEvent::MouseMove, qp, Qt::NoButton, +- Qt::NoButton, Qt::NoModifier); +- +- QApplication::sendEvent (child, &qme); +- +- client->updateCursor (QPoint (xme->x, xme->y)); +- } +- } break; +- case ButtonPress: +- case ButtonRelease: +- { +- XButtonEvent *xbe = reinterpret_cast (xevent); +- QWidget *child; +- +- if (!mFrames.contains (xbe->window)) +- break; +- +- client = mFrames[xbe->window]; +- +- if (!client->decorWidget ()) +- break; +- +- child = client->childAt (xbe->x, xbe->y); +- +- if (child) +- { +- XButtonEvent xbe2 = *xbe; +- xbe2.window = child->winId (); +- +- QPoint p; +- +- p = client->mapToChildAt (QPoint (xbe->x, xbe->y)); +- xbe2.x = p.x (); +- xbe2.y = p.y (); +- +- p = child->mapToGlobal(p); +- xbe2.x_root = p.x (); +- xbe2.y_root = p.y (); +- +- client->setFakeRelease (false); +- QApplication::x11ProcessEvent ((XEvent *) &xbe2); +- +- /* We won't get a button release event, because of the screengrabs +- in compiz */ +- if (client->getFakeRelease () && xevent->type == ButtonPress) +- { +- xbe2.type = ButtonRelease; +- QApplication::x11ProcessEvent ((XEvent *) &xbe2); +- } +- +- return true; +- } +- } break; +- case ClientMessage: +- if (xevent->xclient.message_type == Atoms::toolkitActionAtom) +- { +- unsigned long action; +- +- action = xevent->xclient.data.l[0]; +- if (action == Atoms::toolkitActionWindowMenuAtom) +- { +- if (mClients.contains (xevent->xclient.window)) +- { +- QPoint pos; +- +- client = mClients[xevent->xclient.window]; +- +- if (xevent->xclient.data.l[2]) +- { +- pos = QPoint (xevent->xclient.data.l[3], +- xevent->xclient.data.l[4]); +- } +- else +- { +- pos = client->clientGeometry ().topLeft (); +- } +- +- client->showWindowMenu (pos); +- } +- } +- else if (action == Atoms::toolkitActionForceQuitDialogAtom) +- { +- if (mClients.contains (xevent->xclient.window)) +- { +- Time timestamp = xevent->xclient.data.l[1]; +- +- client = mClients[xevent->xclient.window]; +- +- if (xevent->xclient.data.l[2]) +- client->showKillProcessDialog (timestamp); +- else +- client->hideKillProcessDialog (); +- } +- } +- } +- break; +- default: +- break; +- } +- +- return KApplication::x11EventFilter (xevent); +-} +- +-void +-KWD::Decorator::reconfigure (void) +-{ +- unsigned long changed; +- +- mConfig->reparseConfiguration (); +- +- changed = mOptions->updateSettings (); +- if (mPlugins->reset (changed)) +- { +- QMap < WId, KWD::Window * >::ConstIterator it; +- +- updateShadow (); +- +- mDecorNormal->reloadDecoration (); +- mDecorActive->reloadDecoration (); +- +- for (it = mClients.constBegin (); it != mClients.constEnd (); it++) +- it.value ()->reloadDecoration (); +- +- mPlugins->destroyPreviousPlugin (); +- } +-} +- +-void +-KWD::Decorator::handleWindowAdded (WId id) +-{ +- QMap ::ConstIterator it; +- KWD::Window *client = 0; +- WId select, frame = 0; +- KWD::Window::Type type = KWD::Window::Normal; +- unsigned int width, height, border, depth; +- int x, y; +- XID root; +- QWidgetList widgets; +- +- /* avoid adding any of our own top level windows */ +- foreach (QWidget *widget, QApplication::topLevelWidgets()) { +- if (widget->winId() == id) +- return; +- } +- +- KWD::trapXError (); +- XGetGeometry (QX11Info::display(), id, &root, &x, &y, &width, &height, +- &border, &depth); +- if (KWD::popXError ()) +- return; +- +- KWD::readWindowProperty (id, Atoms::netFrameWindow, (long *) &frame); +- +- if (KWD::readWindowProperty (id, Atoms::switchSelectWindow, +- (long *) &select)) +- { +- if (!mSwitcher) +- mSwitcher = new Switcher (mCompositeWindow, id); +- if (mSwitcher->xid () != id) +- { +- delete mSwitcher; +- mSwitcher = new Switcher (mCompositeWindow, id); +- } +- frame = None; +- } +- else +- { +- KWindowInfo wInfo = KWindowSystem::windowInfo (id, NET::WMWindowType, 0); +- +- switch (wInfo.windowType (~0)) { +- case NET::Normal: +- case NET::Dialog: +- case NET::Toolbar: +- case NET::Menu: +- case NET::Utility: +- case NET::Splash: +- case NET::Unknown: +- /* decorate these window types */ +- break; +- default: +- return; +- } +- +- type = KWD::Window::Normal; +- } +- +- KWD::trapXError (); +- XSelectInput (QX11Info::display(), id, StructureNotifyMask | PropertyChangeMask); +- KWD::popXError (); +- +- if (frame) +- { +- if (!mClients.contains (id)) +- { +- client = new KWD::Window (mCompositeWindow, id, frame, type, +- x, y, +- width + border * 2, +- height + border * 2); +- +- mClients.insert (id, client); +- mFrames.insert (frame, client); +- } +- else +- { +- client = mClients[id]; +- mFrames.remove (client->frameId ()); +- mFrames.insert (frame, client); +- +- client->updateFrame (frame); +- } +- } +- else +- { +- if (mClients.contains (id)) +- client = mClients[id]; +- +- if (client) +- { +- mClients.remove (client->windowId ()); +- mFrames.remove (client->frameId ()); +- +- delete client; +- } +- } +-} +- +-void +-KWD::Decorator::handleWindowRemoved (WId id) +-{ +- KWD::Window *window = 0; +- +- if (mClients.contains (id)) +- window = mClients[id]; +- else if (mFrames.contains (id)) +- window = mFrames[id]; +- +- if (window) +- { +- mClients.remove (window->windowId ()); +- mFrames.remove (window->frameId ()); +- delete window; +- } +- +- if (mSwitcher && mSwitcher->xid () == id) +- { +- delete mSwitcher; +- mSwitcher = NULL; +- } +-} +- +-void +-KWD::Decorator::handleActiveWindowChanged (WId id) +-{ +- if (id != mActiveId) +- { +- KWD::Window *newActiveWindow = 0; +- KWD::Window *oldActiveWindow = 0; +- +- if (mClients.contains (id)) +- newActiveWindow = mClients[id]; +- +- if (mClients.contains (mActiveId)) +- oldActiveWindow = mClients[mActiveId]; +- +- mActiveId = id; +- +- if (oldActiveWindow) +- oldActiveWindow->handleActiveChange (); +- +- if (newActiveWindow) +- newActiveWindow->handleActiveChange (); +- } +-} +- +-void +-KWD::Decorator::handleWindowChanged (WId id, +- const unsigned long *properties) +-{ +- KWD::Window *client; +- +- if (mSwitcher && mSwitcher->xid () == id) +- { +- if (properties[0] & NET::WMGeometry) +- mSwitcher->updateGeometry (); +- return; +- } +- +- if (!mClients.contains (id)) +- return; +- +- client = mClients[id]; +- +- if (properties[0] & NET::WMName) +- client->updateName (); +- if (properties[0] & NET::WMVisibleName) +- client->updateName (); +- if (properties[0] & NET::WMState) +- client->updateState (); +- if (properties[0] & NET::WMIcon) +- client->updateIcons (); +- if (properties[0] & NET::WMGeometry) +- client->updateWindowGeometry (); +- +-} +- +-void +-KWD::Decorator::sendClientMessage (WId eventWid, +- WId wid, +- Atom atom, +- Atom value, +- long data1, +- long data2, +- long data3) +-{ +- XEvent ev; +- long mask = 0; +- +- memset (&ev, 0, sizeof (ev)); +- +- ev.xclient.type = ClientMessage; +- ev.xclient.window = wid; +- ev.xclient.message_type = atom; +- ev.xclient.format = 32; +- +- ev.xclient.data.l[0] = value; +- ev.xclient.data.l[1] = QX11Info::appTime(); +- ev.xclient.data.l[2] = data1; +- ev.xclient.data.l[3] = data2; +- ev.xclient.data.l[4] = data3; +- +- if (eventWid == QX11Info::appRootWindow()) +- mask = SubstructureRedirectMask | SubstructureNotifyMask; +- +- KWD::trapXError (); +- XSendEvent (QX11Info::display(), eventWid, false, mask, &ev); +- KWD::popXError (); +-} +- +-void +-KWD::Decorator::shadowRadiusChanged (double value) +-{ +- decor_shadow_options_t opt = *shadowOptions (); +- +- opt.shadow_radius = value; +- +- changeShadowOptions (&opt); +-} +- +-void +-KWD::Decorator::shadowOpacityChanged (double value) +-{ +- decor_shadow_options_t opt = *shadowOptions (); +- +- opt.shadow_opacity = value; +- +- changeShadowOptions (&opt); +-} +- +-void +-KWD::Decorator::shadowXOffsetChanged (int value) +-{ +- decor_shadow_options_t opt = *shadowOptions (); +- +- opt.shadow_offset_x = value; +- +- changeShadowOptions (&opt); +-} +- +-void +-KWD::Decorator::shadowYOffsetChanged (int value) +-{ +- decor_shadow_options_t opt = *shadowOptions (); +- +- opt.shadow_offset_y = value; +- +- changeShadowOptions (&opt); +-} +- +-void +-KWD::Decorator::shadowColorChanged (QString value) +-{ +- decor_shadow_options_t opt = *shadowOptions (); +- +- int c[4]; +- +- if (sscanf (value.toAscii().data(), "#%2x%2x%2x%2x", +- &c[0], &c[1], &c[2], &c[3]) == 4) +- { +- opt.shadow_color[0] = c[0] << 8 | c[0]; +- opt.shadow_color[1] = c[1] << 8 | c[1]; +- opt.shadow_color[2] = c[2] << 8 | c[2]; +- } +- +- changeShadowOptions (&opt); +-} +- +-void +-KWD::Decorator::plasmaThemeChanged () +-{ +- if (mSwitcher) +- { +- WId win = mSwitcher->xid(); +- delete mSwitcher; +- mSwitcher = new Switcher (mCompositeWindow, win); +- } +-} +diff -uprN compiz-0.8.8-orig/kde/window-decorator-kde4/decorator.h compiz-0.8.8/kde/window-decorator-kde4/decorator.h +--- compiz-0.8.8-orig/kde/window-decorator-kde4/decorator.h 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator-kde4/decorator.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,164 +0,0 @@ +-/* +- * Copyright © 2008 Dennis Kasprzyk +- * Copyright © 2006 Novell, Inc. +- * Copyright © 2006 Volker Krause +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: David Reveman +- */ +- +-#ifndef _DECORATOR_H +-#define _DECORATOR_H +- +-#include +- +-#include +-#include +-#include +- +-#include +- +-#include +-#include +-#include +- +-#include +- +-#include "window.h" +-#include "switcher.h" +-#include "kdecoration_plugins.h" +-#include "utils.h" +- +-#define ROOT_OFF_X 8192 +-#define ROOT_OFF_Y 8192 +- +-#define C(name) { 0, XC_ ## name } +- +-struct _cursor { +- Cursor cursor; +- unsigned int shape; +-}; +- +-extern struct _cursor cursors[3][3]; +- +-#define BLUR_TYPE_NONE 0 +-#define BLUR_TYPE_TITLEBAR 1 +-#define BLUR_TYPE_ALL 2 +- +-extern int blurType; +- +-class KConfig; +-class KWindowSystem; +- +-namespace KWD +-{ +- class Options; +- +-class PluginManager:public KDecorationPlugins { +- public: +- PluginManager (KSharedConfigPtr config); +- virtual bool provides (Requirement) +- { +- return false; +- } +- }; +- +- +-class Decorator:public KApplication { +- Q_OBJECT public: +- +- Decorator (); +- ~Decorator (void); +- +- static NETRootInfo *rootInfo (void) +- { +- return mRootInfo; +- } +- static PluginManager *pluginManager (void) +- { +- return mPlugins; +- } +- static KWD::Options *options (void) +- { +- return mOptions; +- } +- static WId activeId (void) +- { +- return mActiveId; +- } +- static decor_shadow_options_t *shadowOptions (void) +- { +- return &mShadowOptions; +- } +- +- static void sendClientMessage (WId eventWid, +- WId wid, +- Atom atom, +- Atom value, +- long data1 = 0, +- long data2 = 0, +- long data3 = 0); +- +- bool enableDecorations (Time timestamp); +- bool x11EventFilter (XEvent *xevent); +- void changeShadowOptions (decor_shadow_options_t *opt); +- +- public slots: +- void reconfigure (void); +- +- private: +- WId fetchFrame (WId window); +- void updateShadow (void); +- void updateAllShadowOptions (void); +- +- private slots: +- void handleWindowAdded (WId id); +- void handleWindowRemoved (WId id); +- void handleActiveWindowChanged (WId id); +- void handleWindowChanged (WId id, +- const unsigned long *properties); +- +- void shadowRadiusChanged (double value); +- void shadowOpacityChanged (double value); +- void shadowXOffsetChanged (int value); +- void shadowYOffsetChanged (int value); +- void shadowColorChanged (QString value); +- +- void plasmaThemeChanged (); +- +- private: +- static PluginManager *mPlugins; +- static KWD::Options *mOptions; +- static decor_shadow_t *mNoBorderShadow; +- static decor_shadow_options_t mShadowOptions; +- static NETRootInfo *mRootInfo; +- static WId mActiveId; +- +- KWD::Window *mDecorNormal; +- KWD::Window *mDecorActive; +- QMap mClients; +- QMap mFrames; +- KConfig *mConfig; +- Time mDmSnTimestamp; +- +- WId mCompositeWindow; +- +- Switcher *mSwitcher; +- }; +-} +- +-#endif +diff -uprN compiz-0.8.8-orig/kde/window-decorator-kde4/kdecoration_plugins.cpp compiz-0.8.8/kde/window-decorator-kde4/kdecoration_plugins.cpp +--- compiz-0.8.8-orig/kde/window-decorator-kde4/kdecoration_plugins.cpp 2010-05-21 13:17:43.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator-kde4/kdecoration_plugins.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,212 +0,0 @@ +-/***************************************************************** +- +-This file is a copy of the KWin internal API. It allows the KDE4 +-window decorator the loading of KWin decoration plugins. +- +-Copyright © 2008 Dennis Kasprzyk +- +-****************************************************************** +- +-This file is part of the KDE project. +- +-Copyright (C) 1999, 2000 Daniel M. Duley +-Copyright (C) 2003 Lubos Lunak +- +-Permission is hereby granted, free of charge, to any person obtaining a +-copy of this software and associated documentation files (the "Software"), +-to deal in the Software without restriction, including without limitation +-the rights to use, copy, modify, merge, publish, distribute, sublicense, +-and/or sell copies of the Software, and to permit persons to whom the +-Software is furnished to do so, subject to the following conditions: +- +-The above copyright notice and this permission notice shall be included in +-all copies or substantial portions of the Software. +- +-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +-THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +-DEALINGS IN THE SOFTWARE. +-******************************************************************/ +- +-#include "kdecoration_plugins.h" +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include +-#include +- +-#include +- +-KWD::KDecorationPlugins::KDecorationPlugins(const KSharedConfigPtr &cfg) +- : create_ptr( NULL ), +- library( NULL ), +- fact( NULL ), +- old_library( NULL ), +- old_fact( NULL ), +- pluginStr( "kwin3_undefined " ), +- config( cfg ) +- { +- } +- +-KWD::KDecorationPlugins::~KDecorationPlugins() +- { +- if(library) +- { +- assert( fact != NULL ); +- delete fact; +- library->unload(); +- } +- if(old_library) +- { +- assert( old_fact != NULL ); +- delete old_fact; +- old_library->unload(); +- } +- } +- +-QString KWD::KDecorationPlugins::currentPlugin() +- { +- return pluginStr; +- } +- +-bool KWD::KDecorationPlugins::reset( unsigned long changed ) +- { +- QString oldPlugin = pluginStr; +- config->reparseConfiguration(); +- bool ret = false; +- if(( !loadPlugin( "" ) && library ) // "" = read the one in cfg file +- || oldPlugin == pluginStr ) +- { // no new plugin loaded, reset the old one +- assert( fact != NULL ); +- ret = fact->reset( changed ); +- } +- return ret || oldPlugin != pluginStr; +- } +- +-KDecorationFactory* KWD::KDecorationPlugins::factory() +- { +- return fact; +- } +- +-// convenience +-KDecoration* KWD::KDecorationPlugins::createDecoration( KDecorationBridge* bridge ) +- { +- if( fact != NULL ) +- return fact->createDecoration( bridge ); +- return NULL; +- } +- +-// returns true if plugin was loaded successfully +-bool KWD::KDecorationPlugins::loadPlugin( QString nameStr ) +- { +- if( nameStr.isEmpty()) +- { +- KConfigGroup group( config, QString("Style") ); +- nameStr = group.readEntry("PluginLib", defaultPlugin ); +- } +- // make sure people can switch between HEAD and kwin_iii branch +- if( nameStr.startsWith( "kwin_" )) +- nameStr = "kwin3_" + nameStr.mid( 5 ); +- +- KLibrary *oldLibrary = library; +- KDecorationFactory* oldFactory = fact; +- +- QString path = KLibLoader::findLibrary(nameStr); +- kDebug() << "kwin : path " << path << " for " << nameStr; +- +- // If the plugin was not found, try to find the default +- if (path.isEmpty()) +- { +- nameStr = defaultPlugin; +- path = KLibLoader::findLibrary(nameStr); +- } +- +- // If no library was found, exit kwin with an error message +- if (path.isEmpty()) +- { +- error( i18n("No window decoration plugin library was found." )); +- return false; +- } +- +- // Check if this library is not already loaded. +- if(pluginStr == nameStr) +- return true; +- +- // Try loading the requested plugin +- library = KLibLoader::self()->library(path); +- +- // If that fails, fall back to the default plugin +- if (!library) +- { +- kDebug() << " could not load library, try default plugin again"; +- nameStr = defaultPlugin; +- if ( pluginStr == nameStr ) +- return true; +- path = KLibLoader::findLibrary(nameStr); +- if (!path.isEmpty()) +- library = KLibLoader::self()->library(path); +- } +- +- if (!library) +- { +- error( i18n("The default decoration plugin is corrupt " +- "and could not be loaded." )); +- return false; +- } +- +- create_ptr = NULL; +- KLibrary::void_function_ptr create_func = library->resolveFunction("create_factory"); +- if(create_func) +- create_ptr = (KDecorationFactory* (*)())create_func; +- +- if(!create_ptr) +- { +- error( i18n( "The library %1 is not a KWin plugin.", path )); +- library->unload(); +- return false; +- } +- fact = create_ptr(); +- fact->checkRequirements( this ); // let it check what is supported +- +- pluginStr = nameStr; +- +- // For clients in kdeartwork +- QString catalog = nameStr; +- catalog.replace( "kwin3_", "kwin_" ); +- KGlobal::locale()->insertCatalog( catalog ); +- // For KCommonDecoration based clients +- KGlobal::locale()->insertCatalog( "kwin_lib" ); +- // For clients in kdebase +- KGlobal::locale()->insertCatalog( "kwin_clients" ); +- // For clients in kdeartwork +- KGlobal::locale()->insertCatalog( "kwin_art_clients" ); +- +- old_library = oldLibrary; // save for delayed destroying +- old_fact = oldFactory; +- +- return true; +-} +- +-void KWD::KDecorationPlugins::destroyPreviousPlugin() +-{ +- // Destroy the old plugin +- if(old_library) +- { +- delete old_fact; +- old_fact = NULL; +- old_library->unload(); +- old_library = NULL; +- } +-} +- +-void KWD::KDecorationPlugins::error( const QString& ) +- { +- } +diff -uprN compiz-0.8.8-orig/kde/window-decorator-kde4/kdecoration_plugins.h compiz-0.8.8/kde/window-decorator-kde4/kdecoration_plugins.h +--- compiz-0.8.8-orig/kde/window-decorator-kde4/kdecoration_plugins.h 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator-kde4/kdecoration_plugins.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,90 +0,0 @@ +-/***************************************************************** +- +-This file is a copy of the KWin internal API. It allows the KDE4 +-window decorator the loading of KWin decoration plugins. +- +-Copyright © 2008 Dennis Kasprzyk +- +-****************************************************************** +- +-This file is part of the KDE project. +- +-Copyright (C) 1999, 2000 Daniel M. Duley +-Copyright (C) 2003 Lubos Lunak +- +-Permission is hereby granted, free of charge, to any person obtaining a +-copy of this software and associated documentation files (the "Software"), +-to deal in the Software without restriction, including without limitation +-the rights to use, copy, modify, merge, publish, distribute, sublicense, +-and/or sell copies of the Software, and to permit persons to whom the +-Software is furnished to do so, subject to the following conditions: +- +-The above copyright notice and this permission notice shall be included in +-all copies or substantial portions of the Software. +- +-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +-THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +-DEALINGS IN THE SOFTWARE. +-******************************************************************/ +- +-#ifndef KWD_KDECORATION_PLUGINS_H +-#define KWD_KDECORATION_PLUGINS_H +- +-// +-// This header file is internal. I mean it. +-// +- +- +-#include +-#include +- +-#include "kdecoration.h" +- +-class KLibrary; +-class KDecoration; +-class KDecorationBridge; +-class KDecorationFactory; +- +-namespace KWD +-{ +- +-class KDecorationPlugins +- : public KDecorationProvides +- { +- public: +- KDecorationPlugins(const KSharedConfigPtr &cfg); +- virtual ~KDecorationPlugins(); +- bool loadPlugin( QString name ); +- void destroyPreviousPlugin(); +- KDecorationFactory* factory(); +- KDecoration* createDecoration( KDecorationBridge* ); +- QString currentPlugin(); +- bool reset( unsigned long changed ); // returns true if decorations need to be recreated +- protected: +- virtual void error( const QString& error_msg ); +- QString defaultPlugin; // FRAME normalne protected? +- private: +- KDecorationFactory* (*create_ptr)(); +- KLibrary *library; +- KDecorationFactory* fact; +- KLibrary *old_library; +- KDecorationFactory* old_fact; +- QString pluginStr; +- KSharedConfigPtr config; +- }; +- +-/* +- +- Plugins API: +- KDecorationFactory* create_factory(); - called once after loading +- +-*/ +-} +- +-/** @} */ +- +-#endif +diff -uprN compiz-0.8.8-orig/kde/window-decorator-kde4/main.cpp compiz-0.8.8/kde/window-decorator-kde4/main.cpp +--- compiz-0.8.8-orig/kde/window-decorator-kde4/main.cpp 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator-kde4/main.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,135 +0,0 @@ +-/* +- * Copyright © 2008 Dennis Kasprzyk +- * Copyright © 2006 Novell, Inc. +- * Copyright © 2006 Volker Krause +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: David Reveman +- */ +- +-#include +-#include +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "decorator.h" +-#include "utils.h" +- +-#include +-#include +- +- +- +-int +-main (int argc, char **argv) +-{ +- KWD::Decorator *app; +- KCmdLineArgs *args; +- KCmdLineOptions options; +- int status; +- Time timestamp; +- QString appname; +- +- options.add ("replace", ki18n ("Replace existing window decorator")); +- options.add ("sm-disable", ki18n ("Disable connection to session manager")); +- options.add ("blur ", ki18n ("Blur type (none/titlebar/all)"), "none"); +- +- KAboutData about("kde-window-decorator", "kwin", ki18n ("KDE Window Decorator"), +- "0.0.1", KLocalizedString(), KAboutData::License_GPL, +- KLocalizedString(), KLocalizedString(), "http://www.compiz.org", +- "dev@lists.compiz-fusion.org"); +- KCmdLineArgs::init (argc, argv, +- "kde-window-decorator", +- "kwin", +- ki18n ("KDE Window Decorator"), +- "0.0.1"); +- KCmdLineArgs::addCmdLineOptions (options); +- args = KCmdLineArgs::parsedArgs (); +- +- if (args->isSet ("blur")) +- { +- QString blur = args->getOption ("blur"); +- +- if (blur == QString ("titlebar")) +- blurType = BLUR_TYPE_TITLEBAR; +- else if (blur == QString ("all")) +- blurType = BLUR_TYPE_ALL; +- } +- +- app = new KWD::Decorator (); +- +- if (args->isSet ("sm-disable")) +- app->disableSessionManagement (); +- +- status = decor_acquire_dm_session (QX11Info::display(), +- QX11Info::appScreen (), +- "kwd", args->isSet ("replace"), +- ×tamp); +- if (status != DECOR_ACQUIRE_STATUS_SUCCESS) +- { +- if (status == DECOR_ACQUIRE_STATUS_FAILED) +- { +- fprintf (stderr, +- "%s: Could not acquire decoration manager " +- "selection on screen %d display \"%s\"\n", +- argv[0], QX11Info::appScreen (), +- DisplayString (QX11Info::display())); +- } +- else if (status == DECOR_ACQUIRE_STATUS_OTHER_DM_RUNNING) +- { +- fprintf (stderr, +- "%s: Screen %d on display \"%s\" already " +- "has a decoration manager; try using the " +- "--replace option to replace the current " +- "decoration manager.\n", +- argv[0], QX11Info::appScreen (), +- DisplayString (QX11Info::display())); +- } +- +- return 1; +- } +- +- decor_set_dm_check_hint (QX11Info::display(), QX11Info::appScreen ()); +- +- if (!app->enableDecorations (timestamp)) +- { +- fprintf (stderr, +- "%s: Could not enable decorations on display \"%s\"\n", +- argv[0], DisplayString (QX11Info::display())); +- +- return 1; +- } +- +- if (QX11Info::appScreen () == 0) +- appname = "org.kde.kwin"; +- else +- appname.sprintf("org.kde.kwin-screen-%d", QX11Info::appScreen ()); +- +- QDBusConnection::sessionBus ().interface ()->registerService +- (appname, QDBusConnectionInterface::DontQueueService); +- +- status = app->exec (); +- +- delete app; +- +- return status; +-} +diff -uprN compiz-0.8.8-orig/kde/window-decorator-kde4/Makefile.am compiz-0.8.8/kde/window-decorator-kde4/Makefile.am +--- compiz-0.8.8-orig/kde/window-decorator-kde4/Makefile.am 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator-kde4/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +@@ -1,58 +0,0 @@ +-if USE_KDE4 +- +-BUILDSOURCES = \ +- decorator.moc.cpp \ +- window.moc.cpp \ +- paintredirector.moc.cpp \ +- kwinadaptor.moc.cpp \ +- kwinadaptor.cpp \ +- kwinadaptor.h +- +-kde4_window_decorator_DEPENDENCIES = \ +- $(top_builddir)/libdecoration/libdecoration.la +-kde4_window_decorator_LDADD = \ +- $(top_builddir)/libdecoration/libdecoration.la \ +- @KDE4_WINDOW_DECORATOR_LIBS@ @KDE4_LIBS@ -ldl +- +-nodist_kde4_window_decorator_SOURCES = \ +- $(BUILDSOURCES) +- +-dist_kde4_window_decorator_SOURCES = \ +- main.cpp \ +- utils.cpp \ +- utils.h \ +- decorator.cpp \ +- decorator.h \ +- window.cpp \ +- window.h \ +- options.cpp \ +- options.h \ +- kdecoration_plugins.cpp \ +- kdecoration_plugins.h \ +- switcher.cpp \ +- switcher.h \ +- paintredirector.cpp \ +- paintredirector.h \ +- org.kde.KWin.xml +- +-kde4_window_decorator_program = kde4-window-decorator +- +-INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include @KDE4_WINDOW_DECORATOR_CFLAGS@ @KDE4_CFLAGS@ +- +-bin_PROGRAMS = $(kde4_window_decorator_program) +- +-%.moc.cpp: %.h +- $(QT4_MOC) $< > $@ +- +-kwinadaptor.h: kwinadaptor.cpp +- +-kwinadaptor.cpp: org.kde.KWin.xml +- $(QDBUSXML2CPP) -a kwinadaptor -i decorator.h -l KWD::Decorator $< +- +-# make sure kwinadaptor.h is built before any of the dist_SOURCES uses it +-main.cpp: kwinadaptor.h +- +-CLEANFILES = $(BUILDSOURCES) +-EXTRA_DIST = org.kde.KWin.xml +- +-endif +diff -uprN compiz-0.8.8-orig/kde/window-decorator-kde4/Makefile.in compiz-0.8.8/kde/window-decorator-kde4/Makefile.in +--- compiz-0.8.8-orig/kde/window-decorator-kde4/Makefile.in 2013-04-19 11:25:07.305309000 +0200 ++++ compiz-0.8.8/kde/window-decorator-kde4/Makefile.in 1970-01-01 01:00:00.000000000 +0100 +@@ -1,687 +0,0 @@ +-# Makefile.in generated by automake 1.11.1 from Makefile.am. +-# @configure_input@ +- +-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +-# Inc. +-# This Makefile.in is free software; the Free Software Foundation +-# gives unlimited permission to copy and/or distribute it, +-# with or without modifications, as long as this notice is preserved. +- +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +-# PARTICULAR PURPOSE. +- +-@SET_MAKE@ +- +-VPATH = @srcdir@ +-pkgdatadir = $(datadir)/@PACKAGE@ +-pkgincludedir = $(includedir)/@PACKAGE@ +-pkglibdir = $(libdir)/@PACKAGE@ +-pkglibexecdir = $(libexecdir)/@PACKAGE@ +-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +-install_sh_DATA = $(install_sh) -c -m 644 +-install_sh_PROGRAM = $(install_sh) -c +-install_sh_SCRIPT = $(install_sh) -c +-INSTALL_HEADER = $(INSTALL_DATA) +-transform = $(program_transform_name) +-NORMAL_INSTALL = : +-PRE_INSTALL = : +-POST_INSTALL = : +-NORMAL_UNINSTALL = : +-PRE_UNINSTALL = : +-POST_UNINSTALL = : +-build_triplet = @build@ +-host_triplet = @host@ +-@USE_KDE4_TRUE@bin_PROGRAMS = $(am__EXEEXT_1) +-subdir = kde/window-decorator-kde4 +-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +-am__aclocal_m4_deps = $(top_srcdir)/configure.ac +-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ +- $(ACLOCAL_M4) +-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +-CONFIG_HEADER = $(top_builddir)/config.h +-CONFIG_CLEAN_FILES = +-CONFIG_CLEAN_VPATH_FILES = +-@USE_KDE4_TRUE@am__EXEEXT_1 = kde4-window-decorator$(EXEEXT) +-am__installdirs = "$(DESTDIR)$(bindir)" +-PROGRAMS = $(bin_PROGRAMS) +-am__dist_kde4_window_decorator_SOURCES_DIST = main.cpp utils.cpp \ +- utils.h decorator.cpp decorator.h window.cpp window.h \ +- options.cpp options.h kdecoration_plugins.cpp \ +- kdecoration_plugins.h switcher.cpp switcher.h \ +- paintredirector.cpp paintredirector.h org.kde.KWin.xml +-@USE_KDE4_TRUE@dist_kde4_window_decorator_OBJECTS = main.$(OBJEXT) \ +-@USE_KDE4_TRUE@ utils.$(OBJEXT) decorator.$(OBJEXT) \ +-@USE_KDE4_TRUE@ window.$(OBJEXT) options.$(OBJEXT) \ +-@USE_KDE4_TRUE@ kdecoration_plugins.$(OBJEXT) \ +-@USE_KDE4_TRUE@ switcher.$(OBJEXT) paintredirector.$(OBJEXT) +-@USE_KDE4_TRUE@am__objects_1 = decorator.moc.$(OBJEXT) \ +-@USE_KDE4_TRUE@ window.moc.$(OBJEXT) \ +-@USE_KDE4_TRUE@ paintredirector.moc.$(OBJEXT) \ +-@USE_KDE4_TRUE@ kwinadaptor.moc.$(OBJEXT) kwinadaptor.$(OBJEXT) +-@USE_KDE4_TRUE@nodist_kde4_window_decorator_OBJECTS = \ +-@USE_KDE4_TRUE@ $(am__objects_1) +-kde4_window_decorator_OBJECTS = $(dist_kde4_window_decorator_OBJECTS) \ +- $(nodist_kde4_window_decorator_OBJECTS) +-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +-depcomp = $(SHELL) $(top_srcdir)/depcomp +-am__depfiles_maybe = depfiles +-am__mv = mv -f +-CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ +- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +-LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ +- --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ +- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +-CXXLD = $(CXX) +-CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ +- --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ +- $(LDFLAGS) -o $@ +-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ +- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ +- --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ +- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +-CCLD = $(CC) +-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ +- --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ +- $(LDFLAGS) -o $@ +-SOURCES = $(dist_kde4_window_decorator_SOURCES) \ +- $(nodist_kde4_window_decorator_SOURCES) +-DIST_SOURCES = $(am__dist_kde4_window_decorator_SOURCES_DIST) +-ETAGS = etags +-CTAGS = ctags +-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +-ACLOCAL = @ACLOCAL@ +-ALL_LINGUAS = @ALL_LINGUAS@ +-AMTAR = @AMTAR@ +-ANNOTATE_CFLAGS = @ANNOTATE_CFLAGS@ +-ANNOTATE_LIBS = @ANNOTATE_LIBS@ +-AR = @AR@ +-AUTOCONF = @AUTOCONF@ +-AUTOHEADER = @AUTOHEADER@ +-AUTOMAKE = @AUTOMAKE@ +-AWK = @AWK@ +-CATALOGS = @CATALOGS@ +-CATOBJEXT = @CATOBJEXT@ +-CC = @CC@ +-CCDEPMODE = @CCDEPMODE@ +-CFLAGS = @CFLAGS@ +-COMPIZ_CFLAGS = @COMPIZ_CFLAGS@ +-COMPIZ_LIBS = @COMPIZ_LIBS@ +-COMPIZ_REQUIRES = @COMPIZ_REQUIRES@ +-COMPIZ_VERSION_MAJOR = @COMPIZ_VERSION_MAJOR@ +-COMPIZ_VERSION_MICRO = @COMPIZ_VERSION_MICRO@ +-COMPIZ_VERSION_MINOR = @COMPIZ_VERSION_MINOR@ +-CPP = @CPP@ +-CPPFLAGS = @CPPFLAGS@ +-CXX = @CXX@ +-CXXCPP = @CXXCPP@ +-CXXDEPMODE = @CXXDEPMODE@ +-CXXFLAGS = @CXXFLAGS@ +-CYGPATH_W = @CYGPATH_W@ +-DATADIRNAME = @DATADIRNAME@ +-DBUS_CFLAGS = @DBUS_CFLAGS@ +-DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@ +-DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@ +-DBUS_LIBS = @DBUS_LIBS@ +-DCOPIDL = @DCOPIDL@ +-DCOPIDL2CPP = @DCOPIDL2CPP@ +-DECORATION_CFLAGS = @DECORATION_CFLAGS@ +-DECORATION_LIBS = @DECORATION_LIBS@ +-DECORATION_REQUIRES = @DECORATION_REQUIRES@ +-DEFS = @DEFS@ +-DEPDIR = @DEPDIR@ +-DSYMUTIL = @DSYMUTIL@ +-DUMPBIN = @DUMPBIN@ +-ECHO_C = @ECHO_C@ +-ECHO_N = @ECHO_N@ +-ECHO_T = @ECHO_T@ +-EGREP = @EGREP@ +-EXEEXT = @EXEEXT@ +-FGREP = @FGREP@ +-FUSE_CFLAGS = @FUSE_CFLAGS@ +-FUSE_LIBS = @FUSE_LIBS@ +-MATECONFTOOL = @MATECONFTOOL@ +-MATECONF_CFLAGS = @MATECONF_CFLAGS@ +-MATECONF_LIBS = @MATECONF_LIBS@ +-MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@ +-MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@ +-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +-GLIB_CFLAGS = @GLIB_CFLAGS@ +-GLIB_LIBS = @GLIB_LIBS@ +-GL_CFLAGS = @GL_CFLAGS@ +-GL_LIBS = @GL_LIBS@ +-GMOFILES = @GMOFILES@ +-GMSGFMT = @GMSGFMT@ +-MATE_KEY_BINDINGS_CFLAGS = @MATE_KEY_BINDINGS_CFLAGS@ +-MATE_KEY_BINDINGS_LIBS = @MATE_KEY_BINDINGS_LIBS@ +-MATE_WINDOW_SETTINGS_CFLAGS = @MATE_WINDOW_SETTINGS_CFLAGS@ +-MATE_WINDOW_SETTINGS_LIBS = @MATE_WINDOW_SETTINGS_LIBS@ +-GREP = @GREP@ +-GTK_WINDOW_DECORATOR_CFLAGS = @GTK_WINDOW_DECORATOR_CFLAGS@ +-GTK_WINDOW_DECORATOR_LIBS = @GTK_WINDOW_DECORATOR_LIBS@ +-INSTALL = @INSTALL@ +-INSTALL_DATA = @INSTALL_DATA@ +-INSTALL_PROGRAM = @INSTALL_PROGRAM@ +-INSTALL_SCRIPT = @INSTALL_SCRIPT@ +-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +-INSTOBJEXT = @INSTOBJEXT@ +-INTLLIBS = @INTLLIBS@ +-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +-INTLTOOL_MERGE = @INTLTOOL_MERGE@ +-INTLTOOL_PERL = @INTLTOOL_PERL@ +-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +-KCONFIG_CFLAGS = @KCONFIG_CFLAGS@ +-KCONFIG_LIBS = @KCONFIG_LIBS@ +-KDE4_CFLAGS = @KDE4_CFLAGS@ +-KDE4_LIBS = @KDE4_LIBS@ +-KDE4_WINDOW_DECORATOR_CFLAGS = @KDE4_WINDOW_DECORATOR_CFLAGS@ +-KDE4_WINDOW_DECORATOR_LIBS = @KDE4_WINDOW_DECORATOR_LIBS@ +-KDE_CFLAGS = @KDE_CFLAGS@ +-KDE_KCFG_DIR = @KDE_KCFG_DIR@ +-KDE_KCONFIG_DIR = @KDE_KCONFIG_DIR@ +-KDE_LIBS = @KDE_LIBS@ +-KDE_WINDOW_DECORATOR_CFLAGS = @KDE_WINDOW_DECORATOR_CFLAGS@ +-KDE_WINDOW_DECORATOR_LIBS = @KDE_WINDOW_DECORATOR_LIBS@ +-LD = @LD@ +-LDFLAGS = @LDFLAGS@ +-LIBOBJS = @LIBOBJS@ +-LIBPNG_CFLAGS = @LIBPNG_CFLAGS@ +-LIBPNG_LIBS = @LIBPNG_LIBS@ +-LIBRSVG_CFLAGS = @LIBRSVG_CFLAGS@ +-LIBRSVG_LIBS = @LIBRSVG_LIBS@ +-LIBS = @LIBS@ +-LIBTOOL = @LIBTOOL@ +-LIPO = @LIPO@ +-LN_S = @LN_S@ +-LTLIBOBJS = @LTLIBOBJS@ +-MAINT = @MAINT@ +-MAKEINFO = @MAKEINFO@ +-MARCO_CFLAGS = @MARCO_CFLAGS@ +-MARCO_LIBS = @MARCO_LIBS@ +-MKDIR_P = @MKDIR_P@ +-MKINSTALLDIRS = @MKINSTALLDIRS@ +-MSGFMT = @MSGFMT@ +-MSGFMT_OPTS = @MSGFMT_OPTS@ +-MSGMERGE = @MSGMERGE@ +-NM = @NM@ +-NMEDIT = @NMEDIT@ +-OBJDUMP = @OBJDUMP@ +-OBJEXT = @OBJEXT@ +-OTOOL = @OTOOL@ +-OTOOL64 = @OTOOL64@ +-PACKAGE = @PACKAGE@ +-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +-PACKAGE_NAME = @PACKAGE_NAME@ +-PACKAGE_STRING = @PACKAGE_STRING@ +-PACKAGE_TARNAME = @PACKAGE_TARNAME@ +-PACKAGE_URL = @PACKAGE_URL@ +-PACKAGE_VERSION = @PACKAGE_VERSION@ +-PATH_SEPARATOR = @PATH_SEPARATOR@ +-PKG_CONFIG = @PKG_CONFIG@ +-PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +-PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +-POFILES = @POFILES@ +-POSUB = @POSUB@ +-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +-QDBUSXML2CPP = @QDBUSXML2CPP@ +-QT4_MOC = @QT4_MOC@ +-QT_MOC = @QT_MOC@ +-RANLIB = @RANLIB@ +-SED = @SED@ +-SET_MAKE = @SET_MAKE@ +-SHELL = @SHELL@ +-STRIP = @STRIP@ +-USE_NLS = @USE_NLS@ +-VERSION = @VERSION@ +-XGETTEXT = @XGETTEXT@ +-XSLTPROC = @XSLTPROC@ +-abs_builddir = @abs_builddir@ +-abs_srcdir = @abs_srcdir@ +-abs_top_builddir = @abs_top_builddir@ +-abs_top_srcdir = @abs_top_srcdir@ +-ac_ct_CC = @ac_ct_CC@ +-ac_ct_CXX = @ac_ct_CXX@ +-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +-am__include = @am__include@ +-am__leading_dot = @am__leading_dot@ +-am__quote = @am__quote@ +-am__tar = @am__tar@ +-am__untar = @am__untar@ +-bindir = @bindir@ +-build = @build@ +-build_alias = @build_alias@ +-build_cpu = @build_cpu@ +-build_os = @build_os@ +-build_vendor = @build_vendor@ +-builddir = @builddir@ +-datadir = @datadir@ +-datarootdir = @datarootdir@ +-default_plugins = @default_plugins@ +-docdir = @docdir@ +-dvidir = @dvidir@ +-exec_prefix = @exec_prefix@ +-host = @host@ +-host_alias = @host_alias@ +-host_cpu = @host_cpu@ +-host_os = @host_os@ +-host_vendor = @host_vendor@ +-htmldir = @htmldir@ +-imagedir = @imagedir@ +-includedir = @includedir@ +-infodir = @infodir@ +-install_sh = @install_sh@ +-kcfgdir = @kcfgdir@ +-keybindingsdir = @keybindingsdir@ +-libdir = @libdir@ +-libexecdir = @libexecdir@ +-localedir = @localedir@ +-localstatedir = @localstatedir@ +-mandir = @mandir@ +-metadatadir = @metadatadir@ +-mkdir_p = @mkdir_p@ +-oldincludedir = @oldincludedir@ +-pdfdir = @pdfdir@ +-plugindir = @plugindir@ +-prefix = @prefix@ +-program_transform_name = @program_transform_name@ +-psdir = @psdir@ +-sbindir = @sbindir@ +-sharedstatedir = @sharedstatedir@ +-srcdir = @srcdir@ +-stylesheetdir = @stylesheetdir@ +-sysconfdir = @sysconfdir@ +-target_alias = @target_alias@ +-top_build_prefix = @top_build_prefix@ +-top_builddir = @top_builddir@ +-top_srcdir = @top_srcdir@ +-windowsettingsdatadir = @windowsettingsdatadir@ +-windowsettingslibdir = @windowsettingslibdir@ +-@USE_KDE4_TRUE@BUILDSOURCES = \ +-@USE_KDE4_TRUE@ decorator.moc.cpp \ +-@USE_KDE4_TRUE@ window.moc.cpp \ +-@USE_KDE4_TRUE@ paintredirector.moc.cpp \ +-@USE_KDE4_TRUE@ kwinadaptor.moc.cpp \ +-@USE_KDE4_TRUE@ kwinadaptor.cpp \ +-@USE_KDE4_TRUE@ kwinadaptor.h +- +-@USE_KDE4_TRUE@kde4_window_decorator_DEPENDENCIES = \ +-@USE_KDE4_TRUE@ $(top_builddir)/libdecoration/libdecoration.la +- +-@USE_KDE4_TRUE@kde4_window_decorator_LDADD = \ +-@USE_KDE4_TRUE@ $(top_builddir)/libdecoration/libdecoration.la \ +-@USE_KDE4_TRUE@ @KDE4_WINDOW_DECORATOR_LIBS@ @KDE4_LIBS@ -ldl +- +-@USE_KDE4_TRUE@nodist_kde4_window_decorator_SOURCES = \ +-@USE_KDE4_TRUE@ $(BUILDSOURCES) +- +-@USE_KDE4_TRUE@dist_kde4_window_decorator_SOURCES = \ +-@USE_KDE4_TRUE@ main.cpp \ +-@USE_KDE4_TRUE@ utils.cpp \ +-@USE_KDE4_TRUE@ utils.h \ +-@USE_KDE4_TRUE@ decorator.cpp \ +-@USE_KDE4_TRUE@ decorator.h \ +-@USE_KDE4_TRUE@ window.cpp \ +-@USE_KDE4_TRUE@ window.h \ +-@USE_KDE4_TRUE@ options.cpp \ +-@USE_KDE4_TRUE@ options.h \ +-@USE_KDE4_TRUE@ kdecoration_plugins.cpp \ +-@USE_KDE4_TRUE@ kdecoration_plugins.h \ +-@USE_KDE4_TRUE@ switcher.cpp \ +-@USE_KDE4_TRUE@ switcher.h \ +-@USE_KDE4_TRUE@ paintredirector.cpp \ +-@USE_KDE4_TRUE@ paintredirector.h \ +-@USE_KDE4_TRUE@ org.kde.KWin.xml +- +-@USE_KDE4_TRUE@kde4_window_decorator_program = kde4-window-decorator +-@USE_KDE4_TRUE@INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include @KDE4_WINDOW_DECORATOR_CFLAGS@ @KDE4_CFLAGS@ +-@USE_KDE4_TRUE@CLEANFILES = $(BUILDSOURCES) +-@USE_KDE4_TRUE@EXTRA_DIST = org.kde.KWin.xml +-all: all-am +- +-.SUFFIXES: +-.SUFFIXES: .cpp .lo .o .obj +-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) +- @for dep in $?; do \ +- case '$(am__configure_deps)' in \ +- *$$dep*) \ +- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ +- && { if test -f $@; then exit 0; else break; fi; }; \ +- exit 1;; \ +- esac; \ +- done; \ +- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kde/window-decorator-kde4/Makefile'; \ +- $(am__cd) $(top_srcdir) && \ +- $(AUTOMAKE) --gnu kde/window-decorator-kde4/Makefile +-.PRECIOUS: Makefile +-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status +- @case '$?' in \ +- *config.status*) \ +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ +- *) \ +- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ +- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ +- esac; +- +-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +- +-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) +- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +-$(am__aclocal_m4_deps): +-install-binPROGRAMS: $(bin_PROGRAMS) +- @$(NORMAL_INSTALL) +- test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" +- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ +- for p in $$list; do echo "$$p $$p"; done | \ +- sed 's/$(EXEEXT)$$//' | \ +- while read p p1; do if test -f $$p || test -f $$p1; \ +- then echo "$$p"; echo "$$p"; else :; fi; \ +- done | \ +- sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ +- -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ +- sed 'N;N;N;s,\n, ,g' | \ +- $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ +- { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ +- if ($$2 == $$4) files[d] = files[d] " " $$1; \ +- else { print "f", $$3 "/" $$4, $$1; } } \ +- END { for (d in files) print "f", d, files[d] }' | \ +- while read type dir files; do \ +- if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ +- test -z "$$files" || { \ +- echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ +- $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ +- } \ +- ; done +- +-uninstall-binPROGRAMS: +- @$(NORMAL_UNINSTALL) +- @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ +- files=`for p in $$list; do echo "$$p"; done | \ +- sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ +- -e 's/$$/$(EXEEXT)/' `; \ +- test -n "$$list" || exit 0; \ +- echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ +- cd "$(DESTDIR)$(bindir)" && rm -f $$files +- +-clean-binPROGRAMS: +- @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ +- echo " rm -f" $$list; \ +- rm -f $$list || exit $$?; \ +- test -n "$(EXEEXT)" || exit 0; \ +- list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ +- echo " rm -f" $$list; \ +- rm -f $$list +-kde4-window-decorator$(EXEEXT): $(kde4_window_decorator_OBJECTS) $(kde4_window_decorator_DEPENDENCIES) +- @rm -f kde4-window-decorator$(EXEEXT) +- $(CXXLINK) $(kde4_window_decorator_OBJECTS) $(kde4_window_decorator_LDADD) $(LIBS) +- +-mostlyclean-compile: +- -rm -f *.$(OBJEXT) +- +-distclean-compile: +- -rm -f *.tab.c +- +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decorator.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decorator.moc.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kdecoration_plugins.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kwinadaptor.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kwinadaptor.moc.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/options.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paintredirector.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paintredirector.moc.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/switcher.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/window.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/window.moc.Po@am__quote@ +- +-.cpp.o: +-@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +-@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< +- +-.cpp.obj: +-@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +-@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` +- +-.cpp.lo: +-@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +-@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< +- +-mostlyclean-libtool: +- -rm -f *.lo +- +-clean-libtool: +- -rm -rf .libs _libs +- +-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ +- mkid -fID $$unique +-tags: TAGS +- +-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- set x; \ +- here=`pwd`; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ +- shift; \ +- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ +- test -n "$$unique" || unique=$$empty_fix; \ +- if test $$# -gt 0; then \ +- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +- "$$@" $$unique; \ +- else \ +- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ +- $$unique; \ +- fi; \ +- fi +-ctags: CTAGS +-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ +- test -z "$(CTAGS_ARGS)$$unique" \ +- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ +- $$unique +- +-GTAGS: +- here=`$(am__cd) $(top_builddir) && pwd` \ +- && $(am__cd) $(top_srcdir) \ +- && gtags -i $(GTAGS_ARGS) "$$here" +- +-distclean-tags: +- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +- +-distdir: $(DISTFILES) +- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ +- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ +- list='$(DISTFILES)'; \ +- dist_files=`for file in $$list; do echo $$file; done | \ +- sed -e "s|^$$srcdirstrip/||;t" \ +- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ +- case $$dist_files in \ +- */*) $(MKDIR_P) `echo "$$dist_files" | \ +- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ +- sort -u` ;; \ +- esac; \ +- for file in $$dist_files; do \ +- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ +- if test -d $$d/$$file; then \ +- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ +- if test -d "$(distdir)/$$file"; then \ +- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ +- fi; \ +- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ +- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ +- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ +- fi; \ +- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ +- else \ +- test -f "$(distdir)/$$file" \ +- || cp -p $$d/$$file "$(distdir)/$$file" \ +- || exit 1; \ +- fi; \ +- done +-check-am: all-am +-check: check-am +-all-am: Makefile $(PROGRAMS) +-installdirs: +- for dir in "$(DESTDIR)$(bindir)"; do \ +- test -z "$$dir" || $(MKDIR_P) "$$dir"; \ +- done +-install: install-am +-install-exec: install-exec-am +-install-data: install-data-am +-uninstall: uninstall-am +- +-install-am: all-am +- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +- +-installcheck: installcheck-am +-install-strip: +- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ +- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ +- `test -z '$(STRIP)' || \ +- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +-mostlyclean-generic: +- +-clean-generic: +- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) +- +-distclean-generic: +- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) +- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) +- +-maintainer-clean-generic: +- @echo "This command is intended for maintainers to use" +- @echo "it deletes files that may require special tools to rebuild." +-clean: clean-am +- +-clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am +- +-distclean: distclean-am +- -rm -rf ./$(DEPDIR) +- -rm -f Makefile +-distclean-am: clean-am distclean-compile distclean-generic \ +- distclean-tags +- +-dvi: dvi-am +- +-dvi-am: +- +-html: html-am +- +-html-am: +- +-info: info-am +- +-info-am: +- +-install-data-am: +- +-install-dvi: install-dvi-am +- +-install-dvi-am: +- +-install-exec-am: install-binPROGRAMS +- +-install-html: install-html-am +- +-install-html-am: +- +-install-info: install-info-am +- +-install-info-am: +- +-install-man: +- +-install-pdf: install-pdf-am +- +-install-pdf-am: +- +-install-ps: install-ps-am +- +-install-ps-am: +- +-installcheck-am: +- +-maintainer-clean: maintainer-clean-am +- -rm -rf ./$(DEPDIR) +- -rm -f Makefile +-maintainer-clean-am: distclean-am maintainer-clean-generic +- +-mostlyclean: mostlyclean-am +- +-mostlyclean-am: mostlyclean-compile mostlyclean-generic \ +- mostlyclean-libtool +- +-pdf: pdf-am +- +-pdf-am: +- +-ps: ps-am +- +-ps-am: +- +-uninstall-am: uninstall-binPROGRAMS +- +-.MAKE: install-am install-strip +- +-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ +- clean-generic clean-libtool ctags distclean distclean-compile \ +- distclean-generic distclean-libtool distclean-tags distdir dvi \ +- dvi-am html html-am info info-am install install-am \ +- install-binPROGRAMS install-data install-data-am install-dvi \ +- install-dvi-am install-exec install-exec-am install-html \ +- install-html-am install-info install-info-am install-man \ +- install-pdf install-pdf-am install-ps install-ps-am \ +- install-strip installcheck installcheck-am installdirs \ +- maintainer-clean maintainer-clean-generic mostlyclean \ +- mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ +- pdf pdf-am ps ps-am tags uninstall uninstall-am \ +- uninstall-binPROGRAMS +- +- +-@USE_KDE4_TRUE@%.moc.cpp: %.h +-@USE_KDE4_TRUE@ $(QT4_MOC) $< > $@ +- +-@USE_KDE4_TRUE@kwinadaptor.h: kwinadaptor.cpp +- +-@USE_KDE4_TRUE@kwinadaptor.cpp: org.kde.KWin.xml +-@USE_KDE4_TRUE@ $(QDBUSXML2CPP) -a kwinadaptor -i decorator.h -l KWD::Decorator $< +- +-# make sure kwinadaptor.h is built before any of the dist_SOURCES uses it +-@USE_KDE4_TRUE@main.cpp: kwinadaptor.h +- +-# Tell versions [3.59,3.63) of GNU make to not export all variables. +-# Otherwise a system limit (for SysV at least) may be exceeded. +-.NOEXPORT: +diff -uprN compiz-0.8.8-orig/kde/window-decorator-kde4/options.cpp compiz-0.8.8/kde/window-decorator-kde4/options.cpp +--- compiz-0.8.8-orig/kde/window-decorator-kde4/options.cpp 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator-kde4/options.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,186 +0,0 @@ +-/* +- * Copyright © 2008 Dennis Kasprzyk +- * Copyright © 2006 Novell, Inc. +- * Copyright © 2006 Volker Krause +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: David Reveman +- */ +- +-#include "options.h" +- +-#include +-#include +-#include +- +-KWD::Options::Options (KConfig *config): KDecorationOptions (), mConfig (config) +-{ +- updateSettings (); +-} +- +-unsigned long +-KWD::Options::updateSettings (void) +-{ +- unsigned long changed = 0; +- KConfigGroup config = mConfig->group("Windows"); +- +- changed |= KDecorationOptions::updateSettings (mConfig); +- +- OpTitlebarDblClick = +- windowOperation (config.readEntry ("TitlebarDoubleClickCommand", +- "Shade"), true); +- setOpMaxButtonLeftClick ( +- windowOperation (config.readEntry ("MaximizeButtonLeftClickCommand", +- "Maximize"), true)); +- setOpMaxButtonMiddleClick ( +- windowOperation (config.readEntry ("MaximizeButtonMiddleClickCommand", +- "Maximize (vertical only)"), true)); +- setOpMaxButtonRightClick ( +- windowOperation (config.readEntry ("MaximizeButtonRightClickCommand", +- "Maximize (horizontal only)"), +- true)); +- +- config = mConfig->group("MouseBindings"); +- +- CmdActiveTitlebar1 = +- mouseCommand (config.readEntry ("CommandActiveTitlebar1", +- "Raise"), true); +- CmdActiveTitlebar2 = +- mouseCommand (config.readEntry ("CommandActiveTitlebar2", +- "Lower"), true); +- CmdActiveTitlebar3 = +- mouseCommand (config.readEntry ("CommandActiveTitlebar3", +- "Operations menu"), true); +- CmdInactiveTitlebar1 = +- mouseCommand (config.readEntry ("CommandInactiveTitlebar1", +- "Activate and raise"), true); +- CmdInactiveTitlebar2 = +- mouseCommand (config.readEntry ("CommandInactiveTitlebar2", +- "Activate and lower"), true); +- CmdInactiveTitlebar3 = +- mouseCommand (config.readEntry ("CommandInactiveTitlebar3", +- "Operations menu"), true); +- +- CmdTitlebarWheel = +- mouseWheelCommand (config.readEntry ("CommandTitlebarWheel", +- "Nothing")); +- +- return changed; +-} +- +-// restricted should be true for operations that the user may not be able to +-// repeat if the window is moved out of the workspace (e.g. if the user moves +-// a window by the titlebar, and moves it too high beneath Kicker at the top +-// edge, they may not be able to move it back, unless they know about Alt+LMB) +-KDecorationDefines::WindowOperation +-KWD::Options::windowOperation (const QString &name, bool restricted) +-{ +- if (name == "Move") +- return restricted ? KWD::Options::MoveOp : +- KWD::Options::UnrestrictedMoveOp; +- else if (name == "Resize") +- return restricted ? KWD::Options::ResizeOp : +- KWD::Options::UnrestrictedResizeOp; +- else if (name == "Maximize") +- return KWD::Options::MaximizeOp; +- else if (name == "Minimize") +- return KWD::Options::MinimizeOp; +- else if (name == "Close") +- return KWD::Options::CloseOp; +- else if (name == "OnAllDesktops") +- return KWD::Options::OnAllDesktopsOp; +- else if (name == "Shade") +- return KWD::Options::ShadeOp; +- else if (name == "Operations") +- return KWD::Options::OperationsOp; +- else if (name == "Maximize (vertical only)") +- return KWD::Options::VMaximizeOp; +- else if (name == "Maximize (horizontal only)") +- return KWD::Options::HMaximizeOp; +- else if (name == "Lower") +- return KWD::Options::LowerOp; +- return KWD::Options::NoOp; +-} +- +-KWD::Options::MouseCommand +-KWD::Options::mouseCommand (const QString &name, +- bool restricted) +-{ +- QString lowerName = name.toLower (); +- +- if (lowerName == "raise") return MouseRaise; +- if (lowerName == "lower") return MouseLower; +- if (lowerName == "operations menu") return MouseOperationsMenu; +- if (lowerName == "toggle raise and lower") return MouseToggleRaiseAndLower; +- if (lowerName == "activate and raise") return MouseActivateAndRaise; +- if (lowerName == "activate and lower") return MouseActivateAndLower; +- if (lowerName == "activate") return MouseActivate; +- if (lowerName == "activate, raise and pass click") +- return MouseActivateRaiseAndPassClick; +- if (lowerName == "activate and pass click") +- return MouseActivateAndPassClick; +- if (lowerName == "activate, raise and move") +- return restricted ? MouseActivateRaiseAndMove : +- MouseActivateRaiseAndUnrestrictedMove; +- if (lowerName == "move") +- return restricted ? MouseMove : MouseUnrestrictedMove; +- if (lowerName == "resize") +- return restricted ? MouseResize : MouseUnrestrictedResize; +- if (lowerName == "shade") return MouseShade; +- if (lowerName == "minimize") return MouseMinimize; +- if (lowerName == "nothing") return MouseNothing; +- +- return MouseNothing; +-} +- +-KWD::Options::MouseWheelCommand +-KWD::Options::mouseWheelCommand (const QString &name) +-{ +- QString lowerName = name.toLower (); +- +- if (lowerName == "raise/lower") return MouseWheelRaiseLower; +- if (lowerName == "shade/unshade") return MouseWheelShadeUnshade; +- if (lowerName == "maximize/restore") return MouseWheelMaximizeRestore; +- if (lowerName == "above/below") return MouseWheelAboveBelow; +- if (lowerName == "previous/next desktop") +- return MouseWheelPreviousNextDesktop; +- if (lowerName == "change opacity") return MouseWheelChangeOpacity; +- +- return MouseWheelNothing; +-} +- +-KWD::Options::MouseCommand +-KWD::Options::wheelToMouseCommand (MouseWheelCommand com, +- int delta) +-{ +- switch (com) { +- case MouseWheelRaiseLower: +- return delta > 0 ? MouseRaise : MouseLower; +- case MouseWheelShadeUnshade: +- return delta > 0 ? MouseSetShade : MouseUnsetShade; +- case MouseWheelMaximizeRestore: +- return delta > 0 ? MouseMaximize : MouseRestore; +- case MouseWheelAboveBelow: +- return delta > 0 ? MouseAbove : MouseBelow; +- case MouseWheelPreviousNextDesktop: +- return delta > 0 ? MousePreviousDesktop : MouseNextDesktop; +- case MouseWheelChangeOpacity: +- return delta > 0 ? MouseOpacityMore : MouseOpacityLess; +- default: +- return MouseNothing; +- } +-} +diff -uprN compiz-0.8.8-orig/kde/window-decorator-kde4/options.h compiz-0.8.8/kde/window-decorator-kde4/options.h +--- compiz-0.8.8-orig/kde/window-decorator-kde4/options.h 2010-05-21 13:17:43.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator-kde4/options.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,140 +0,0 @@ +-/* +- * Copyright © 2008 Dennis Kasprzyk +- * Copyright © 2006 Novell, Inc. +- * Copyright © 2006 Volker Krause +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: David Reveman +- */ +- +-#ifndef _OPTIONS_H +-#define _OPTIONS_H +- +-#include +- +-class KConfig; +- +-namespace KWD +-{ +- +-class Options : public KDecorationOptions +- { +- public: +- enum MouseCommand +- { +- MouseRaise, +- MouseLower, +- MouseOperationsMenu, +- MouseToggleRaiseAndLower, +- MouseActivateAndRaise, +- MouseActivateAndLower, +- MouseActivate, +- MouseActivateRaiseAndPassClick, +- MouseActivateAndPassClick, +- MouseMove, +- MouseUnrestrictedMove, +- MouseActivateRaiseAndMove, +- MouseActivateRaiseAndUnrestrictedMove, +- MouseResize, +- MouseUnrestrictedResize, +- MouseShade, +- MouseSetShade, +- MouseUnsetShade, +- MouseMaximize, +- MouseRestore, +- MouseMinimize, +- MouseNextDesktop, +- MousePreviousDesktop, +- MouseAbove, +- MouseBelow, +- MouseOpacityMore, +- MouseOpacityLess, +- MouseNothing +- }; +- enum MouseWheelCommand +- { +- MouseWheelRaiseLower, +- MouseWheelShadeUnshade, +- MouseWheelMaximizeRestore, +- MouseWheelAboveBelow, +- MouseWheelPreviousNextDesktop, +- MouseWheelChangeOpacity, +- MouseWheelNothing +- }; +- +- Options (KConfig *config); +- +- virtual unsigned long updateSettings (void); +- +- WindowOperation operationTitlebarDblClick (void) +- { +- return OpTitlebarDblClick; +- } +- +- MouseCommand commandActiveTitlebar1 (void) +- { +- return CmdActiveTitlebar1; +- } +- MouseCommand commandActiveTitlebar2 (void) +- { +- return CmdActiveTitlebar2; +- } +- MouseCommand commandActiveTitlebar3 (void) +- { +- return CmdActiveTitlebar3; +- } +- MouseCommand commandInactiveTitlebar1 (void) +- { +- return CmdInactiveTitlebar1; +- } +- MouseCommand commandInactiveTitlebar2 (void) +- { +- return CmdInactiveTitlebar2; +- } +- MouseCommand commandInactiveTitlebar3 (void) +- { +- return CmdInactiveTitlebar3; +- } +- +- MouseCommand operationTitlebarMouseWheel (int delta) +- { +- return wheelToMouseCommand (CmdTitlebarWheel, delta); +- } +- +- private: +- static KDecorationDefines::WindowOperation +- windowOperation (const QString &name, bool restricted); +- MouseCommand mouseCommand (const QString &name, bool restricted); +- MouseWheelCommand mouseWheelCommand (const QString &name); +- MouseCommand wheelToMouseCommand (MouseWheelCommand com, int delta); +- +- private: +- KDecorationDefines::WindowOperation OpTitlebarDblClick; +- MouseCommand CmdActiveTitlebar1; +- MouseCommand CmdActiveTitlebar2; +- MouseCommand CmdActiveTitlebar3; +- MouseCommand CmdInactiveTitlebar1; +- MouseCommand CmdInactiveTitlebar2; +- MouseCommand CmdInactiveTitlebar3; +- MouseWheelCommand CmdTitlebarWheel; +- +- KConfig *mConfig; +- }; +- +-} +- +-#endif +diff -uprN compiz-0.8.8-orig/kde/window-decorator-kde4/org.kde.KWin.xml compiz-0.8.8/kde/window-decorator-kde4/org.kde.KWin.xml +--- compiz-0.8.8-orig/kde/window-decorator-kde4/org.kde.KWin.xml 2010-05-21 13:17:43.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator-kde4/org.kde.KWin.xml 1970-01-01 01:00:00.000000000 +0100 +@@ -1,10 +0,0 @@ +- +- +- +- +- +- +- +- +- +diff -uprN compiz-0.8.8-orig/kde/window-decorator-kde4/paintredirector.cpp compiz-0.8.8/kde/window-decorator-kde4/paintredirector.cpp +--- compiz-0.8.8-orig/kde/window-decorator-kde4/paintredirector.cpp 2010-05-21 13:17:43.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator-kde4/paintredirector.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,124 +0,0 @@ +-/***************************************************************** +-This file is part of the KDE project. +- +-Copyright (C) 2009 Lubos Lunak +- +-Permission is hereby granted, free of charge, to any person obtaining a +-copy of this software and associated documentation files (the "Software"), +-to deal in the Software without restriction, including without limitation +-the rights to use, copy, modify, merge, publish, distribute, sublicense, +-and/or sell copies of the Software, and to permit persons to whom the +-Software is furnished to do so, subject to the following conditions: +- +-The above copyright notice and this permission notice shall be included in +-all copies or substantial portions of the Software. +- +-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +-THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +-DEALINGS IN THE SOFTWARE. +-******************************************************************/ +- +-#include "paintredirector.h" +- +-#include +-#include +-#include +- +-namespace KWin +-{ +- +-PaintRedirector::PaintRedirector( QWidget* w ) +- : widget( w ) +- , recursionCheck( false ) +- { +- timer.setSingleShot( true ); +- connect( &timer, SIGNAL( timeout()), SIGNAL( paintPending())); +- added( w ); +- } +- +-QPixmap PaintRedirector::performPendingPaint() +- { +- //qDebug() << "### performing paint, pending:" << pending.boundingRect(); +- QPixmap pixmap( pending.boundingRect().size()); +- pixmap.fill( Qt::transparent ); +- recursionCheck = true; +- // do not use DrawWindowBackground, it's ok to be transparent +- widget->render( &pixmap, QPoint(), pending.boundingRect(), QWidget::DrawChildren ); +- recursionCheck = false; +- pending = QRegion(); +- return pixmap; +- } +- +-bool PaintRedirector::isToolTip( QWidget *object ) const +- { +- // ### We need a more reliable way of doing this +- return object->windowFlags() & Qt::ToolTip; +- } +- +-bool PaintRedirector::eventFilter( QObject* o, QEvent* e ) +- { +- switch( e->type()) +- { +- case QEvent::ChildAdded: +- { +- QChildEvent* c = static_cast< QChildEvent* >( e ); +- if( c->child()->isWidgetType() && !isToolTip( static_cast< QWidget* >( c->child() ) ) ) +- added( static_cast< QWidget* >( c->child())); +- break; +- } +- case QEvent::ChildRemoved: +- { +- QChildEvent* c = static_cast< QChildEvent* >( e ); +- if( c->child()->isWidgetType()) +- removed( static_cast< QWidget* >( c->child())); +- break; +- } +- case QEvent::Paint: +- { +- if( !recursionCheck ) +- { +- QPaintEvent* pe = static_cast< QPaintEvent* >( e ); +- QWidget* w = static_cast< QWidget* >( o ); +- pending |= pe->region().translated( w->mapTo( widget, QPoint( 0, 0 ))); +- timer.start( 0 ); +- return true; // filter out +- } +- } +- default: +- break; +- } +- return false; +- } +- +-QRegion PaintRedirector::pendingRegion() const +- { +- return pending; +- } +- +-void PaintRedirector::added( QWidget* w ) +- { +- w->installEventFilter( this ); +- foreach( QObject* o, w->children()) +- { +- if( o->isWidgetType() && !isToolTip( static_cast< QWidget* >( o ) ) ) +- added( static_cast< QWidget* >( o )); +- } +- } +- +-void PaintRedirector::removed( QWidget* w ) +- { +- foreach( QObject* o, w->children()) +- { +- if( o->isWidgetType()) +- removed( static_cast< QWidget* >( o )); +- } +- w->installEventFilter( this ); +- } +- +-} // namespace +- +-//#include "paintredirector.moc" +diff -uprN compiz-0.8.8-orig/kde/window-decorator-kde4/paintredirector.h compiz-0.8.8/kde/window-decorator-kde4/paintredirector.h +--- compiz-0.8.8-orig/kde/window-decorator-kde4/paintredirector.h 2010-05-21 13:17:43.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator-kde4/paintredirector.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,60 +0,0 @@ +-/***************************************************************** +-This file is part of the KDE project. +- +-Copyright (C) 2009 Lubos Lunak +- +-Permission is hereby granted, free of charge, to any person obtaining a +-copy of this software and associated documentation files (the "Software"), +-to deal in the Software without restriction, including without limitation +-the rights to use, copy, modify, merge, publish, distribute, sublicense, +-and/or sell copies of the Software, and to permit persons to whom the +-Software is furnished to do so, subject to the following conditions: +- +-The above copyright notice and this permission notice shall be included in +-all copies or substantial portions of the Software. +- +-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +-THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +-DEALINGS IN THE SOFTWARE. +-******************************************************************/ +- +-#ifndef PAINTREDIRECTOR_H +-#define PAINTREDIRECTOR_H +- +-#include +-#include +-#include +- +-namespace KWin +-{ +- +-// This class redirects all painting of a given widget (including its children) +-// into a paint device (QPixmap). +-class PaintRedirector +- : public QObject +- { +- Q_OBJECT +- public: +- PaintRedirector( QWidget* widget ); +- QPixmap performPendingPaint(); +- virtual bool eventFilter( QObject* o, QEvent* e ); +- QRegion pendingRegion() const; +- signals: +- void paintPending(); +- private: +- void added( QWidget* widget ); +- void removed( QWidget* widget ); +- bool isToolTip( QWidget* widget ) const; +- QWidget* widget; +- QRegion pending; +- bool recursionCheck; +- QTimer timer; +- }; +- +-} // namespace +- +-#endif +diff -uprN compiz-0.8.8-orig/kde/window-decorator-kde4/switcher.cpp compiz-0.8.8/kde/window-decorator-kde4/switcher.cpp +--- compiz-0.8.8-orig/kde/window-decorator-kde4/switcher.cpp 2010-11-23 10:55:14.000000000 +0100 ++++ compiz-0.8.8/kde/window-decorator-kde4/switcher.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,308 +0,0 @@ +-/* +- * Copyright © 2008 Dennis Kasprzyk +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: Dennis Kasprzyk +- */ +- +-#include "switcher.h" +-#include "utils.h" +-#include "decorator.h" +- +-#include +-#include +-#include +-#include +- +-#include +- +-#include +-#include +- +-#include +- +-#include +-#include +- +-KWD::Switcher::Switcher (WId parentId, WId id): +- mId (id), +- mX11Pixmap (0), +- mX11BackgroundPixmap (0) +-{ +- QPalette palette; +- long prop[4]; +- QColor color; +- color = Plasma::Theme::defaultTheme ()->color (Plasma::Theme::TextColor); +- +- mBackground = new Plasma::FrameSvg(); +- mBackground->setImagePath ("dialogs/background"); +- mBackground->setEnabledBorders(Plasma::FrameSvg::AllBorders); +- +- mBorder.left = mBackground->marginSize(Plasma::LeftMargin); +- mBorder.right = mBackground->marginSize(Plasma::RightMargin); +- mBorder.top = mBackground->marginSize(Plasma::TopMargin); +- mBorder.bottom = mBackground->marginSize(Plasma::BottomMargin) + +- Plasma::Theme::defaultTheme ()->fontMetrics ().height () + 10; +- +- mContext.extents.left = mBorder.left; +- mContext.extents.right = mBorder.right; +- mContext.extents.top = mBorder.top; +- mContext.extents.bottom = mBorder.bottom; +- +- mContext.left_space = mBorder.left; +- mContext.right_space = mBorder.right; +- mContext.top_space = mBorder.top; +- mContext.bottom_space = mBorder.bottom; +- +- mContext.left_corner_space = 0; +- mContext.right_corner_space = 0; +- mContext.top_corner_space = 0; +- mContext.bottom_corner_space = 0; +- +- updateGeometry (); +- +- prop[0] = (color.red () * 256) + color.red (); +- prop[1] = (color.green () * 256) + color.green (); +- prop[2] = (color.blue () * 256) + color.blue (); +- prop[3] = (color.alpha () * 256) + color.alpha (); +- +- KWD::trapXError (); +- XChangeProperty (QX11Info::display (), id, Atoms::switchFgColor, XA_INTEGER, +- 32, PropModeReplace, (unsigned char *) prop, 4); +- KWD::popXError (); +-} +- +-KWD::Switcher::~Switcher () +-{ +- if (mX11Pixmap) +- XFreePixmap (QX11Info::display (), mX11Pixmap); +- if (mX11BackgroundPixmap) +- XFreePixmap (QX11Info::display (), mX11BackgroundPixmap); +- delete mBackground; +-} +- +-void +-KWD::Switcher::updateGeometry () +-{ +- int x, y; +- unsigned int width, height, border, depth; +- XID root; +- +- XGetGeometry (QX11Info::display (), mId, &root, &x, &y, &width, &height, +- &border, &depth); +- +- mGeometry = QRect (x, y, width, height); +- +- KWD::readWindowProperty (mId, Atoms::switchSelectWindow, +- (long *)&mSelected); +- +- if (mX11Pixmap) +- XFreePixmap (QX11Info::display (), mX11Pixmap); +- if (mX11BackgroundPixmap) +- XFreePixmap (QX11Info::display (), mX11BackgroundPixmap); +- +- mX11Pixmap = XCreatePixmap (QX11Info::display (), +- QX11Info::appRootWindow (), +- width + mBorder.left + mBorder.right, +- height + mBorder.top + mBorder.bottom, 32); +- +- mX11BackgroundPixmap = XCreatePixmap (QX11Info::display (), +- QX11Info::appRootWindow (), +- width, height, 32); +- +- mPixmap = QPixmap::fromX11Pixmap (mX11Pixmap, QPixmap::ExplicitlyShared); +- mBackgroundPixmap = QPixmap::fromX11Pixmap (mX11BackgroundPixmap, +- QPixmap::ExplicitlyShared); +- +- redrawPixmap (); +- update (); +- +- decor_get_default_layout (&mContext, +- mGeometry.width (), +- mGeometry.height (), +- &mDecorLayout); +- +- updateWindowProperties (); +-} +- +-void +-KWD::Switcher::redrawPixmap () +-{ +- QPainter p (&mPixmap); +- QPainter bp (&mBackgroundPixmap); +- +- const int contentWidth = mPixmap.width (); +- const int contentHeight = mPixmap.height (); +- +- mPixmap.fill (Qt::transparent); +- +- p.setCompositionMode (QPainter::CompositionMode_Source); +- p.setRenderHint (QPainter::SmoothPixmapTransform); +- +- mBackground->resizeFrame (QSizeF (contentWidth, contentHeight)); +- mBackground->paintFrame (&p, QRect (0, 0, contentWidth, contentHeight)); +- +- bp.setCompositionMode (QPainter::CompositionMode_Source); +- bp.drawPixmap (0, 0, mPixmap, mBorder.left, mBorder.top, +- mGeometry.width (), mGeometry.height ()); +- +- XSetWindowBackgroundPixmap (QX11Info::display (), mId, +- mX11BackgroundPixmap); +- +- XClearWindow (QX11Info::display (), mId); +-} +- +-void +-KWD::Switcher::update () +-{ +- QFontMetrics fm = Plasma::Theme::defaultTheme ()->fontMetrics (); +- QFont font (Plasma::Theme::defaultTheme ()-> +- font (Plasma::Theme::DefaultFont)); +- QString name; +- QPainter p (&mPixmap); +- +- KWD::readWindowProperty (mId, Atoms::switchSelectWindow, +- (long *)&mSelected); +- +- name = KWindowSystem::windowInfo +- (mSelected, NET::WMVisibleName, 0).visibleName (); +- +- while (fm.width (name) > mGeometry.width ()) +- { +- name.truncate (name.length () - 6); +- name += "..."; +- } +- +- p.setCompositionMode (QPainter::CompositionMode_Source); +- +- mBackground->paintFrame (&p, QRect (mBorder.left, +- mBorder.top + +- mGeometry.height () + 5, +- mGeometry.width (), +- fm.height ())); +- +- p.setFont (font); +- p.setPen (Plasma::Theme::defaultTheme ()->color(Plasma::Theme::TextColor)); +- +- p.drawText ((mPixmap.width () - fm.width (name)) / 2, +- mBorder.top + mGeometry.height () + 5 + fm.ascent (), name); +-} +- +-void +-KWD::Switcher::updateWindowProperties () +-{ +- long data[256]; +- decor_quad_t quads[N_QUADS_MAX]; +- int nQuad; +- int lh, rh; +- int w; +- +- lh = mDecorLayout.left.y2 - mDecorLayout.left.y1; +- rh = mDecorLayout.right.y2 - mDecorLayout.right.y1; +- +- w = mDecorLayout.top.x2 - mDecorLayout.top.x1 - mContext.left_space - +- mContext.right_space; +- +- nQuad = decor_set_lXrXtXbX_window_quads (quads, &mContext, &mDecorLayout, +- lh / 2, rh / 2, w, w / 2); +- decor_quads_to_property (data, mX11Pixmap, +- &mBorder, &mBorder, +- 0, 0, +- quads, nQuad); +- +- KWD::trapXError (); +- XChangeProperty (QX11Info::display(), mId, Atoms::netWindowDecor, +- XA_INTEGER, 32, PropModeReplace, (unsigned char *) data, +- BASE_PROP_SIZE + QUAD_PROP_SIZE * nQuad); +- KWD::popXError (); +- +- updateBlurProperty (lh / 2, rh / 2, w / 2, w / 2); +-} +- +-void +-KWD::Switcher::updateBlurProperty (int topOffset, +- int bottomOffset, +- int leftOffset, +- int rightOffset) +-{ +- Atom atom = Atoms::compizWindowBlurDecor; +- QRegion topQRegion, bottomQRegion, leftQRegion, rightQRegion; +- Region topRegion = NULL; +- Region bottomRegion = NULL; +- Region leftRegion = NULL; +- Region rightRegion = NULL; +- int size = 0; +- int w, h; +- +- w = mGeometry.width () + mContext.extents.left + mContext.extents.right; +- h = mGeometry.height () + mContext.extents.top + mContext.extents.bottom; +- +- if (blurType != BLUR_TYPE_NONE) +- { +- QRegion r; +- +- topQRegion = QRegion (-mContext.extents.left, -mContext.extents.top, +- w, mContext.extents.top); +- topRegion = topQRegion.handle (); +- +- bottomQRegion = QRegion (-mContext.extents.left, 0, +- w, mContext.extents.bottom); +- bottomRegion = bottomQRegion.handle (); +- +- leftQRegion = QRegion (-mContext.extents.left, 0, +- mContext.extents.left, mGeometry.height ()); +- leftRegion = leftQRegion.handle (); +- +- rightQRegion = QRegion (0, 0, mContext.extents.right, +- mGeometry.height ()); +- rightRegion = rightQRegion.handle (); +- } +- +- if (topRegion) +- size += topRegion->numRects; +- if (bottomRegion) +- size += bottomRegion->numRects; +- if (leftRegion) +- size += leftRegion->numRects; +- if (rightRegion) +- size += rightRegion->numRects; +- +- if (size) +- { +- long data[size * 6 + 2]; +- +- decor_region_to_blur_property (data, 4, 0, +- mGeometry.width (), +- mGeometry.height (), +- topRegion, topOffset, +- bottomRegion, bottomOffset, +- leftRegion, leftOffset, +- rightRegion, rightOffset); +- +- KWD::trapXError (); +- XChangeProperty (QX11Info::display (), mId, atom, XA_INTEGER, +- 32, PropModeReplace, (unsigned char *) data, +- 2 + size * 6); +- KWD::popXError (); +- } +- else +- { +- KWD::trapXError (); +- XDeleteProperty (QX11Info::display (), mId, atom); +- KWD::popXError (); +- } +-} +diff -uprN compiz-0.8.8-orig/kde/window-decorator-kde4/switcher.h compiz-0.8.8/kde/window-decorator-kde4/switcher.h +--- compiz-0.8.8-orig/kde/window-decorator-kde4/switcher.h 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator-kde4/switcher.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,86 +0,0 @@ +-/* +- * Copyright © 2008 Dennis Kasprzyk +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: Dennis Kasprzyk +- */ +- +-#ifndef _SWITCHER_H +-#define _SWITCHER_H +- +-#include +-#include +-#include +-#include +-#include +- +-namespace Plasma +-{ +-class FrameSvg; +-} +- +-class QSpacerItem; +-class QLabel; +-class QVBoxLayout; +- +-namespace KWD +-{ +- +-class Switcher +-{ +- +- public: +- Switcher (WId parentId, WId id); +- ~Switcher (); +- +- void update (); +- void updateGeometry (); +- +- WId xid () const +- { +- return mId; +- } +- +- private: +- void updateWindowProperties (); +- void updateBlurProperty (int topOffset, +- int bottomOffset, +- int leftOffset, +- int rightOffset); +- void redrawPixmap (); +- +- private: +- +- WId mId; +- WId mSelected; +- +- QRect mGeometry; +- +- Plasma::FrameSvg *mBackground; +- QPixmap mPixmap; +- Pixmap mX11Pixmap; +- QPixmap mBackgroundPixmap; +- Pixmap mX11BackgroundPixmap; +- +- decor_layout_t mDecorLayout; +- decor_context_t mContext; +- decor_extents_t mBorder; +-}; +- +-} +- +-#endif +diff -uprN compiz-0.8.8-orig/kde/window-decorator-kde4/utils.cpp compiz-0.8.8/kde/window-decorator-kde4/utils.cpp +--- compiz-0.8.8-orig/kde/window-decorator-kde4/utils.cpp 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator-kde4/utils.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,209 +0,0 @@ +-/* +- * Copyright © 2008 Dennis Kasprzyk +- * Copyright © 2006 Novell, Inc. +- * Copyright © 2006 Volker Krause +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: David Reveman +- */ +- +-#include "utils.h" +- +-#include +-#include +-#include +- +-#include +-#include +- +-static int trappedErrorCode = 0; +- +-namespace KWD +-{ +- namespace Atoms +- { +- Atom switchSelectWindow; +- Atom switchFgColor; +- Atom netWmWindowOpacity; +- Atom netFrameWindow; +- Atom netWindowDecor; +- Atom netWindowDecorNormal; +- Atom netWindowDecorActive; +- Atom netWindowDecorBare; +- Atom wmTakeFocus; +- Atom netWmContextHelp; +- Atom wmProtocols; +- Atom toolkitActionAtom; +- Atom toolkitActionWindowMenuAtom; +- Atom toolkitActionForceQuitDialogAtom; +- Atom compizWindowBlurDecor; +- Atom enlightmentDesktop; +- } +-} +- +-static int (*oldErrorHandler) (Display *display, XErrorEvent *error); +- +-static int +-xErrorHandler (Display *display, +- XErrorEvent *error) +-{ +- (void) display; +- +- trappedErrorCode = error->error_code; +- +- return 0; +-} +- +-void +-KWD::trapXError (void) +-{ +- trappedErrorCode = 0; +- oldErrorHandler = XSetErrorHandler (xErrorHandler); +-} +- +-int +-KWD::popXError (void) +-{ +- XSync (QX11Info::display(), false); +- XSetErrorHandler (oldErrorHandler); +- +- return trappedErrorCode; +-} +- +-void * +-KWD::readXProperty (WId window, +- Atom property, +- Atom type, +- int *items) +-{ +- long offset = 0, length = 2048L; +- Atom actualType; +- int format; +- unsigned long nItems, bytesRemaining; +- unsigned char *data = 0l; +- int result; +- +- KWD::trapXError (); +- result = XGetWindowProperty (QX11Info::display(), window, property, offset, +- length, false, type, +- &actualType, &format, &nItems, +- &bytesRemaining, &data); +- +- if (KWD::popXError ()) +- return NULL; +- +- if (result == Success && actualType == type && format == 32 && nItems > 0) +- { +- if (items) +- *items = nItems; +- +- return reinterpret_cast (data); +- } +- +- if (data) +- XFree (data); +- +- if (items) +- *items = 0; +- +- return NULL; +-} +- +-bool +-KWD::readWindowProperty (long window, +- long property, +- long *value) +-{ +- void *data = readXProperty (window, property, XA_WINDOW, NULL); +- +- if (data) +- { +- if (value) +- *value = *reinterpret_cast (data); +- +- XFree (data); +- +- return true; +- } +- +- return false; +-} +- +-unsigned short +-KWD::readPropertyShort (WId id, +- Atom property, +- unsigned short defaultValue) +-{ +- Atom actual; +- int result, format; +- unsigned long n, left; +- unsigned char *data; +- +- KWD::trapXError (); +- result = XGetWindowProperty (QX11Info::display(), id, property, +- 0L, 1L, FALSE, XA_CARDINAL, &actual, &format, +- &n, &left, &data); +- if (KWD::popXError ()) +- return defaultValue; +- +- if (result == Success && n && data) +- { +- unsigned int value; +- +- memcpy (&value, data, sizeof (unsigned int)); +- +- XFree (data); +- +- return value >> 16; +- } +- +- return defaultValue; +-} +- +-void +-KWD::Atoms::init (void) +-{ +- Display *xdisplay = QX11Info::display(); +- +- netFrameWindow = XInternAtom (xdisplay, "_NET_FRAME_WINDOW", false); +- netWindowDecor = XInternAtom (xdisplay, DECOR_WINDOW_ATOM_NAME, false); +- netWindowDecorNormal = +- XInternAtom (xdisplay, DECOR_NORMAL_ATOM_NAME, false); +- netWindowDecorActive = +- XInternAtom (xdisplay, DECOR_ACTIVE_ATOM_NAME, false); +- netWindowDecorBare = +- XInternAtom (xdisplay, DECOR_BARE_ATOM_NAME, false); +- switchSelectWindow = +- XInternAtom (xdisplay, DECOR_SWITCH_WINDOW_ATOM_NAME, false); +- switchFgColor = +- XInternAtom (xdisplay, DECOR_SWITCH_FOREGROUND_COLOR_ATOM_NAME, false); +- wmTakeFocus = XInternAtom (xdisplay, "WM_TAKE_FOCUS", false); +- netWmContextHelp = +- XInternAtom (xdisplay, "_NET_WM_CONTEXT_HELP", false); +- wmProtocols = XInternAtom (xdisplay, "WM_PROTOCOLS", false); +- netWmWindowOpacity = +- XInternAtom (xdisplay, "_NET_WM_WINDOW_OPACITY", false); +- toolkitActionAtom = XInternAtom (xdisplay, "_COMPIZ_TOOLKIT_ACTION", false); +- toolkitActionWindowMenuAtom = +- XInternAtom (xdisplay, "_COMPIZ_TOOLKIT_ACTION_WINDOW_MENU", false); +- toolkitActionForceQuitDialogAtom = +- XInternAtom (xdisplay, "_COMPIZ_TOOLKIT_ACTION_FORCE_QUIT_DIALOG", +- false); +- compizWindowBlurDecor = +- XInternAtom (xdisplay, DECOR_BLUR_ATOM_NAME, false); +- enlightmentDesktop = XInternAtom (xdisplay, "ENLIGHTENMENT_DESKTOP", false); +-} +diff -uprN compiz-0.8.8-orig/kde/window-decorator-kde4/utils.h compiz-0.8.8/kde/window-decorator-kde4/utils.h +--- compiz-0.8.8-orig/kde/window-decorator-kde4/utils.h 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator-kde4/utils.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,71 +0,0 @@ +-/* +- * Copyright © 2008 Dennis Kasprzyk +- * Copyright © 2006 Novell, Inc. +- * Copyright © 2006 Volker Krause +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: David Reveman +- */ +- +-#ifndef _UTILS_H +-#define _UTILS_H +- +-#include +-#include +-#include +- +-#include +- +-#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0)) +- #define QT_45 +-#endif +- +-namespace KWD +-{ +- namespace Atoms +- { +- extern Atom switchSelectWindow; +- extern Atom switchFgColor; +- extern Atom netWmWindowOpacity; +- extern Atom netFrameWindow; +- extern Atom netWindowDecor; +- extern Atom netWindowDecorNormal; +- extern Atom netWindowDecorActive; +- extern Atom netWindowDecorBare; +- extern Atom wmTakeFocus; +- extern Atom netWmContextHelp; +- extern Atom wmProtocols; +- extern Atom toolkitActionAtom; +- extern Atom toolkitActionWindowMenuAtom; +- extern Atom toolkitActionForceQuitDialogAtom; +- extern Atom compizWindowBlurDecor; +- extern Atom enlightmentDesktop; +- +- void init (void); +- } +- +- void trapXError (void); +- int popXError (void); +- bool eventFilter (void *message, long *result); +- void *readXProperty (WId window, Atom property, Atom type, int *items); +- bool readWindowProperty (long wId, long property, long *value); +- unsigned short readPropertyShort (WId id, +- Atom property, +- unsigned short defaultValue); +-} +- +-#endif +diff -uprN compiz-0.8.8-orig/kde/window-decorator-kde4/window.cpp compiz-0.8.8/kde/window-decorator-kde4/window.cpp +--- compiz-0.8.8-orig/kde/window-decorator-kde4/window.cpp 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator-kde4/window.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,1884 +0,0 @@ +-/* +- * Copyright © 2009 Dennis Kasprzyk +- * Copyright © 2006 Novell, Inc. +- * Copyright © 2006 Volker Krause +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: David Reveman +- */ +- +-#include "window.h" +-#include "decorator.h" +-#include "options.h" +-#include "utils.h" +- +-#include +-#include +-#include +-#include +- +-#include +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include "paintredirector.h" +- +-KWD::Window::Window (WId parentId, +- WId clientId, +- WId frame, +- Type type, +- int x, +- int y, +- int w, +- int h) : +- mType (type), +- mParentId (parentId), +- mFrame (0), +- mClientId (clientId), +- mSelectedId (0), +- mDecor (0), +- mPixmap (0), +- mUpdateProperty (false), +- mShapeSet (false), +- mPopup (0), +- mAdvancedMenu (0), +- mOpacityMenu (0), +- mDesktopMenu (0), +- mProcessKiller (this), +- mKeys (this), +- mResizeOpAction (0), +- mMoveOpAction (0), +- mMaximizeOpAction (0), +- mShadeOpAction (0), +- mKeepAboveOpAction (0), +- mKeepBelowOpAction (0), +- mFullScreenOpAction (0), +- mMinimizeOpAction (0), +- mCloseOpAction (0), +- mDesktopOpAction (0), +- mPaintRedirector (0) +-{ +- memset (&mBorder, 0, sizeof (mBorder)); +- +- if (mType == Normal) +- { +- KWindowInfo wInfo = KWindowSystem::windowInfo (mClientId, NET::WMState | +- NET::WMVisibleName, 0); +- +- mState = wInfo.state (); +- +- if (mType == Normal) +- { +- mName = wInfo.visibleName (); +- +- mIcon = KWindowSystem::icon (mClientId, 32, 32, true, +- KWindowSystem::NETWM | +- KWindowSystem::WMHints ); +- +- mMiniIcon = KWindowSystem::icon (mClientId, 16, 16, true, +- KWindowSystem::NETWM | +- KWindowSystem::WMHints ); +- +- if (mIcon.isNull ()) +- { +- mIcon = KWindowSystem::icon (mClientId, 32, 32, true, +- KWindowSystem::ClassHint | +- KWindowSystem::XApp ); +- mMiniIcon = KWindowSystem::icon (mClientId, 16, 16, true, +- KWindowSystem::ClassHint | +- KWindowSystem::XApp ); +- } +- +- mOpacity = readPropertyShort (mClientId, Atoms::netWmWindowOpacity, +- 0xffff); +- } +- else +- { +- mIcon = QPixmap (); +- mMiniIcon = QPixmap (); +- mName = QString (""); +- } +- +- updateFrame (frame); +- +- mGeometry = QRect (x, y, w, h); +- +- getWindowProtocols (); +- } +- else +- { +- mIcon = QPixmap (); +- mMiniIcon = QPixmap (); +- mName = QString (""); +- mGeometry = QRect (50, 50, 30, 1); +- } +- +- createDecoration (); +- +- mActiveChild = NULL; +-} +- +-KWD::Window::~Window (void) +-{ +- if (mPixmap) +- XFreePixmap (QX11Info::display(), mPixmap); +- +- if (mDecor) +- delete mDecor; +- +- if (mPopup) +- delete mPopup; +- +- if (mPaintRedirector) +- delete mPaintRedirector; +- +- if (mProcessKiller.state () == QProcess::Running) +- { +- mProcessKiller.terminate (); +- mProcessKiller.waitForFinished (10000); +- if (mProcessKiller.state () == QProcess::Running) +- { +- mProcessKiller.kill (); +- mProcessKiller.waitForFinished (5000); +- } +- } +-} +- +-bool +-KWD::Window::isActive (void) const +-{ +- if (mType == DefaultActive) +- return true; +- +- return Decorator::activeId () == mClientId; +-} +- +-bool +-KWD::Window::isCloseable (void) const +-{ +- KWindowInfo wInfo; +- +- if (mType != Normal) +- return false; +- +- wInfo = KWindowSystem::windowInfo (mClientId, NET::WMPid, +- NET::WM2AllowedActions); +- return wInfo.actionSupported (NET::ActionClose); +-} +- +-bool +-KWD::Window::isMaximizable (void) const +-{ +- KWindowInfo wInfo; +- +- if (mType != Normal) +- return false; +- +- wInfo = KWindowSystem::windowInfo (mClientId, NET::WMPid, +- NET::WM2AllowedActions); +- return wInfo.actionSupported (NET::ActionMax); +-} +- +-KDecoration::MaximizeMode +-KWD::Window::maximizeMode (void) const +-{ +- MaximizeMode mode = MaximizeRestore; +- +- if (mType != Normal) +- return mode; +- +- mode = +- ((mState & NET::MaxVert) ? MaximizeVertical : MaximizeRestore) | +- ((mState & NET::MaxHoriz) ? MaximizeHorizontal : MaximizeRestore); +- +- return mode; +-} +- +-bool +-KWD::Window::isMinimizable (void) const +-{ +- KWindowInfo wInfo; +- +- if (mType != Normal) +- return false; +- +- wInfo = KWindowSystem::windowInfo (mClientId, NET::WMPid, +- NET::WM2AllowedActions); +- return wInfo.actionSupported (NET::ActionMinimize); +-} +- +-bool +-KWD::Window::providesContextHelp (void) const +-{ +- if (mType != Normal) +- return false; +- +- return mSupportContextHelp; +-} +- +-int +-KWD::Window::desktop (void) const +-{ +- KWindowInfo wInfo = KWindowSystem::windowInfo (mClientId, +- NET::WMDesktop, 0); +- +- return wInfo.desktop (); +-} +- +-bool +-KWD::Window::isModal (void) const +-{ +- return mState & NET::Modal; +-} +- +-bool +-KWD::Window::isShadeable (void) const +-{ +- KWindowInfo wInfo = KWindowSystem::windowInfo (mClientId, NET::WMPid, +- NET::WM2AllowedActions); +- +- return wInfo.actionSupported (NET::ActionShade); +-} +- +-bool +-KWD::Window::isShade (void) const +-{ +- if (mType != Normal) +- return false; +- +- return (mState & NET::Shaded); +-} +- +-bool +-KWD::Window::isSetShade (void) const +-{ +- return isShade (); +-} +- +-bool +-KWD::Window::keepAbove (void) const +-{ +- if (mType != Normal) +- return false; +- +- return (mState & NET::KeepAbove); +-} +- +-bool +-KWD::Window::keepBelow (void) const +-{ +- if (mType != Normal) +- return false; +- +- return (mState & NET::KeepBelow); +-} +- +-bool +-KWD::Window::isMovable (void) const +-{ +- KWindowInfo wInfo = KWindowSystem::windowInfo (mClientId, NET::WMPid, +- NET::WM2AllowedActions); +- +- return wInfo.actionSupported (NET::ActionMove); +-} +- +-NET::WindowType +-KWD::Window::windowType (unsigned long mask) const +-{ +- KWindowInfo wInfo = KWindowSystem::windowInfo (mClientId, +- NET::WMWindowType, 0); +- +- return wInfo.windowType (mask); +-} +- +-bool +-KWD::Window::isResizable (void) const +-{ +- KWindowInfo wInfo = KWindowSystem::windowInfo (mClientId, NET::WMPid, +- NET::WM2AllowedActions); +- +- return wInfo.actionSupported (NET::ActionResize); +-} +- +-QIcon +-KWD::Window::icon (void) const +-{ +- QIcon icon (mIcon); +- icon.addPixmap (mMiniIcon); +- return icon; +-} +- +-QString +-KWD::Window::caption (void) const +-{ +- return mName; +-} +- +-/* TODO: We should use libtaskmanager, which is part of kdebase to create +- the window menu instead but the headers for that library are currently +- not installed. If kdebase could install those headers, we wouldn't have +- to have our own window menu implementaion here. */ +-void +-KWD::Window::showWindowMenu (const QPoint &pos) +-{ +- if (!mPopup) +- { +- QAction *action; +- const int levels[] = { 100, 90, 75, 50, 25, 10 }; +- +- mPopup = new QMenu (); +- mPopup->setFont (KGlobalSettings::menuFont ()); +- +- connect (mPopup, SIGNAL (aboutToShow ()), +- SLOT (handlePopupAboutToShow ())); +- connect (mPopup, SIGNAL (triggered (QAction*)), +- SLOT (handlePopupActivated (QAction*))); +- +- mAdvancedMenu = new QMenu (mPopup); +- mAdvancedMenu->setFont (KGlobalSettings::menuFont ()); +- +- mKeepAboveOpAction = mAdvancedMenu->addAction (i18n ("Keep &Above Others")); +- mKeepAboveOpAction->setIcon (KIcon ("go-up")); +- KAction *kaction = qobject_cast +- (mKeys.action ("Window Above Other Windows")); +- if (kaction != 0) +- mKeepAboveOpAction->setShortcut (kaction->globalShortcut ().primary ()); +- mKeepAboveOpAction->setCheckable (true); +- mKeepAboveOpAction->setData (KDecorationDefines::KeepAboveOp); +- +- mKeepBelowOpAction = mAdvancedMenu->addAction (i18n ("Keep &Below Others")); +- mKeepBelowOpAction->setIcon (KIcon ("go-down")); +- kaction = qobject_cast +- (mKeys.action ("Window Below Other Windows")); +- if (kaction != 0) +- mKeepBelowOpAction->setShortcut (kaction->globalShortcut ().primary ()); +- mKeepBelowOpAction->setCheckable (true); +- mKeepBelowOpAction->setData (KDecorationDefines::KeepBelowOp); +- +- mFullScreenOpAction = mAdvancedMenu->addAction (i18n ("&Fullscreen")); +- mFullScreenOpAction->setIcon (KIcon ("view-fullscreen")); +- kaction = qobject_cast (mKeys.action ("Window Fullscreen")); +- if (kaction != 0) +- mFullScreenOpAction->setShortcut (kaction->globalShortcut ().primary ()); +- mFullScreenOpAction->setCheckable (true); +- mFullScreenOpAction->setData (KDecorationDefines::FullScreenOp); +- +- action = mPopup->addMenu (mAdvancedMenu); +- action->setText (i18n ("Ad&vanced")); +- +- mOpacityMenu = new QMenu (mPopup); +- mOpacityMenu->setFont (KGlobalSettings::menuFont ()); +- +- connect (mOpacityMenu, SIGNAL (triggered (QAction*)), +- SLOT (handleOpacityPopupActivated (QAction*))); +- +- +- for( unsigned int i = 0; i < sizeof (levels) / sizeof (levels[0]); ++i) +- { +- action = mOpacityMenu->addAction +- (QString::number (levels[i]) + "%"); +- action->setCheckable (true); +- action->setData (levels[i]); +- } +- action = mPopup->addMenu (mOpacityMenu); +- action->setText (i18n ("&Opacity")); +- +- +- mDesktopMenu = new QMenu (mPopup); +- mDesktopMenu->setFont (KGlobalSettings::menuFont ()); +- +- connect (mDesktopMenu, SIGNAL (triggered (QAction*)), +- SLOT (handleDesktopPopupActivated (QAction*))); +- +- mDesktopOpAction = mPopup->addMenu (mDesktopMenu); +- mDesktopOpAction->setText (i18n ("To &Desktop")); +- +- mMoveOpAction = mPopup->addAction (i18n ("&Move")); +- mMoveOpAction->setIcon (KIcon ("move")); +- kaction = qobject_cast (mKeys.action ("Window Move")); +- if (kaction != 0) +- mMoveOpAction->setShortcut (kaction->globalShortcut ().primary ()); +- mMoveOpAction->setData (KDecorationDefines::MoveOp); +- +- mResizeOpAction = mPopup->addAction (i18n ("Re&size")); +- kaction = qobject_cast (mKeys.action("Window Resize")); +- if (kaction != 0) +- mResizeOpAction->setShortcut (kaction->globalShortcut ().primary ()); +- mResizeOpAction->setData (KDecorationDefines::ResizeOp); +- +- mMinimizeOpAction = mPopup->addAction (i18n ("Mi&nimize")); +- kaction = qobject_cast (mKeys.action ("Window Minimize")); +- if (kaction != 0) +- mMinimizeOpAction->setShortcut (kaction->globalShortcut ().primary ()); +- mMinimizeOpAction->setData (KDecorationDefines::MinimizeOp); +- +- mMaximizeOpAction = mPopup->addAction (i18n ("Ma&ximize")); +- kaction = qobject_cast (mKeys.action ("Window Maximize")); +- if (kaction != 0) +- mMaximizeOpAction->setShortcut (kaction->globalShortcut ().primary ()); +- mMaximizeOpAction->setCheckable (true); +- mMaximizeOpAction->setData (KDecorationDefines::MaximizeOp); +- +- mShadeOpAction = mPopup->addAction (i18n ("Sh&ade")); +- kaction = qobject_cast (mKeys.action ("Window Shade")); +- if (kaction != 0) +- mShadeOpAction->setShortcut (kaction->globalShortcut ().primary ()); +- mShadeOpAction->setCheckable (true); +- mShadeOpAction->setData (KDecorationDefines::ShadeOp); +- +- mPopup->addSeparator (); +- +- mCloseOpAction = mPopup->addAction (i18n("&Close")); +- mCloseOpAction->setIcon (KIcon ("window-close" )); +- kaction = qobject_cast (mKeys.action("Window Close")); +- if (kaction != 0) +- mCloseOpAction->setShortcut (kaction->globalShortcut ().primary ()); +- mCloseOpAction->setData (KDecorationDefines::CloseOp); +- } +- +- QPoint pnt = mDecor->widget ()->mapFromGlobal (pos); +- +- pnt += QPoint (mGeometry.x () - mBorder.left - mPadding.left, +- mGeometry.y () - mBorder.top - mPadding.top); +- +- mPopup->exec (pnt); +-} +- +-void +-KWD::Window::showWindowMenu (const QRect &pos) +-{ +- showWindowMenu (pos.bottomLeft ()); +-} +- +-KWD::Options::MouseCommand +-KWD::Window::buttonToCommand (Qt::MouseButtons button) +-{ +- Options::MouseCommand com = Options::MouseNothing; +- bool active = isActive (); +- +- if (!mSupportTakeFocus) +- active = true; +- +- switch (button) { +- case Qt::LeftButton: +- com = active ? Decorator::options ()->commandActiveTitlebar1 () : +- Decorator::options()->commandInactiveTitlebar1 (); +- break; +- case Qt::MidButton: +- com = active ? Decorator::options ()->commandActiveTitlebar2 () : +- Decorator::options()->commandInactiveTitlebar2 (); +- break; +- case Qt::RightButton: +- com = active ? Decorator::options ()->commandActiveTitlebar3 () : +- Decorator::options()->commandInactiveTitlebar3 (); +- default: +- break; +- } +- +- return com; +-} +- +-void +-KWD::Window::processMousePressEvent (QMouseEvent *qme) +-{ +- Options::MouseCommand com = buttonToCommand (qme->button ()); +- +- if (qme->button () == Qt::LeftButton) +- { +- // actions where it's not possible to get the matching release event +- if (com != Options::MouseOperationsMenu && +- com != Options::MouseMinimize) +- { +- moveWindow (qme); +- return; +- } +- } +- +- performMouseCommand (com, qme); +-} +- +-void +-KWD::Window::performWindowOperation (WindowOperation wo) +-{ +- switch (wo) { +- case KDecoration::MaximizeOp: +- maximize (maximizeMode () == KDecoration::MaximizeFull ? +- KDecoration::MaximizeRestore : KDecoration::MaximizeFull); +- break; +- case KDecoration::HMaximizeOp: +- maximize (maximizeMode () ^ KDecoration::MaximizeHorizontal); +- break; +- case KDecoration::VMaximizeOp: +- maximize (maximizeMode () ^ KDecoration::MaximizeVertical); +- break; +- case KDecoration::MinimizeOp: +- minimize (); +- break; +- case KDecoration::ShadeOp: +- setShade (!isShade ()); +- break; +- case KDecoration::CloseOp: +- closeWindow (); +- break; +- case KDecoration::KeepAboveOp: +- setKeepAbove (!keepAbove ()); +- break; +- case KDecoration::KeepBelowOp: +- setKeepBelow (!keepBelow ()); +- break; +- case KDecoration::FullScreenOp: +- if (mState & NET::FullScreen) +- KWindowSystem::clearState (mClientId, NET::FullScreen); +- else +- KWindowSystem::setState (mClientId, NET::FullScreen); +- break; +- case KDecoration::MoveOp: +- Decorator::rootInfo ()->moveResizeRequest (mClientId, +- mGeometry.x () + +- mGeometry.width () / 2, +- mGeometry.y () + +- mGeometry.height () / 2, +- NET::KeyboardMove); +- break; +- case KDecoration::ResizeOp: +- Decorator::rootInfo ()->moveResizeRequest (mClientId, +- mGeometry.x () + +- mGeometry.width () / 2, +- mGeometry.y () + +- mGeometry.height () / 2, +- NET::KeyboardSize); +- default: +- break; +- } +-} +- +-bool +-KWD::Window::isPreview (void) const +-{ +- return false; +-} +- +-QRect +-KWD::Window::geometry (void) const +-{ +- QRect rect = mGeometry; +- +- return QRect (rect.x () - ROOT_OFF_X, +- rect.y () - ROOT_OFF_Y, +- rect.width (), +- rect.height ()); +-} +- +-QRect +-KWD::Window::iconGeometry (void) const +-{ +- return QRect (); +-} +- +-QRect +-KWD::Window::clientGeometry (void) +-{ +- return mGeometry; +- +- QRect frame = geometry (); +- +- return QRect (frame.x () + mBorder.left, +- frame.y () + mBorder.top, +- frame.width () - mBorder.left - mBorder.right, +- frame.height () - mBorder.top - mBorder.bottom); +-} +- +-QRegion +-KWD::Window::unobscuredRegion (const QRegion & r) const +-{ +- return r; +-} +- +-WId +-KWD::Window::windowId (void) const +-{ +- return mClientId; +-} +- +-void +-KWD::Window::closeWindow (void) +-{ +- Decorator::rootInfo ()->closeWindowRequest (mClientId); +-} +- +-void +-KWD::Window::maximize (MaximizeMode mode) +-{ +- KWindowSystem::setState (mClientId, +- ((mode & MaximizeVertical) ? NET::MaxVert : 0) | +- ((mode & MaximizeHorizontal) ? NET::MaxHoriz : 0)); +- KWindowSystem::clearState (mClientId, +- ((mode & MaximizeVertical) ? 0 : NET::MaxVert) | +- ((mode & MaximizeHorizontal) ? 0 : NET::MaxHoriz)); +-} +- +-void +-KWD::Window::minimize (void) +-{ +- KWindowSystem::minimizeWindow (mClientId, false); +-} +- +-void +-KWD::Window::showContextHelp (void) +-{ +- if (mSupportContextHelp) +- KWD::Decorator::sendClientMessage (mClientId, mClientId, +- Atoms::wmProtocols, +- Atoms::netWmContextHelp); +-} +- +-void +-KWD::Window::titlebarDblClickOperation (void) +-{ +- WindowOperation op; +- +- op = KWD::Decorator::options ()->operationTitlebarDblClick (); +- performWindowOperation (op); +-} +- +-void +-KWD::Window::setDesktop (int desktop) +-{ +- KWindowSystem::setOnDesktop (mClientId, desktop); +-} +- +-void +-KWD::Window::setKeepBelow (bool set) +-{ +- if (set) +- { +- KWindowSystem::clearState (mClientId, NET::KeepAbove); +- KWindowSystem::setState (mClientId, NET::KeepBelow); +- } +- else +- { +- KWindowSystem::clearState (mClientId, NET::KeepBelow); +- } +-} +- +-void +-KWD::Window::setKeepAbove (bool set) +-{ +- if (set) +- { +- KWindowSystem::clearState (mClientId, NET::KeepBelow); +- KWindowSystem::setState (mClientId, NET::KeepAbove); +- } +- else +- { +- KWindowSystem::clearState (mClientId, NET::KeepAbove); +- } +-} +- +-void +-KWD::Window::setShade (bool set) +-{ +- if (set) +- KWindowSystem::setState (mClientId, NET::Shaded); +- else +- KWindowSystem::clearState (mClientId, NET::Shaded); +- +- mDecor->shadeChange (); +-} +- +-void +-KWD::Window::titlebarMouseWheelOperation (int delta) +-{ +- Options::MouseCommand com; +- +- com = Decorator::options()->operationTitlebarMouseWheel (delta); +- performMouseCommand (com, 0); +-} +- +-int +-KWD::Window::currentDesktop (void) const +-{ +- return KWindowSystem::currentDesktop (); +-} +- +-QWidget * +-KWD::Window::initialParentWidget (void) const +-{ +- return 0; +-} +- +-Qt::WFlags +-KWD::Window::initialWFlags (void) const +-{ +- return 0; +-} +- +-void +-KWD::Window::grabXServer (bool) +-{ +-} +- +-bool +-KWD::Window::compositingActive (void) const +-{ +- return true; +-} +- +-#if KDE_IS_VERSION(4,3,90) +- +-QRect +-KWD::Window::transparentRect () const +-{ +- return QRect (); +-} +- +-bool +-KWD::Window::isClientGroupActive () +-{ +- return false; +-} +- +-QList +-KWD::Window::clientGroupItems () const +-{ +- QList items; +- +- QIcon icon (mIcon); +- icon.addPixmap (mMiniIcon); +- +- items.append (ClientGroupItem (mName, icon)); +- +- return items; +-} +- +-long +-KWD::Window::itemId (int index) +-{ +- return (long) mClientId; +-} +- +-int +-KWD::Window::visibleClientGroupItem () +-{ +- return 0; +-} +- +-void +-KWD::Window::setVisibleClientGroupItem (int index) +-{ +-} +- +-void +-KWD::Window::moveItemInClientGroup (int index, int before) +-{ +-} +- +-void +-KWD::Window::moveItemToClientGroup (long itemId, int before) +-{ +-} +- +-void +-KWD::Window::removeFromClientGroup (int index, const QRect& newGeom) +-{ +-} +- +-void +-KWD::Window::closeClientGroupItem (int index) +-{ +- closeWindow (); +-} +- +-void +-KWD::Window::closeAllInClientGroup () +-{ +- closeWindow (); +-} +- +-void +-KWD::Window::displayClientMenu (int index, const QPoint& pos) +-{ +- showWindowMenu (pos); +-} +- +-KDecorationDefines::WindowOperation +-KWD::Window::buttonToWindowOperation(Qt::MouseButtons button) +-{ +- Options::MouseCommand com = buttonToCommand (button); +- +- if (com == Options::MouseOperationsMenu) +- return KDecorationDefines::OperationsOp; +- +- return KDecorationDefines::NoOp; +-} +- +-#endif +- +-void +-KWD::Window::createDecoration (void) +-{ +- KDecoration *decor; +- +- if (mDecor) +- return; +- +- decor = Decorator::pluginManager ()->createDecoration (this); +- decor->init (); +- +- mDecor = decor; +- +- mDecor->widget ()->installEventFilter (this); +- +- mPaintRedirector = new KWin::PaintRedirector (mDecor->widget ()); +- connect (mPaintRedirector, SIGNAL (paintPending()), +- this, SLOT (decorRepaintPending ())); +- +- mPadding.top = mPadding.bottom = mPadding.left = mPadding.right = 0; +- +- if (KDecorationUnstable *deco2 = dynamic_cast(decor)) +- deco2->padding (mPadding.left, mPadding.right, mPadding.top, mPadding.bottom); +- +- XReparentWindow (QX11Info::display(), mDecor->widget ()->winId (), mParentId, 0, 0); +- +- //decor->widget()->move(-mPadding.left, -mPadding.top); +- +- if (mType == Normal && mFrame) +- { +- KWD::trapXError (); +- XSelectInput (QX11Info::display(), mFrame, +- StructureNotifyMask | PropertyChangeMask | +- ButtonPressMask | ButtonReleaseMask | PointerMotionMask | +- EnterWindowMask | LeaveWindowMask); +- if (KWD::popXError ()) +- return; +- } +- +- resizeDecoration (true); +-} +- +-void +-KWD::Window::setMask (const QRegion ®ion, int) +-{ +- if (region.isEmpty ()) +- { +- mShapeSet = false; +- return; +- } +- +- if (mShapeSet && region == mShape) +- return; +- +- mShape = region; +- mShapeSet = true; +- +- if (mFrame) +- { +- QRegion r = region.translated (-mPadding.left, -mPadding.top); +- +- r -= QRegion (mBorder.left, mBorder.top, +- mGeometry.width (), mGeometry.height ()); +- +- KWD::trapXError (); +- XShapeCombineRegion (QX11Info::display(), +- mFrame, +- ShapeInput, +- 0, +- 0, +- r.handle (), +- ShapeSet); +- KWD::popXError (); +- } +-} +- +-void +-KWD::Window::resizeDecoration (bool force) +-{ +- int w, h; +- +- mDecor->borders (mBorder.left, mBorder.right, mBorder.top, mBorder.bottom); +- +- mExtents.left = mBorder.left + mPadding.left; +- mExtents.right = mBorder.right + mPadding.right; +- mExtents.top = mBorder.top + mPadding.top; +- mExtents.bottom = mBorder.bottom + mPadding.bottom; +- +- if (mType != Normal) +- { +- mGeometry = QRect (50, 50, 100, 100); +- } +- +- w = mGeometry.width () + mExtents.left + mExtents.right; +- h = mGeometry.height () + mExtents.top + mExtents.bottom; +- +- if (!force) +- { +- if (w == decorWidget ()->width () && h == decorWidget ()->height ()) +- return; +- } +- +- /* reset shape */ +- mShapeSet = false; +- +- if (mPixmap) +- { +- XFreePixmap (QX11Info::display(), mPixmap); +- mPixmap = None; +- } +- +- mDecor->resize (QSize (w, h)); +- mDecor->widget ()->show (); +- mDecor->widget ()->update (); +- +- mPixmap = XCreatePixmap (QX11Info::display(), +- QX11Info::appRootWindow (), +- qMax (w, mGeometry.height ()), +- mExtents.top + mExtents.bottom + +- mExtents.left + mExtents.right, 32); +- +- mPixmapQt = QPixmap::fromX11Pixmap (mPixmap, QPixmap::ExplicitlyShared); +- +- mPixmapQt.fill (Qt::transparent); +- +- mUpdateProperty = true; +-} +- +-void +-KWD::Window::updateBlurProperty (int topOffset, +- int bottomOffset, +- int leftOffset, +- int rightOffset) +-{ +- Atom atom = Atoms::compizWindowBlurDecor; +- QRegion topQRegion, bottomQRegion, leftQRegion, rightQRegion; +- Region topRegion = NULL; +- Region bottomRegion = NULL; +- Region leftRegion = NULL; +- Region rightRegion = NULL; +- int size = 0; +- int w, h; +- +- w = mGeometry.width () + mBorder.left + mBorder.right; +- h = mGeometry.height () + mBorder.top + mBorder.bottom; +- +- if (blurType != BLUR_TYPE_NONE) +- { +- QRegion r, shape = QRegion (0, 0, w, h); +- +- if (mShapeSet) +- shape = mShape.translated (-mPadding.left, -mPadding.top); +- +- r = QRegion (0, 0, w, mBorder.top); +- topQRegion = r.intersect (shape); +- if (!topQRegion.isEmpty ()) +- { +- topQRegion.translate (-mBorder.left, +- -mBorder.top); +- topRegion = topQRegion.handle (); +- } +- +- if (blurType == BLUR_TYPE_ALL) +- { +- r = QRegion (0, h - mBorder.bottom, +- w, mBorder.bottom); +- bottomQRegion = r.intersect (shape); +- if (!bottomQRegion.isEmpty ()) +- { +- bottomQRegion.translate (-mBorder.left, +- -(h - mBorder.bottom)); +- bottomRegion = bottomQRegion.handle (); +- } +- +- r = QRegion (0, mBorder.top, +- mBorder.left, mGeometry.height ()); +- leftQRegion = r.intersect (shape); +- if (!leftQRegion.isEmpty ()) +- { +- leftQRegion.translate (-mBorder.left, +- -mBorder.top); +- leftRegion = leftQRegion.handle (); +- } +- +- r = QRegion (w - mBorder.right, mBorder.top, +- mBorder.right, mGeometry.height ()); +- rightQRegion = r.intersect (shape); +- if (!rightQRegion.isEmpty ()) +- { +- rightQRegion.translate (-(w - mBorder.right), +- -mBorder.top); +- rightRegion = rightQRegion.handle (); +- } +- } +- } +- +- if (topRegion) +- size += topRegion->numRects; +- if (bottomRegion) +- size += bottomRegion->numRects; +- if (leftRegion) +- size += leftRegion->numRects; +- if (rightRegion) +- size += rightRegion->numRects; +- +- if (size) +- { +- long data[size * 6 + 2]; +- +- decor_region_to_blur_property (data, 4, 0, +- mGeometry.width (), +- mGeometry.height (), +- topRegion, topOffset, +- bottomRegion, bottomOffset, +- leftRegion, leftOffset, +- rightRegion, rightOffset); +- +- KWD::trapXError (); +- XChangeProperty (QX11Info::display(), mClientId, atom, +- XA_INTEGER, +- 32, PropModeReplace, (unsigned char *) data, +- 2 + size * 6); +- KWD::popXError (); +- } +- else +- { +- KWD::trapXError (); +- XDeleteProperty (QX11Info::display(), mClientId, atom); +- KWD::popXError (); +- } +-} +- +-void +-KWD::Window::updateProperty (void) +-{ +- Atom atom = Atoms::netWindowDecor; +- decor_extents_t maxExtents; +- long data[256]; +- decor_quad_t quads[N_QUADS_MAX]; +- int nQuad = 0; +- int left, right, top, bottom, width, height; +- unsigned int saveState; +- +- if (mType == Default) +- atom = Atoms::netWindowDecorNormal; +- else if (mType == DefaultActive) +- atom = Atoms::netWindowDecorActive; +- +- saveState = mState; +- mState = NET::MaxVert | NET::MaxHoriz; +- mDecor->borders (maxExtents.left, maxExtents.right, +- maxExtents.top, maxExtents.bottom); +- mState = saveState; +- mDecor->borders (mBorder.left, mBorder.right, mBorder.top, mBorder.bottom); +- +- left = mExtents.left; +- right = mExtents.right; +- top = mExtents.top; +- bottom = mExtents.bottom; +- width = mGeometry.width (); +- height = mGeometry.height (); +- +- if (mType == Normal) +- { +- decor_quad_t *q = quads; +- int n = 0; +- +- int topXOffset = width; +- QWidget *widget = mDecor->widget (); +- int x; +- +- if (widget) +- { +- const QList children = widget->children (); +- +- foreach (QObject *obj, children) +- { +- QWidget *child; +- +- if (!obj->isWidgetType ()) +- continue; +- +- child = static_cast (obj); +- +- x = child->x () - mExtents.left - 2; +- if (x > width / 2 && x < topXOffset) +- topXOffset = x; +- } +- } +- +- // top quads +- n = decor_set_horz_quad_line (q, left, topXOffset, right, +- width - topXOffset - 1, -top, 0, GRAVITY_NORTH, +- left + right + width, -(width - topXOffset - 1), +- GRAVITY_EAST, 0, 0); +- +- q += n; nQuad += n; +- +- // bottom quads +- n = decor_set_horz_quad_line (q, left, width / 2, right, (width / 2) - 1, 0, +- bottom, GRAVITY_SOUTH, left + right + width, +- -((width / 2) - 1), GRAVITY_EAST, 0, top); +- +- q += n; nQuad += n; +- +- // left quads +- n = decor_set_vert_quad_row (q, 0, height / 2, 0, (height / 2) - 1, -left, 0, +- GRAVITY_WEST, height, -((height / 2) - 1), +- GRAVITY_SOUTH, 0, top + bottom, 1); +- +- q += n; nQuad += n; +- +- // right quads +- n = decor_set_vert_quad_row (q, 0, height / 2, 0, (height / 2) - 1, 0, right, +- GRAVITY_EAST, height, -((height / 2) - 1), +- GRAVITY_SOUTH, 0, top + bottom + left, 1); +- +- q += n; nQuad += n; +- +- updateBlurProperty (topXOffset, width / 2, height / 2, height / 2); +- } +- else +- { +- decor_quad_t *q = quads; +- int n = 0; +- +- // top +- n = decor_set_horz_quad_line (q, left, 0, right, 0, -top, 0, +- GRAVITY_NORTH, left + right + width, +- width / 2, 0, 0, 0); +- +- q += n; nQuad += n; +- +- // bottom +- n = decor_set_horz_quad_line (q, left, 0, right, 0, 0, bottom, +- GRAVITY_SOUTH, left + right + width, +- width / 2, 0, 0, top); +- +- q += n; nQuad += n; +- +- // left +- n = decor_set_vert_quad_row (q, 0, 0, 0, 0, -left, 0, GRAVITY_WEST, +- height, height / 2, 0, 0, top + bottom, 1); +- +- q += n; nQuad += n; +- +- // right +- n = decor_set_vert_quad_row (q, 0, 0, 0, 0, 0, right, GRAVITY_EAST, +- height, height / 2, 0, 0, top + bottom + left, 1); +- +- q += n; nQuad += n; +- } +- +- decor_quads_to_property (data, mPixmap, +- &mBorder, &maxExtents, +- 1, 0, +- quads, nQuad); +- +- KWD::trapXError (); +- XChangeProperty (QX11Info::display(), mClientId, atom, +- XA_INTEGER, +- 32, PropModeReplace, (unsigned char *) data, +- BASE_PROP_SIZE + QUAD_PROP_SIZE * nQuad); +- KWD::popXError (); +- +- mUpdateProperty = false; +-} +- +-void +-KWD::Window::handleActiveChange (void) +-{ +- mDecor->activeChange (); +- resizeDecoration (); +-} +- +-void +-KWD::Window::updateFrame (WId frame) +-{ +- mFrame = frame; +- +- KWD::trapXError (); +- XSelectInput (QX11Info::display(), mFrame, +- StructureNotifyMask | PropertyChangeMask | +- ButtonPressMask | ButtonReleaseMask | PointerMotionMask | +- EnterWindowMask | LeaveWindowMask); +- KWD::popXError (); +-} +- +-void +-KWD::Window::updateSelected (WId selectedId) +-{ +- mSelectedId = selectedId; +- +- updateName (); +-} +- +-void +-KWD::Window::updateWindowGeometry (void) +-{ +- KWD::trapXError (); +- KWindowInfo wInfo = KWindowSystem::windowInfo (mClientId, NET::WMGeometry); +- KWD::popXError (); +- +- if (!wInfo.valid ()) +- return; +- +- QRect geometry = wInfo.geometry (); +- int w, h; +- +- w = mGeometry.width () + mBorder.left + mBorder.right; +- h = mGeometry.height () + mBorder.top + mBorder.bottom; +- +- if (mGeometry.width () != geometry.width () || +- mGeometry.height () != geometry.height ()) +- { +- mGeometry = geometry; +- resizeDecoration (); +- } +- else if (mGeometry.x () != geometry.x () || +- mGeometry.y () != geometry.y ()) +- { +- mGeometry = geometry; +- } +-} +- +-void +-KWD::Window::reloadDecoration (void) +-{ +- delete mDecor; +- mDecor = 0; +- +- delete mPaintRedirector; +- mPaintRedirector = 0; +- +- mShapeSet = false; +- +- createDecoration (); +-} +- +-Cursor +-KWD::Window::positionToCursor (QPoint pos) +-{ +- switch (mDecor->mousePosition (pos + QPoint (mPadding.left, mPadding.top))) { +- case PositionCenter: +- return cursors[1][1].cursor; +- case PositionLeft: +- return cursors[1][0].cursor; +- case PositionRight: +- return cursors[1][2].cursor; +- case PositionTop: +- return cursors[0][1].cursor; +- case PositionBottom: +- return cursors[2][1].cursor; +- case PositionTopLeft: +- return cursors[0][0].cursor; +- case PositionTopRight: +- return cursors[0][2].cursor; +- case PositionBottomLeft: +- return cursors[2][0].cursor; +- case PositionBottomRight: +- return cursors[2][2].cursor; +- default: +- break; +- } +- +- return cursors[1][1].cursor; +-} +- +-void +-KWD::Window::updateCursor (QPoint pos) +-{ +- KWD::trapXError (); +- XDefineCursor (QX11Info::display(), mFrame, positionToCursor (pos)); +- KWD::popXError (); +-} +- +-void +-KWD::Window::getWindowProtocols (void) +-{ +- Atom *p; +- int n; +- int status; +- +- mSupportTakeFocus = false; +- mSupportContextHelp = false; +- +- KWD::trapXError (); +- status = XGetWMProtocols (QX11Info::display(), mClientId, &p, &n); +- if (KWD::popXError ()) +- return; +- +- if (status) +- { +- int i; +- +- for (i = 0; i < n; i++) +- { +- if (p[i] == Atoms::wmTakeFocus) +- mSupportTakeFocus = true; +- else if (p[i] == Atoms::netWmContextHelp) +- mSupportContextHelp = true; +- } +- +- if (n > 0) +- XFree (p); +- } +-} +- +-void +-KWD::Window::handlePopupActivated (QAction * action) +-{ +- WindowOperation op = static_cast (action->data().toInt()); +- +- performWindowOperation (op); +-} +- +-void +-KWD::Window::handleOpacityPopupActivated (QAction *action) +-{ +- int op = action->data().toInt(); +- +- op = op * 0xffff / 100; +- +- if (op != mOpacity) +- Decorator::sendClientMessage (QX11Info::appRootWindow(), mClientId, +- Atoms::netWmWindowOpacity, +- (op << 16) | op); +-} +- +- +-void +-KWD::Window::handleDesktopPopupActivated (QAction *action) +-{ +- +- if (action->data().toInt()) +- setDesktop (action->data().toInt()); +- else +- KWindowSystem::setOnAllDesktops (mClientId, true); +-} +- +-void +-KWD::Window::handlePopupAboutToShow (void) +-{ +- int numberOfDesktops; +- +- numberOfDesktops = KWindowSystem::numberOfDesktops (); +- if (numberOfDesktops > 1) +- { +- NETRootInfo *rootInfo = Decorator::rootInfo (); +- QString name; +- int i; +- int winDesktop = desktop (); +- QAction *action; +- const int BASE = 10; +- +- mDesktopMenu->clear (); +- +- action = mDesktopMenu->addAction (i18n ("&All Desktops")); +- action->setData (0); +- action->setCheckable (true); +- +- +- action->setChecked (winDesktop == NET::OnAllDesktops); +- mDesktopMenu->addSeparator (); +- +- for (i = 1; i <= numberOfDesktops; i++) +- { +- QString basic_name ("%1 %2"); +- if (i < BASE) +- basic_name.prepend ('&'); +- +- basic_name = basic_name.arg (i).arg ( +- QString (rootInfo->desktopName (i)).replace +- ('&', "&&")); +- +- action = mDesktopMenu->addAction (basic_name); +- action->setData (i); +- action->setCheckable (true); +- action->setChecked (winDesktop == i); +- } +- +- mDesktopOpAction->setVisible (true); +- } +- else +- { +- mDesktopOpAction->setVisible (false); +- } +- +- mResizeOpAction->setEnabled (isResizable ()); +- mMoveOpAction->setEnabled (isMovable ()); +- +- mMaximizeOpAction->setEnabled (isMaximizable ()); +- mMaximizeOpAction->setChecked (maximizeMode () == MaximizeFull); +- +- mShadeOpAction->setChecked (isShade ()); +- mShadeOpAction->setEnabled (isShadeable ()); +- +- mKeepAboveOpAction->setChecked (keepAbove ()); +- mKeepBelowOpAction->setChecked (keepBelow ()); +- mFullScreenOpAction->setChecked (mState & NET::FullScreen); +- +- mMinimizeOpAction->setEnabled (isMinimizable ()); +- mCloseOpAction->setEnabled (isCloseable ()); +- +- foreach (QAction* action, mOpacityMenu->actions ()) +- { +- if(action->data ().toInt () == +- qRound ((float)mOpacity * 100.0 / 0xffff)) +- action->setChecked( true ); +- else +- action->setChecked( false ); +- } +- +-} +- +-void +-KWD::Window::updateState (void) +-{ +- KWindowInfo wInfo = KWindowSystem::windowInfo (mClientId, NET::WMState, 0); +- +- unsigned long newState = wInfo.state (); +- unsigned long stateChange = mState ^ newState; +- +- mState = newState; +- +- if (stateChange & NET::Max) +- { +- mDecor->maximizeChange (); +- resizeDecoration (false); +- } +- +- if (stateChange & NET::KeepAbove && !(mState & NET::KeepAbove)) +- mDecor->emitKeepAboveChanged (mState & NET::KeepAbove); +- if (stateChange & NET::KeepBelow && !(mState & NET::KeepBelow)) +- mDecor->emitKeepBelowChanged (mState & NET::KeepBelow); +- if (stateChange & NET::KeepAbove && mState & NET::KeepAbove) +- mDecor->emitKeepAboveChanged (mState & NET::KeepAbove); +- if (stateChange & NET::KeepBelow && mState & NET::KeepBelow) +- mDecor->emitKeepBelowChanged (mState & NET::KeepBelow); +- if (stateChange & NET::Shaded) +- mDecor->shadeChange (); +- if (stateChange & NET::Sticky) +- mDecor->desktopChange (); +-} +- +-void +-KWD::Window::updateName (void) +-{ +- KWindowInfo wInfo; +- +- wInfo = KWindowSystem::windowInfo (mClientId, NET::WMVisibleName, 0); +- +- mName = wInfo.visibleName (); +- +- mDecor->captionChange (); +-} +- +-void +-KWD::Window::updateIcons (void) +-{ +- mIcon = KWindowSystem::icon (mClientId, 32, 32, true, +- KWindowSystem::NETWM | +- KWindowSystem::WMHints); +- +- mMiniIcon = KWindowSystem::icon (mClientId, 16, 16, true, +- KWindowSystem::NETWM | +- KWindowSystem::WMHints); +- +- if (mIcon.isNull ()) +- { +- mIcon = KWindowSystem::icon (mClientId, 32, 32, true, +- KWindowSystem::ClassHint | +- KWindowSystem::XApp ); +- mMiniIcon = KWindowSystem::icon (mClientId, 16, 16, true, +- KWindowSystem::ClassHint | +- KWindowSystem::XApp ); +- } +- +- mDecor->iconChange (); +-} +- +-NET::Direction +-KWD::Window::positionToDirection (int pos) +-{ +- switch (pos) { +- case PositionLeft: +- return NET::Left; +- case PositionRight: +- return NET::Right; +- case PositionTop: +- return NET::Top; +- case PositionBottom: +- return NET::Bottom; +- case PositionTopLeft: +- return NET::TopLeft; +- case PositionTopRight: +- return NET::TopRight; +- case PositionBottomLeft: +- return NET::BottomLeft; +- case PositionBottomRight: +- return NET::BottomRight; +- default: +- break; +- } +- +- return NET::Move; +-} +- +-void +-KWD::Window::moveWindow (QMouseEvent *qme) +-{ +- NET::Direction direction; +- +- direction = positionToDirection (mDecor->mousePosition (qme->pos ())); +- +- QPoint p (mGeometry.x () - mExtents.left, mGeometry.y () - mExtents.top); +- p += qme->pos (); +- +- XUngrabPointer (QX11Info::display(), CurrentTime); +- XUngrabKeyboard (QX11Info::display(), CurrentTime); +- +- Decorator::rootInfo ()->restackRequest (mClientId, NET::FromApplication, +- None, Above, +- QX11Info::appTime()); +- +- Decorator::rootInfo ()->moveResizeRequest (mClientId, +- p.x (), +- p.y (), +- direction); +- mFakeRelease = true; +- +-} +- +-#define OPACITY_STEP (0xffff / 10) +- +-void +-KWD::Window::performMouseCommand (Options::MouseCommand command, +- QMouseEvent *qme) +-{ +- switch (command) { +- case Options::MouseRaise: +- KWindowSystem::raiseWindow (mClientId); +- break; +- case Options::MouseLower: +- KWindowSystem::lowerWindow (mClientId); +- break; +- case Options::MouseShade : +- setShade (!isShade ()); +- break; +- case Options::MouseSetShade: +- setShade (true); +- break; +- case Options::MouseUnsetShade: +- setShade (false); +- break; +- case Options::MouseOperationsMenu: +- showWindowMenu (mDecor->widget ()->mapToGlobal (qme->pos ())); +- break; +- case Options::MouseMaximize: +- maximize (KDecoration::MaximizeFull); +- break; +- case Options::MouseRestore: +- maximize (KDecoration::MaximizeRestore); +- break; +- case Options::MouseMinimize: +- minimize (); +- break; +- case Options::MouseAbove: +- if (keepBelow ()) +- setKeepBelow (false); +- else +- setKeepAbove (true); +- break; +- case Options::MouseBelow: +- if (keepAbove ()) +- setKeepAbove (false); +- else +- setKeepBelow (true); +- break; +- case Options::MousePreviousDesktop: +- break; +- case Options::MouseNextDesktop: +- break; +- case Options::MouseOpacityMore: +- { +- int opacity = mOpacity; +- +- if (opacity < 0xffff) +- { +- opacity += OPACITY_STEP; +- if (opacity > 0xffff) +- opacity = 0xffff; +- +- Decorator::sendClientMessage (QX11Info::appRootWindow(), +- mClientId, +- Atoms::netWmWindowOpacity, +- (opacity << 16) | opacity); +- } +- } break; +- case Options::MouseOpacityLess: +- { +- int opacity = mOpacity; +- +- if (opacity > OPACITY_STEP) +- { +- opacity -= OPACITY_STEP; +- if (opacity < OPACITY_STEP) +- opacity = OPACITY_STEP; +- +- Decorator::sendClientMessage (QX11Info::appRootWindow(), +- mClientId, +- Atoms::netWmWindowOpacity, +- (opacity << 16) | opacity); +- } +- } break; +- case Options::MouseActivateRaiseAndMove: +- case Options::MouseActivateRaiseAndUnrestrictedMove: +- case Options::MouseMove: +- case Options::MouseUnrestrictedMove: +- case Options::MouseResize: +- case Options::MouseUnrestrictedResize: +- if (qme) +- moveWindow (qme); +- case Options::MouseNothing: +- default: +- break; +- } +-} +- +-void +-KWD::Window::showKillProcessDialog (Time timestamp) +-{ +- KWindowInfo kWinInfo = +- KWindowSystem::windowInfo (mClientId, 0, NET::WM2WindowClass | +- NET::WM2ClientMachine); +- NETWinInfo wInfo = NETWinInfo (QX11Info::display(), mClientId, +- QX11Info::appRootWindow(), NET::WMPid); +- QByteArray clientMachine, resourceClass; +- pid_t pid; +- char buf[257]; +- +- if (mProcessKiller.state () == QProcess::Running) +- return; +- +- clientMachine = kWinInfo.clientMachine (); +- resourceClass = kWinInfo.windowClassClass (); +- pid = wInfo.pid (); +- +- if (gethostname (buf, sizeof (buf) - 1) == 0) +- { +- if (strcmp (buf, clientMachine) == 0) +- clientMachine = "localhost"; +- } +- +- mProcessKiller.start (KStandardDirs::findExe ("kwin_killer_helper"), +- QStringList () << "--pid" << QByteArray ().setNum (pid) << +- "--hostname" << clientMachine << +- "--windowname" << mName.toUtf8 () << +- "--applicationname" << resourceClass << +- "--wid" << QByteArray ().setNum ((unsigned int) mClientId) << +- "--timestamp" << QByteArray ().setNum ((unsigned int) timestamp), +- QIODevice::NotOpen); +-} +- +-void +-KWD::Window::hideKillProcessDialog (void) +-{ +- if (mProcessKiller.state () == QProcess::Running) +- { +- mProcessKiller.terminate (); +- } +-} +- +-void +-KWD::Window::decorRepaintPending () +-{ +- if (!mPaintRedirector || !mPixmap) +- return; +- +- QRegion reg = mPaintRedirector->pendingRegion(); +- if (reg.isEmpty()) +- return; +- +- QRect bBox = reg.boundingRect(); +- +- if (mShapeSet) +- reg &= mShape; +- +- int l = mExtents.left; +- int r = mExtents.right; +- int t = mExtents.top; +- int b = mExtents.bottom; +- int w = mGeometry.width (); +- int h = mGeometry.height (); +- +- QRect top = QRect (0, 0, w + l + r, t); +- QRect bottom = QRect (0, t + h, w + l + r, b); +- QRect left = QRect (0, t, l, h); +- QRect right = QRect (l + w, t, r, h); +- +- QRegion rtop = reg & top; +- QRegion rbottom = reg & bottom; +- QRegion rleft = reg & left; +- QRegion rright = reg & right; +- +- QPixmap p = mPaintRedirector->performPendingPaint(); +- +- QPainter pt (&mPixmapQt); +- pt.setCompositionMode( QPainter::CompositionMode_Source ); +- +- QRect bb, pb; +- +- // Top +- if (!rtop.isEmpty ()) +- { +- bb = rtop.boundingRect(); +- pb = bb; +- pb.moveTo (bb.topLeft () - bBox.topLeft ()); +- pt.resetTransform (); +- pt.setClipRegion( reg ); +- pt.drawPixmap( bb.topLeft(), p, pb ); +- } +- +- // Bottom +- if (!rbottom.isEmpty ()) +- { +- bb = rbottom.boundingRect(); +- pb = bb; +- pb.moveTo (bb.topLeft () - bBox.topLeft ()); +- pt.resetTransform (); +- pt.translate(0, -h); +- pt.setClipRegion( reg ); +- pt.drawPixmap( bb.topLeft(), p, pb ); +- } +- +- // Left +- if (!rleft.isEmpty ()) +- { +- bb = rleft.boundingRect(); +- pb = bb; +- pb.moveTo (bb.topLeft () - bBox.topLeft ()); +- pt.resetTransform (); +- pt.translate(0, t + b); +- pt.rotate (90); +- pt.scale (1.0, -1.0); +- pt.translate(0, -t); +- pt.setClipRegion( reg ); +- pt.drawPixmap( bb.topLeft(), p, pb ); +- } +- +- // Right +- if (!rright.isEmpty ()) +- { +- bb = rright.boundingRect(); +- pb = bb; +- pb.moveTo (bb.topLeft () - bBox.topLeft ()); +- pt.resetTransform (); +- pt.translate(0, t + b + l); +- pt.rotate (90); +- pt.scale (1.0, -1.0); +- pt.translate(- (l + w), -t); +- pt.setClipRegion( reg ); +- pt.drawPixmap( bb.topLeft(), p, pb ); +- } +- +- +- +- if (mUpdateProperty) +- updateProperty (); +-} +- +-QWidget * +-KWD::Window::decorWidget (void) const +-{ +- if (!mDecor) +- return 0; +- return mDecor->widget (); +-} +- +-QWidget * +-KWD::Window::childAt (int x, int y) const +-{ +- if (!mDecor) +- return 0; +- +- QWidget *child = mDecor->widget ()->childAt (x + mPadding.left, y + mPadding.top); +- return (child)? child : decorWidget (); +-} +- +-QPoint +-KWD::Window::mapToChildAt (QPoint p) const +-{ +- if (!mDecor) +- return p; +- if (childAt (p.x (), p.y ()) == decorWidget ()) +- return p + QPoint (mPadding.left, mPadding.right); +- return childAt (p.x (), p.y ())->mapFrom (decorWidget (), p + QPoint (mPadding.left, mPadding.right)); +-} +- +-bool +-KWD::Window::eventFilter (QObject* o, QEvent* e) +-{ +- if (mDecor == NULL || o != mDecor->widget ()) +- return false; +- if (e->type() == QEvent::Resize) +- { +- QResizeEvent* ev = static_cast (e); +- // Filter out resize events that inform about size different than frame size. +- // This will ensure that mDecor->width() etc. and mDecor->widget()->width() will be in sync. +- // These events only seem to be delayed events from initial resizing before show() was called +- // on the decoration widget. +- if (ev->size () != (mGeometry.size () + QSize (mExtents.left + mExtents.right, +- mExtents.top + mExtents.bottom))) +- { +- int w = mGeometry.width () + mExtents.left + mExtents.right; +- int h = mGeometry.height () + mExtents.top + mExtents.bottom; +- +- mDecor->resize (QSize (w, h)); +- return true; +- } +- // HACK: Avoid decoration redraw delays. On resize Qt sets WA_WStateConfigPending +- // which delays all painting until a matching ConfigureNotify event comes. +- // But this process itself is the window manager, so it's not needed +- // to wait for that event, the geometry is known. +- // Note that if Qt in the future changes how this flag is handled and what it +- // triggers then this may potentionally break things. See mainly QETWidget::translateConfigEvent(). +- mDecor->widget()->setAttribute( Qt::WA_WState_ConfigPending, false ); +- mDecor->widget()->update(); +- return false; +- } +- return false; +-} +diff -uprN compiz-0.8.8-orig/kde/window-decorator-kde4/window.h compiz-0.8.8/kde/window-decorator-kde4/window.h +--- compiz-0.8.8-orig/kde/window-decorator-kde4/window.h 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/kde/window-decorator-kde4/window.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,276 +0,0 @@ +-/* +- * Copyright © 2008 Dennis Kasprzyk +- * Copyright © 2006 Novell, Inc. +- * Copyright © 2006 Volker Krause +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- * +- * Author: David Reveman +- */ +- +-#ifndef _WINDOW_H +-#define _WINDOW_H +- +-#include +-#include +-#include +- +-#include +-#include +-#include +- +-#include +- +-#include +- +-#include "utils.h" +-#include "options.h" +- +-class QProcess; +-class KDecoration; +-class KActionCollection; +-class QMenu; +- +-namespace KWin +-{ +- class PaintRedirector; +-} +- +-namespace KWD +-{ +-class Window: public QObject, public KDecorationBridgeUnstable { +- Q_OBJECT public: +- +- enum Type +- { +- Normal, +- Default, +- DefaultActive +- }; +- +- public: +- Window (WId parentId, WId clientId, WId frame, Type type, +- int x = 0, int y = 0, int w = 1, int h = 1); +- ~Window (void); +- +- virtual bool isActive (void) const; +- virtual bool isCloseable (void) const; +- virtual bool isMaximizable (void) const; +- virtual MaximizeMode maximizeMode (void) const; +- virtual bool isMinimizable (void) const; +- virtual bool providesContextHelp (void) const; +- virtual int desktop (void) const; +- virtual bool isModal (void) const; +- virtual bool isShadeable (void) const; +- virtual bool isShade (void) const; +- virtual bool isSetShade (void) const; +- virtual bool keepAbove (void) const; +- virtual bool keepBelow (void) const; +- virtual bool isMovable (void) const; +- virtual bool isResizable (void) const; +- virtual NET::WindowType +- windowType (unsigned long supported_types) const; +- virtual QIcon icon (void) const; +- virtual QString caption (void) const; +- virtual void processMousePressEvent (QMouseEvent *); +- virtual void showWindowMenu (const QRect &); +- virtual void showWindowMenu (const QPoint &); +- virtual void performWindowOperation (WindowOperation); +- virtual void setMask (const QRegion &, int); +- virtual bool isPreview (void) const; +- virtual QRect geometry (void) const; +- virtual QRect iconGeometry (void) const; +- virtual QRegion unobscuredRegion (const QRegion & r) const; +- virtual WId windowId (void) const; +- virtual void closeWindow (void); +- virtual void maximize (MaximizeMode mode); +- virtual void minimize (void); +- virtual void showContextHelp (void); +- virtual void setDesktop (int desktop); +- virtual void titlebarDblClickOperation (void); +- virtual void titlebarMouseWheelOperation (int delta); +- virtual void setShade (bool set); +- virtual void setKeepAbove (bool); +- virtual void setKeepBelow (bool); +- virtual int currentDesktop (void) const; +- virtual QWidget *initialParentWidget (void) const; +- virtual Qt::WFlags initialWFlags (void) const; +- virtual void grabXServer (bool grab); +- +- /* unstable API */ +- virtual bool compositingActive () const; +-#if KDE_IS_VERSION(4,3,90) +- virtual QRect transparentRect () const; +- +- virtual bool isClientGroupActive (); +- virtual QList clientGroupItems () const; +- virtual long itemId (int index); +- virtual int visibleClientGroupItem (); +- virtual void setVisibleClientGroupItem (int index); +- virtual void moveItemInClientGroup (int index, int before); +- virtual void moveItemToClientGroup (long itemId, int before); +- virtual void removeFromClientGroup (int index, const QRect& newGeom); +- virtual void closeClientGroupItem (int index); +- virtual void closeAllInClientGroup (); +- virtual void displayClientMenu (int index, const QPoint& pos); +- +- virtual WindowOperation +- buttonToWindowOperation(Qt::MouseButtons button); +-#endif +- virtual bool eventFilter (QObject* o, QEvent* e); +- +- void handleActiveChange (void); +- void updateFrame (WId frame); +- void updateWindowGeometry (void); +- void updateCursor (QPoint pos); +- void updateSelected (WId selected); +- +- WId frameId (void) const +- { +- return mFrame; +- } +- +- KDecoration *decoration (void) const +- { +- return mDecor; +- } +- +- QWidget *decorWidget (void) const; +- QWidget *childAt (int x, int y) const; +- QPoint mapToChildAt (QPoint p) const; +- +- QWidget *activeChild (void) const +- { +- return mActiveChild; +- } +- +- void setActiveChild (QWidget * child) +- { +- mActiveChild = child; +- } +- +- void moveWindow (QMouseEvent *qme); +- void reloadDecoration (void); +- void updateState (void); +- void updateName (void); +- void updateIcons (void); +- void updateOpacity (void) +- { +- mOpacity = readPropertyShort (mClientId, Atoms::netWmWindowOpacity, +- 0xffff); +- } +- Drawable pixmapId (void) const +- { +- return mPixmap; +- } +- +- bool handleMap (void); +- bool handleConfigure (QSize size); +- +- decor_extents_t *border (void) +- { +- return &mBorder; +- } +- +- QRect clientGeometry (void); +- void showKillProcessDialog (Time timestamp); +- void hideKillProcessDialog (void); +- +- void setFakeRelease (bool fakeRelease) +- { +- mFakeRelease = fakeRelease; +- } +- +- bool getFakeRelease () +- { +- return mFakeRelease; +- } +- +- +- private: +- void createDecoration (void); +- void resizeDecoration (bool force = false); +- void updateBlurProperty (int topOffset, +- int bottomOffset, +- int leftOffset, +- int rightOffset); +- void updateProperty (void); +- void getWindowProtocols (void); +- +- Options::MouseCommand buttonToCommand (Qt::MouseButtons button); +- void performMouseCommand (KWD::Options::MouseCommand command, +- QMouseEvent *qme); +- NET::Direction positionToDirection (int pos); +- Cursor positionToCursor (QPoint pos); +- +- private slots: +- void handlePopupActivated (QAction *action); +- void handleOpacityPopupActivated (QAction *action); +- void handleDesktopPopupActivated (QAction *action); +- void handlePopupAboutToShow (void); +- +- void decorRepaintPending (); +- +- private: +- Type mType; +- WId mParentId; +- WId mFrame; +- WId mClientId; +- WId mSelectedId; +- QRect mGeometry; +- QString mName; +- QPixmap mIcon; +- QPixmap mMiniIcon; +- decor_extents_t mBorder; +- decor_extents_t mPadding; +- decor_extents_t mExtents; +- unsigned short mOpacity; +- KDecoration *mDecor; +- Pixmap mPixmap; +- QPixmap mPixmapQt; +- bool mUpdateProperty; +- bool mShapeSet; +- QRegion mShape; +- QWidget *mActiveChild; +- bool mSupportTakeFocus; +- bool mSupportContextHelp; +- QMenu *mPopup; +- QMenu *mAdvancedMenu; +- QMenu *mOpacityMenu; +- QMenu *mDesktopMenu; +- unsigned long mState; +- +- QProcess mProcessKiller; +- KActionCollection mKeys; +- bool mFakeRelease; +- +- QAction *mResizeOpAction; +- QAction *mMoveOpAction; +- QAction *mMaximizeOpAction; +- QAction *mShadeOpAction; +- QAction *mKeepAboveOpAction; +- QAction *mKeepBelowOpAction; +- QAction *mFullScreenOpAction; +- QAction *mNoBorderOpAction; +- QAction *mMinimizeOpAction; +- QAction *mCloseOpAction; +- QAction *mDesktopOpAction; +- +- KWin::PaintRedirector *mPaintRedirector; +- }; +-} +- +-#endif +diff -uprN compiz-0.8.8-orig/Makefile.am compiz-0.8.8/Makefile.am +--- compiz-0.8.8-orig/Makefile.am 2013-04-19 11:25:07.306309000 +0200 ++++ compiz-0.8.8/Makefile.am 2013-04-19 11:45:47.724650591 +0200 +@@ -1,4 +1,4 @@ +-SUBDIRS = include src libdecoration plugins images gtk kde po metadata ++SUBDIRS = include src libdecoration plugins images gtk po metadata + + EXTRA_DIST = \ + COPYING \ +@@ -18,17 +18,12 @@ if USE_MATECONF + mateconfdata = compiz-mateconf.pc + endif + +-if USE_KCONFIG +-kconfigdata = compiz-kconfig.pc +-endif +- + pkgconfigdir = $(libdir)/pkgconfig + pkgconfig_DATA = \ + compiz.pc \ + compiz-cube.pc \ + compiz-scale.pc \ +- $(mateconfdata) \ +- $(kconfigdata) ++ $(mateconfdata) + + # Some custom targets to make it easier to release things. + # Use either: +diff -uprN compiz-0.8.8-orig/metadata/kcfg.xslt compiz-0.8.8/metadata/kcfg.xslt +--- compiz-0.8.8-orig/metadata/kcfg.xslt 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/metadata/kcfg.xslt 1970-01-01 01:00:00.000000000 +0100 +@@ -1,322 +0,0 @@ +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- core +- +- +- _ +- +- +- +- +- +- $(screen) +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- _ +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- #000000ff +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- Bool +- +- +- Int +- +- +- Double +- +- +- Bool +- +- +- +- +- Int +- +- +- String +- +- +- List +- +- +- String +- +- +- +- +- +- +- ( +- +- +- - +- +- +- +- +- +- match +- +- +- ) +- +- +- +- +- +- +- +- +- +- +- = +- +- , +- +- +- +- +- +- +- +- +- +- , +- +- +- +- +- +- +- +- +- +- , +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ff +- +- +- +- +- +- +- +- +- +- +- +- +- 0000 +- +- +- +- +- +- +- +- +- +- +- +- +- +- 00 +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- | +- +- +- +- +- +- +diff -uprN compiz-0.8.8-orig/metadata/kconfig.xml.in compiz-0.8.8/metadata/kconfig.xml.in +--- compiz-0.8.8-orig/metadata/kconfig.xml.in 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/metadata/kconfig.xml.in 1970-01-01 01:00:00.000000000 +0100 +@@ -1,6 +0,0 @@ +- +- +- <_short>Kconfig +- <_long>Kconfig Control Backend +- +- +diff -uprN compiz-0.8.8-orig/metadata/kconfig.xslt compiz-0.8.8/metadata/kconfig.xslt +--- compiz-0.8.8-orig/metadata/kconfig.xslt 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/metadata/kconfig.xslt 1970-01-01 01:00:00.000000000 +0100 +@@ -1,59 +0,0 @@ +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- [ +- +- +- +- +- +- +- +- +- +- ] +- +- +- = +- +- +- +- +- +- +- +- +diff -uprN compiz-0.8.8-orig/metadata/Makefile.am compiz-0.8.8/metadata/Makefile.am +--- compiz-0.8.8-orig/metadata/Makefile.am 2013-04-19 11:25:07.364310000 +0200 ++++ compiz-0.8.8/metadata/Makefile.am 2013-04-19 11:52:17.717558999 +0200 +@@ -15,7 +15,6 @@ xml_in_files = \ + matecompat.xml.in \ + ini.xml.in \ + inotify.xml.in \ +- kconfig.xml.in \ + minimize.xml.in \ + move.xml.in \ + obs.xml.in \ +@@ -57,30 +56,6 @@ schemas_stylesheets = schemas.xslt + + endif + +-if USE_KCONFIG +-kde_kcfgdir = $(DESTDIR)$(KDE_KCFG_DIR) +-kde_kcfg_files = $(patsubst %.xml.in,compiz-%.kcfg,$(xml_in_files)) +- +-kde_kcfg_stylesheets = kcfg.xslt +- +-%.kcfg: $(xml_files) +- xsltproc -o $@ $(srcdir)/kcfg.xslt $(subst compiz-,,$*).xml; +- +-kde_configdir = $(DESTDIR)$(KDE_KCONFIG_DIR) +-kde_config_files = compizrc +- +-compizrc: $(kde_kcfg_files) +- xsltproc --stringparam screen 0 $(srcdir)/kconfig.xslt \ +- $(kde_kcfg_files) > $@; +- +-kde_config_stylesheets = kconfig.xslt +- +-endif +- +-noinst_DATA = \ +- $(kde_kcfg_files) \ +- $(kde_config_files) +- + install-data-local: + if USE_MATECONF + if MATECONF_SCHEMAS_INSTALL +@@ -89,38 +64,11 @@ if MATECONF_SCHEMAS_INSTALL + fi + endif + endif +-if USE_KCONFIG +- if mkdir -p $(kde_kcfgdir) && test -w $(kde_kcfgdir); then ( \ +- $(INSTALL) -m 644 $(kde_kcfg_files) $(kde_kcfgdir) \ +- ); \ +- fi +- if mkdir -p $(kde_configdir) && test -w $(kde_configdir); then ( \ +- $(INSTALL) -m 644 $(kde_config_files) $(kde_configdir) \ +- ); \ +- fi +-endif +- +-uninstall-local: +-if USE_KCONFIG +- if test -w $(kde_kcfgdir); then ( \ +- for file in $(kde_kcfg_files); do \ +- rm -f $(kde_kcfgdir)/$$file; \ +- done \ +- ); \ +- fi +- if test -w $(kde_configdir); then ( \ +- for file in $(kde_config_files); do \ +- rm -f $(kde_configdir)/$$file; \ +- done \ +- ); \ +- fi +-endif + + xsltdir = $(stylesheetdir) + xslt_files = \ +- $(schemas_stylesheets) \ +- $(kde_kcfg_stylesheets) \ +- $(kde_config_stylesheets) ++ $(schemas_stylesheets) ++ + xslt_DATA = $(xslt_files) + + EXTRA_DIST = \ +@@ -131,6 +79,4 @@ EXTRA_DIST = \ + DISTCLEANFILES = \ + $(xml_files) \ + core.xml.in \ +- $(schema_files) \ +- $(kde_kcfg_files) \ +- $(kde_config_files) ++ $(schema_files) +diff -uprN compiz-0.8.8-orig/plugins/kconfig.cpp compiz-0.8.8/plugins/kconfig.cpp +--- compiz-0.8.8-orig/plugins/kconfig.cpp 2010-05-21 13:18:14.000000000 +0200 ++++ compiz-0.8.8/plugins/kconfig.cpp 1970-01-01 01:00:00.000000000 +0100 +@@ -1,752 +0,0 @@ +-/* +- * Copyright © 2007 Novell, Inc. +- * +- * This program is free software; you can redistribute it and/or +- * modify it under the terms of the GNU General Public License as +- * published by the Free Software Foundation; either version 2 of the +- * License, or (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, but +- * WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- * General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +- * 02111-1307, USA. +- */ +- +-#include +-#include +-#include +-#include +-#include +- +-#include +- +-#define COMPIZ_KCONFIG_RC "compizrc" +- +-static KInstance *kInstance; +- +-static CompMetadata kconfigMetadata; +- +-static int corePrivateIndex; +- +-typedef struct _KconfigCore { +- KConfig *config; +- +- CompTimeoutHandle syncHandle; +- CompTimeoutHandle reloadHandle; +- CompFileWatchHandle fileWatch; +- +- InitPluginForObjectProc initPluginForObject; +- SetOptionForPluginProc setOptionForPlugin; +-} KconfigCore; +- +-#define GET_KCONFIG_CORE(c) \ +- ((KconfigCore *) (c)->base.privates[corePrivateIndex].ptr) +- +-#define KCONFIG_CORE(c) \ +- KconfigCore *kc = GET_KCONFIG_CORE (c) +- +- +-static void +-kconfigRcChanged (const char *name, +- void *closure); +- +-static Bool +-kconfigRcSync (void *closure) +-{ +- KCONFIG_CORE (&core); +- +- kc->config->sync (); +- +- kc->syncHandle = 0; +- +- return FALSE; +-} +- +-static bool +-kconfigValueToBool (CompOptionType type, +- CompOptionValue *value) +-{ +- switch (type) { +- case CompOptionTypeBool: +- return (value->b) ? true : false; +- case CompOptionTypeBell: +- return (value->action.bell) ? true : false; +- default: +- break; +- } +- +- return false; +-} +- +-static QString +-kconfigValueToString (CompObject *object, +- CompOptionType type, +- CompOptionValue *value) +-{ +- QString str; +- +- switch (type) { +- case CompOptionTypeBool: +- str = QString::number (value->b ? TRUE : FALSE); +- break; +- case CompOptionTypeFloat: +- str = QString::number (value->f); +- break; +- case CompOptionTypeString: +- str = QString (value->s); +- break; +- case CompOptionTypeColor: { +- char *color; +- +- color = colorToString (value->c); +- if (color) +- { +- str = QString (color); +- free (color); +- } +- } break; +- case CompOptionTypeKey: { +- char *action = NULL; +- +- while (object && object->type != COMP_OBJECT_TYPE_DISPLAY) +- object = object->parent; +- +- if (object) +- action = keyActionToString (GET_CORE_DISPLAY (object), +- &value->action); +- if (action) +- { +- str = QString (action); +- free (action); +- } +- } break; +- case CompOptionTypeButton: { +- char *action = NULL; +- +- while (object && object->type != COMP_OBJECT_TYPE_DISPLAY) +- object = object->parent; +- +- if (object) +- action = buttonActionToString (GET_CORE_DISPLAY (object), +- &value->action); +- if (action) +- { +- str = QString (action); +- free (action); +- } +- } break; +- case CompOptionTypeEdge: { +- char *edge; +- +- edge = edgeMaskToString (value->action.edgeMask); +- if (edge) +- { +- str = QString (edge); +- free (edge); +- } +- } break; +- case CompOptionTypeBell: +- str = QString::number (value->action.bell ? TRUE : FALSE); +- break; +- case CompOptionTypeMatch: { +- char *match; +- +- match = matchToString (&value->match); +- if (match) +- { +- str = QString (match); +- free (match); +- } +- } +- default: +- break; +- } +- +- return str; +-} +- +-static QString +-kconfigObjectString (CompObject *object) +-{ +- QString objectName (QString (compObjectTypeName (object->type))); +- char *name; +- +- name = compObjectName (object); +- if (name) +- { +- objectName += name; +- free (name); +- } +- +- return objectName; +-} +- +-static void +-kconfigSetOption (CompObject *object, +- CompOption *o, +- const char *plugin) +-{ +- QString group (QString (plugin) + "_" + kconfigObjectString (object)); +- +- KCONFIG_CORE (&core); +- +- kc->config->setGroup (group); +- +- switch (o->type) { +- case CompOptionTypeBool: +- case CompOptionTypeBell: +- kc->config->writeEntry (o->name, +- kconfigValueToBool (o->type, &o->value)); +- break; +- case CompOptionTypeInt: +- kc->config->writeEntry (o->name, o->value.i); +- break; +- case CompOptionTypeFloat: +- kc->config->writeEntry (o->name, (double) o->value.f); +- break; +- case CompOptionTypeString: +- case CompOptionTypeColor: +- case CompOptionTypeKey: +- case CompOptionTypeButton: +- case CompOptionTypeEdge: +- case CompOptionTypeMatch: +- kc->config->writeEntry (o->name, +- kconfigValueToString (object, o->type, +- &o->value)); +- break; +- case CompOptionTypeList: { +- int i; +- +- switch (o->value.list.type) { +- case CompOptionTypeInt: { +- QValueList< int > list; +- +- for (i = 0; i < o->value.list.nValue; i++) +- list += o->value.list.value[i].i; +- +- kc->config->writeEntry (o->name, list); +- } break; +- case CompOptionTypeBool: +- case CompOptionTypeFloat: +- case CompOptionTypeString: +- case CompOptionTypeColor: +- case CompOptionTypeKey: +- case CompOptionTypeButton: +- case CompOptionTypeEdge: +- case CompOptionTypeBell: +- case CompOptionTypeMatch: { +- QStringList list; +- +- for (i = 0; i < o->value.list.nValue; i++) +- list += kconfigValueToString (object, +- o->value.list.type, +- &o->value.list.value[i]); +- +- kc->config->writeEntry (o->name, list); +- } break; +- case CompOptionTypeAction: +- case CompOptionTypeList: +- break; +- } +- } break; +- case CompOptionTypeAction: +- return; +- } +- +- if (!kc->syncHandle) +- kc->syncHandle = compAddTimeout (0, 0, kconfigRcSync, 0); +-} +- +-static Bool +-kconfigStringToValue (CompObject *object, +- QString str, +- CompOptionType type, +- CompOptionValue *value) +-{ +- switch (type) { +- case CompOptionTypeBool: +- value->b = str.toInt () ? TRUE : FALSE; +- break; +- case CompOptionTypeFloat: +- value->f = str.toFloat (); +- break; +- case CompOptionTypeString: +- value->s = strdup (str.ascii ()); +- if (!value->s) +- return FALSE; +- break; +- case CompOptionTypeColor: +- if (!stringToColor (str.ascii (), value->c)) +- return FALSE; +- break; +- case CompOptionTypeKey: +- while (object && object->type != COMP_OBJECT_TYPE_DISPLAY) +- object = object->parent; +- +- if (!object) +- return FALSE; +- +- stringToKeyAction (GET_CORE_DISPLAY (object), str.ascii (), +- &value->action); +- break; +- case CompOptionTypeButton: +- while (object && object->type != COMP_OBJECT_TYPE_DISPLAY) +- object = object->parent; +- +- if (!object) +- return FALSE; +- +- stringToButtonAction (GET_CORE_DISPLAY (object), str.ascii (), +- &value->action); +- break; +- case CompOptionTypeEdge: +- value->action.edgeMask = stringToEdgeMask (str.ascii ()); +- break; +- case CompOptionTypeBell: +- value->action.bell = str.toInt () ? TRUE : FALSE; +- break; +- case CompOptionTypeMatch: +- matchInit (&value->match); +- matchAddFromString (&value->match, str.ascii ()); +- break; +- default: +- return FALSE; +- } +- +- return TRUE; +-} +- +-static void +-kconfigBoolToValue (bool b, +- CompOptionType type, +- CompOptionValue *value) +-{ +- switch (type) { +- case CompOptionTypeBool: +- value->b = (b) ? TRUE : FALSE; +- break; +- case CompOptionTypeBell: +- value->action.bell = (b) ? TRUE : FALSE; +- default: +- break; +- } +-} +- +-static Bool +-kconfigReadOptionValue (CompObject *object, +- KConfig *config, +- CompOption *o, +- CompOptionValue *value) +-{ +- compInitOptionValue (value); +- +- switch (o->type) { +- case CompOptionTypeBool: +- case CompOptionTypeBell: +- kconfigBoolToValue (config->readBoolEntry (o->name), o->type, value); +- break; +- case CompOptionTypeInt: +- value->i = config->readNumEntry (o->name); +- break; +- case CompOptionTypeFloat: +- value->f = config->readDoubleNumEntry (o->name); +- break; +- case CompOptionTypeString: +- case CompOptionTypeColor: +- case CompOptionTypeKey: +- case CompOptionTypeButton: +- case CompOptionTypeEdge: +- case CompOptionTypeMatch: +- if (!kconfigStringToValue (object, +- config->readEntry (o->name), o->type, +- value)) +- return FALSE; +- break; +- case CompOptionTypeList: { +- int n, i; +- +- value->list.value = NULL; +- value->list.nValue = 0; +- value->list.type = o->value.list.type; +- +- switch (o->value.list.type) { +- case CompOptionTypeInt: { +- QValueList< int > list; +- +- list = config->readIntListEntry (o->name); +- +- n = list.size (); +- if (n) +- { +- value->list.value = (CompOptionValue *) +- malloc (sizeof (CompOptionValue) * n); +- if (value->list.value) +- { +- for (i = 0; i < n; i++) +- value->list.value[i].i = list[i]; +- +- value->list.nValue = n; +- } +- } +- } break; +- case CompOptionTypeBool: +- case CompOptionTypeFloat: +- case CompOptionTypeString: +- case CompOptionTypeColor: +- case CompOptionTypeKey: +- case CompOptionTypeButton: +- case CompOptionTypeEdge: +- case CompOptionTypeBell: +- case CompOptionTypeMatch: { +- QStringList list; +- +- list = config->readListEntry (o->name); +- +- n = list.size (); +- if (n) +- { +- value->list.value = (CompOptionValue *) +- malloc (sizeof (CompOptionValue) * n); +- if (value->list.value) +- { +- for (i = 0; i < n; i++) +- { +- if (!kconfigStringToValue (object, +- list[i], +- value->list.type, +- &value->list.value[i])) +- break; +- +- value->list.nValue++; +- } +- +- if (value->list.nValue != n) +- { +- compFiniOptionValue (value, o->type); +- return FALSE; +- } +- } +- } +- } break; +- case CompOptionTypeList: +- case CompOptionTypeAction: +- return FALSE; +- } +- } break; +- case CompOptionTypeAction: +- return FALSE; +- break; +- } +- +- return TRUE; +-} +- +-static void +-kconfigGetOption (CompObject *object, +- CompOption *o, +- const char *plugin) +-{ +- QString group (QString (plugin) + "_" + +- kconfigObjectString (object)); +- const QString name (o->name); +- +- KCONFIG_CORE (&core); +- +- kc->config->setGroup (group); +- +- if (kc->config->hasKey (name)) +- { +- CompOptionValue value; +- +- if (kconfigReadOptionValue (object, kc->config, o, &value)) +- { +- (*core.setOptionForPlugin) (object, plugin, o->name, &value); +- compFiniOptionValue (&value, o->type); +- } +- } +- else +- { +- kconfigSetOption (object, o, plugin); +- } +-} +- +-static CompBool +-kconfigReloadObjectTree (CompObject *object, +- void *closure); +- +-static CompBool +-kconfigReloadObjectsWithType (CompObjectType type, +- CompObject *parent, +- void *closure) +-{ +- compObjectForEach (parent, type, kconfigReloadObjectTree, closure); +- +- return TRUE; +-} +- +-static CompBool +-kconfigReloadObjectTree (CompObject *object, +- void *closure) +-{ +- CompPlugin *p = (CompPlugin *) closure; +- CompOption *option; +- int nOption; +- +- option = (*p->vTable->getObjectOptions) (p, object, &nOption); +- while (nOption--) +- kconfigGetOption (object, option++, p->vTable->name); +- +- compObjectForEachType (object, kconfigReloadObjectsWithType, closure); +- +- return TRUE; +-} +- +-static Bool +-kconfigRcReload (void *closure) +-{ +- CompPlugin *p; +- +- KCONFIG_CORE (&core); +- +- kc->config->reparseConfiguration (); +- +- for (p = getPlugins (); p; p = p->next) +- { +- if (!p->vTable->getObjectOptions) +- continue; +- +- kconfigReloadObjectTree (&core.base, (void *) p); +- } +- +- kc->reloadHandle = 0; +- +- return FALSE; +-} +- +-static void +-kconfigRcChanged (const char *name, +- void *closure) +-{ +- if (strcmp (name, COMPIZ_KCONFIG_RC) == 0) +- { +- KCONFIG_CORE (&core); +- +- if (!kc->reloadHandle) +- kc->reloadHandle = compAddTimeout (0, 0, kconfigRcReload, closure); +- } +-} +- +-static CompBool +-kconfigSetOptionForPlugin (CompObject *object, +- const char *plugin, +- const char *name, +- CompOptionValue *value) +-{ +- CompBool status; +- +- KCONFIG_CORE (&core); +- +- UNWRAP (kc, &core, setOptionForPlugin); +- status = (*core.setOptionForPlugin) (object, plugin, name, value); +- WRAP (kc, &core, setOptionForPlugin, kconfigSetOptionForPlugin); +- +- if (status && !kc->reloadHandle) +- { +- CompPlugin *p; +- +- p = findActivePlugin (plugin); +- if (p && p->vTable->getObjectOptions) +- { +- CompOption *option; +- int nOption; +- +- option = (*p->vTable->getObjectOptions) (p, object, &nOption); +- option = compFindOption (option, nOption, name, 0); +- if (option) +- kconfigSetOption (object, option, p->vTable->name); +- } +- } +- +- return status; +-} +- +-static CompBool +-kconfigInitPluginForObject (CompPlugin *p, +- CompObject *o) +-{ +- CompBool status; +- +- KCONFIG_CORE (&core); +- +- UNWRAP (kc, &core, initPluginForObject); +- status = (*core.initPluginForObject) (p, o); +- WRAP (kc, &core, initPluginForObject, kconfigInitPluginForObject); +- +- if (status && p->vTable->getObjectOptions) +- { +- CompOption *option; +- int nOption; +- +- option = (*p->vTable->getObjectOptions) (p, o, &nOption); +- while (nOption--) +- kconfigGetOption (o, option++, p->vTable->name); +- } +- +- return status; +-} +- +-static Bool +-kconfigInitCore (CompPlugin *p, +- CompCore *c) +-{ +- KconfigCore *kc; +- QString dir; +- +- if (!checkPluginABI ("core", CORE_ABIVERSION)) +- return FALSE; +- +- kc = new KconfigCore; +- if (!kc) +- return FALSE; +- +- kc->config = new KConfig (COMPIZ_KCONFIG_RC); +- if (!kc->config) +- { +- delete kc; +- return FALSE; +- } +- +- kc->reloadHandle = compAddTimeout (0, 0, kconfigRcReload, 0); +- kc->syncHandle = 0; +- kc->fileWatch = 0; +- +- dir = KGlobal::dirs ()->saveLocation ("config", QString::null, false); +- +- if (QFile::exists (dir)) +- { +- kc->fileWatch = addFileWatch (dir.ascii (), ~0, kconfigRcChanged, 0); +- } +- else +- { +- compLogMessage ("kconfig", CompLogLevelWarn, "Bad access \"%s\"", +- dir.ascii ()); +- } +- +- WRAP (kc, c, initPluginForObject, kconfigInitPluginForObject); +- WRAP (kc, c, setOptionForPlugin, kconfigSetOptionForPlugin); +- +- c->base.privates[corePrivateIndex].ptr = kc; +- +- return TRUE; +-} +- +-static void +-kconfigFiniCore (CompPlugin *p, +- CompCore *c) +-{ +- KCONFIG_CORE (c); +- +- UNWRAP (kc, c, initPluginForObject); +- UNWRAP (kc, c, setOptionForPlugin); +- +- if (kc->reloadHandle) +- compRemoveTimeout (kc->reloadHandle); +- +- if (kc->syncHandle) +- { +- compRemoveTimeout (kc->syncHandle); +- kconfigRcSync (0); +- } +- +- if (kc->fileWatch) +- removeFileWatch (kc->fileWatch); +- +- delete kc->config; +- delete kc; +-} +- +-static CompBool +-kconfigInitObject (CompPlugin *p, +- CompObject *o) +-{ +- static InitPluginObjectProc dispTab[] = { +- (InitPluginObjectProc) kconfigInitCore +- }; +- +- RETURN_DISPATCH (o, dispTab, ARRAY_SIZE (dispTab), TRUE, (p, o)); +-} +- +-static void +-kconfigFiniObject (CompPlugin *p, +- CompObject *o) +-{ +- static FiniPluginObjectProc dispTab[] = { +- (FiniPluginObjectProc) kconfigFiniCore +- }; +- +- DISPATCH (o, dispTab, ARRAY_SIZE (dispTab), (p, o)); +-} +- +-static Bool +-kconfigInit (CompPlugin *p) +-{ +- if (!compInitPluginMetadataFromInfo (&kconfigMetadata, p->vTable->name, +- 0, 0, 0, 0)) +- return FALSE; +- +- corePrivateIndex = allocateCorePrivateIndex (); +- if (corePrivateIndex < 0) +- { +- compFiniMetadata (&kconfigMetadata); +- return FALSE; +- } +- +- kInstance = new KInstance ("compiz-kconfig"); +- if (!kInstance) +- { +- freeCorePrivateIndex (corePrivateIndex); +- compFiniMetadata (&kconfigMetadata); +- return FALSE; +- } +- +- compAddMetadataFromFile (&kconfigMetadata, p->vTable->name); +- +- return TRUE; +-} +- +-static void +-kconfigFini (CompPlugin *p) +-{ +- delete kInstance; +- +- freeCorePrivateIndex (corePrivateIndex); +- compFiniMetadata (&kconfigMetadata); +-} +- +-static CompMetadata * +-kconfigGetMetadata (CompPlugin *plugin) +-{ +- return &kconfigMetadata; +-} +- +-CompPluginVTable kconfigVTable = { +- "kconfig", +- kconfigGetMetadata, +- kconfigInit, +- kconfigFini, +- kconfigInitObject, +- kconfigFiniObject, +- 0, /* GetObjectOptions */ +- 0 /* SetObjectOption */ +-}; +- +-CompPluginVTable * +-getCompPluginInfo20070830 (void) +-{ +- return &kconfigVTable; +-} +diff -uprN compiz-0.8.8-orig/plugins/Makefile.am compiz-0.8.8/plugins/Makefile.am +--- compiz-0.8.8-orig/plugins/Makefile.am 2013-04-19 11:25:07.365310000 +0200 ++++ compiz-0.8.8/plugins/Makefile.am 2013-04-19 11:57:09.395494418 +0200 +@@ -108,13 +108,6 @@ libmateconf_la_SOURCES = mateconf.c + libmateconf_module = libmateconf.la + endif + +-if USE_KCONFIG +-libkconfig_la_LDFLAGS = -module -avoid-version -no-undefined +-libkconfig_la_LIBADD = @KCONFIG_LIBS@ +-libkconfig_la_SOURCES = kconfig.cpp +-libkconfig_module = libkconfig.la +-endif +- + if DBUS_PLUGIN + libdbus_la_LDFLAGS = -module -avoid-version -no-undefined + libdbus_la_LIBADD = @DBUS_LIBS@ +@@ -141,7 +134,6 @@ INCLUDES = \ + @LIBRSVG_CFLAGS@ \ + @ANNOTATE_CFLAGS@ \ + @MATECONF_CFLAGS@ \ +- @KCONFIG_CFLAGS@ \ + @DBUS_CFLAGS@ \ + @GLIB_CFLAGS@ \ + @FUSE_CFLAGS@ \ +@@ -160,7 +152,6 @@ moduledir = $(plugindir) + module_LTLIBRARIES = \ + $(libglib_module) \ + $(libmateconf_module) \ +- $(libkconfig_module) \ + libdecoration.la \ + libwobbly.la \ + libfade.la \