X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fframe.h;h=c402001cdc11ecae42bc1ddaf32d45f9027454eb;hb=2477a38d2f3063b697e44bf3690cf280fb26ca8a;hp=fb492d8cf59f46da9b9633a3f929b24392cddc53;hpb=bca8082d6d09a16a116c70001469a576b93157ce;p=chaz%2Fopenbox diff --git a/openbox/frame.h b/openbox/frame.h index fb492d8c..c402001c 100644 --- a/openbox/frame.h +++ b/openbox/frame.h @@ -3,6 +3,7 @@ #include "geom.h" #include "client.h" +#include "render/render.h" typedef enum { Context_None, @@ -24,10 +25,11 @@ typedef enum { NUM_CONTEXTS } Context; -Context frame_context_from_string(char *name); +#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; @@ -35,8 +37,72 @@ typedef struct Frame { Strut size; Rect area; gboolean visible; + int 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; + + GSList *clients; + + int width; /* title and handle */ + int label_width; + int icon_x; /* x-position of the window icon button */ + int label_x; /* x-position of the window title */ + int iconify_x; /* x-position of the window iconify button */ + int desk_x; /* x-position of the window all-desktops button */ + int shade_x; /* x-position of the window shade button */ + int max_x; /* x-position of the window maximize button */ + int close_x; /* x-position of the window close button */ + int bwidth; /* border width */ + int 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.