]> Dogcows Code - chaz/openbox/blob - src/frame.hh
apply gravity when positioning the frame
[chaz/openbox] / src / frame.hh
1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
2 #ifndef __frame_hh
3 #define __frame_hh
4
5 /*! @file frame.hh
6 */
7
8 extern "C" {
9 #include <X11/Xlib.h>
10 }
11
12 #include "client.hh"
13 #include "otk/strut.hh"
14 #include "otk/rect.hh"
15 #include "otk/screeninfo.hh"
16 #include "otk/style.hh"
17 #include "otk/widget.hh"
18 #include "otk/button.hh"
19 #include "otk/focuswidget.hh"
20 #include "otk/focuslabel.hh"
21
22 #include <string>
23
24 namespace ob {
25
26 //! Holds and decorates a frame around an OBClient (client window)
27 /*!
28 */
29 class OBFrame : public otk::OtkWidget {
30 private:
31 OBClient *_client;
32 const otk::ScreenInfo *_screen;
33
34 //! The style to use for size and display the decorations
35 otk::Style *_style;
36
37 //! The size of the frame on each side of the client window
38 otk::Strut _size;
39
40 // decoration windows
41 otk::OtkFocusWidget _plate; // sits entirely under the client window
42 otk::OtkFocusWidget _titlebar;
43 otk::OtkButton _button_close;
44 otk::OtkButton _button_iconify;
45 otk::OtkButton _button_max;
46 otk::OtkButton _button_stick;
47 otk::OtkFocusLabel _label;
48 otk::OtkFocusWidget _handle;
49 otk::OtkButton _grip_left;
50 otk::OtkButton _grip_right;
51
52 //! The decorations to display on the window.
53 /*!
54 This is by default the same value as in the OBClient::decorations, but it
55 is duplicated here so that it can be overridden per-window by the user.
56 */
57 OBClient::DecorationFlags _decorations;
58
59 //! Reparents the client window from the root window onto the frame
60 void grabClient();
61 //! Reparents the client window back to the root window
62 /*!
63 @param remap Re-map the client window when we're done reparenting?
64 */
65 void releaseClient(bool remap);
66
67 public:
68 //! Constructs an OBFrame object, and reparents the client to itself
69 /*!
70 @param client The client window which will be decorated by the new OBFrame
71 @param style The style to use to decorate the frame
72 */
73 OBFrame(OBClient *client, otk::Style *style);
74 //! Destroys the OBFrame object
75 virtual ~OBFrame();
76
77 //! Set the style to decorate the frame with
78 virtual void setStyle(otk::Style *style);
79
80 //! Update the frame to match the client
81 void adjust();
82 //! Shape the frame window to the client window
83 void adjustShape();
84
85 //! Applies gravity for the client's gravity, moving the frame to the
86 //! appropriate place
87 void applyGravity();
88 };
89
90 }
91
92 #endif // __frame_hh
This page took 0.036361 seconds and 4 git commands to generate.