diff options
Diffstat (limited to 'src/BaseDisplay.h')
| -rw-r--r-- | src/BaseDisplay.h | 367 |
1 files changed, 0 insertions, 367 deletions
diff --git a/src/BaseDisplay.h b/src/BaseDisplay.h deleted file mode 100644 index 8bd13e89..00000000 --- a/src/BaseDisplay.h +++ /dev/null @@ -1,367 +0,0 @@ -// BaseDisplay.h for Openbox -// Copyright (c) 2001 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. - -#ifndef __BaseDisplay_hh -#define __BaseDisplay_hh - -#include <X11/Xlib.h> -#include <X11/Xatom.h> - -// forward declaration -class BaseDisplay; -class ScreenInfo; - -#include "Timer.h" -#include "Geometry.h" -#include "Util.h" -#include <vector> -#include <list> - -#define AttribShaded (1l << 0) -#define AttribMaxHoriz (1l << 1) -#define AttribMaxVert (1l << 2) -#define AttribOmnipresent (1l << 3) -#define AttribWorkspace (1l << 4) -#define AttribStack (1l << 5) -#define AttribDecoration (1l << 6) - -#define StackTop (0) -#define StackNormal (1) -#define StackBottom (2) - -#define DecorNone (0) -#define DecorNormal (1) -#define DecorTiny (2) -#define DecorTool (3) - -typedef struct _openbox_hints { - unsigned long flags, attrib, workspace, stack, decoration; -} OpenboxHints; - -typedef struct _openbox_attributes { - unsigned long flags, attrib, workspace, stack, decoration; - int premax_x, premax_y; - unsigned int premax_w, premax_h; -} OpenboxAttributes; - -#define PropOpenboxHintsElements (5) -#define PropOpenboxAttributesElements (9) - -#ifndef __EMX__ -void bexec(const char *, char *); -#endif // !__EMX__ - -char *bstrdup(const char *); - -class BaseDisplay { -private: - struct cursor { - Cursor session, move, ll_angle, lr_angle, ul_angle, ur_angle; - } cursor; - - struct shape { - Bool extensions; - int event_basep, error_basep; - } shape; - -#ifndef NOCLOBBER - unsigned int MaskList[8]; - size_t MaskListLength; -#endif // NOCLOBBER - - Atom xa_wm_colormap_windows, xa_wm_protocols, xa_wm_state, - xa_wm_delete_window, xa_wm_take_focus, xa_wm_change_state, - motif_wm_hints; - - // NETAttributes - Atom openbox_attributes, openbox_change_attributes, openbox_hints; - - // NETStructureMessages - Atom openbox_structure_messages, openbox_notify_startup, - openbox_notify_window_add, openbox_notify_window_del, - openbox_notify_window_focus, openbox_notify_current_workspace, - openbox_notify_workspace_count, openbox_notify_window_raise, - openbox_notify_window_lower; - - // message_types for client -> wm messages - Atom openbox_change_workspace, openbox_change_window_focus, - openbox_cycle_window_focus; - -#ifdef NEWWMSPEC - - // root window properties - Atom net_supported, net_client_list, net_client_list_stacking, - net_number_of_desktops, net_desktop_geometry, net_desktop_viewport, - net_current_desktop, net_desktop_names, net_active_window, net_workarea, - net_supporting_wm_check, net_virtual_roots; - - // root window messages - Atom net_close_window, net_wm_moveresize; - - // application window properties - Atom net_properties, net_wm_name, net_wm_desktop, net_wm_window_type, - net_wm_state, net_wm_strut, net_wm_icon_geometry, net_wm_icon, net_wm_pid, - net_wm_handled_icons; - - // application protocols - Atom net_wm_ping; - -#endif // NEWWMSPEC - - Bool _startup, _shutdown; - Display *display; - - typedef std::vector<ScreenInfo*> ScreenInfoList; - ScreenInfoList screenInfoList; - - typedef std::list<BTimer*> TimerList; - TimerList timerList; - - char *display_name, *application_name; - unsigned int server_grabs, colors_per_channel; - - -protected: - // pure virtual function... you must override this - virtual void process_event(XEvent *) = 0; - - // the masks of the modifiers which are ignored in button events. - int NumLockMask, ScrollLockMask; - - -public: - BaseDisplay(const char *, char * = 0); - virtual ~BaseDisplay(); - - inline const Atom &getWMChangeStateAtom() const - { return xa_wm_change_state; } - inline const Atom &getWMStateAtom() const - { return xa_wm_state; } - inline const Atom &getWMDeleteAtom() const - { return xa_wm_delete_window; } - inline const Atom &getWMProtocolsAtom() const - { return xa_wm_protocols; } - inline const Atom &getWMTakeFocusAtom() const - { return xa_wm_take_focus; } - inline const Atom &getWMColormapAtom() const - { return xa_wm_colormap_windows; } - inline const Atom &getMotifWMHintsAtom() const - { return motif_wm_hints; } - - // this atom is for normal app->WM hints about decorations, stacking, - // starting workspace etc... - inline const Atom &getOpenboxHintsAtom() const - { return openbox_hints;} - - // these atoms are for normal app->WM interaction beyond the scope of the - // ICCCM... - inline const Atom &getOpenboxAttributesAtom() const - { return openbox_attributes; } - inline const Atom &getOpenboxChangeAttributesAtom() const - { return openbox_change_attributes; } - - // these atoms are for window->WM interaction, with more control and - // information on window "structure"... common examples are - // notifying apps when windows are raised/lowered... when the user changes - // workspaces... i.e. "pager talk" - inline const Atom &getOpenboxStructureMessagesAtom() const - { return openbox_structure_messages; } - - // *Notify* portions of the NETStructureMessages protocol - inline const Atom &getOpenboxNotifyStartupAtom() const - { return openbox_notify_startup; } - inline const Atom &getOpenboxNotifyWindowAddAtom() const - { return openbox_notify_window_add; } - inline const Atom &getOpenboxNotifyWindowDelAtom() const - { return openbox_notify_window_del; } - inline const Atom &getOpenboxNotifyWindowFocusAtom() const - { return openbox_notify_window_focus; } - inline const Atom &getOpenboxNotifyCurrentWorkspaceAtom() const - { return openbox_notify_current_workspace; } - inline const Atom &getOpenboxNotifyWorkspaceCountAtom() const - { return openbox_notify_workspace_count; } - inline const Atom &getOpenboxNotifyWindowRaiseAtom() const - { return openbox_notify_window_raise; } - inline const Atom &getOpenboxNotifyWindowLowerAtom() const - { return openbox_notify_window_lower; } - - // atoms to change that request changes to the desktop environment during - // runtime... these messages can be sent by any client... as the sending - // client window id is not included in the ClientMessage event... - inline const Atom &getOpenboxChangeWorkspaceAtom() const - { return openbox_change_workspace; } - inline const Atom &getOpenboxChangeWindowFocusAtom() const - { return openbox_change_window_focus; } - inline const Atom &getOpenboxCycleWindowFocusAtom() const - { return openbox_cycle_window_focus; } - -#ifdef NEWWMSPEC - - // root window properties - inline const Atom &getNETSupportedAtom() const - { return net_supported; } - inline const Atom &getNETClientListAtom() const - { return net_client_list; } - inline const Atom &getNETClientListStackingAtom() const - { return net_client_list_stacking; } - inline const Atom &getNETNumberOfDesktopsAtom() const - { return net_number_of_desktops; } - inline const Atom &getNETDesktopGeometryAtom() const - { return net_desktop_geometry; } - inline const Atom &getNETDesktopViewportAtom() const - { return net_desktop_viewport; } - inline const Atom &getNETCurrentDesktopAtom() const - { return net_current_desktop; } - inline const Atom &getNETDesktopNamesAtom() const - { return net_desktop_names; } - inline const Atom &getNETActiveWindowAtom() const - { return net_active_window; } - inline const Atom &getNETWorkareaAtom() const - { return net_workarea; } - inline const Atom &getNETSupportingWMCheckAtom() const - { return net_supporting_wm_check; } - inline const Atom &getNETVirtualRootsAtom() const - { return net_virtual_roots; } - - // root window messages - inline const Atom &getNETCloseWindowAtom() const - { return net_close_window; } - inline const Atom &getNETWMMoveResizeAtom() const - { return net_wm_moveresize; } - - // application window properties - inline const Atom &getNETPropertiesAtom() const - { return net_properties; } - inline const Atom &getNETWMNameAtom() const - { return net_wm_name; } - inline const Atom &getNETWMDesktopAtom() const - { return net_wm_desktop; } - inline const Atom &getNETWMWindowTypeAtom() const - { return net_wm_window_type; } - inline const Atom &getNETWMStateAtom() const - { return net_wm_state; } - inline const Atom &getNETWMStrutAtom() const - { return net_wm_strut; } - inline const Atom &getNETWMIconGeometryAtom() const - { return net_wm_icon_geometry; } - inline const Atom &getNETWMIconAtom() const - { return net_wm_icon; } - inline const Atom &getNETWMPidAtom() const - { return net_wm_pid; } - inline const Atom &getNETWMHandledIconsAtom() const - { return net_wm_handled_icons; } - - // application protocols - inline const Atom &getNETWMPingAtom() const - { return net_wm_ping; } - -#endif // NEWWMSPEC - - inline ScreenInfo *getScreenInfo(unsigned int s) { - ASSERT(s < screenInfoList.size()); - return screenInfoList[s]; - } - - inline const Bool &hasShapeExtensions() const - { return shape.extensions; } - inline const Bool &doShutdown() const - { return _shutdown; } - inline const Bool &isStartup() const - { return _startup; } - - inline const Cursor &getSessionCursor() const - { return cursor.session; } - inline const Cursor &getMoveCursor() const - { return cursor.move; } - inline const Cursor &getLowerLeftAngleCursor() const - { return cursor.ll_angle; } - inline const Cursor &getLowerRightAngleCursor() const - { return cursor.lr_angle; } - inline const Cursor &getUpperLeftAngleCursor() const - { return cursor.ul_angle; } - inline const Cursor &getUpperRightAngleCursor() const - { return cursor.ur_angle; } - - inline Display *getXDisplay() { return display; } - - inline const char *getXDisplayName() const - { return (const char *) display_name; } - inline const char *getApplicationName() const - { return (const char *) application_name; } - - inline const unsigned int numberOfScreens() const - { return ScreenCount(display); } - inline const int &getShapeEventBase() const - { return shape.event_basep; } - - inline void shutdown() { _shutdown = True; } - inline void run() { _startup = _shutdown = False; } - - const Bool validateWindow(Window); - - void grabButton(unsigned int, unsigned int, Window, Bool, unsigned int, int, - int, Window, Cursor) const; - void ungrabButton(unsigned int button, unsigned int modifiers, - Window grab_window) const; - - void grab(); - void ungrab(); - void eventLoop(); - void addTimer(BTimer *); - void removeTimer(BTimer *); - - // another pure virtual... this is used to handle signals that BaseDisplay - // doesn't understand itself - virtual Bool handleSignal(int) = 0; -}; - - -class ScreenInfo { -private: - BaseDisplay &basedisplay; - Visual *visual; - Window root_window; - Colormap colormap; - - int depth, screen_number; - Size m_size; - - -public: - ScreenInfo(BaseDisplay &, int); - - inline BaseDisplay &getBaseDisplay() { return basedisplay; } - - inline Visual *getVisual() const { return visual; } - inline const Window &getRootWindow() const { return root_window; } - inline const Colormap &getColormap() const { return colormap; } - - inline const int &getDepth() const { return depth; } - inline const int &getScreenNumber() const { return screen_number; } - -// inline const unsigned int &getWidth() const { return width; } -// inline const unsigned int &getHeight() const { return height; } - inline const Size &size() const { return m_size; } -}; - - -#endif // __BaseDisplay_hh |
