diff --git a/CMakeLists.txt b/CMakeLists.txt index c324ed5efc..7b132ee91c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,12 +4,14 @@ OPTION(KWIN_BUILD_DECORATIONS "Enable building of KWin decorations." ON) OPTION(KWIN_BUILD_KCMS "Enable building of KWin configuration modules." ON) OPTION(KWIN_MOBILE_EFFECTS "Only build effects relevant for mobile devices" OFF) OPTION(KWIN_BUILD_TABBOX "Enable building of KWin Tabbox functionality" ON) +OPTION(KWIN_BUILD_SCREENEDGES "Enable building of KWin with screen edge support" ON) OPTION(KWIN_PLASMA_ACTIVE "Enable building KWin for Plasma Active." OFF) if(KWIN_PLASMA_ACTIVE) set(KWIN_BUILD_DECORATIONS OFF) set(KWIN_BUILD_KCMS OFF) set(KWIN_BUILD_TABBOX OFF) + set(KWIN_BUILD_SCREENEDGES OFF) set(KWIN_MOBILE_EFFECTS ON) set(KWIN_BUILD_WITH_OPENGLES ON) endif(KWIN_PLASMA_ACTIVE) @@ -132,7 +134,6 @@ set(kwin_KDEINIT_SRCS compositingprefs.cpp desktoplayout.cpp paintredirector.cpp - screenedge.cpp tile.cpp tiling.cpp tilinglayout.cpp @@ -178,6 +179,13 @@ if(KWIN_BUILD_TABBOX) ) endif(KWIN_BUILD_TABBOX) +if(KWIN_BUILD_SCREENEDGES) + set( + kwin_KDEINIT_SRCS ${kwin_KDEINIT_SRCS} + screenedge.cpp + ) +endif(KWIN_BUILD_SCREENEDGES) + qt4_add_dbus_adaptor( kwin_KDEINIT_SRCS org.kde.KWin.xml workspace.h KWin::Workspace ) qt4_add_dbus_interface( kwin_KDEINIT_SRCS diff --git a/config-kwin.h.cmake b/config-kwin.h.cmake index 5cb59831e1..b279ad8bc7 100644 --- a/config-kwin.h.cmake +++ b/config-kwin.h.cmake @@ -2,3 +2,4 @@ #cmakedefine HAVE_CAPTURY 1 #cmakedefine KWIN_BUILD_DECORATIONS 1 #cmakedefine KWIN_BUILD_TABBOX 1 +#cmakedefine KWIN_BUILD_SCREENEDGES 1 diff --git a/effects.cpp b/effects.cpp index e49dc11d01..0b346969e3 100644 --- a/effects.cpp +++ b/effects.cpp @@ -26,7 +26,6 @@ along with this program. If not, see . #include "group.h" #include "scene_xrender.h" #include "scene_opengl.h" -#include "screenedge.h" #include "unmanaged.h" #ifdef KWIN_BUILD_TABBOX #include "tabbox.h" @@ -905,7 +904,9 @@ Window EffectsHandlerImpl::createInputWindow(Effect* e, int x, int y, int w, int // Raise electric border windows above the input windows // so they can still be triggered. +#ifdef KWIN_BUILD_SCREENEDGES Workspace::self()->screenEdge()->ensureOnTop(); +#endif return win; } @@ -976,7 +977,9 @@ void EffectsHandlerImpl::checkInputWindowStacking() delete[] wins; // Raise electric border windows above the input windows // so they can still be triggered. TODO: Do both at once. +#ifdef KWIN_BUILD_SCREENEDGES Workspace::self()->screenEdge()->ensureOnTop(); +#endif } QPoint EffectsHandlerImpl::cursorPos() const @@ -986,22 +989,39 @@ QPoint EffectsHandlerImpl::cursorPos() const void EffectsHandlerImpl::checkElectricBorder(const QPoint &pos, Time time) { +#ifdef KWIN_BUILD_SCREENEDGES Workspace::self()->screenEdge()->check(pos, time); +#else + Q_UNUSED(pos) + Q_UNUSED(time) +#endif } void EffectsHandlerImpl::reserveElectricBorder(ElectricBorder border) { +#ifdef KWIN_BUILD_SCREENEDGES Workspace::self()->screenEdge()->reserve(border); +#else + Q_UNUSED(border) +#endif } void EffectsHandlerImpl::unreserveElectricBorder(ElectricBorder border) { +#ifdef KWIN_BUILD_SCREENEDGES Workspace::self()->screenEdge()->unreserve(border); +#else + Q_UNUSED(border) +#endif } void EffectsHandlerImpl::reserveElectricBorderSwitching(bool reserve) { +#ifdef KWIN_BUILD_SCREENEDGES Workspace::self()->screenEdge()->reserveDesktopSwitching(reserve); +#else + Q_UNUSED(reserve) +#endif } unsigned long EffectsHandlerImpl::xrenderBufferPicture() diff --git a/events.cpp b/events.cpp index 56c1ae72a9..887047cad7 100644 --- a/events.cpp +++ b/events.cpp @@ -36,7 +36,6 @@ along with this program. If not, see . #include "group.h" #include "rules.h" #include "unmanaged.h" -#include "screenedge.h" #include "effects.h" #include @@ -384,8 +383,10 @@ bool Workspace::workspaceEvent(XEvent * e) if (w) QWhatsThis::leaveWhatsThisMode(); } +#ifdef KWIN_BUILD_SCREENEDGES if (m_screenEdge.isEntered(e)) return true; +#endif break; } case LeaveNotify: { @@ -436,8 +437,10 @@ bool Workspace::workspaceEvent(XEvent * e) case FocusOut: return true; // always eat these, they would tell Qt that KWin is the active app case ClientMessage: +#ifdef KWIN_BUILD_SCREENEDGES if (m_screenEdge.isEntered(e)) return true; +#endif break; case Expose: if (compositing() diff --git a/geometry.cpp b/geometry.cpp index afcbf0481d..cb00fdfc19 100644 --- a/geometry.cpp +++ b/geometry.cpp @@ -40,7 +40,6 @@ along with this program. If not, see . #include "notifications.h" #include "geometrytip.h" #include "rules.h" -#include "screenedge.h" #include "effects.h" #include #include @@ -72,7 +71,9 @@ void Workspace::desktopResized() rootInfo->setDesktopGeometry(-1, desktop_geometry); updateClientArea(); +#ifdef KWIN_BUILD_SCREENEDGES m_screenEdge.update(true); +#endif if (compositing()) compositeResetTimer.start(0); } @@ -2519,10 +2520,12 @@ bool Client::startMoveResize() checkUnrestrictedMoveResize(); Notify::raise(isResize() ? Notify::ResizeStart : Notify::MoveStart); emit clientStartUserMovedResized(this); +#ifdef KWIN_BUILD_SCREENEDGES if (options->electricBorders() == Options::ElectricMoveOnly || options->electricBorderMaximize() || options->electricBorderTiling()) workspace()->screenEdge()->reserveDesktopSwitching(true); +#endif return true; } @@ -2586,8 +2589,10 @@ void Client::finishMoveResize(bool cancel) if (border == ElectricNone) kDebug(1212) << "invalid electric mode" << electricMode << "leading to invalid array acces,\ this should not have happened!"; +#ifdef KWIN_BUILD_SCREENEDGES else workspace()->screenEdge()->restoreSize(border); +#endif electricMaximizing = false; workspace()->outline()->hide(); } @@ -2614,10 +2619,12 @@ void Client::leaveMoveResize() moveResizeMode = false; delete sync_timeout; sync_timeout = NULL; +#ifdef KWIN_BUILD_SCREENEDGES if (options->electricBorders() == Options::ElectricMoveOnly || options->electricBorderMaximize() || options->electricBorderTiling()) workspace()->screenEdge()->reserveDesktopSwitching(false); +#endif } // This function checks if it actually makes sense to perform a restricted move/resize. @@ -2940,7 +2947,9 @@ void Client::handleMoveResize(int x, int y, int x_root, int y_root) if (isMove()) { workspace()->notifyTilingWindowMove(this, moveResizeGeom, initialMoveResizeGeom); +#ifdef KWIN_BUILD_SCREENEDGES workspace()->screenEdge()->check(globalPos, xTime()); +#endif } } diff --git a/kcmkwin/CMakeLists.txt b/kcmkwin/CMakeLists.txt index f7e30c0a95..b0739b6010 100644 --- a/kcmkwin/CMakeLists.txt +++ b/kcmkwin/CMakeLists.txt @@ -4,7 +4,9 @@ add_subdirectory( kwinoptions ) add_subdirectory( kwindecoration ) add_subdirectory( kwinrules ) add_subdirectory( kwincompositing ) -add_subdirectory( kwinscreenedges ) +if(KWIN_BUILD_SCREENEDGES) + add_subdirectory( kwinscreenedges ) +endif(KWIN_BUILD_SCREENEDGES) add_subdirectory( kwindesktop ) if( KWIN_BUILD_TABBOX ) diff --git a/layers.cpp b/layers.cpp index ce579e751e..3ce9903808 100644 --- a/layers.cpp +++ b/layers.cpp @@ -79,7 +79,6 @@ along with this program. If not, see . #include "utils.h" #include "client.h" #include "workspace.h" -#include "screenedge.h" #include "tabbox.h" #include "group.h" #include "rules.h" @@ -155,12 +154,14 @@ void Workspace::propagateClients(bool propagate_new_clients) // it ensures that no client will be ever shown above override-redirect // windows (e.g. popups). newWindowStack << (Window*)supportWindow->winId(); +#ifdef KWIN_BUILD_SCREENEDGES QVectorIterator it(m_screenEdge.windows()); while (it.hasNext()) { if ((Window)it.next() != None) { newWindowStack << (Window*)⁢ } } +#endif for (int i = stacking_order.size() - 1; i >= 0; i--) { if (stacking_order.at(i)->hiddenPreview()) { continue; diff --git a/workspace.cpp b/workspace.cpp index 42fdbd0313..8ed25dacdf 100644 --- a/workspace.cpp +++ b/workspace.cpp @@ -59,7 +59,6 @@ along with this program. If not, see . #include "unmanaged.h" #include "deleted.h" #include "effects.h" -#include "screenedge.h" #include "tilinglayout.h" #include "scripting/scripting.h" @@ -250,7 +249,9 @@ Workspace::Workspace(bool restore) void Workspace::init() { +#ifdef KWIN_BUILD_SCREENEDGES m_screenEdge.init(); +#endif // Not used yet //topDock = 0L; @@ -911,9 +912,11 @@ void Workspace::slotReconfigure() kDebug(1212) << "Workspace::slotReconfigure()"; reconfigureTimer.stop(); +#ifdef KWIN_BUILD_SCREENEDGES m_screenEdge.reserveActions(false); if (options->electricBorders() == Options::ElectricAlways) m_screenEdge.reserveDesktopSwitching(false); +#endif bool borderlessMaximizedWindows = options->borderlessMaximizedWindows(); @@ -955,10 +958,12 @@ void Workspace::slotReconfigure() c->triggerDecorationRepaint(); } +#ifdef KWIN_BUILD_SCREENEDGES m_screenEdge.reserveActions(true); if (options->electricBorders() == Options::ElectricAlways) m_screenEdge.reserveDesktopSwitching(true); m_screenEdge.update(); +#endif if (!compositingSuspended) { setupCompositing(); @@ -1009,7 +1014,9 @@ void Workspace::slotReinitCompositing() KGlobal::config()->reparseConfiguration(); // Update any settings that can be set in the compositing kcm. +#ifdef KWIN_BUILD_SCREENEDGES m_screenEdge.update(); +#endif // Restart compositing finishCompositing(); @@ -1096,7 +1103,10 @@ QStringList Workspace::configModules(bool controlCenter) #ifdef KWIN_BUILD_TABBOX << "kwintabbox" #endif - << "kwinscreenedges"; +#ifdef KWIN_BUILD_SCREENEDGES + << "kwinscreenedges" +#endif + ; return args; } @@ -2092,10 +2102,12 @@ Outline* Workspace::outline() return m_outline; } +#ifdef KWIN_BUILD_SCREENEDGES ScreenEdge* Workspace::screenEdge() { return &m_screenEdge; } +#endif bool Workspace::hasTabBox() const { diff --git a/workspace.h b/workspace.h index 3604b3128b..f90b1feacb 100644 --- a/workspace.h +++ b/workspace.h @@ -38,7 +38,9 @@ along with this program. If not, see . #include "utils.h" #include "kdecoration.h" #include "kdecorationfactory.h" +#ifdef KWIN_BUILD_SCREENEDGES #include "screenedge.h" +#endif #include "sm.h" #include @@ -216,7 +218,9 @@ public: Position supportedTilingResizeMode(Client *c, Position currentMode); Outline* outline(); +#ifdef KWIN_BUILD_SCREENEDGES ScreenEdge* screenEdge(); +#endif //------------------------------------------------- // Desktop layout @@ -327,7 +331,9 @@ private: QVector tilingLayouts; Outline* m_outline; +#ifdef KWIN_BUILD_SCREENEDGES ScreenEdge m_screenEdge; +#endif //------------------------------------------------- // Unsorted