From b0641a8cbd12df26532723e46eb467dfaa067f8e Mon Sep 17 00:00:00 2001 From: fluxgen Date: Sat, 10 May 2003 23:04:37 +0000 Subject: using parent window instead of root window --- src/Window.cc | 144 +++++++++++++++++++++++++++++----------------------------- src/Window.hh | 11 +++-- 2 files changed, 79 insertions(+), 76 deletions(-) diff --git a/src/Window.cc b/src/Window.cc index adb8f2e..4161c3b 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -22,7 +22,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: Window.cc,v 1.167 2003/05/10 16:53:09 fluxgen Exp $ +// $Id: Window.cc,v 1.168 2003/05/10 23:04:37 fluxgen Exp $ #include "Window.hh" @@ -242,7 +242,8 @@ FluxboxWindow::FluxboxWindow(WinClient &client, BScreen &scr, FbWinFrameTheme &t m_client(&client), m_frame(tm, *scr.getImageControl(), scr.getScreenNumber(), 0, 0, 100, 100), m_layeritem(m_frame.window(), layer), - m_layernum(layer.getLayerNum()) { + m_layernum(layer.getLayerNum()), + m_parent(scr.rootWindow()) { init(); } @@ -274,7 +275,8 @@ FluxboxWindow::FluxboxWindow(Window w, BScreen &scr, FbWinFrameTheme &tm, m_client(new WinClient(w, *this)), m_frame(tm, *scr.getImageControl(), scr.getScreenNumber(), 0, 0, 100, 100), m_layeritem(m_frame.window(), layer), - m_layernum(layer.getLayerNum()) { + m_layernum(layer.getLayerNum()), + m_parent(scr.rootWindow()) { assert(w != 0); init(); @@ -2292,7 +2294,7 @@ void FluxboxWindow::buttonReleaseEvent(XButtonEvent &re) { void FluxboxWindow::motionNotifyEvent(XMotionEvent &me) { - if (isMoving() && me.window == screen().getRootWindow()) { + if (isMoving() && me.window == parent()) { me.window = m_frame.window().window(); } bool inside_titlebar = (m_frame.titlebar() == me.window || m_frame.label() == me.window || @@ -2375,15 +2377,15 @@ void FluxboxWindow::motionNotifyEvent(XMotionEvent &me) { doSnapping(dx, dy); if (! screen().doOpaqueMove()) { - XDrawRectangle(display, screen().getRootWindow(), screen().rootTheme().opGC(), - m_last_move_x, m_last_move_y, - m_frame.width() + 2*frame().window().borderWidth()-1, - m_frame.height() + 2*frame().window().borderWidth()-1); - - XDrawRectangle(display, screen().getRootWindow(), screen().rootTheme().opGC(), - dx, dy, - m_frame.width() + 2*frame().window().borderWidth()-1, - m_frame.height() + 2*frame().window().borderWidth()-1); + parent().drawRectangle(screen().rootTheme().opGC(), + m_last_move_x, m_last_move_y, + m_frame.width() + 2*frame().window().borderWidth()-1, + m_frame.height() + 2*frame().window().borderWidth()-1); + + parent().drawRectangle(screen().rootTheme().opGC(), + dx, dy, + m_frame.width() + 2*frame().window().borderWidth()-1, + m_frame.height() + 2*frame().window().borderWidth()-1); m_last_move_x = dx; m_last_move_y = dy; } else { @@ -2404,10 +2406,10 @@ void FluxboxWindow::motionNotifyEvent(XMotionEvent &me) { startResizing(me.window, me.x, me.y, left); } else if (resizing) { // draw over old rect - XDrawRectangle(display, screen().getRootWindow(), screen().rootTheme().opGC(), - m_last_resize_x, m_last_resize_y, - m_last_resize_w - 1 + 2 * m_frame.window().borderWidth(), - m_last_resize_h - 1 + 2 * m_frame.window().borderWidth()); + parent().drawRectangle(screen().rootTheme().opGC(), + m_last_resize_x, m_last_resize_y, + m_last_resize_w - 1 + 2 * m_frame.window().borderWidth(), + m_last_resize_h - 1 + 2 * m_frame.window().borderWidth()); // move rectangle @@ -2431,11 +2433,11 @@ void FluxboxWindow::motionNotifyEvent(XMotionEvent &me) { right_fixsize(&gx, &gy); } - // draw resize rectangle - XDrawRectangle(display, screen().getRootWindow(), screen().rootTheme().opGC(), - m_last_resize_x, m_last_resize_y, - m_last_resize_w - 1 + 2 * m_frame.window().borderWidth(), - m_last_resize_h - 1 + 2 * m_frame.window().borderWidth()); + // draw resize rectangle + parent().drawRectangle(screen().rootTheme().opGC(), + m_last_resize_x, m_last_resize_y, + m_last_resize_w - 1 + 2 * m_frame.window().borderWidth(), + m_last_resize_h - 1 + 2 * m_frame.window().borderWidth()); if (screen().doShowWindowPos()) screen().showGeometry(gx, gy); @@ -2455,11 +2457,10 @@ void FluxboxWindow::motionNotifyEvent(XMotionEvent &me) { m_last_move_x = me.x_root - 1; m_last_move_y = me.y_root - 1; - XDrawRectangle(display, screen().getRootWindow(), - screen().rootTheme().opGC(), - m_last_move_x, m_last_move_y, - m_labelbuttons[client]->width(), - m_labelbuttons[client]->height()); + parent().drawRectangle(screen().rootTheme().opGC(), + m_last_move_x, m_last_move_y, + m_labelbuttons[client]->width(), + m_labelbuttons[client]->height()); } else { // we already grabed and started to drag'n'drop tab // so we update drag'n'drop-rectangle @@ -2489,21 +2490,19 @@ void FluxboxWindow::motionNotifyEvent(XMotionEvent &me) { } //erase rectangle - XDrawRectangle(display, screen().getRootWindow(), - screen().rootTheme().opGC(), - m_last_move_x, m_last_move_y, - m_labelbuttons[client]->width(), - m_labelbuttons[client]->height()); + parent().drawRectangle(screen().rootTheme().opGC(), + m_last_move_x, m_last_move_y, + m_labelbuttons[client]->width(), + m_labelbuttons[client]->height()); // redraw rectangle at new pos m_last_move_x = dx; m_last_move_y = dy; - XDrawRectangle(display, screen().getRootWindow(), - screen().rootTheme().opGC(), - m_last_move_x, m_last_move_y, - m_labelbuttons[client]->width(), - m_labelbuttons[client]->height()); + parent().drawRectangle(screen().rootTheme().opGC(), + m_last_move_x, m_last_move_y, + m_labelbuttons[client]->width(), + m_labelbuttons[client]->height()); } @@ -2700,23 +2699,23 @@ void FluxboxWindow::startMoving(Window win) { Fluxbox *fluxbox = Fluxbox::instance(); // grabbing (and masking) on the root window allows us to // freely map and unmap the window we're moving. - XGrabPointer(display, screen().getRootWindow(), False, Button1MotionMask | + XGrabPointer(display, screen().rootWindow().window(), False, Button1MotionMask | ButtonReleaseMask, GrabModeAsync, GrabModeAsync, - screen().getRootWindow(), fluxbox->getMoveCursor(), CurrentTime); + screen().rootWindow().window(), fluxbox->getMoveCursor(), CurrentTime); if (m_windowmenu.isVisible()) m_windowmenu.hide(); - fluxbox->maskWindowEvents(screen().getRootWindow(), this); + fluxbox->maskWindowEvents(screen().rootWindow().window(), this); m_last_move_x = frame().x(); m_last_move_y = frame().y(); if (! screen().doOpaqueMove()) { fluxbox->grab(); - XDrawRectangle(display, screen().getRootWindow(), screen().rootTheme().opGC(), - frame().x(), frame().y(), - frame().width() + 2*frame().window().borderWidth()-1, - frame().height() + 2*frame().window().borderWidth()-1); + parent().drawRectangle(screen().rootTheme().opGC(), + frame().x(), frame().y(), + frame().width() + 2*frame().window().borderWidth()-1, + frame().height() + 2*frame().window().borderWidth()-1); screen().showPosition(frame().x(), frame().y()); } } @@ -2729,10 +2728,10 @@ void FluxboxWindow::stopMoving() { if (! screen().doOpaqueMove()) { - XDrawRectangle(FbTk::App::instance()->display(), screen().getRootWindow(), screen().rootTheme().opGC(), - m_last_move_x, m_last_move_y, - frame().width() + 2*frame().window().borderWidth()-1, - frame().height() + 2*frame().window().borderWidth()-1); + parent().drawRectangle(screen().rootTheme().opGC(), + m_last_move_x, m_last_move_y, + frame().width() + 2*frame().window().borderWidth()-1, + frame().height() + 2*frame().window().borderWidth()-1); moveResize(m_last_move_x, m_last_move_y, m_frame.width(), m_frame.height()); if (m_workspace_number != screen().getCurrentWorkspaceID()) { screen().reassociateWindow(this, screen().getCurrentWorkspaceID(), true); @@ -2753,11 +2752,10 @@ void FluxboxWindow::pauseMoving() { return; } - XDrawRectangle(display, screen().getRootWindow(), - screen().rootTheme().opGC(), - m_last_move_x, m_last_move_y, - m_frame.width() + 2*frame().window().borderWidth()-1, - m_frame.height() + 2*frame().window().borderWidth()-1); + parent().drawRectangle(screen().rootTheme().opGC(), + m_last_move_x, m_last_move_y, + m_frame.width() + 2*frame().window().borderWidth()-1, + m_frame.height() + 2*frame().window().borderWidth()-1); } @@ -2771,10 +2769,11 @@ void FluxboxWindow::resumeMoving() { m_frame.show(); } XSync(display,false); - XDrawRectangle(display, screen().getRootWindow(), screen().rootTheme().opGC(), - m_last_move_x, m_last_move_y, - m_frame.width() + 2*frame().window().borderWidth()-1, - m_frame.height() + 2*frame().window().borderWidth()-1); + + parent().drawRectangle(screen().rootTheme().opGC(), + m_last_move_x, m_last_move_y, + m_frame.width() + 2*frame().window().borderWidth()-1, + m_frame.height() + 2*frame().window().borderWidth()-1); } @@ -2917,19 +2916,19 @@ void FluxboxWindow::startResizing(Window win, int x, int y, bool left) { if (screen().doShowWindowPos()) screen().showGeometry(gx, gy); - XDrawRectangle(display, screen().getRootWindow(), screen().rootTheme().opGC(), - m_last_resize_x, m_last_resize_y, - m_last_resize_w - 1 + 2 * m_frame.window().borderWidth(), - m_last_resize_h - 1 + 2 * m_frame.window().borderWidth()); + parent().drawRectangle(screen().rootTheme().opGC(), + m_last_resize_x, m_last_resize_y, + m_last_resize_w - 1 + 2 * m_frame.window().borderWidth(), + m_last_resize_h - 1 + 2 * m_frame.window().borderWidth()); } void FluxboxWindow::stopResizing(Window win) { resizing = false; - XDrawRectangle(display, screen().getRootWindow(), screen().rootTheme().opGC(), - m_last_resize_x, m_last_resize_y, - m_last_resize_w - 1 + 2 * m_frame.window().borderWidth(), - m_last_resize_h - 1 + 2 * m_frame.window().borderWidth()); + parent().drawRectangle(screen().rootTheme().opGC(), + m_last_resize_x, m_last_resize_y, + m_last_resize_w - 1 + 2 * m_frame.window().borderWidth(), + m_last_resize_h - 1 + 2 * m_frame.window().borderWidth()); screen().hideGeometry(); @@ -2952,17 +2951,16 @@ void FluxboxWindow::attachTo(int x, int y) { XUngrabPointer(display, CurrentTime); - XDrawRectangle(display, screen().getRootWindow(), - screen().rootTheme().opGC(), - m_last_move_x, m_last_move_y, - m_labelbuttons[m_attaching_tab]->width(), - m_labelbuttons[m_attaching_tab]->height()); + parent().drawRectangle(screen().rootTheme().opGC(), + m_last_move_x, m_last_move_y, + m_labelbuttons[m_attaching_tab]->width(), + m_labelbuttons[m_attaching_tab]->height()); int dest_x = 0, dest_y = 0; Window child = 0; - if (XTranslateCoordinates(display, screen().getRootWindow(), - screen().getRootWindow(), + if (XTranslateCoordinates(display, parent().window(), + parent().window(), x, y, &dest_x, &dest_y, &child)) { // search for a fluxboxwindow FluxboxWindow *attach_to_win = Fluxbox::instance()->searchWindow(child); @@ -3013,7 +3011,7 @@ void FluxboxWindow::restore(WinClient *client, bool remap) { #endif // DEBUG // reparent to root window - client->reparent(screen().getRootWindow(), m_frame.x(), m_frame.y()); + client->reparent(screen().rootWindow().window(), m_frame.x(), m_frame.y()); } if (remap) diff --git a/src/Window.hh b/src/Window.hh index 585a176..1bae6e2 100644 --- a/src/Window.hh +++ b/src/Window.hh @@ -22,7 +22,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: Window.hh,v 1.69 2003/05/10 16:51:39 fluxgen Exp $ +// $Id: Window.hh,v 1.70 2003/05/10 23:03:49 fluxgen Exp $ #ifndef WINDOW_HH #define WINDOW_HH @@ -302,7 +302,10 @@ public: FbTk::Menu &getLayermenu() { return m_layermenu; } const FbTk::Menu &getLayermenu() const { return m_layermenu; } - + + const FbTk::FbWindow &parent() const { return m_parent; } + FbTk::FbWindow &parent() { return m_parent; } + const std::string &getTitle() const; const std::string &getIconTitle() const; int getXFrame() const { return m_frame.x(); } @@ -459,8 +462,10 @@ private: FbTk::XLayerItem m_layeritem; int m_layernum; + FbTk::FbWindow &m_parent; ///< window on which we draw move/resize rectangle (the "root window") + enum { F_NOINPUT = 0, F_PASSIVE, F_LOCALLYACTIVE, F_GLOBALLYACTIVE }; - + }; -- cgit v0.11.2