X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fframe.h;h=bbe7d370f034e7f4ee05c9244c9554137abfc57b;hb=3d6e0f941d36ff335ad13ecf83405a40775e4c04;hp=ec530934aa5f9d28db761e306d70a4c3aba178c3;hpb=f8a47de5ec444c452093371e3db16857eb39a490;p=chaz%2Fopenbox diff --git a/openbox/frame.h b/openbox/frame.h index ec530934..bbe7d370 100644 --- a/openbox/frame.h +++ b/openbox/frame.h @@ -3,6 +3,30 @@ #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; @@ -13,8 +37,69 @@ typedef struct Frame { Strut size; Rect area; gboolean visible; + + Window title; + Window label; + Window max; + Window close; + Window desk; + Window shade; + Window icon; + Window iconify; + Window handle; + Window lgrip; + Window rgrip; + + Appearance *a_unfocused_title; + Appearance *a_focused_title; + Appearance *a_unfocused_label; + Appearance *a_focused_label; + Appearance *a_icon; + Appearance *a_unfocused_handle; + Appearance *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; } 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); +void frame_adjust_title(Frame *self); +void frame_adjust_icon(Frame *self); +void frame_grab_client(Frame *self, Client *client); +void frame_release_client(Frame *self, Client *client); + +Context frame_context_from_string(char *name); + +Context frame_context(Client *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.