X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fframe.h;h=f36522fefcc3bac16935bbf0aca8f95a5d58963a;hb=4736c257a54409bf3b0ef0d803da650c71684dee;hp=ec530934aa5f9d28db761e306d70a4c3aba178c3;hpb=f8a47de5ec444c452093371e3db16857eb39a490;p=chaz%2Fopenbox diff --git a/openbox/frame.h b/openbox/frame.h index ec530934..f36522fe 100644 --- a/openbox/frame.h +++ b/openbox/frame.h @@ -3,18 +3,106 @@ #include "geom.h" #include "client.h" +#include "render/render.h" + +typedef enum { + Context_None, + Context_Root, + Context_Client, + Context_Titlebar, + Context_Handle, + Context_Frame, + Context_BLCorner, + Context_BRCorner, + Context_TLCorner, + Context_TRCorner, + Context_Maximize, + Context_AllDesktops, + Context_Shade, + Context_Iconify, + Context_Icon, + Context_Close, + NUM_CONTEXTS +} Context; + +#define FRAME_HANDLE_Y(f) (f->innersize.top + f->client->area.height + \ + f->cbwidth) typedef struct Frame { - Client *client; + ObClient *client; + + Window window; + Window plate; + + Strut size; + Rect area; + gboolean visible; + guint decorations; + + Window title; + Window label; + Window max; + Window close; + Window desk; + Window shade; + Window icon; + Window iconify; + Window handle; + Window lgrip; + Window rgrip; + + 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; - Window window; - Window plate; + GSList *clients; - Strut size; - Rect area; - gboolean visible; + gint width; /* title and handle */ + gint label_width; + gint icon_x; /* x-position of the window icon button */ + gint label_x; /* x-position of the window title */ + gint iconify_x; /* x-position of the window iconify button */ + gint desk_x; /* x-position of the window all-desktops button */ + gint shade_x; /* x-position of the window shade button */ + 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 cbwidth; /* client border width */ + + gboolean max_press; + gboolean close_press; + gboolean desk_press; + gboolean shade_press; + gboolean iconify_press; + + gboolean focused; } Frame; +void frame_startup(); +void frame_shutdown(); + +Frame *frame_new(); +void frame_show(Frame *self); +void frame_hide(Frame *self); +void frame_adjust_shape(Frame *self); +void frame_adjust_area(Frame *self, gboolean moved, gboolean resized); +void frame_adjust_state(Frame *self); +void frame_adjust_focus(Frame *self, gboolean hilite); +void frame_adjust_title(Frame *self); +void frame_adjust_icon(Frame *self); +void frame_grab_client(Frame *self, ObClient *client); +void frame_release_client(Frame *self, ObClient *client); + +Context frame_context_from_string(char *name); + +Context frame_context(ObClient *self, Window win); + /*! Applies gravity to the client's position to find where the frame should be positioned. @return The proper coordinates for the frame, based on the client.