// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
-// blackbox.cc for Blackbox - an X11 Window manager
-// Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry <shaleh@debian.org>
-// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
-//
-// 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.
#ifdef HAVE_CONFIG_H
# include "../config.h"
#include <string>
using std::string;
-#include "i18n.hh"
#include "blackbox.hh"
-#include "Basemenu.hh"
-#include "Clientmenu.hh"
-#include "GCCache.hh"
-#include "Image.hh"
-#include "Rootmenu.hh"
-#include "Screen.hh"
-#include "Slit.hh"
-#include "Toolbar.hh"
-#include "Util.hh"
-#include "Window.hh"
-#include "Workspace.hh"
-#include "Workspacemenu.hh"
-#include "XAtom.hh"
-
-// X event scanner for enter/leave notifies - adapted from twm
-struct scanargs {
- Window w;
- bool leave, inferior, enter;
-};
-
-static Bool queueScanner(Display *, XEvent *e, char *args) {
- scanargs *scan = (scanargs *) args;
- if ((e->type == LeaveNotify) &&
- (e->xcrossing.window == scan->w) &&
- (e->xcrossing.mode == NotifyNormal)) {
- scan->leave = True;
- scan->inferior = (e->xcrossing.detail == NotifyInferior);
- } else if ((e->type == EnterNotify) && (e->xcrossing.mode == NotifyUngrab)) {
- scan->enter = True;
- }
+#include "otk/gccache.hh"
+#include "otk/image.hh"
+#include "otk/assassin.hh"
+#include "bbscreen.hh"
+#include "otk/util.hh"
+#include "bbwindow.hh"
+#include "workspace.hh"
- return False;
-}
+namespace ob {
Blackbox *blackbox;
-Blackbox::Blackbox(char **m_argv, char *dpy_name, char *rc, char *menu)
- : BaseDisplay(m_argv[0], dpy_name) {
+Blackbox::Blackbox(int argc, char **m_argv, char *rc)
+ : Openbox(argc, m_argv) {
+
if (! XSupportsLocale())
fprintf(stderr, "X server does not support locale\n");
if (XSetLocaleModifiers("") == NULL)
fprintf(stderr, "cannot set locale modifiers\n");
- ::blackbox = this;
+ ob::blackbox = this;
argv = m_argv;
// try to make sure the ~/.openbox directory exists
- mkdir(expandTilde("~/.openbox").c_str(), S_IREAD | S_IWRITE | S_IEXEC |
+ mkdir(otk::expandTilde("~/.openbox").c_str(), S_IREAD | S_IWRITE | S_IEXEC |
S_IRGRP | S_IWGRP | S_IXGRP |
S_IROTH | S_IWOTH | S_IXOTH);
- if (! rc) rc = "~/.openbox/rc";
- rc_file = expandTilde(rc);
+ if (! rc) rc = "~/.openbox/rc3";
+ rc_file = otk::expandTilde(rc);
config.setFile(rc_file);
- if (! menu) menu = "~/.openbox/menu";
- menu_file = expandTilde(menu);
no_focus = False;
load_rc();
- xatom = new XAtom(getXDisplay());
+ xatom = new otk::OBProperty();
- cursor.session = XCreateFontCursor(getXDisplay(), XC_left_ptr);
- cursor.move = XCreateFontCursor(getXDisplay(), XC_fleur);
- cursor.ll_angle = XCreateFontCursor(getXDisplay(), XC_ll_angle);
- cursor.lr_angle = XCreateFontCursor(getXDisplay(), XC_lr_angle);
- cursor.ul_angle = XCreateFontCursor(getXDisplay(), XC_ul_angle);
- cursor.ur_angle = XCreateFontCursor(getXDisplay(), XC_ur_angle);
+ cursor.session = XCreateFontCursor(otk::OBDisplay::display, XC_left_ptr);
+ cursor.move = XCreateFontCursor(otk::OBDisplay::display, XC_fleur);
+ cursor.ll_angle = XCreateFontCursor(otk::OBDisplay::display, XC_ll_angle);
+ cursor.lr_angle = XCreateFontCursor(otk::OBDisplay::display, XC_lr_angle);
+ cursor.ul_angle = XCreateFontCursor(otk::OBDisplay::display, XC_ul_angle);
+ cursor.ur_angle = XCreateFontCursor(otk::OBDisplay::display, XC_ur_angle);
- for (unsigned int i = 0; i < getNumberOfScreens(); i++) {
+ for (int i = 0; i < ScreenCount(otk::OBDisplay::display); i++) {
BScreen *screen = new BScreen(this, i);
if (! screen->isScreenManaged()) {
if (screenList.empty()) {
fprintf(stderr,
- i18n(blackboxSet, blackboxNoManagableScreens,
- "Blackbox::Blackbox: no managable screens found, aborting.\n"));
+ "Blackbox::Blackbox: no managable screens found, aborting.\n");
::exit(3);
}
active_screen = screenList.front();
setFocusedWindow(0);
- XSynchronize(getXDisplay(), False);
- XSync(getXDisplay(), False);
+ XSynchronize(otk::OBDisplay::display, False);
+ XSync(otk::OBDisplay::display, False);
- reconfigure_wait = reread_menu_wait = False;
+ reconfigure_wait = False;
- timer = new BTimer(this, this);
+ timer = new otk::OBTimer(Openbox::instance->timerManager(),
+ (otk::OBTimeoutHandler)timeout,
+ this);
timer->setTimeout(0l);
}
Blackbox::~Blackbox(void) {
- std::for_each(screenList.begin(), screenList.end(), PointerAssassin());
-
- std::for_each(menuTimestamps.begin(), menuTimestamps.end(),
- PointerAssassin());
+ std::for_each(screenList.begin(), screenList.end(), otk::PointerAssassin());
delete xatom;
switch (e->type) {
case ButtonPress: {
// strip the lock key modifiers
- e->xbutton.state &= ~(NumLockMask | ScrollLockMask | LockMask);
+ //e->xbutton.state &= ~(NumLockMask | ScrollLockMask | LockMask);
last_time = e->xbutton.time;
BlackboxWindow *win = (BlackboxWindow *) 0;
- Basemenu *menu = (Basemenu *) 0;
- Slit *slit = (Slit *) 0;
- Toolbar *tbar = (Toolbar *) 0;
BScreen *scrn = (BScreen *) 0;
if ((win = searchWindow(e->xbutton.window))) {
/* XXX: is this sane on low colour desktops? */
if (e->xbutton.button == 1)
win->installColormap(True);
- } else if ((menu = searchMenu(e->xbutton.window))) {
- menu->buttonPressEvent(&e->xbutton);
- } else if ((slit = searchSlit(e->xbutton.window))) {
- slit->buttonPressEvent(&e->xbutton);
- } else if ((tbar = searchToolbar(e->xbutton.window))) {
- tbar->buttonPressEvent(&e->xbutton);
} else if ((scrn = searchScreen(e->xbutton.window))) {
scrn->buttonPressEvent(&e->xbutton);
if (active_screen != scrn) {
case ButtonRelease: {
// strip the lock key modifiers
- e->xbutton.state &= ~(NumLockMask | ScrollLockMask | LockMask);
+ //e->xbutton.state &= ~(NumLockMask | ScrollLockMask | LockMask);
last_time = e->xbutton.time;
BlackboxWindow *win = (BlackboxWindow *) 0;
- Basemenu *menu = (Basemenu *) 0;
- Toolbar *tbar = (Toolbar *) 0;
if ((win = searchWindow(e->xbutton.window)))
win->buttonReleaseEvent(&e->xbutton);
- else if ((menu = searchMenu(e->xbutton.window)))
- menu->buttonReleaseEvent(&e->xbutton);
- else if ((tbar = searchToolbar(e->xbutton.window)))
- tbar->buttonReleaseEvent(&e->xbutton);
break;
}
case ConfigureRequest: {
- // compress configure requests...
- XEvent realevent;
- unsigned int i = 0;
- while(XCheckTypedWindowEvent(getXDisplay(), e->xconfigurerequest.window,
- ConfigureRequest, &realevent)) {
- i++;
- }
- if ( i > 0 )
- e = &realevent;
-
BlackboxWindow *win = (BlackboxWindow *) 0;
- Slit *slit = (Slit *) 0;
if ((win = searchWindow(e->xconfigurerequest.window))) {
win->configureRequestEvent(&e->xconfigurerequest);
- } else if ((slit = searchSlit(e->xconfigurerequest.window))) {
- slit->configureRequestEvent(&e->xconfigurerequest);
} else {
if (validateWindow(e->xconfigurerequest.window)) {
XWindowChanges xwc;
xwc.sibling = e->xconfigurerequest.above;
xwc.stack_mode = e->xconfigurerequest.detail;
- XConfigureWindow(getXDisplay(), e->xconfigurerequest.window,
+ XConfigureWindow(otk::OBDisplay::display, e->xconfigurerequest.window,
e->xconfigurerequest.value_mask, &xwc);
}
}
focus = True;
}
- if (focus && (win->isTransient() || win->getScreen()->doFocusNew()))
+ if (focus && (win->isTransient() || win->getScreen()->doFocusNew()) &&
+ win->isVisible())
win->setInputFocus();
} else {
BScreen *screen = searchScreen(e->xmaprequest.parent);
the window is on
*/
XWindowAttributes wattrib;
- if (! XGetWindowAttributes(getXDisplay(), e->xmaprequest.window,
+ if (! XGetWindowAttributes(otk::OBDisplay::display, e->xmaprequest.window,
&wattrib)) {
// failed to get the window attributes, perhaps the window has
// now been destroyed?
case UnmapNotify: {
BlackboxWindow *win = (BlackboxWindow *) 0;
- Slit *slit = (Slit *) 0;
BScreen *screen = (BScreen *) 0;
if ((win = searchWindow(e->xunmap.window))) {
win->unmapNotifyEvent(&e->xunmap);
- } else if ((slit = searchSlit(e->xunmap.window))) {
- slit->unmapNotifyEvent(&e->xunmap);
} else if ((screen = searchSystrayWindow(e->xunmap.window))) {
screen->removeSystrayWindow(e->xunmap.window);
}
case DestroyNotify: {
BlackboxWindow *win = (BlackboxWindow *) 0;
- Slit *slit = (Slit *) 0;
BScreen *screen = (BScreen *) 0;
BWindowGroup *group = (BWindowGroup *) 0;
if ((win = searchWindow(e->xdestroywindow.window))) {
win->destroyNotifyEvent(&e->xdestroywindow);
- } else if ((slit = searchSlit(e->xdestroywindow.window))) {
- slit->removeClient(e->xdestroywindow.window, False);
} else if ((group = searchGroup(e->xdestroywindow.window))) {
delete group;
} else if ((screen = searchSystrayWindow(e->xunmap.window))) {
to an already unmapped window.
*/
BlackboxWindow *win = searchWindow(e->xreparent.window);
- if (win) {
+ if (win)
win->reparentNotifyEvent(&e->xreparent);
- } else {
- Slit *slit = searchSlit(e->xreparent.window);
- if (slit && slit->getWindowID() != e->xreparent.parent)
- slit->removeClient(e->xreparent.window, True);
- }
break;
}
// motion notify compression...
XEvent realevent;
unsigned int i = 0;
- while (XCheckTypedWindowEvent(getXDisplay(), e->xmotion.window,
+ while (XCheckTypedWindowEvent(otk::OBDisplay::display, e->xmotion.window,
MotionNotify, &realevent)) {
i++;
}
if ( i > 0 )
e = &realevent;
+ // the pointer is on the wrong screen
+ if (! e->xmotion.same_screen)
+ break;
+
// strip the lock key modifiers
- e->xbutton.state &= ~(NumLockMask | ScrollLockMask | LockMask);
+ //e->xmotion.state &= ~(NumLockMask | ScrollLockMask | LockMask);
last_time = e->xmotion.time;
BlackboxWindow *win = (BlackboxWindow *) 0;
- Basemenu *menu = (Basemenu *) 0;
if ((win = searchWindow(e->xmotion.window)))
win->motionNotifyEvent(&e->xmotion);
- else if ((menu = searchMenu(e->xmotion.window)))
- menu->motionNotifyEvent(&e->xmotion);
break;
}
BScreen *screen = (BScreen *) 0;
BlackboxWindow *win = (BlackboxWindow *) 0;
- Basemenu *menu = (Basemenu *) 0;
- Toolbar *tbar = (Toolbar *) 0;
- Slit *slit = (Slit *) 0;
if (e->xcrossing.mode == NotifyGrab) break;
- XEvent dummy;
- scanargs sa;
- sa.w = e->xcrossing.window;
- sa.enter = sa.leave = False;
- XCheckIfEvent(getXDisplay(), &dummy, queueScanner, (char *) &sa);
-
if ((e->xcrossing.window == e->xcrossing.root) &&
(screen = searchScreen(e->xcrossing.window))) {
screen->getImageControl()->installRootColormap();
} else if ((win = searchWindow(e->xcrossing.window))) {
- if (win->getScreen()->isSloppyFocus() &&
- (! win->isFocused()) && (! no_focus) &&
- win->isNormal()) { // don't focus non-normal windows with mouseover
- if (((! sa.leave) || sa.inferior) && win->isVisible()) {
- if (win->setInputFocus())
- win->installColormap(True); // XXX: shouldnt we honour no install?
- }
- }
- } else if ((menu = searchMenu(e->xcrossing.window))) {
- menu->enterNotifyEvent(&e->xcrossing);
- } else if ((tbar = searchToolbar(e->xcrossing.window))) {
- tbar->enterNotifyEvent(&e->xcrossing);
- } else if ((slit = searchSlit(e->xcrossing.window))) {
- slit->enterNotifyEvent(&e->xcrossing);
+ if (! no_focus)
+ win->enterNotifyEvent(&e->xcrossing);
}
break;
}
last_time = e->xcrossing.time;
BlackboxWindow *win = (BlackboxWindow *) 0;
- Basemenu *menu = (Basemenu *) 0;
- Toolbar *tbar = (Toolbar *) 0;
- Slit *slit = (Slit *) 0;
-
- if ((menu = searchMenu(e->xcrossing.window)))
- menu->leaveNotifyEvent(&e->xcrossing);
- else if ((win = searchWindow(e->xcrossing.window)))
- win->installColormap(False);
- else if ((tbar = searchToolbar(e->xcrossing.window)))
- tbar->leaveNotifyEvent(&e->xcrossing);
- else if ((slit = searchSlit(e->xcrossing.window)))
- slit->leaveNotifyEvent(&e->xcrossing);
+
+ if ((win = searchWindow(e->xcrossing.window)))
+ win->leaveNotifyEvent(&e->xcrossing);
break;
}
ey1 = e->xexpose.y;
ex2 = ex1 + e->xexpose.width - 1;
ey2 = ey1 + e->xexpose.height - 1;
- while (XCheckTypedWindowEvent(getXDisplay(), e->xexpose.window,
+ while (XCheckTypedWindowEvent(otk::OBDisplay::display, e->xexpose.window,
Expose, &realevent)) {
i++;
e->xexpose.height = ey2 - ey1 + 1;
BlackboxWindow *win = (BlackboxWindow *) 0;
- Basemenu *menu = (Basemenu *) 0;
- Toolbar *tbar = (Toolbar *) 0;
if ((win = searchWindow(e->xexpose.window)))
win->exposeEvent(&e->xexpose);
- else if ((menu = searchMenu(e->xexpose.window)))
- menu->exposeEvent(&e->xexpose);
- else if ((tbar = searchToolbar(e->xexpose.window)))
- tbar->exposeEvent(&e->xexpose);
break;
}
case KeyPress: {
- Toolbar *tbar = searchToolbar(e->xkey.window);
-
- if (tbar && tbar->isEditing())
- tbar->keyPressEvent(&e->xkey);
-
break;
}
has moved to a known window.
*/
e->xfocus.window = None;
+
+ no_focus = False; // focusing is back on
}
break;
(the FocusIn event handler sets the window in the event
structure to None to indicate this).
*/
- if (XCheckTypedEvent(getXDisplay(), FocusIn, &event)) {
+ if (XCheckTypedEvent(otk::OBDisplay::display, FocusIn, &event)) {
process_event(&event);
if (event.xfocus.window == None) {
BlackboxWindow *focus;
Window w;
int revert;
- XGetInputFocus(getXDisplay(), &w, &revert);
+ XGetInputFocus(otk::OBDisplay::display, &w, &revert);
focus = searchWindow(w);
if (focus) {
/*
case ClientMessage: {
if (e->xclient.format == 32) {
- if (e->xclient.message_type == xatom->getAtom(XAtom::wm_change_state)) {
+ if (e->xclient.message_type == xatom->atom(otk::OBProperty::wm_change_state)) {
// WM_CHANGE_STATE message
BlackboxWindow *win = searchWindow(e->xclient.window);
if (! win || ! win->validateClient()) return;
if (e->xclient.data.l[0] == NormalState)
win->deiconify();
} else if (e->xclient.message_type ==
- xatom->getAtom(XAtom::blackbox_change_workspace) ||
+ xatom->atom(otk::OBProperty::blackbox_change_workspace) ||
e->xclient.message_type ==
- xatom->getAtom(XAtom::net_current_desktop)) {
+ xatom->atom(otk::OBProperty::net_current_desktop)) {
// NET_CURRENT_DESKTOP message
BScreen *screen = searchScreen(e->xclient.window);
if (screen && workspace < screen->getWorkspaceCount())
screen->changeWorkspaceID(workspace);
} else if (e->xclient.message_type ==
- xatom->getAtom(XAtom::blackbox_change_window_focus)) {
+ xatom->atom(otk::OBProperty::blackbox_change_window_focus)) {
// TEMP HACK TO KEEP BBKEYS WORKING
BlackboxWindow *win = searchWindow(e->xclient.window);
if (win && win->isVisible() && win->setInputFocus())
win->installColormap(True);
} else if (e->xclient.message_type ==
- xatom->getAtom(XAtom::net_active_window)) {
+ xatom->atom(otk::OBProperty::net_active_window)) {
// NET_ACTIVE_WINDOW
BlackboxWindow *win = searchWindow(e->xclient.window);
BScreen *screen = win->getScreen();
if (win->isIconic())
- win->deiconify(False, True);
- if (win->isShaded())
- win->shade();
- if (win->getWorkspaceNumber() != screen->getCurrentWorkspaceID())
+ win->deiconify(False, False);
+ if (! win->isStuck() &&
+ (win->getWorkspaceNumber() != screen->getCurrentWorkspaceID())) {
+ no_focus = True;
screen->changeWorkspaceID(win->getWorkspaceNumber());
+ }
if (win->isVisible() && win->setInputFocus()) {
win->getScreen()->getWorkspace(win->getWorkspaceNumber())->
raiseWindow(win);
}
}
} else if (e->xclient.message_type ==
- xatom->getAtom(XAtom::blackbox_cycle_window_focus)) {
+ xatom->atom(otk::OBProperty::blackbox_cycle_window_focus)) {
// BLACKBOX_CYCLE_WINDOW_FOCUS
BScreen *screen = searchScreen(e->xclient.window);
screen->nextFocus();
}
} else if (e->xclient.message_type ==
- xatom->getAtom(XAtom::net_wm_desktop)) {
+ xatom->atom(otk::OBProperty::net_wm_desktop)) {
// NET_WM_DESKTOP
BlackboxWindow *win = searchWindow(e->xclient.window);
}
}
} else if (e->xclient.message_type ==
- xatom->getAtom(XAtom::blackbox_change_attributes)) {
+ xatom->atom(otk::OBProperty::blackbox_change_attributes)) {
// BLACKBOX_CHANGE_ATTRIBUTES
BlackboxWindow *win = searchWindow(e->xclient.window);
win->changeBlackboxHints(&net);
}
} else if (e->xclient.message_type ==
- xatom->getAtom(XAtom::net_number_of_desktops)) {
+ xatom->atom(otk::OBProperty::net_number_of_desktops)) {
// NET_NUMBER_OF_DESKTOPS
BScreen *screen = searchScreen(e->xclient.window);
if (e->xclient.data.l[0] > 0)
screen->changeWorkspaceCount((unsigned) e->xclient.data.l[0]);
} else if (e->xclient.message_type ==
- xatom->getAtom(XAtom::net_close_window)) {
+ xatom->atom(otk::OBProperty::net_close_window)) {
// NET_CLOSE_WINDOW
BlackboxWindow *win = searchWindow(e->xclient.window);
if (win && win->validateClient())
win->close(); // could this be smarter?
} else if (e->xclient.message_type ==
- xatom->getAtom(XAtom::net_wm_moveresize)) {
+ xatom->atom(otk::OBProperty::net_wm_moveresize)) {
// NET_WM_MOVERESIZE
BlackboxWindow *win = searchWindow(e->xclient.window);
if (win && win->validateClient()) {
int x_root = e->xclient.data.l[0],
y_root = e->xclient.data.l[1];
if ((Atom) e->xclient.data.l[2] ==
- xatom->getAtom(XAtom::net_wm_moveresize_move)) {
+ xatom->atom(otk::OBProperty::net_wm_moveresize_move)) {
win->beginMove(x_root, y_root);
} else {
if ((Atom) e->xclient.data.l[2] ==
- xatom->getAtom(XAtom::net_wm_moveresize_size_topleft))
+ xatom->atom(otk::OBProperty::net_wm_moveresize_size_topleft))
win->beginResize(x_root, y_root, BlackboxWindow::TopLeft);
else if ((Atom) e->xclient.data.l[2] ==
- xatom->getAtom(XAtom::net_wm_moveresize_size_topright))
+ xatom->atom(otk::OBProperty::net_wm_moveresize_size_topright))
win->beginResize(x_root, y_root, BlackboxWindow::TopRight);
else if ((Atom) e->xclient.data.l[2] ==
- xatom->getAtom(XAtom::net_wm_moveresize_size_bottomleft))
+ xatom->atom(otk::OBProperty::net_wm_moveresize_size_bottomleft))
win->beginResize(x_root, y_root, BlackboxWindow::BottomLeft);
else if ((Atom) e->xclient.data.l[2] ==
- xatom->getAtom(XAtom::net_wm_moveresize_size_bottomright))
+ xatom->atom(otk::OBProperty::net_wm_moveresize_size_bottomright))
win->beginResize(x_root, y_root, BlackboxWindow::BottomRight);
}
}
} else if (e->xclient.message_type ==
- xatom->getAtom(XAtom::net_wm_state)) {
+ xatom->atom(otk::OBProperty::net_wm_state)) {
// NET_WM_STATE
BlackboxWindow *win = searchWindow(e->xclient.window);
if (win && win->validateClient()) {
if ((Atom) e->xclient.data.l[0] == 1) {
// ADD
- if (state[i] == xatom->getAtom(XAtom::net_wm_state_modal)) {
+ if (state[i] == xatom->atom(otk::OBProperty::net_wm_state_modal)) {
win->setModal(True);
} else if (state[i] ==
- xatom->getAtom(XAtom::net_wm_state_maximized_vert)) {
+ xatom->atom(otk::OBProperty::net_wm_state_maximized_vert)) {
if (win->isMaximizedHoriz()) {
win->maximize(0); // unmaximize
win->maximize(1); // full
win->maximize(2); // vert
}
} else if (state[i] ==
- xatom->getAtom(XAtom::net_wm_state_maximized_horz)) {
+ xatom->atom(otk::OBProperty::net_wm_state_maximized_horz)) {
if (win->isMaximizedVert()) {
win->maximize(0); // unmaximize
win->maximize(1); // full
win->maximize(3); // horiz
}
} else if (state[i] ==
- xatom->getAtom(XAtom::net_wm_state_shaded)) {
+ xatom->atom(otk::OBProperty::net_wm_state_shaded)) {
if (! win->isShaded())
win->shade();
} else if (state[i] ==
- xatom->getAtom(XAtom::net_wm_state_skip_taskbar)) {
+ xatom->atom(otk::OBProperty::net_wm_state_skip_taskbar)) {
win->setSkipTaskbar(True);
} else if (state[i] ==
- xatom->getAtom(XAtom::net_wm_state_skip_pager)) {
+ xatom->atom(otk::OBProperty::net_wm_state_skip_pager)) {
win->setSkipPager(True);
} else if (state[i] ==
- xatom->getAtom(XAtom::net_wm_state_fullscreen)) {
+ xatom->atom(otk::OBProperty::net_wm_state_fullscreen)) {
win->setFullscreen(True);
}
} else if (action == 0) {
// REMOVE
- if (state[i] == xatom->getAtom(XAtom::net_wm_state_modal)) {
+ if (state[i] == xatom->atom(otk::OBProperty::net_wm_state_modal)) {
win->setModal(False);
} else if (state[i] ==
- xatom->getAtom(XAtom::net_wm_state_maximized_vert)) {
+ xatom->atom(otk::OBProperty::net_wm_state_maximized_vert)) {
if (win->isMaximizedFull()) {
win->maximize(0); // unmaximize
win->maximize(3); // horiz
win->maximize(0); // unmaximize
}
} else if (state[i] ==
- xatom->getAtom(XAtom::net_wm_state_maximized_horz)) {
+ xatom->atom(otk::OBProperty::net_wm_state_maximized_horz)) {
if (win->isMaximizedFull()) {
win->maximize(0); // unmaximize
win->maximize(2); // vert
win->maximize(0); // unmaximize
}
} else if (state[i] ==
- xatom->getAtom(XAtom::net_wm_state_shaded)) {
+ xatom->atom(otk::OBProperty::net_wm_state_shaded)) {
if (win->isShaded())
win->shade();
} else if (state[i] ==
- xatom->getAtom(XAtom::net_wm_state_skip_taskbar)) {
+ xatom->atom(otk::OBProperty::net_wm_state_skip_taskbar)) {
win->setSkipTaskbar(False);
} else if (state[i] ==
- xatom->getAtom(XAtom::net_wm_state_skip_pager)) {
+ xatom->atom(otk::OBProperty::net_wm_state_skip_pager)) {
win->setSkipPager(False);
} else if (state[i] ==
- xatom->getAtom(XAtom::net_wm_state_fullscreen)) {
+ xatom->atom(otk::OBProperty::net_wm_state_fullscreen)) {
win->setFullscreen(False);
}
} else if (action == 2) {
// TOGGLE
- if (state[i] == xatom->getAtom(XAtom::net_wm_state_modal)) {
+ if (state[i] == xatom->atom(otk::OBProperty::net_wm_state_modal)) {
win->setModal(! win->isModal());
} else if (state[i] ==
- xatom->getAtom(XAtom::net_wm_state_maximized_vert)) {
+ xatom->atom(otk::OBProperty::net_wm_state_maximized_vert)) {
if (win->isMaximizedFull()) {
win->maximize(0); // unmaximize
win->maximize(3); // horiz
win->maximize(2); // vert
}
} else if (state[i] ==
- xatom->getAtom(XAtom::net_wm_state_maximized_horz)) {
+ xatom->atom(otk::OBProperty::net_wm_state_maximized_horz)) {
if (win->isMaximizedFull()) {
win->maximize(0); // unmaximize
win->maximize(2); // vert
win->maximize(3); // horiz
}
} else if (state[i] ==
- xatom->getAtom(XAtom::net_wm_state_shaded)) {
+ xatom->atom(otk::OBProperty::net_wm_state_shaded)) {
win->shade();
} else if (state[i] ==
- xatom->getAtom(XAtom::net_wm_state_skip_taskbar)) {
+ xatom->atom(otk::OBProperty::net_wm_state_skip_taskbar)) {
win->setSkipTaskbar(! win->skipTaskbar());
} else if (state[i] ==
- xatom->getAtom(XAtom::net_wm_state_skip_pager)) {
+ xatom->atom(otk::OBProperty::net_wm_state_skip_pager)) {
win->setSkipPager(! win->skipPager());
} else if (state[i] ==
- xatom->getAtom(XAtom::net_wm_state_fullscreen)) {
+ xatom->atom(otk::OBProperty::net_wm_state_fullscreen)) {
win->setFullscreen(! win->isFullscreen());
}
}
default: {
#ifdef SHAPE
- if (e->type == getShapeEventBase()) {
+ if (e->type == otk::OBDisplay::shapeEventBase()) {
XShapeEvent *shape_event = (XShapeEvent *) e;
BlackboxWindow *win = searchWindow(e->xany.window);
- if (win)
+ if (win && shape_event->kind == ShapeBounding)
win->shapeEvent(shape_event);
}
#endif // SHAPE
break;
case SIGUSR2:
- rereadMenu();
break;
case SIGPIPE:
bool Blackbox::validateWindow(Window window) {
XEvent event;
- if (XCheckTypedWindowEvent(getXDisplay(), window, DestroyNotify, &event)) {
- XPutBackEvent(getXDisplay(), &event);
+ if (XCheckTypedWindowEvent(otk::OBDisplay::display, window, DestroyNotify, &event)) {
+ XPutBackEvent(otk::OBDisplay::display, &event);
return False;
}
}
-Basemenu *Blackbox::searchMenu(Window window) {
- MenuLookup::iterator it = menuSearchList.find(window);
- if (it != menuSearchList.end())
- return it->second;
-
- return (Basemenu*) 0;
-}
-
-
-Toolbar *Blackbox::searchToolbar(Window window) {
- ToolbarLookup::iterator it = toolbarSearchList.find(window);
- if (it != toolbarSearchList.end())
- return it->second;
-
- return (Toolbar*) 0;
-}
-
-
-Slit *Blackbox::searchSlit(Window window) {
- SlitLookup::iterator it = slitSearchList.find(window);
- if (it != slitSearchList.end())
- return it->second;
-
- return (Slit*) 0;
-}
-
-
void Blackbox::saveSystrayWindowSearch(Window window, BScreen *screen) {
systraySearchList.insert(WindowScreenLookupPair(window, screen));
}
}
-void Blackbox::saveMenuSearch(Window window, Basemenu *data) {
- menuSearchList.insert(MenuLookupPair(window, data));
-}
-
-
-void Blackbox::saveToolbarSearch(Window window, Toolbar *data) {
- toolbarSearchList.insert(ToolbarLookupPair(window, data));
-}
-
-
-void Blackbox::saveSlitSearch(Window window, Slit *data) {
- slitSearchList.insert(SlitLookupPair(window, data));
-}
-
-
void Blackbox::removeSystrayWindowSearch(Window window) {
systraySearchList.erase(window);
}
}
-void Blackbox::removeMenuSearch(Window window) {
- menuSearchList.erase(window);
-}
-
-
-void Blackbox::removeToolbarSearch(Window window) {
- toolbarSearchList.erase(window);
-}
-
-
-void Blackbox::removeSlitSearch(Window window) {
- slitSearchList.erase(window);
-}
-
-
void Blackbox::restart(const char *prog) {
shutdown();
// fall back in case the above execlp doesn't work
execvp(argv[0], argv);
- string name = basename(argv[0]);
+ string name = ::basename(argv[0]);
execvp(name.c_str(), argv);
}
void Blackbox::shutdown(void) {
- BaseDisplay::shutdown();
+ Openbox::shutdown();
- XSetInputFocus(getXDisplay(), PointerRoot, None, CurrentTime);
+ XSetInputFocus(otk::OBDisplay::display, PointerRoot, None, CurrentTime);
std::for_each(screenList.begin(), screenList.end(),
std::mem_fun(&BScreen::shutdown));
- XSync(getXDisplay(), False);
+ XSync(otk::OBDisplay::display, False);
}
resource.xinerama_placement = x;
config.setValue("session.xineramaSupport.windowPlacement",
resource.xinerama_placement);
- reconfigure(); // make sure all screens get this change
-}
-
+ reconfigure(); // make sure all screens get this
void Blackbox::saveXineramaMaximizing(bool x) {
resource.xinerama_maximize = x;
config.setValue("session.cacheMax", resource.cache_max);
config.setValue("session.styleFile", resource.style_file);
config.setValue("session.titlebarLayout", resource.titlebar_layout);
+
+ string s;
+ if (resource.mod_mask & Mod1Mask) s += "Mod1-";
+ if (resource.mod_mask & Mod2Mask) s += "Mod2-";
+ if (resource.mod_mask & Mod3Mask) s += "Mod3-";
+ if (resource.mod_mask & Mod4Mask) s += "Mod4-";
+ if (resource.mod_mask & Mod5Mask) s += "Mod5-";
+ if (resource.mod_mask & ShiftMask) s += "Shift-";
+ if (resource.mod_mask & ControlMask) s += "Control-";
+ s.resize(s.size() - 1); // drop the last '-'
+ config.setValue("session.modifierMask", s);
#ifdef XINERAMA
saveXineramaPlacement(resource.xinerama_placement);
else if (resource.colors_per_channel > 6) resource.colors_per_channel = 6;
if (config.getValue("session.styleFile", s))
- resource.style_file = expandTilde(s);
+ resource.style_file = otk::expandTilde(s);
else
resource.style_file = DEFAULTSTYLE;
resource.xinerama_snap))
resource.xinerama_snap = false;
#endif // XINERAMA
+
+ resource.mod_mask = 0;
+ if (config.getValue("session.modifierMask", s)) {
+ if (s.find("Mod1") != string::npos)
+ resource.mod_mask |= Mod1Mask;
+ if (s.find("Mod2") != string::npos)
+ resource.mod_mask |= Mod2Mask;
+ if (s.find("Mod3") != string::npos)
+ resource.mod_mask |= Mod3Mask;
+ if (s.find("Mod4") != string::npos)
+ resource.mod_mask |= Mod4Mask;
+ if (s.find("Mod5") != string::npos)
+ resource.mod_mask |= Mod5Mask;
+ if (s.find("Shift") != string::npos)
+ resource.mod_mask |= ShiftMask;
+ if (s.find("Control") != string::npos)
+ resource.mod_mask |= ControlMask;
+ }
+ if (! resource.mod_mask)
+ resource.mod_mask = Mod1Mask;
}
void Blackbox::reconfigure(void) {
// don't reconfigure while saving the initial rc file, it's a waste and it
// breaks somethings (workspace names)
- if (isStartup()) return;
+ if (state() == Openbox::State_Starting) return;
reconfigure_wait = True;
- if (! timer->isTiming()) timer->start();
+ if (! timer->timing()) timer->start();
}
void Blackbox::real_reconfigure(void) {
load_rc();
- std::for_each(menuTimestamps.begin(), menuTimestamps.end(),
- PointerAssassin());
- menuTimestamps.clear();
-
- gcCache()->purge();
+ otk::OBDisplay::gcCache()->purge();
std::for_each(screenList.begin(), screenList.end(),
std::mem_fun(&BScreen::reconfigure));
}
-void Blackbox::checkMenu(void) {
- bool reread = False;
- MenuTimestampList::iterator it = menuTimestamps.begin();
- for(; it != menuTimestamps.end(); ++it) {
- MenuTimestamp *tmp = *it;
- struct stat buf;
-
- if (! stat(tmp->filename.c_str(), &buf)) {
- if (tmp->timestamp != buf.st_ctime)
- reread = True;
- } else {
- reread = True;
- }
- }
-
- if (reread) rereadMenu();
-}
-
-
-void Blackbox::rereadMenu(void) {
- reread_menu_wait = True;
-
- if (! timer->isTiming()) timer->start();
-}
-
-
-void Blackbox::real_rereadMenu(void) {
- std::for_each(menuTimestamps.begin(), menuTimestamps.end(),
- PointerAssassin());
- menuTimestamps.clear();
-
- std::for_each(screenList.begin(), screenList.end(),
- std::mem_fun(&BScreen::rereadMenu));
-}
-
-
void Blackbox::saveStyleFilename(const string& filename) {
assert(! filename.empty());
resource.style_file = filename;
}
-void Blackbox::addMenuTimestamp(const string& filename) {
- assert(! filename.empty());
- bool found = False;
-
- MenuTimestampList::iterator it = menuTimestamps.begin();
- for (; it != menuTimestamps.end() && ! found; ++it) {
- if ((*it)->filename == filename) found = True;
- }
- if (! found) {
- struct stat buf;
-
- if (! stat(filename.c_str(), &buf)) {
- MenuTimestamp *ts = new MenuTimestamp;
-
- ts->filename = filename;
- ts->timestamp = buf.st_ctime;
-
- menuTimestamps.push_back(ts);
- }
- }
-}
-
-
-void Blackbox::timeout(void) {
- if (reconfigure_wait)
- real_reconfigure();
+void Blackbox::timeout(Blackbox *t) {
+ if (t->reconfigure_wait)
+ t->real_reconfigure();
- if (reread_menu_wait)
- real_rereadMenu();
-
- reconfigure_wait = reread_menu_wait = False;
+ t->reconfigure_wait = False;
}
if (! old_screen) {
if (active_screen) {
// set input focus to the toolbar of the screen with mouse
- XSetInputFocus(getXDisplay(),
+ XSetInputFocus(otk::OBDisplay::display,
active_screen->getRootWindow(),
RevertToPointerRoot, CurrentTime);
} else {
// set input focus to the toolbar of the first managed screen
- XSetInputFocus(getXDisplay(),
+ XSetInputFocus(otk::OBDisplay::display,
screenList.front()->getRootWindow(),
RevertToPointerRoot, CurrentTime);
}
} else {
// set input focus to the toolbar of the last screen
- XSetInputFocus(getXDisplay(), old_screen->getRootWindow(),
+ XSetInputFocus(otk::OBDisplay::display, old_screen->getRootWindow(),
RevertToPointerRoot, CurrentTime);
}
}
if (active_screen && active_screen->isScreenManaged()) {
- active_screen->getToolbar()->redrawWindowLabel(True);
active_screen->updateNetizenWindowFocus();
}
if (old_screen && old_screen != active_screen) {
- old_screen->getToolbar()->redrawWindowLabel(True);
old_screen->updateNetizenWindowFocus();
}
}
+
+
+}