]> Dogcows Code - chaz/openbox/commitdiff
moving strut into its own .hh. adding OBClient class
authorDana Jansens <danakj@orodu.net>
Wed, 6 Nov 2002 07:01:59 +0000 (07:01 +0000)
committerDana Jansens <danakj@orodu.net>
Wed, 6 Nov 2002 07:01:59 +0000 (07:01 +0000)
otk/property.cc
otk/property.hh
otk/strut.hh [new file with mode: 0644]
po/POTFILES.in
src/Makefile.am
src/client.hh [new file with mode: 0644]
src/openbox.hh
src/util.hh
src/xeventhandler.cc

index 3ce902251e460b809aa52cf16e8f00856d3b518c..f76469d05e8e46dd0ba3657fdef93fb28dbc74aa 100644 (file)
@@ -139,6 +139,7 @@ OBProperty::OBProperty()
   _atoms[net_wm_state_skip_pager] = create("_NET_WM_STATE_SKIP_PAGER");
   _atoms[net_wm_state_hidden] = create("_NET_WM_STATE_HIDDEN");
   _atoms[net_wm_state_fullscreen] = create("_NET_WM_STATE_FULLSCREEN");
+  _atoms[net_wm_state_floating] = create("_NET_WM_STATE_FLOATING");
   
   _atoms[kde_net_system_tray_windows] = create("_KDE_NET_SYSTEM_TRAY_WINDOWS");
   _atoms[kde_net_wm_system_tray_window_for] =
index 215f941f47b8d7021713e3f6003869a1665658f0..6894c786ecf674c1c5166e5f46a00171ec08874c 100644 (file)
@@ -136,6 +136,7 @@ public:
     net_wm_state_skip_pager,
     net_wm_state_hidden,
     net_wm_state_fullscreen,
+    net_wm_state_floating,
 
     kde_net_system_tray_windows,
     kde_net_wm_system_tray_window_for,
@@ -317,7 +318,7 @@ public:
              value to return
     @return The value of the specified Atom
   */
-  inline Atom atom(Atoms a) {
+  inline Atom atom(Atoms a) const {
     assert(a >= 0 && a < NUM_ATOMS); Atom ret = _atoms[a]; assert(ret != 0);
     return ret;
   }
diff --git a/otk/strut.hh b/otk/strut.hh
new file mode 100644 (file)
index 0000000..494cc4f
--- /dev/null
@@ -0,0 +1,28 @@
+// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
+#ifndef __strut_hh
+#define __strut_hh
+
+/*! @file strut.hh
+  @brief The Strut struct defines a margin on 4 sides
+*/
+
+namespace otk {
+
+//! Defines a margin on 4 sides
+struct Strut {
+  //! The margin on the top of the Strut
+  unsigned int top;
+  //! The margin on the bottom of the Strut
+  unsigned int bottom;
+  //! The margin on the left of the Strut
+  unsigned int left;
+  //! The margin on the right of the Strut
+  unsigned int right;
+
+  //! Constructs a new Strut with no margins
+  Strut(void): top(0), bottom(0), left(0), right(0) {}
+};
+
+}
+
+#endif // __strut_hh
index 07fc4208ecd5935aea361ff455a2bd8a5060ae35..5978a6bca1d2c135d15ec20d6eb88e6734b4cc99 100644 (file)
@@ -1,4 +1,5 @@
 # List of source files containing translatable strings.
 
 src/openbox.cc
-src/display.cc
\ No newline at end of file
+src/display.cc
+src/client.cc
\ No newline at end of file
index 85479f69cd5b2c064233b2e041a582bd81ca4d4d..a07d52899bae2c54cb1a480e3df9ce640e242e90 100644 (file)
@@ -15,7 +15,7 @@ bin_PROGRAMS= openbox
 
 openbox_LDADD=../otk/libotk.a @LIBINTL@
 
-openbox_SOURCES= configuration.cc screen.cc openbox.cc \
+openbox_SOURCES= client.cc configuration.cc screen.cc openbox.cc \
                  util.cc bbwindow.cc workspace.cc blackbox.cc \
                  main.cc xeventhandler.cc
 
diff --git a/src/client.hh b/src/client.hh
new file mode 100644 (file)
index 0000000..fa441b6
--- /dev/null
@@ -0,0 +1,189 @@
+// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
+#ifndef   __client_hh
+#define   __client_hh
+
+extern "C" {
+#include <X11/Xlib.h>
+}
+
+#include <string>
+
+#include "otk/strut.hh"
+#include "otk/rect.hh"
+
+namespace ob {
+
+class BScreen;
+
+class OBClient {
+public:
+  enum Max { Max_None,
+             Max_Horz,
+             Max_Vert,
+             Max_Full };
+
+  enum WindowType { Type_Desktop,
+                    Type_Dock,
+                    Type_Toolbar,
+                    Type_Menu,
+                    Type_Utility,
+                    Type_Splash,
+                    Type_Dialog,
+                    Type_Normal };
+
+  enum MwmFlags { Functions   = 1 << 0,
+                  Decorations = 1 << 1 };
+
+  enum MwmFunctions { MwmFunc_All      = 1 << 0,
+                      MwmFunc_Resize   = 1 << 1,
+                      MwmFunc_Move     = 1 << 2,
+                      MwmFunc_Iconify  = 1 << 3,
+                      MwmFunc_Maximize = 1 << 4,
+                      MwmFunc_Close    = 1 << 5 };
+
+  enum MemDecorations { MemDecor_All      = 1 << 0,
+                        MemDecor_Border   = 1 << 1,
+                        MemDecor_Handle   = 1 << 2,
+                        MemDecor_Title    = 1 << 3,
+                        //MemDecor_Menu     = 1 << 4,
+                        MemDecor_Iconify  = 1 << 5,
+                        MemDecor_Maximize = 1 << 6 };
+
+  // this structure only contains 3 elements... the Motif 2.0 structure
+  // contains 5... we only need the first 3... so that is all we will define
+  typedef struct MwmHints {
+    static const int elements = 3;
+    unsigned long flags;
+    unsigned long functions;
+    unsigned long decorations;
+  };
+
+  enum StateAction { State_Remove = 0, // _NET_WM_STATE_REMOVE
+                     State_Add,        // _NET_WM_STATE_ADD
+                     State_Toggle      // _NET_WM_STATE_TOGGLE
+  };
+
+private:
+  BScreen *_screen;
+  Window   _window;
+
+  //! The id of the group the window belongs to
+  XID       _group;
+
+  // XXX: transient_for, transients
+
+  //! The desktop on which the window resides (0xffffffff for all desktops)
+  unsigned int _desktop;
+
+  //! Normal window title
+  std::string  _title;
+  //! Window title when iconifiged
+  std::string  _icon_title;
+
+  //! The application that created the window
+  std::string  _app_name;
+  //! The class of the window, can used for grouping
+  std::string  _app_class;
+
+  //! The type of window (what its function is)
+  WindowType   _type;
+
+  //! Position and size of the window (relative to the root window)
+  otk::Rect    _area;
+
+  // size bounds
+  // if min > max, then the window is not resizable
+  int _min_x, _min_y; // minumum size
+  int _max_x, _max_y; // maximum size
+  int _inc_x, _inc_y; // resize increments
+  int _base_x, _base_y; // base size
+
+  //! Where to place the decorated window in relation to the undecorated window
+  int _gravity;
+
+  //! The state of the window, one of WithdrawnState, IconicState, or
+  //! NormalState
+  long _state;
+
+  //! Can the window receive input focus?
+  bool _can_focus;
+  //! Urgency flag
+  bool _urgent;
+  //! Notify the window when it receives focus?
+  bool _focus_notify;
+
+  //! The window uses shape extension to be non-rectangular?
+  bool _shaped;
+
+  //! The window is modal, so it must be processed before any windows it is
+  //! related to can be focused
+  bool _modal;
+  //! Only the window's titlebar is displayed
+  bool _shaded;
+  //! The window is iconified
+  bool _iconic;
+  //! The window is maximized to fill the screen vertically
+  bool _max_vert;
+  //! The window is maximized to fill the screen horizontally
+  bool _max_horz;
+  //! The window is a 'fullscreen' window, and should be on top of all others
+  bool _fullscreen;
+  //! The window should be on top of other windows of the same type
+  bool _floating;
+
+  // XXX: motif decoration hints!
+
+  void setWMState(long state);
+  void setDesktop(long desktop);
+  void setState(StateAction action, long data1, long data2);
+  
+  void updateNormalHints();
+  void updateWMHints();
+  void updateTitle();
+  void updateClass();
+
+public:
+  OBClient(BScreen *screen, Window window);
+  virtual ~OBClient();
+
+  inline Window window() const { return _window; }
+
+  inline WindowType type() const { return _type; }
+  inline unsigned int desktop() const { return _desktop; }
+  inline const std::string &title() const { return _title; }
+  inline const std::string &iconTitle() const { return _title; }
+  inline const std::string &appName() const { return _app_name; }
+  inline const std::string &appClass() const { return _app_class; }
+  inline bool canFocus() const { return _can_focus; }
+  inline bool urgent() const { return _urgent; }
+  inline bool focusNotify() const { return _focus_notify; }
+  inline bool shaped() const { return _shaped; }
+  inline int gravity() const { return _gravity; }
+
+  // states
+  inline bool modal() const { return _modal; }
+  inline bool shaded() const { return _shaded; }
+  inline bool iconic() const { return _iconic; }
+  inline bool maxVert() const { return _max_vert; }
+  inline bool maxHorz() const { return _max_horz; }
+  inline bool fullscreen() const { return _fullscreen; }
+  inline bool floating() const { return _floating; }
+
+  inline int minX() const { return _min_x; }
+  inline int minY() const { return _min_y; }
+  inline int maxX() const { return _max_x; }
+  inline int maxY() const { return _max_y; }
+  inline int incrementX() const { return _inc_x; }
+  inline int incrementY() const { return _inc_y; }
+  inline int baseX() const { return _base_x; }
+  inline int baseY() const { return _base_y; }
+
+  inline const otk::Rect &area() const { return _area; }
+
+  void update(const XPropertyEvent &e);
+  void update(const XClientMessageEvent &e);
+};
+
+}
+
+#endif // __client_hh
index b5a47fdeaf7b155c1547895a8da599dda8693a66..baf9edebe906dc90dd290047bf1a8deab2d4326b 100644 (file)
@@ -118,6 +118,8 @@ public:
   */
   inline otk::OBTimerQueueManager *timerManager() { return &_timermanager; }
 
+  inline const otk::OBProperty *property() const { return _property; }
+
   //! The main function of the Openbox class
   /*!
     This function should be called after instantiating the Openbox class.
index b6da75205235b69a651c00991b0e2370510b3370..303d2ffd02ba6a748f1dcf704b4e6ec0eb52d6cb 100644 (file)
@@ -24,12 +24,6 @@ extern "C" {
 
 namespace ob {
 
-struct Strut {
-  unsigned int top, bottom, left, right;
-
-  Strut(void): top(0), bottom(0), left(0), right(0) {}
-};
-
 /* XXX: this needs autoconf help */
 const unsigned int BSENTINEL = 65535;
 
index cbca039d3915d921edb247d795c854672b6c4517..ba60edf7e5c9e4e6e61b71585963f1b9854d9a79 100644 (file)
@@ -389,15 +389,6 @@ void OBXEventHandler::clientMessage(const XClientMessageEvent &e)
   if (e.format != 32)
     return;
 /*  
-  if (e->xclient.message_type == xatom->getAtom(XAtom::wm_change_state)) {
-    // WM_CHANGE_STATE message
-    BlackboxWindow *win = searchWindow(e->xclient.window);
-    if (! win || ! win->validateClient()) return;
-
-    if (e->xclient.data.l[0] == IconicState)
-      win->iconify();
-    if (e->xclient.data.l[0] == NormalState)
-      win->deiconify();
   } else if (e->xclient.message_type == 
              xatom->getAtom(XAtom::blackbox_change_workspace) || 
              e->xclient.message_type == 
@@ -408,13 +399,6 @@ void OBXEventHandler::clientMessage(const XClientMessageEvent &e)
     unsigned int workspace = e->xclient.data.l[0];
     if (screen && workspace < screen->getWorkspaceCount())
       screen->changeWorkspaceID(workspace);
-  } else if (e->xclient.message_type == 
-             xatom->getAtom(XAtom::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)) {
     // NET_ACTIVE_WINDOW
@@ -436,55 +420,6 @@ void OBXEventHandler::clientMessage(const XClientMessageEvent &e)
         win->installColormap(True);
       }
     }
-  } else if (e->xclient.message_type == 
-             xatom->getAtom(XAtom::blackbox_cycle_window_focus)) {
-    // BLACKBOX_CYCLE_WINDOW_FOCUS
-    BScreen *screen = searchScreen(e->xclient.window);
-
-    if (screen) {
-      if (! e->xclient.data.l[0])
-        screen->prevFocus();
-      else
-        screen->nextFocus();
-    }
-  } else if (e->xclient.message_type == 
-             xatom->getAtom(XAtom::net_wm_desktop)) {
-    // NET_WM_DESKTOP
-    BlackboxWindow *win = searchWindow(e->xclient.window);
-
-    if (win) {
-      BScreen *screen = win->getScreen();
-      unsigned long wksp = (unsigned) e->xclient.data.l[0];
-      if (wksp < screen->getWorkspaceCount()) {
-        if (win->isIconic()) win->deiconify(False, True);
-        if (win->isStuck()) win->stick();
-        if (wksp != screen->getCurrentWorkspaceID())
-          win->withdraw();
-        else
-          win->show();
-        screen->reassociateWindow(win, wksp, True);
-      } else if (wksp == 0xfffffffe || // XXX: BUG, BUT DOING THIS SO KDE WORKS FOR NOW!!
-                 wksp == 0xffffffff) {
-        if (win->isIconic()) win->deiconify(False, True);
-        if (! win->isStuck()) win->stick();
-        if (! win->isVisible()) win->show();
-      }
-    }
-  } else if (e->xclient.message_type == 
-             xatom->getAtom(XAtom::blackbox_change_attributes)) {
-    // BLACKBOX_CHANGE_ATTRIBUTES
-    BlackboxWindow *win = searchWindow(e->xclient.window);
-
-    if (win && win->validateClient()) {
-      BlackboxHints net;
-      net.flags = e->xclient.data.l[0];
-      net.attrib = e->xclient.data.l[1];
-      net.workspace = e->xclient.data.l[2];
-      net.stack = e->xclient.data.l[3];
-      net.decoration = e->xclient.data.l[4];
-
-      win->changeBlackboxHints(&net);
-    }
   } else if (e->xclient.message_type == 
              xatom->getAtom(XAtom::net_number_of_desktops)) {
     // NET_NUMBER_OF_DESKTOPS
@@ -523,133 +458,6 @@ void OBXEventHandler::clientMessage(const XClientMessageEvent &e)
           win->beginResize(x_root, y_root, BlackboxWindow::BottomRight);
       }
     }
-  } else if (e->xclient.message_type ==
-             xatom->getAtom(XAtom::net_wm_state)) {
-    // NET_WM_STATE
-    BlackboxWindow *win = searchWindow(e->xclient.window);
-    if (win && win->validateClient()) {
-      const Atom action = (Atom) e->xclient.data.l[0];
-      const Atom state[] = { (Atom) e->xclient.data.l[1],
-                             (Atom) e->xclient.data.l[2] };
-          
-      for (int i = 0; i < 2; ++i) {
-        if (! state[i])
-          continue;
-
-        if ((Atom) e->xclient.data.l[0] == 1) {
-          // ADD
-          if (state[i] == xatom->getAtom(XAtom::net_wm_state_modal)) {
-            win->setModal(True);
-          } else if (state[i] ==
-                     xatom->getAtom(XAtom::net_wm_state_maximized_vert)) {
-            if (win->isMaximizedHoriz()) {
-              win->maximize(0); // unmaximize
-              win->maximize(1); // full
-            } else if (! win->isMaximized()) {
-              win->maximize(2); // vert
-            }
-          } else if (state[i] ==
-                     xatom->getAtom(XAtom::net_wm_state_maximized_horz)) {
-            if (win->isMaximizedVert()) {
-              win->maximize(0); // unmaximize
-              win->maximize(1); // full
-            } else if (! win->isMaximized()) {
-              win->maximize(3); // horiz
-            }
-          } else if (state[i] ==
-                     xatom->getAtom(XAtom::net_wm_state_shaded)) {
-            if (! win->isShaded())
-              win->shade();
-          } else if (state[i] ==
-                     xatom->getAtom(XAtom::net_wm_state_skip_taskbar)) {
-            win->setSkipTaskbar(True);
-          } else if (state[i] ==
-                     xatom->getAtom(XAtom::net_wm_state_skip_pager)) {
-            win->setSkipPager(True);
-          } else if (state[i] ==
-                     xatom->getAtom(XAtom::net_wm_state_fullscreen)) {
-            win->setFullscreen(True);
-          }
-        } else if (action == 0) {
-          // REMOVE
-          if (state[i] == xatom->getAtom(XAtom::net_wm_state_modal)) {
-            win->setModal(False);
-          } else if (state[i] ==
-                     xatom->getAtom(XAtom::net_wm_state_maximized_vert)) {
-            if (win->isMaximizedFull()) {
-              win->maximize(0); // unmaximize
-              win->maximize(3); // horiz
-            } else if (win->isMaximizedVert()) {
-              win->maximize(0); // unmaximize
-            }
-          } else if (state[i] ==
-                     xatom->getAtom(XAtom::net_wm_state_maximized_horz)) {
-            if (win->isMaximizedFull()) {
-              win->maximize(0); // unmaximize
-              win->maximize(2); // vert
-            } else if (win->isMaximizedHoriz()) {
-              win->maximize(0); // unmaximize
-            }
-          } else if (state[i] ==
-                     xatom->getAtom(XAtom::net_wm_state_shaded)) {
-            if (win->isShaded())
-              win->shade();
-          } else if (state[i] ==
-                     xatom->getAtom(XAtom::net_wm_state_skip_taskbar)) {
-            win->setSkipTaskbar(False);
-          } else if (state[i] ==
-                     xatom->getAtom(XAtom::net_wm_state_skip_pager)) {
-            win->setSkipPager(False);
-          } else if (state[i] ==
-                     xatom->getAtom(XAtom::net_wm_state_fullscreen)) {
-            win->setFullscreen(False);
-          }
-        } else if (action == 2) {
-          // TOGGLE
-          if (state[i] == xatom->getAtom(XAtom::net_wm_state_modal)) {
-            win->setModal(! win->isModal());
-          } else if (state[i] ==
-                     xatom->getAtom(XAtom::net_wm_state_maximized_vert)) {
-            if (win->isMaximizedFull()) {
-              win->maximize(0); // unmaximize
-              win->maximize(3); // horiz
-            } else if (win->isMaximizedVert()) {
-              win->maximize(0); // unmaximize
-            } else if (win->isMaximizedHoriz()) {
-              win->maximize(0); // unmaximize
-              win->maximize(1); // full
-            } else {
-              win->maximize(2); // vert
-            }
-          } else if (state[i] ==
-                     xatom->getAtom(XAtom::net_wm_state_maximized_horz)) {
-            if (win->isMaximizedFull()) {
-              win->maximize(0); // unmaximize
-              win->maximize(2); // vert
-            } else if (win->isMaximizedHoriz()) {
-              win->maximize(0); // unmaximize
-            } else if (win->isMaximizedVert()) {
-              win->maximize(0); // unmaximize
-              win->maximize(1); // full
-            } else {
-              win->maximize(3); // horiz
-            }
-          } else if (state[i] ==
-                     xatom->getAtom(XAtom::net_wm_state_shaded)) {
-            win->shade();
-          } else if (state[i] ==
-                     xatom->getAtom(XAtom::net_wm_state_skip_taskbar)) {
-            win->setSkipTaskbar(! win->skipTaskbar());
-          } else if (state[i] ==
-                     xatom->getAtom(XAtom::net_wm_state_skip_pager)) {
-            win->setSkipPager(! win->skipPager());
-          } else if (state[i] ==
-                     xatom->getAtom(XAtom::net_wm_state_fullscreen)) {
-            win->setFullscreen(! win->isFullscreen());
-          }
-        }
-      }
-    }
   }
 */
 }
This page took 0.036061 seconds and 4 git commands to generate.