1 #ifndef PANEL_H 2 #define PANEL_H 3 4 5 #include <X11/Xlib.h> 6 #include <gtk/gtk.h> 7 #include <gdk/gdk.h> 8 9 #include "config.h" 10 11 #include "bg.h" 12 #include "ev.h" 13 #include "xconf.h" 14 15 enum { ALLIGN_CENTER, ALLIGN_LEFT, ALLIGN_RIGHT }; 16 enum { EDGE_BOTTOM, EDGE_LEFT, EDGE_RIGHT, EDGE_TOP }; 17 enum { WIDTH_PERCENT, WIDTH_REQUEST, WIDTH_PIXEL }; 18 enum { HEIGHT_PIXEL, HEIGHT_REQUEST }; 19 enum { POS_NONE, POS_START, POS_END }; 20 enum { HIDDEN, WAITING, VISIBLE }; 21 enum { LAYER_ABOVE, LAYER_BELOW }; 22 23 #define PANEL_HEIGHT_DEFAULT 26 24 #define PANEL_HEIGHT_MAX 200 25 #define PANEL_HEIGHT_MIN 16 26 27 #define IMGPREFIX DATADIR "/fbpanel/images" 28 29 typedef struct _panel 30 { 31 GtkWidget *topgwin; /* main panel window */ 32 Window topxwin; /* and it X window */ 33 GtkWidget *lbox; /* primary layout box */ 34 GtkWidget *bbox; /* backgound box for box */ 35 GtkWidget *box; /* box that contains all plugins */ 36 GtkRequisition requisition; 37 GtkWidget *(*my_box_new) (gboolean, gint); 38 GtkWidget *(*my_separator_new) (); 39 40 FbBg *bg; 41 int alpha; 42 guint32 tintcolor; 43 GdkColor gtintcolor; 44 gchar *tintcolor_name; 45 46 int ax, ay, aw, ah; /* prefferd allocation of a panel */ 47 int cx, cy, cw, ch; /* current allocation (as reported by configure event) allocation */ 48 int allign, edge, margin; 49 GtkOrientation orientation; 50 int widthtype, width; 51 int heighttype, height; 52 int round_corners_radius; 53 int max_elem_height; 54 55 gint self_destroy; 56 gint setdocktype; 57 gint setstrut; 58 gint round_corners; 59 gint transparent; 60 gint autohide; 61 gint ah_far; 62 gint layer; 63 gint setlayer; 64 65 int ah_dx, ah_dy; // autohide shift for x and y 66 int height_when_hidden; 67 guint hide_tout; 68 69 int spacing; 70 71 guint desknum; 72 guint curdesk; 73 guint32 *workarea; 74 75 int plug_num; 76 GList *plugins; 77 78 gboolean (*ah_state)(struct _panel *); 79 80 xconf *xc; 81 } panel; 82 83 84 typedef struct { 85 unsigned int modal : 1; 86 unsigned int sticky : 1; 87 unsigned int maximized_vert : 1; 88 unsigned int maximized_horz : 1; 89 unsigned int shaded : 1; 90 unsigned int skip_taskbar : 1; 91 unsigned int skip_pager : 1; 92 unsigned int hidden : 1; 93 unsigned int fullscreen : 1; 94 unsigned int above : 1; 95 unsigned int below : 1; 96 } net_wm_state; 97 98 typedef struct { 99 unsigned int desktop : 1; 100 unsigned int dock : 1; 101 unsigned int toolbar : 1; 102 unsigned int menu : 1; 103 unsigned int utility : 1; 104 unsigned int splash : 1; 105 unsigned int dialog : 1; 106 unsigned int normal : 1; 107 } net_wm_window_type; 108 109 typedef struct { 110 char *name; 111 void (*cmd)(void); 112 } command; 113 114 extern command commands[]; 115 116 extern gchar *cprofile; 117 118 extern Atom a_UTF8_STRING; 119 extern Atom a_XROOTPMAP_ID; 120 121 extern Atom a_WM_STATE; 122 extern Atom a_WM_CLASS; 123 extern Atom a_WM_DELETE_WINDOW; 124 extern Atom a_WM_PROTOCOLS; 125 extern Atom a_NET_WORKAREA; 126 extern Atom a_NET_CLIENT_LIST; 127 extern Atom a_NET_CLIENT_LIST_STACKING; 128 extern Atom a_NET_NUMBER_OF_DESKTOPS; 129 extern Atom a_NET_CURRENT_DESKTOP; 130 extern Atom a_NET_DESKTOP_NAMES; 131 extern Atom a_NET_DESKTOP_GEOMETRY; 132 extern Atom a_NET_ACTIVE_WINDOW; 133 extern Atom a_NET_CLOSE_WINDOW; 134 extern Atom a_NET_SUPPORTED; 135 extern Atom a_NET_WM_STATE; 136 extern Atom a_NET_WM_STATE_SKIP_TASKBAR; 137 extern Atom a_NET_WM_STATE_SKIP_PAGER; 138 extern Atom a_NET_WM_STATE_STICKY; 139 extern Atom a_NET_WM_STATE_HIDDEN; 140 extern Atom a_NET_WM_STATE_SHADED; 141 extern Atom a_NET_WM_STATE_ABOVE; 142 extern Atom a_NET_WM_STATE_BELOW; 143 144 #define a_NET_WM_STATE_REMOVE 0 /* remove/unset property */ 145 #define a_NET_WM_STATE_ADD 1 /* add/set property */ 146 #define a_NET_WM_STATE_TOGGLE 2 /* toggle property */ 147 148 extern Atom a_NET_WM_WINDOW_TYPE; 149 extern Atom a_NET_WM_WINDOW_TYPE_DESKTOP; 150 extern Atom a_NET_WM_WINDOW_TYPE_DOCK; 151 extern Atom a_NET_WM_WINDOW_TYPE_TOOLBAR; 152 extern Atom a_NET_WM_WINDOW_TYPE_MENU; 153 extern Atom a_NET_WM_WINDOW_TYPE_UTILITY; 154 extern Atom a_NET_WM_WINDOW_TYPE_SPLASH; 155 extern Atom a_NET_WM_WINDOW_TYPE_DIALOG; 156 extern Atom a_NET_WM_WINDOW_TYPE_NORMAL; 157 158 extern Atom a_NET_WM_DESKTOP; 159 extern Atom a_NET_WM_NAME; 160 extern Atom a_NET_WM_VISIBLE_NAME; 161 extern Atom a_NET_WM_STRUT; 162 extern Atom a_NET_WM_STRUT_PARTIAL; 163 extern Atom a_NET_WM_ICON; 164 extern Atom a_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR; 165 166 167 extern xconf_enum allign_enum[]; 168 extern xconf_enum edge_enum[]; 169 extern xconf_enum widthtype_enum[]; 170 extern xconf_enum heighttype_enum[]; 171 extern xconf_enum bool_enum[]; 172 extern xconf_enum pos_enum[]; 173 extern xconf_enum layer_enum[]; 174 175 extern int verbose; 176 extern gint force_quit; 177 extern FbEv *fbev; 178 extern GtkIconTheme *icon_theme; 179 #define FBPANEL_WIN(win) gdk_window_lookup(win) 180 void panel_set_wm_strut(panel *p); 181 182 gchar *panel_get_profile(void); 183 gchar *panel_get_profile_file(void); 184 185 void ah_start(panel *p); 186 void ah_stop(panel *p); 187 188 #endif 189