aboutsummaryrefslogtreecommitdiffstats
path: root/src/panel.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/panel.h')
-rw-r--r--src/panel.h312
1 files changed, 312 insertions, 0 deletions
diff --git a/src/panel.h b/src/panel.h
new file mode 100644
index 0000000..79da505
--- /dev/null
+++ b/src/panel.h
@@ -0,0 +1,312 @@
+#ifndef _DOCK_H_
+#define _DOCK_H_
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <signal.h>
+#include <sys/wait.h>
+#include <sys/time.h>
+#include <time.h>
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/Xatom.h>
+#include <X11/xpm.h>
+#include <X11/Xmd.h>
+#include <X11/extensions/shape.h>
+#include <X11/cursorfont.h>
+
+#include <libmb/mb.h>
+
+#ifdef USE_XSETTINGS
+#include <xsettings-client.h>
+#endif
+
+#define NEW(OBJ) ((OBJ *)(malloc(sizeof(OBJ))))
+
+#ifdef DEBUG
+#define DBG(txt, args... ) fprintf(stderr, "MB-PANEL-DEBUG: " txt , ##args )
+#else
+#define DBG(txt, args... ) /* nothing */
+#endif
+
+#define SWAP(a,b) { \
+ (a)^=(b); \
+ (b)^=(a); \
+ (a)^=(b); \
+ }
+
+#define PANEL_IS_VERTICAL(p) ((p)->orientation == East || (p)->orientation == West)
+
+#define SYSTEM_TRAY_REQUEST_DOCK 0
+#define SYSTEM_TRAY_BEGIN_MESSAGE 1
+#define SYSTEM_TRAY_CANCEL_MESSAGE 2
+
+#define ATOM_WM_WINDOW_TYPE 0
+#define ATOM_WM_WINDOW_TYPE_DOCK 1
+#define ATOM_WM_WINDOW_TYPE_SPLASH 10
+#define ATOM_SYSTEM_TRAY 2
+#define ATOM_SYSTEM_TRAY_OPCODE 3
+#define ATOM_XEMBED_INFO 4
+#define ATOM_XEMBED_MESSAGE 5
+#define ATOM_MANAGER 6
+#define ATOM_MB_DOCK_ALIGN 7
+#define ATOM_MB_DOCK_ALIGN_EAST 8
+
+#define ATOM_NET_SYSTEM_TRAY_MESSAGE_DATA 9
+
+#define ATOM_WM_PROTOCOLS 11
+#define ATOM_WM_DELETE_WINDOW 12
+
+#define ATOM_MB_THEME 13
+#define ATOM_MB_PANEL_BG 16
+#define ATOM_MB_DOCK_TIMESTAMP 14
+#define ATOM_NET_WM_STRUT 15
+#define ATOM_WM_CLIENT_LEADER 17
+#define ATOM_NET_WM_ICON 18
+#define ATOM_NET_WM_PID 19
+#define ATOM_XROOTPMAP_ID 20
+#define ATOM_NET_SYSTEM_TRAY_ORIENTATION 21
+#define ATOM_MB_THEME_NAME 22
+#define ATOM_MB_COMMAND 23
+#define ATOM_NET_WM_NAME 24
+#define ATOM_UTF8_STRING 25
+#define ATOM_NET_CLIENT_LIST 26
+
+#define ATOM_NET_WM_STATE 27
+#define ATOM_NET_WM_STATE_TITLEBAR 28
+
+#define ATOM_MB_SYSTEM_TRAY_CONTEXT 29
+#define ATOM_MB_REQ_CLIENT_ORDER 30
+
+#define XEMBED_EMBEDDED_NOTIFY 0
+#define XEMBED_WINDOW_ACTIVATE 1
+
+/* ID's for various MB COMMAND X Messages */
+
+#define MB_CMD_PANEL_TOGGLE_VISIBILITY 1
+#define MB_CMD_PANEL_SIZE 2
+#define MB_CMD_PANEL_ORIENTATION 3
+
+#define MB_PANEL_ORIENTATION_NORTH 1
+#define MB_PANEL_ORIENTATION_EAST 2
+#define MB_PANEL_ORIENTATION_SOUTH 3
+#define MB_PANEL_ORIENTATION_WEST 4
+
+
+#define SESSION_TIMEOUT 10 /* 5 second session timeout */
+
+#define DBL_CLICK_TIME 200
+
+
+#define DEFAULT_COLOR_SPEC "#e2e2de" /* Same as gnome ? */
+#define MB_MSG_FONT "Sans-8:bold"
+
+enum {
+ BG_SOLID_COLOR,
+ BG_PIXMAP,
+ BG_TRANS
+};
+
+typedef enum {
+ PAPP_GRAVITY_START,
+ PAPP_GRAVITY_END,
+} PanelAppGravity;
+
+typedef enum {
+ North = 1,
+ East,
+ South,
+ West
+} MBPanelOrientation;
+
+
+typedef struct _panel_app {
+
+ Window win;
+ unsigned char *name;
+ int x;
+ int y;
+ int w;
+ int h;
+
+ int offset;
+
+ Bool mapped;
+
+ struct _panel_app *next;
+
+ char *cmd_str;
+
+ struct _panel *panel;
+
+ Bool ignore; /* set so client cant be removed */
+ int ignore_unmap;
+
+ PanelAppGravity gravity;
+
+ MBPixbufImage *icon;
+
+} MBPanelApp;
+
+typedef struct _message_queue {
+
+ MBPanelApp *sender;
+ unsigned long starttime;
+ int timeout;
+ int total_msg_length;
+ int current_msg_length;
+ int id;
+ unsigned char *data;
+
+ Bool has_extra_context;
+ unsigned char *extra_context_data;
+
+ Bool pending; /* Set to true if all data */
+
+ struct _message_queue *next;
+
+} MBPanelMessageQueue;
+
+
+typedef struct _panel {
+
+ /* General */
+
+ Display *dpy;
+ int screen;
+ MBPixbuf *pb;
+ Window win, win_root;
+ GC gc, band_gc;
+ XColor xcol;
+
+ int x,y,w,h;
+
+ MBPanelApp *apps_start_head;
+ MBPanelApp *apps_end_head;
+
+ Atom atoms[31];
+ int padding;
+ int margin_start;
+ int margin_end;
+
+ /* Message windows */
+
+ struct _message_queue *msg_queue_start;
+ struct _message_queue *msg_queue_end;
+
+ Window msg_win;
+ unsigned long msg_starttime;
+ int msg_timeout;
+ MBPanelApp *msg_win_sender;
+ Bool msg_has_context;
+ int msg_context_y1, msg_context_y2;
+
+ GC msg_gc;
+
+ MBColor *msg_col;
+ MBColor *msg_urgent_col;
+ MBColor *msg_fg_col;
+ MBColor *msg_link_col;
+
+ MBFont *msg_font;
+
+
+ /* Various state bits */
+
+ Bool use_flip;
+ Bool use_session;
+ Bool use_alt_session_defaults;
+
+ Bool use_overide_wins;
+ Bool reload_pending;
+
+ MBPanelOrientation orientation;
+
+ int system_tray_id;
+
+ Bool use_themes;
+ char *theme_name;
+ char *theme_path;
+
+ Bool want_titlebar_dest;
+
+ Bool ignore_next_config;
+
+ int default_panel_size;
+
+ /* Session */
+
+ Bool session_preexisting_lock;
+ int session_init_offset;
+ char session_entry_cur[512];
+ pid_t session_needed_pid;
+ time_t session_start_time;
+ FILE *session_fp;
+ PanelAppGravity session_cur_gravity;
+ Bool session_run_first_time;
+ char *session_defaults_cur_pos;
+
+ Window last_click_window;
+ Time last_click_time;
+ Bool next_click_is_not_double;
+ Bool is_hidden;
+
+ /* Background */
+
+ XColor bg_col;
+ Pixmap bg_tile;
+ Pixmap bg_pxm;
+ char *bg_spec;
+ int bg_type;
+
+ /* Popup menu */
+
+ MBMenu* mbmenu;
+ Bool use_menu;
+ MBMenuMenu *remove_menu;
+
+ /* co-ords of where mouse click happened for menu */
+ int click_x;
+ int click_y;
+ Time click_time;
+
+
+ char *bg_trans;
+ long root_pixmap_id;
+
+#ifdef USE_XSETTINGS
+ XSettingsClient *xsettings_client;
+#endif
+
+} MBPanel;
+
+void
+panel_handle_full_panel (MBPanel *panel, MBPanelApp *bad_papp);
+
+void
+panel_toggle_visibilty(MBPanel *panel);
+
+void
+panel_change_orientation (MBPanel *panel,
+ MBPanelOrientation new_orientation,
+ int dpy_w,
+ int dpy_h);
+
+void
+panel_update_client_list_prop (MBPanel *panel);
+
+void
+panel_reorder_apps(MBPanel *panel);
+
+#include "panel_menu.h"
+#include "panel_util.h"
+#include "panel_app.h"
+#include "session.h"
+
+#endif