From 2f11337d9844dab3d7475f552e2ec7c2e560bf50 Mon Sep 17 00:00:00 2001 From: Arthur Arlt Date: Thu, 23 Jun 2011 19:54:14 +0200 Subject: [PATCH] Refactoring Screen Edge handling This commit change the screen edge function calls to be called in the new class ScreenEdge. The old methods are still in Workspace and will be removed in a further commit. --- effects.cpp | 13 +++++++------ events.cpp | 5 +++-- geometry.cpp | 13 +++++++------ layers.cpp | 5 +++-- screenedge.cpp | 4 ++++ screenedge.h | 9 +++++---- workspace.cpp | 19 ++++++++++--------- 7 files changed, 39 insertions(+), 29 deletions(-) diff --git a/effects.cpp b/effects.cpp index 29802dba23..adbe0e2800 100644 --- a/effects.cpp +++ b/effects.cpp @@ -26,6 +26,7 @@ along with this program. If not, see . #include "group.h" #include "scene_xrender.h" #include "scene_opengl.h" +#include "screenedge.h" #include "unmanaged.h" #include "tabbox.h" #include "workspace.h" @@ -869,7 +870,7 @@ 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. - Workspace::self()->raiseElectricBorderWindows(); + Workspace::self()->screenEdge()->raiseElectricBorderWindows(); return win; } @@ -940,7 +941,7 @@ void EffectsHandlerImpl::checkInputWindowStacking() delete[] wins; // Raise electric border windows above the input windows // so they can still be triggered. TODO: Do both at once. - Workspace::self()->raiseElectricBorderWindows(); + Workspace::self()->screenEdge()->raiseElectricBorderWindows(); } QPoint EffectsHandlerImpl::cursorPos() const @@ -950,22 +951,22 @@ QPoint EffectsHandlerImpl::cursorPos() const void EffectsHandlerImpl::checkElectricBorder(const QPoint &pos, Time time) { - Workspace::self()->checkElectricBorder(pos, time); + Workspace::self()->screenEdge()->checkElectricBorder(pos, time); } void EffectsHandlerImpl::reserveElectricBorder(ElectricBorder border) { - Workspace::self()->reserveElectricBorder(border); + Workspace::self()->screenEdge()->reserveElectricBorder(border); } void EffectsHandlerImpl::unreserveElectricBorder(ElectricBorder border) { - Workspace::self()->unreserveElectricBorder(border); + Workspace::self()->screenEdge()->unreserveElectricBorder(border); } void EffectsHandlerImpl::reserveElectricBorderSwitching(bool reserve) { - Workspace::self()->reserveElectricBorderSwitching(reserve); + Workspace::self()->screenEdge()->reserveElectricBorderSwitching(reserve); } unsigned long EffectsHandlerImpl::xrenderBufferPicture() diff --git a/events.cpp b/events.cpp index 5218deb6b7..4e0559cbdb 100644 --- a/events.cpp +++ b/events.cpp @@ -35,6 +35,7 @@ along with this program. If not, see . #include "rules.h" #include "unmanaged.h" #include "scene.h" +#include "screenedge.h" #include "effects.h" #include @@ -376,7 +377,7 @@ bool Workspace::workspaceEvent(XEvent * e) if (w) QWhatsThis::leaveWhatsThisMode(); } - if (electricBorderEvent(e)) + if (m_screenEdge.electricBorderEvent(e)) return true; break; } @@ -428,7 +429,7 @@ bool Workspace::workspaceEvent(XEvent * e) case FocusOut: return true; // always eat these, they would tell Qt that KWin is the active app case ClientMessage: - if (electricBorderEvent(e)) + if (m_screenEdge.electricBorderEvent(e)) return true; break; case Expose: diff --git a/geometry.cpp b/geometry.cpp index 178184daf7..bd971fe473 100644 --- a/geometry.cpp +++ b/geometry.cpp @@ -40,6 +40,7 @@ along with this program. If not, see . #include "notifications.h" #include "geometrytip.h" #include "rules.h" +#include "screenedge.h" #include "effects.h" #include #include @@ -71,8 +72,8 @@ void Workspace::desktopResized() rootInfo->setDesktopGeometry(-1, desktop_geometry); updateClientArea(); - destroyElectricBorders(); - updateElectricBorders(); + m_screenEdge.destroyElectricBorders(); + m_screenEdge.updateElectricBorders(); if (compositing()) compositeResetTimer.start(0); } @@ -2526,7 +2527,7 @@ bool Client::startMoveResize() if (options->electricBorders() == Options::ElectricMoveOnly || options->electricBorderMaximize() || options->electricBorderTiling()) - workspace()->reserveElectricBorderSwitching(true); + workspace()->screenEdge()->reserveElectricBorderSwitching(true); return true; } @@ -2591,7 +2592,7 @@ void Client::finishMoveResize(bool cancel) kDebug(1212) << "invalid electric mode" << electricMode << "leading to invalid array acces,\ this should not have happened!"; else - workspace()->restoreElectricBorderSize(border); + workspace()->screenEdge()->restoreElectricBorderSize(border); electricMaximizing = false; workspace()->outline()->hide(); } @@ -2621,7 +2622,7 @@ void Client::leaveMoveResize() if (options->electricBorders() == Options::ElectricMoveOnly || options->electricBorderMaximize() || options->electricBorderTiling()) - workspace()->reserveElectricBorderSwitching(false); + workspace()->screenEdge()->reserveElectricBorderSwitching(false); } // This function checks if it actually makes sense to perform a restricted move/resize. @@ -2944,7 +2945,7 @@ void Client::handleMoveResize(int x, int y, int x_root, int y_root) if (isMove()) { workspace()->notifyTilingWindowMove(this, moveResizeGeom, initialMoveResizeGeom); - workspace()->checkElectricBorder(globalPos, xTime()); + workspace()->screenEdge()->checkElectricBorder(globalPos, xTime()); } } diff --git a/layers.cpp b/layers.cpp index 9ce87ca251..c7508d22f1 100644 --- a/layers.cpp +++ b/layers.cpp @@ -79,6 +79,7 @@ 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" @@ -158,8 +159,8 @@ void Workspace::propagateClients(bool propagate_new_clients) for (int i = 0; i < ELECTRIC_COUNT; ++i) - if (electric_windows[ i ] != None) - new_stack[ pos++ ] = electric_windows[ i ]; + if (m_screenEdge.electricWindows()[ i ] != None) + new_stack[ pos++ ] = m_screenEdge.electricWindows()[ i ]; for (int i = stacking_order.size() - 1; i >= 0; i--) { if (stacking_order.at(i)->hiddenPreview()) { continue; diff --git a/screenedge.cpp b/screenedge.cpp index 5c81b1ea37..c97e22405f 100644 --- a/screenedge.cpp +++ b/screenedge.cpp @@ -49,6 +49,10 @@ namespace KWin { ScreenEdge::ScreenEdge() : QObject(NULL) { + for (int i = 0; i < ELECTRIC_COUNT; ++i) { + electric_reserved[i] = 0; + electric_windows[i] = None; + } } ScreenEdge::~ScreenEdge() diff --git a/screenedge.h b/screenedge.h index c461c341c4..bc98b3e653 100644 --- a/screenedge.h +++ b/screenedge.h @@ -28,9 +28,10 @@ along with this program. If not, see . #ifndef KWIN_SCREENEDGE_H #define KWIN_SCREENEDGE_H -#include +#include #include "kwinglobals.h" + namespace KWin { //----------------------------------------------------------------------------- @@ -52,11 +53,11 @@ public: void reserveElectricBorderActions(bool reserve); void reserveElectricBorderSwitching(bool reserve); void raiseElectricBorderWindows(); -private Q_SLOTS: - void updateElectricBorders(); -private: void destroyElectricBorders(); bool electricBorderEvent(XEvent * e); +public Q_SLOTS: + void updateElectricBorders(); +private: void electricBorderSwitchDesktop(ElectricBorder border, const QPoint& pos); ElectricBorder electric_current_border; diff --git a/workspace.cpp b/workspace.cpp index bee4c68c2f..63d2ce131d 100644 --- a/workspace.cpp +++ b/workspace.cpp @@ -252,10 +252,11 @@ Workspace::Workspace(bool restore) void Workspace::init() { - reserveElectricBorderActions(true); + m_screenEdge.reserveElectricBorderActions(true); if (options->electricBorders() == Options::ElectricAlways) - reserveElectricBorderSwitching(true); - updateElectricBorders(); + m_screenEdge.reserveElectricBorderSwitching(true); + m_screenEdge.updateElectricBorders(); + m_screenEdge.init(); // Not used yet //topDock = 0L; @@ -911,9 +912,9 @@ void Workspace::slotReconfigure() kDebug(1212) << "Workspace::slotReconfigure()"; reconfigureTimer.stop(); - reserveElectricBorderActions(false); + m_screenEdge.reserveElectricBorderActions(false); if (options->electricBorders() == Options::ElectricAlways) - reserveElectricBorderSwitching(false); + m_screenEdge.reserveElectricBorderSwitching(false); bool borderlessMaximizedWindows = options->borderlessMaximizedWindows(); @@ -953,10 +954,10 @@ void Workspace::slotReconfigure() c->triggerDecorationRepaint(); } - reserveElectricBorderActions(true); + m_screenEdge.reserveElectricBorderActions(true); if (options->electricBorders() == Options::ElectricAlways) - reserveElectricBorderSwitching(true); - updateElectricBorders(); + m_screenEdge.reserveElectricBorderSwitching(true); + m_screenEdge.updateElectricBorders(); if (!compositingSuspended) { setupCompositing(); @@ -1007,7 +1008,7 @@ void Workspace::slotReinitCompositing() KGlobal::config()->reparseConfiguration(); // Update any settings that can be set in the compositing kcm. - updateElectricBorders(); + m_screenEdge.updateElectricBorders(); // Restart compositing finishCompositing();