all repos — openbox @ 91a7ca7d206f2ce09a0eb1229db57b67d9bafc67

openbox fork - make it a bit more like ryudo

added the X classes to the build process though they aren't sued by anything else yet. They now compile too.
Dana Jansens danakj@orodu.net
commit

91a7ca7d206f2ce09a0eb1229db57b67d9bafc67

parent

c17256d745e2730de5458f954af49860c0f4bce7

7 files changed, 133 insertions(+), 89 deletions(-)

jump to
M src/Makefile.amsrc/Makefile.am

@@ -30,7 +30,7 @@ -DDEFAULTSTYLE=\"$(DEFAULT_STYLE)\"

bin_PROGRAMS= openbox -openbox_SOURCES= BaseDisplay.cc Basemenu.cc Clientmenu.cc Configmenu.cc Geometry.cc Iconmenu.cc Image.cc Netizen.cc Resource.cc Rootmenu.cc Screen.cc Slit.cc Timer.cc Toolbar.cc Window.cc Windowmenu.cc Workspace.cc Workspacemenu.cc openbox.cc bsd-snprintf.c i18n.cc main.cc +openbox_SOURCES= BaseDisplay.cc Basemenu.cc Clientmenu.cc Configmenu.cc Geometry.cc Iconmenu.cc Image.cc Netizen.cc Resource.cc Rootmenu.cc Screen.cc Slit.cc Timer.cc Toolbar.cc Window.cc Windowmenu.cc Workspace.cc Workspacemenu.cc XAtom.cc XDisplay.cc XScreen.cc openbox.cc bsd-snprintf.c i18n.cc main.cc MAINTAINERCLEANFILES= Makefile.in

@@ -82,6 +82,9 @@ Toolbar.o: Toolbar.cc i18n.h openbox.h BaseDisplay.h \

Timer.h Image.h Window.h Iconmenu.h Basemenu.h Windowmenu.h Slit.h \ Clientmenu.h Workspace.h Rootmenu.h Screen.h Configmenu.h \ Netizen.h Workspacemenu.h Toolbar.h Resource.h Geometry.h +XAtom.o: XAtom.cc XAtom.h XDisplay.h XScreen.h Geometry.h Util.h +XDisplay.o: XDisplay.cc XDisplay.h XAtom.h XScreen.h Geometry.h Util.h +XScreen.o: XScreen.cc XScreen.h Geometry.h XDisplay.h XAtom.h Window.o: Window.cc i18n.h openbox.h BaseDisplay.h \ Timer.h Image.h Window.h Iconmenu.h Basemenu.h Windowmenu.h Slit.h \ Screen.h Configmenu.h Netizen.h Rootmenu.h Workspace.h \
M src/XAtom.ccsrc/XAtom.cc

@@ -21,8 +21,10 @@ // DEALINGS IN THE SOFTWARE.

#include "XAtom.h" #include "XDisplay.h" +#include "XScreen.h" +#include "Util.h" -XAtom::XAtom(XDisplay *display) { +XAtom::XAtom(const XDisplay *display) { _display = display->_display; wm_colormap_windows = getAtom("WM_COLORMAP_WINDOWS");

@@ -30,7 +32,7 @@ wm_protocols = getAtom("WM_PROTOCOLS");

wm_state = getAtom("WM_STATE"); wm_change_state = getAtom("WM_CHANGE_STATE"); wm_delete_window = getAtom("WM_DELETE_WINDOW"); - wm_take_focus = getAtom("WM_TAKE_FOCUS") + wm_take_focus = getAtom("WM_TAKE_FOCUS"); motif_wm_hints = getAtom("_MOTIF_WM_HINTS"); openbox_hints = getAtom("_BLACKBOX_HINTS"); openbox_attributes = getAtom("_BLACKBOX_ATTRIBUTES");

@@ -90,9 +92,10 @@ * clean up the class' members

*/ XAtom::~XAtom() { while (!_support_windows.empty()) { - Window w = _support_windows.pop_back(); - ASSERT(w != None); // make sure we aren't fucking with this somewhere - XDestroyWindow(_display, w); + // make sure we aren't fucking with this somewhere + ASSERT(_support_windows.back() != None); + XDestroyWindow(_display, _support_windows.back()); + _support_windows.pop_back(); } }

@@ -111,7 +114,7 @@ */

void XAtom::setSupported(const XScreen *screen) { // create the netwm support window Window w = XCreateSimpleWindow(_display, screen->rootWindow(), - 0, 0, 1, 1, 0, 0, 0) + 0, 0, 1, 1, 0, 0, 0); ASSERT(w != None); _support_windows.push_back(w);

@@ -125,7 +128,7 @@ * Sets a window property on a window, optionally appending to the existing

* value. */ void XAtom::setValue(Window win, Atom atom, Atom type, unsigned char* data, - int size, int nelements, bool append) { + int size, int nelements, bool append) const { ASSERT(win != None); ASSERT(atom != None); ASSERT(type != None); ASSERT(data != (unsigned char *) 0); ASSERT(size == 8 || size == 16 || size == 32);

@@ -139,44 +142,46 @@

/* * Set a 32-bit CARDINAL property value on a window. */ -void XAtom::setValue(Window win, Atom atom, long value) const { - setValue(win, atom, XA_CARDINAL, static_cast<unsigned char*>(&value), - sizeof(long), 1, false); +void XAtom::setCardValue(Window win, Atom atom, long value) const { + setValue(win, atom, XA_CARDINAL, reinterpret_cast<unsigned char*>(&value), + 32, 1, false); } /* * Set an Atom property value on a window. */ -void XAtom::setValue(Window win, Atom atom, Atom value) { - setValue(win, atom, XA_ATOM, static_cast<unsigned char*>(&value), - sizeof(Atom), 1, false); +void XAtom::setAtomValue(Window win, Atom atom, Atom value) const { + setValue(win, atom, XA_ATOM, reinterpret_cast<unsigned char*>(&value), + 32, 1, false); } /* * Set a Window property value on a window. */ -void XAtom::setValue(Window win, Atom atom, Window value) { - setValue(win, atom, XA_WINDOW, static_cast<unsigned char*>(&value), - sizeof(Window), 1, false); +void XAtom::setWindowValue(Window win, Atom atom, Window value) const { + setValue(win, atom, XA_WINDOW, reinterpret_cast<unsigned char*>(&value), + 32, 1, false); } /* * Set a Pixmap property value on a window. */ -void XAtom::setValue(Window win, Atom atom, Pixmap value) { - setValue(win, atom, XA_PIXMAP, static_cast<unsigned char*>(&value), - sizeof(Pixmap), 1, false); +void XAtom::setPixmapValue(Window win, Atom atom, Pixmap value) const { + setValue(win, atom, XA_PIXMAP, reinterpret_cast<unsigned char*>(&value), + 32, 1, false); } /* * Set a string property value on a window. */ -void XAtom::setValue(Window win, Atom atom, std::string &value) { - setValue(win, atom, XA_STRING, static_cast<unsigned char*>(value.c_str()), +void XAtom::setStringValue(Window win, Atom atom, std::string &value) const { + setValue(win, atom, XA_STRING, + const_cast<unsigned char*> + (reinterpret_cast<const unsigned char*>(value.c_str())), 8, value.size(), false); }

@@ -184,44 +189,47 @@

/* * Add elements to a 32-bit CARDINAL property value on a window. */ -void XAtom::addValue(Window win, Atom atom, long value) const { - setValue(win, atom, XA_CARDINAL, static_cast<unsigned char*>(&value), - sizeof(long), 1, true); +void XAtom::addCardValue(Window win, Atom atom, long value) const { + setValue(win, atom, XA_CARDINAL, reinterpret_cast<unsigned char*>(&value), + 32, 1, true); } /* * Add elements to an Atom property value on a window. */ -void XAtom::addValue(Window win, Atom atom, Atom value) const { - setValue(win, atom, XA_ATOM, static_cast<unsigned char*>(&value), - sizeof(Atom), 1, true); +void XAtom::addAtomValue(Window win, Atom atom, Atom value) const { + setValue(win, atom, XA_ATOM, reinterpret_cast<unsigned char*>(&value), + 32, 1, true); } /* * Add elements to a Window property value on a window. */ -void XAtom::addValue(Window win, Atom atom, Window value) const { - setValue(win, atom, XA_WINDOW, static_cast<unsigned char*>(&value), - sizeof(Window), 1, true); +void XAtom::addWindowValue(Window win, Atom atom, Window value) const { + setValue(win, atom, XA_WINDOW, reinterpret_cast<unsigned char*>(&value), + 32, 1, true); } /* * Add elements to a Pixmap property value on a window. */ -void XAtom::addValue(Window win, Atom atom, Pixmap value) const { - setValue(win, atom, XA_PIXMAP, static_cast<unsigned char*>(&value), - sizeof(Pixmap), 1, true); +void XAtom::addPixmapValue(Window win, Atom atom, Pixmap value) const { + setValue(win, atom, XA_PIXMAP, reinterpret_cast<unsigned char*>(&value), + 32, 1, true); } /* * Add characters to a string property value on a window. */ -void XAtom::addValue(Window win, Atom atom, std::string &value) const { - setValue(win, atom, XA_STRING, static_cast<unsigned char*>(value.c_str()), +void XAtom::addStringValue(Window win, Atom atom, std::string &value) const { + setValue(win, atom, XA_STRING, + const_cast<unsigned char*> + (reinterpret_cast<const unsigned char *> + (value.c_str())), 8, value.size(), true); }

@@ -276,52 +284,52 @@

/* * Gets a 32-bit Cardinal property's value from a window. */ -bool XAtom::getValue(Window win, Atom atom, unsigned long *nelements, +bool XAtom::getCardValue(Window win, Atom atom, unsigned long *nelements, long **value) const { return XAtom::getValue(win, atom, XA_CARDINAL, nelements, - static_cast<unsigned char **>(value), sizeof(long)); + reinterpret_cast<unsigned char **>(value), 32); } /* * Gets an Atom property's value from a window. */ -bool XAtom::getValue(Window win, Atom atom, unsigned long *nelements, +bool XAtom::getAtomValue(Window win, Atom atom, unsigned long *nelements, Atom **value) const { return XAtom::getValue(win, atom, XA_ATOM, nelements, - static_cast<unsigned char **>(value), sizeof(Atom)); + reinterpret_cast<unsigned char **>(value), 32); } /* * Gets an Window property's value from a window. */ -bool XAtom::getValue(Window win, Atom atom, unsigned long *nelements, +bool XAtom::getWindowValue(Window win, Atom atom, unsigned long *nelements, Window **value) const { return XAtom::getValue(win, atom, XA_WINDOW, nelements, - static_cast<unsigned char **>(value), sizeof(Window)); + reinterpret_cast<unsigned char **>(value), 32); } /* * Gets an Pixmap property's value from a window. */ -bool XAtom::getValue(Window win, Atom atom, unsigned long *nelements, +bool XAtom::getPixmapValue(Window win, Atom atom, unsigned long *nelements, Pixmap **value) const { return XAtom::getValue(win, atom, XA_PIXMAP, nelements, - static_cast<unsigned char **>(value), sizeof(Pixmap)); + reinterpret_cast<unsigned char **>(value), 32); } /* * Gets an string property's value from a window. */ -bool XAtom::getValue(Window win, Atom atom, unsigned long *nelements, +bool XAtom::getStringValue(Window win, Atom atom, unsigned long *nelements, std::string &value) const { unsigned char *data; bool ret = XAtom::getValue(win, atom, XA_STRING, nelements, &data, 8); if (ret) - value = data; + value = reinterpret_cast<char*>(data); return ret; }
M src/XAtom.hsrc/XAtom.h

@@ -27,6 +27,7 @@ #include <X11/Xatom.h>

#include <vector> class XDisplay; +class XScreen; class XAtom { typedef std::vector<Window> SupportWindows;

@@ -46,7 +47,7 @@ wm_change_state,

motif_wm_hints, openbox_attributes, openbox_change_attributes, - openbox_hints; + openbox_hints, // blackbox-protocol atoms (wm -> client) openbox_structure_messages,

@@ -57,7 +58,7 @@ openbox_notify_window_focus,

openbox_notify_current_workspace, openbox_notify_workspace_count, openbox_notify_window_raise, - openbox_notify_window_lower; + openbox_notify_window_lower, // blackbox-protocol atoms (client -> wm) openbox_change_workspace, openbox_change_window_focus,

@@ -95,10 +96,10 @@ // application protocols

net_wm_ping; Atom getAtom(const char *name) const; - void setSupported(const XScreen *screen) const; + void setSupported(const XScreen *screen); - void setValue(Window win, Atom atom, Atom type, unsigned char *data, int size, - int nelements, bool append); + void setValue(Window win, Atom atom, Atom type, unsigned char *data, + int size, int nelements, bool append) const; bool getValue(Window win, Atom atom, Atom type, unsigned long *nelements, unsigned char **value, int size) const;

@@ -107,34 +108,34 @@ XAtom(const XAtom &);

XAtom& operator=(const XAtom&); public: - XAtom(XDisplay *display); + XAtom(const XDisplay *display); virtual ~XAtom(); - void setValue(Window win, Atom atom, long value) const; // a 32-bit CARDINAL - void setValue(Window win, Atom atom, Atom value) const; - void setValue(Window win, Atom atom, Window value) const; - void setValue(Window win, Atom atom, Pixmap value) const; - void setValue(Window win, Atom atom, std::string &value) const; + void setCardValue(Window win, Atom atom, long value) const; // 32-bit CARDINAL + void setAtomValue(Window win, Atom atom, Atom value) const; + void setWindowValue(Window win, Atom atom, Window value) const; + void setPixmapValue(Window win, Atom atom, Pixmap value) const; + void setStringValue(Window win, Atom atom, std::string &value) const; - void addValue(Window win, Atom atom, long value) const; // a 32-bit CARDINAL - void addValue(Window win, Atom atom, Atom value) const; - void addValue(Window win, Atom atom, Window value) const; - void addValue(Window win, Atom atom, Pixmap value) const; - void addValue(Window win, Atom atom, std::string &value) const; + void addCardValue(Window win, Atom atom, long value) const; // 32-bit CARDINAL + void addAtomValue(Window win, Atom atom, Atom value) const; + void addWindowValue(Window win, Atom atom, Window value) const; + void addPixmapValue(Window win, Atom atom, Pixmap value) const; + void addStringValue(Window win, Atom atom, std::string &value) const; // the 'value' is allocated inside the function and // delete [] value needs to be called when you are done with it. // teh 'value' array returned is null terminated, and has 'nelements' // elements in it plus the null. - bool getValue(Window win, Atom atom, unsigned long *nelements, - long **value) const; // a 32-bit CARDINAL - bool getValue(Window win, Atom atom, unsigned long *nelements, + bool getCardValue(Window win, Atom atom, unsigned long *nelements, + long **value) const; // 32-bit CARDINAL + bool getAtomValue(Window win, Atom atom, unsigned long *nelements, Atom **value) const; - bool getValue(Window win, Atom atom, unsigned long *nelements, + bool getWindowValue(Window win, Atom atom, unsigned long *nelements, Window **value) const; - bool getValue(Window win, Atom atom, unsigned long *nelements, + bool getPixmapValue(Window win, Atom atom, unsigned long *nelements, Pixmap **value) const; - bool getValue(Window win, Atom atom, unsigned long *nelements, + bool getStringValue(Window win, Atom atom, unsigned long *nelements, std::string &value) const; void eraseValue(Window win, Atom atom) const;
M src/XDisplay.ccsrc/XDisplay.cc

@@ -19,7 +19,23 @@ // 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. -#include "Xdisplay.h" +#ifdef HAVE_CONFIG_H +# include "../config.h" +#endif + +#ifdef HAVE_UNNISTD_H +# include <unistd.h> +#endif + +#ifdef HAVE_FCNTL_H +# include <fcntl.h> +#endif + +#ifdef SHAPE +# include <X11/extensions/shape.h> +#endif + +#include "XDisplay.h" #include "XScreen.h" #include "Util.h" #include <iostream>

@@ -27,16 +43,22 @@ #include <algorithm>

using std::cerr; -Xdisplay::Xdisplay(const char *dpyname) { +int XDisplay::XErrorHandler(Display *d, XErrorEvent *e) { + d=d;e=e; + return 0; +} + + +XDisplay::XDisplay(const char *dpyname) { _grabs = 0; _hasshape = false; - _display = XOpenDisplay(dpy_name); + _display = XOpenDisplay(dpyname); if (_display == NULL) { cerr << "Could not open display. Connection to X server failed.\n"; ::exit(2); } - if (-1 == fcntl(ConnectionNumber(display), F_SETFD, 1)) { + if (-1 == fcntl(ConnectionNumber(_display), F_SETFD, 1)) { cerr << "Could not mark display connection as close-on-exec.\n"; ::exit(2); }

@@ -52,11 +74,11 @@

const unsigned int scount = ScreenCount(_display); _screens.reserve(scount); for (unsigned int s = 0; s < scount; s++) - _screens.push_back(new XScreen(_display, s)); + _screens.push_back(new XScreen(this, s)); } -Xdisplay::~Xdisplay() { +XDisplay::~XDisplay() { std::for_each(_screens.begin(), _screens.end(), PointerAssassin()); XCloseDisplay(_display); }

@@ -65,7 +87,7 @@

/* * Return information about a screen. */ -XScreen *Xdisplay::screen(unsigned int s) const { +XScreen *XDisplay::screen(unsigned int s) const { ASSERT(s < _screens.size()); return _screens[s]; }
M src/XDisplay.hsrc/XDisplay.h

@@ -25,10 +25,12 @@

#include <X11/Xlib.h> #include <string> #include <vector> +#include "XAtom.h" +#include "XScreen.h" -class Xdisplay { - friend XAtom::XAtom(); - //friend class XAtom; +class XDisplay { + friend XAtom::XAtom(const XDisplay *); + friend XScreen::XScreen(const XDisplay *, const unsigned int); private: Display *_display;

@@ -40,7 +42,7 @@

typedef std::vector<XScreen*> XScreenList; XScreenList _screens; - int XErrorHandler(Display *d, XErrorEvent *e); + static int XErrorHandler(Display *d, XErrorEvent *e); // no copying!! XDisplay(const XDisplay &);

@@ -50,18 +52,18 @@ protected:

virtual void process_event(XEvent *) = 0; public: - Xdisplay(const char *dpyname = 0); - virtual ~Xdisplay(); + XDisplay(const char *dpyname = 0); + virtual ~XDisplay(); XScreen *screen(unsigned int s) const; inline unsigned int screenCount() const { return _screens.size(); } inline bool hasShape() const { return _hasshape; } - inline int shapeEventBase() const { return shape.event_basep; } + inline int shapeEventBase() const { return _shape_event_base; } //inline Display *display() const { return _display; } - inline std::string name() const { return name; } + inline std::string name() const { return _name; } // these belong in Xwindow //const bool validateWindow(Window);
M src/XScreen.ccsrc/XScreen.cc

@@ -19,11 +19,13 @@ // 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. +#include <X11/Xutil.h> #include "XScreen.h" +#include "XDisplay.h" #include "Geometry.h" -XScreen::XScreen(const Display *display, const unsigned int number) { - _display = display; +XScreen::XScreen(const XDisplay *display, const unsigned int number) { + _display = display->_display; _number = number; _root = RootWindow(_display, _number);

@@ -33,6 +35,10 @@ setColorData();

} +XScreen::~XScreen() { +} + + /* * This sets up the _depth, _visual, and _colormap properties. */

@@ -58,7 +64,7 @@ _visual = (vinfo_return + i)->visual;

} XFree(vinfo_return); } - if (visual) + if (_visual) _colormap = XCreateColormap(_display, _root, _visual, AllocNone); else { _visual = DefaultVisual(_display, _number);
M src/XScreen.hsrc/XScreen.h

@@ -23,8 +23,9 @@ #ifndef __XScreen_h

#define __XScreen_h #include <X11/Xlib.h> +#include "Geometry.h" -class Size; +class XDisplay; class XScreen { private:

@@ -33,7 +34,7 @@ unsigned int _number;

Visual *_visual; Window _root; Colormap _colormap; - unsigned int _depth; + int _depth; Size _size; void setColorData();

@@ -43,7 +44,8 @@ XScreen(const XScreen &);

XScreen& operator=(const XScreen&); public: - XScreen(const Display *display, const unsigned int number); + XScreen(const XDisplay *display, const unsigned int number); + virtual ~XScreen(); inline Visual *visual() const { return _visual; } inline Window rootWindow() const { return _root; }