using std::string;
#include "blackbox.hh"
-#include "gccache.hh"
-#include "image.hh"
+#include "otk/gccache.hh"
+#include "otk/image.hh"
+#include "otk/assassin.hh"
#include "screen.hh"
-#include "util.hh"
-#include "window.hh"
+#include "otk/util.hh"
+#include "bbwindow.hh"
#include "workspace.hh"
-#include "xatom.hh"
+
+namespace ob {
Blackbox *blackbox;
-Blackbox::Blackbox(char **m_argv, char *dpy_name, char *rc)
- : 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);
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()) {
active_screen = screenList.front();
setFocusedWindow(0);
- XSynchronize(getXDisplay(), False);
- XSync(getXDisplay(), False);
+ XSynchronize(otk::OBDisplay::display, False);
+ XSync(otk::OBDisplay::display, 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(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;
case ButtonRelease: {
// strip the lock key modifiers
- e->xbutton.state &= ~(NumLockMask | ScrollLockMask | LockMask);
+ //e->xbutton.state &= ~(NumLockMask | ScrollLockMask | LockMask);
last_time = e->xbutton.time;
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);
}
}
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?
// 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++;
}
break;
// strip the lock key modifiers
- e->xmotion.state &= ~(NumLockMask | ScrollLockMask | LockMask);
+ //e->xmotion.state &= ~(NumLockMask | ScrollLockMask | LockMask);
last_time = e->xmotion.time;
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++;
(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);
}
}
} 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);
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;
}
// 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;
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;
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();
- gcCache()->purge();
+ otk::OBDisplay::gcCache()->purge();
std::for_each(screenList.begin(), screenList.end(),
std::mem_fun(&BScreen::reconfigure));
}
-void Blackbox::timeout(void) {
- if (reconfigure_wait)
- real_reconfigure();
+void Blackbox::timeout(Blackbox *t) {
+ if (t->reconfigure_wait)
+ t->real_reconfigure();
- reconfigure_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);
}
}
old_screen->updateNetizenWindowFocus();
}
}
+
+
+}