typedef enum {
OB_FRAME_CONTEXT_NONE,
OB_FRAME_CONTEXT_DESKTOP,
+ OB_FRAME_CONTEXT_ROOT,
OB_FRAME_CONTEXT_CLIENT,
OB_FRAME_CONTEXT_TITLEBAR,
OB_FRAME_CONTEXT_FRAME,
OB_FRAME_CONTEXT_TRCORNER,
OB_FRAME_CONTEXT_TOP,
OB_FRAME_CONTEXT_BOTTOM,
+ OB_FRAME_CONTEXT_LEFT,
+ OB_FRAME_CONTEXT_RIGHT,
OB_FRAME_CONTEXT_MAXIMIZE,
OB_FRAME_CONTEXT_ALLDESKTOPS,
OB_FRAME_CONTEXT_SHADE,
struct _ObClient *client;
Window window;
- Window plate;
Strut size;
Rect area;
gboolean visible;
+ guint functions;
guint decorations;
- gboolean max_horz;
- Window inner; /*!< The window for drawing the inner client border */
Window title;
Window label;
Window max;
Window lgrip;
Window rgrip;
+ /* These are borders of the frame and its elements */
+ Window titleleft;
+ Window titletop;
+ Window titletopleft;
+ Window titletopright;
+ Window titleright;
+ Window titlebottom;
+ Window left;
+ Window right;
+ Window handleleft;
+ Window handletop;
+ Window handleright;
+ Window handlebottom;
+ Window lgriptop;
+ Window lgripleft;
+ Window lgripbottom;
+ Window rgriptop;
+ Window rgripright;
+ Window rgripbottom;
+ Window innerleft; /*!< For drawing the inner client border */
+ Window innertop; /*!< For drawing the inner client border */
+ Window innerright; /*!< For drawing the inner client border */
+ Window innerbottom; /*!< For drawing the inner client border */
+ Window innerblb;
+ Window innerbll;
+ Window innerbrb;
+ Window innerbrr;
+ Window backback; /*!< A colored window shown while resizing */
+ Window backfront; /*!< An undrawn-in window, to prevent flashing on
+ unmap */
+
+ /* These are resize handles inside the titlebar */
Window topresize;
Window tltresize;
Window tllresize;
Colormap colormap;
- RrAppearance *a_unfocused_title;
- RrAppearance *a_focused_title;
- RrAppearance *a_unfocused_label;
- RrAppearance *a_focused_label;
- RrAppearance *a_icon;
- RrAppearance *a_unfocused_handle;
- RrAppearance *a_focused_handle;
-
- Strut innersize;
-
- GSList *clients;
-
gint icon_on; /* if the window icon button is on */
gint label_on; /* if the window title is on */
gint iconify_on; /* if the window iconify button is on */
gint max_x; /* x-position of the window maximize button */
gint close_x; /* x-position of the window close button */
gint bwidth; /* border width */
- gint rbwidth; /* title border width */
- gint cbwidth_x; /* client border width */
- gint cbwidth_y; /* client border width */
+ gint cbwidth_l; /* client border width */
+ gint cbwidth_t; /* client border width */
+ gint cbwidth_r; /* client border width */
+ gint cbwidth_b; /* client border width */
+ gboolean max_horz; /* when maxed some decorations are hidden */
+ gboolean max_vert; /* when maxed some decorations are hidden */
+ gboolean shaded; /* decorations adjust when shaded */
/* the leftmost and rightmost elements in the titlebar */
ObFrameContext leftmost;
gboolean iconify_hover;
gboolean focused;
+ gboolean need_render;
gboolean flashing;
gboolean flash_on;
be positioned.
@return The proper coordinates for the frame, based on the client.
*/
-void frame_client_gravity(ObFrame *self, gint *x, gint *y, gint w, gint h);
+void frame_client_gravity(ObFrame *self, gint *x, gint *y);
/*! Reversly applies gravity to the frame's position to find where the client
should be positioned.
@return The proper coordinates for the client, based on the frame.
*/
-void frame_frame_gravity(ObFrame *self, gint *x, gint *y, gint w, gint h);
+void frame_frame_gravity(ObFrame *self, gint *x, gint *y);
+
+/*! Convert a rectangle in client coordinates/sizes to what it would be
+ for the frame, given its current decorations sizes */
+void frame_rect_to_frame(ObFrame *self, Rect *r);
+
+/*! Convert a rectangle in frame coordinates/sizes to what it would be for the
+ client, given its current decorations sizes */
+void frame_rect_to_client(ObFrame *self, Rect *r);
void frame_flash_start(ObFrame *self);
void frame_flash_stop(ObFrame *self);