prefixing for the dock. use ObDirection instead of dupliacting it in another enum for the dock's placement

This commit is contained in:
Dana Jansens 2003-07-10 16:29:40 +00:00
parent 33a2cdbeb9
commit d206303a9f
7 changed files with 192 additions and 183 deletions

View file

@ -16,7 +16,8 @@ gboolean config_opaque_move;
gboolean config_opaque_resize; gboolean config_opaque_resize;
StackLayer config_dock_layer; StackLayer config_dock_layer;
DockPosition config_dock_pos; gboolean config_dock_floating;
ObDirection config_dock_pos;
int config_dock_x; int config_dock_x;
int config_dock_y; int config_dock_y;
gboolean config_dock_horz; gboolean config_dock_horz;
@ -89,25 +90,33 @@ static void parse_dock(xmlDocPtr doc, xmlNodePtr node, void *d)
if ((n = parse_find_node("position", node))) { if ((n = parse_find_node("position", node))) {
if (parse_contains("TopLeft", doc, n)) if (parse_contains("TopLeft", doc, n))
config_dock_pos = DockPos_TopLeft; config_dock_floating = FALSE,
config_dock_pos = OB_DIRECTION_NORTHWEST;
else if (parse_contains("Top", doc, n)) else if (parse_contains("Top", doc, n))
config_dock_pos = DockPos_Top; config_dock_floating = FALSE,
config_dock_pos = OB_DIRECTION_NORTH;
else if (parse_contains("TopRight", doc, n)) else if (parse_contains("TopRight", doc, n))
config_dock_pos = DockPos_TopRight; config_dock_floating = FALSE,
config_dock_pos = OB_DIRECTION_NORTHEAST;
else if (parse_contains("Right", doc, n)) else if (parse_contains("Right", doc, n))
config_dock_pos = DockPos_Right; config_dock_floating = FALSE,
config_dock_pos = OB_DIRECTION_EAST;
else if (parse_contains("BottomRight", doc, n)) else if (parse_contains("BottomRight", doc, n))
config_dock_pos = DockPos_BottomRight; config_dock_floating = FALSE,
config_dock_pos = OB_DIRECTION_SOUTHEAST;
else if (parse_contains("Bottom", doc, n)) else if (parse_contains("Bottom", doc, n))
config_dock_pos = DockPos_Bottom; config_dock_floating = FALSE,
config_dock_pos = OB_DIRECTION_SOUTH;
else if (parse_contains("BottomLeft", doc, n)) else if (parse_contains("BottomLeft", doc, n))
config_dock_pos = DockPos_BottomLeft; config_dock_floating = FALSE,
config_dock_pos = OB_DIRECTION_SOUTHWEST;
else if (parse_contains("Left", doc, n)) else if (parse_contains("Left", doc, n))
config_dock_pos = DockPos_Left; config_dock_floating = FALSE,
config_dock_pos = OB_DIRECTION_WEST;
else if (parse_contains("Floating", doc, n)) else if (parse_contains("Floating", doc, n))
config_dock_pos = DockPos_Floating; config_dock_floating = TRUE;
} }
if (config_dock_pos == DockPos_Floating) { if (config_dock_floating) {
if ((n = parse_find_node("floatingX", node))) if ((n = parse_find_node("floatingX", node)))
config_dock_x = parse_int(doc, n); config_dock_x = parse_int(doc, n);
if ((n = parse_find_node("floatingY", node))) if ((n = parse_find_node("floatingY", node)))
@ -158,7 +167,8 @@ void config_startup()
parse_register("moveresize", parse_moveresize, NULL); parse_register("moveresize", parse_moveresize, NULL);
config_dock_layer = Layer_Top; config_dock_layer = Layer_Top;
config_dock_pos = DockPos_TopRight; config_dock_pos = OB_DIRECTION_NORTHEAST;
config_dock_floating = FALSE;
config_dock_x = 0; config_dock_x = 0;
config_dock_y = 0; config_dock_y = 0;
config_dock_horz = FALSE; config_dock_horz = FALSE;

View file

@ -1,6 +1,7 @@
#ifndef __config_h #ifndef __config_h
#define __config_h #define __config_h
#include "misc.h"
#include "dock.h" #include "dock.h"
#include "stacking.h" #include "stacking.h"
@ -27,8 +28,10 @@ extern gboolean config_opaque_resize;
/*! The stacking layer the dock will reside in */ /*! The stacking layer the dock will reside in */
extern StackLayer config_dock_layer; extern StackLayer config_dock_layer;
/*! The position at which to place the dock */ /*! Is the dock floating */
extern DockPosition config_dock_pos; extern gboolean config_dock_floating;
/*! Where to place the dock if not floating */
extern ObDirection config_dock_pos;
/*! If config_dock_pos is DockPos_Floating, this is the top-left corner's /*! If config_dock_pos is DockPos_Floating, this is the top-left corner's
position */ position */
extern int config_dock_x; extern int config_dock_x;

View file

@ -10,7 +10,7 @@
EnterWindowMask | LeaveWindowMask) EnterWindowMask | LeaveWindowMask)
#define DOCKAPP_EVENT_MASK (StructureNotifyMask) #define DOCKAPP_EVENT_MASK (StructureNotifyMask)
static Dock *dock; static ObDock *dock;
Strut dock_strut; Strut dock_strut;
@ -20,7 +20,7 @@ void dock_startup()
STRUT_SET(dock_strut, 0, 0, 0, 0); STRUT_SET(dock_strut, 0, 0, 0, 0);
dock = g_new0(struct Dock, 1); dock = g_new0(ObDock, 1);
dock->obwin.type = Window_Dock; dock->obwin.type = Window_Dock;
dock->hidden = TRUE; dock->hidden = TRUE;
@ -51,11 +51,11 @@ void dock_shutdown()
void dock_add(Window win, XWMHints *wmhints) void dock_add(Window win, XWMHints *wmhints)
{ {
DockApp *app; ObDockApp *app;
XWindowAttributes attrib; XWindowAttributes attrib;
char **data; gchar **data;
app = g_new0(DockApp, 1); app = g_new0(ObDockApp, 1);
app->obwin.type = Window_DockApp; app->obwin.type = Window_DockApp;
app->win = win; app->win = win;
app->icon_win = (wmhints->flags & IconWindowHint) ? app->icon_win = (wmhints->flags & IconWindowHint) ?
@ -122,7 +122,7 @@ void dock_remove_all()
dock_remove(dock->dock_apps->data, TRUE); dock_remove(dock->dock_apps->data, TRUE);
} }
void dock_remove(DockApp *app, gboolean reparent) void dock_remove(ObDockApp *app, gboolean reparent)
{ {
ungrab_button(2, 0, app->icon_win); ungrab_button(2, 0, app->icon_win);
XSelectInput(ob_display, app->icon_win, NoEventMask); XSelectInput(ob_display, app->icon_win, NoEventMask);
@ -148,10 +148,10 @@ void dock_remove(DockApp *app, gboolean reparent)
void dock_configure() void dock_configure()
{ {
GList *it; GList *it;
int spot; gint spot;
int gravity; gint gravity;
int minw, minh; gint minw, minh;
int strw, strh; gint strw, strh;
Rect *a; Rect *a;
RrMinsize(dock->a_frame, &minw, &minh); RrMinsize(dock->a_frame, &minw, &minh);
@ -160,7 +160,7 @@ void dock_configure()
/* get the size */ /* get the size */
for (it = dock->dock_apps; it; it = it->next) { for (it = dock->dock_apps; it; it = it->next) {
struct DockApp *app = it->data; ObDockApp *app = it->data;
if (config_dock_horz) { if (config_dock_horz) {
dock->w += app->w; dock->w += app->w;
dock->h = MAX(dock->h, app->h); dock->h = MAX(dock->h, app->h);
@ -174,7 +174,7 @@ void dock_configure()
/* position the apps */ /* position the apps */
for (it = dock->dock_apps; it; it = it->next) { for (it = dock->dock_apps; it; it = it->next) {
struct DockApp *app = it->data; ObDockApp *app = it->data;
if (config_dock_horz) { if (config_dock_horz) {
app->x = spot; app->x = spot;
app->y = (dock->h - app->h) / 2; app->y = (dock->h - app->h) / 2;
@ -195,53 +195,54 @@ void dock_configure()
a = screen_physical_area(); a = screen_physical_area();
/* calculate position */ /* calculate position */
switch (config_dock_pos) { if (config_dock_floating) {
case DockPos_Floating:
dock->x = config_dock_x; dock->x = config_dock_x;
dock->y = config_dock_y; dock->y = config_dock_y;
gravity = NorthWestGravity; gravity = NorthWestGravity;
break; } else {
case DockPos_TopLeft: switch (config_dock_pos) {
case OB_DIRECTION_NORTHWEST:
dock->x = 0; dock->x = 0;
dock->y = 0; dock->y = 0;
gravity = NorthWestGravity; gravity = NorthWestGravity;
break; break;
case DockPos_Top: case OB_DIRECTION_NORTH:
dock->x = a->width / 2; dock->x = a->width / 2;
dock->y = 0; dock->y = 0;
gravity = NorthGravity; gravity = NorthGravity;
break; break;
case DockPos_TopRight: case OB_DIRECTION_NORTHEAST:
dock->x = a->width; dock->x = a->width;
dock->y = 0; dock->y = 0;
gravity = NorthEastGravity; gravity = NorthEastGravity;
break; break;
case DockPos_Left: case OB_DIRECTION_WEST:
dock->x = 0; dock->x = 0;
dock->y = a->height / 2; dock->y = a->height / 2;
gravity = WestGravity; gravity = WestGravity;
break; break;
case DockPos_Right: case OB_DIRECTION_EAST:
dock->x = a->width; dock->x = a->width;
dock->y = a->height / 2; dock->y = a->height / 2;
gravity = EastGravity; gravity = EastGravity;
break; break;
case DockPos_BottomLeft: case OB_DIRECTION_SOUTHWEST:
dock->x = 0; dock->x = 0;
dock->y = a->height; dock->y = a->height;
gravity = SouthWestGravity; gravity = SouthWestGravity;
break; break;
case DockPos_Bottom: case OB_DIRECTION_SOUTH:
dock->x = a->width / 2; dock->x = a->width / 2;
dock->y = a->height; dock->y = a->height;
gravity = SouthGravity; gravity = SouthGravity;
break; break;
case DockPos_BottomRight: case OB_DIRECTION_SOUTHEAST:
dock->x = a->width; dock->x = a->width;
dock->y = a->height; dock->y = a->height;
gravity = SouthEastGravity; gravity = SouthEastGravity;
break; break;
} }
}
switch(gravity) { switch(gravity) {
case NorthGravity: case NorthGravity:
@ -269,40 +270,39 @@ void dock_configure()
} }
if (config_dock_hide && dock->hidden) { if (config_dock_hide && dock->hidden) {
if (!config_dock_floating) {
switch (config_dock_pos) { switch (config_dock_pos) {
case DockPos_Floating: case OB_DIRECTION_NORTHWEST:
break;
case DockPos_TopLeft:
if (config_dock_horz) if (config_dock_horz)
dock->y -= dock->h - ob_rr_theme->bwidth; dock->y -= dock->h - ob_rr_theme->bwidth;
else else
dock->x -= dock->w - ob_rr_theme->bwidth; dock->x -= dock->w - ob_rr_theme->bwidth;
break; break;
case DockPos_Top: case OB_DIRECTION_NORTH:
dock->y -= dock->h - ob_rr_theme->bwidth; dock->y -= dock->h - ob_rr_theme->bwidth;
break; break;
case DockPos_TopRight: case OB_DIRECTION_NORTHEAST:
if (config_dock_horz) if (config_dock_horz)
dock->y -= dock->h - ob_rr_theme->bwidth; dock->y -= dock->h - ob_rr_theme->bwidth;
else else
dock->x += dock->w - ob_rr_theme->bwidth; dock->x += dock->w - ob_rr_theme->bwidth;
break; break;
case DockPos_Left: case OB_DIRECTION_WEST:
dock->x -= dock->w - ob_rr_theme->bwidth; dock->x -= dock->w - ob_rr_theme->bwidth;
break; break;
case DockPos_Right: case OB_DIRECTION_EAST:
dock->x += dock->w - ob_rr_theme->bwidth; dock->x += dock->w - ob_rr_theme->bwidth;
break; break;
case DockPos_BottomLeft: case OB_DIRECTION_SOUTHWEST:
if (config_dock_horz) if (config_dock_horz)
dock->y += dock->h - ob_rr_theme->bwidth; dock->y += dock->h - ob_rr_theme->bwidth;
else else
dock->x -= dock->w - ob_rr_theme->bwidth; dock->x -= dock->w - ob_rr_theme->bwidth;
break; break;
case DockPos_Bottom: case OB_DIRECTION_SOUTH:
dock->y += dock->h - ob_rr_theme->bwidth; dock->y += dock->h - ob_rr_theme->bwidth;
break; break;
case DockPos_BottomRight: case OB_DIRECTION_SOUTHEAST:
if (config_dock_horz) if (config_dock_horz)
dock->y += dock->h - ob_rr_theme->bwidth; dock->y += dock->h - ob_rr_theme->bwidth;
else else
@ -310,8 +310,9 @@ void dock_configure()
break; break;
} }
} }
}
if (config_dock_pos != DockPos_Floating && config_dock_hide) { if (!config_dock_floating && config_dock_hide) {
strw = strh = ob_rr_theme->bwidth; strw = strh = ob_rr_theme->bwidth;
} else { } else {
strw = dock->w; strw = dock->w;
@ -319,47 +320,48 @@ void dock_configure()
} }
/* set the strut */ /* set the strut */
switch (config_dock_pos) { if (config_dock_floating) {
case DockPos_Floating:
STRUT_SET(dock_strut, 0, 0, 0, 0); STRUT_SET(dock_strut, 0, 0, 0, 0);
break; } else {
case DockPos_TopLeft: switch (config_dock_pos) {
case OB_DIRECTION_NORTHWEST:
if (config_dock_horz) if (config_dock_horz)
STRUT_SET(dock_strut, 0, strh, 0, 0); STRUT_SET(dock_strut, 0, strh, 0, 0);
else else
STRUT_SET(dock_strut, strw, 0, 0, 0); STRUT_SET(dock_strut, strw, 0, 0, 0);
break; break;
case DockPos_Top: case OB_DIRECTION_NORTH:
STRUT_SET(dock_strut, 0, strh, 0, 0); STRUT_SET(dock_strut, 0, strh, 0, 0);
break; break;
case DockPos_TopRight: case OB_DIRECTION_NORTHEAST:
if (config_dock_horz) if (config_dock_horz)
STRUT_SET(dock_strut, 0, strh, 0, 0); STRUT_SET(dock_strut, 0, strh, 0, 0);
else else
STRUT_SET(dock_strut, 0, 0, strw, 0); STRUT_SET(dock_strut, 0, 0, strw, 0);
break; break;
case DockPos_Left: case OB_DIRECTION_WEST:
STRUT_SET(dock_strut, strw, 0, 0, 0); STRUT_SET(dock_strut, strw, 0, 0, 0);
break; break;
case DockPos_Right: case OB_DIRECTION_EAST:
STRUT_SET(dock_strut, 0, 0, strw, 0); STRUT_SET(dock_strut, 0, 0, strw, 0);
break; break;
case DockPos_BottomLeft: case OB_DIRECTION_SOUTHWEST:
if (config_dock_horz) if (config_dock_horz)
STRUT_SET(dock_strut, 0, 0, 0, strh); STRUT_SET(dock_strut, 0, 0, 0, strh);
else else
STRUT_SET(dock_strut, strw, 0, 0, 0); STRUT_SET(dock_strut, strw, 0, 0, 0);
break; break;
case DockPos_Bottom: case OB_DIRECTION_SOUTH:
STRUT_SET(dock_strut, 0, 0, 0, strh); STRUT_SET(dock_strut, 0, 0, 0, strh);
break; break;
case DockPos_BottomRight: case OB_DIRECTION_SOUTHEAST:
if (config_dock_horz) if (config_dock_horz)
STRUT_SET(dock_strut, 0, 0, 0, strh); STRUT_SET(dock_strut, 0, 0, 0, strh);
else else
STRUT_SET(dock_strut, 0, 0, strw, 0); STRUT_SET(dock_strut, 0, 0, strw, 0);
break; break;
} }
}
dock->w += minw; dock->w += minw;
dock->h += minh; dock->h += minh;
@ -384,18 +386,18 @@ void dock_configure()
screen_update_areas(); screen_update_areas();
} }
void dock_app_configure(DockApp *app, int w, int h) void dock_app_configure(ObDockApp *app, gint w, gint h)
{ {
app->w = w; app->w = w;
app->h = h; app->h = h;
dock_configure(); dock_configure();
} }
void dock_app_drag(DockApp *app, XMotionEvent *e) void dock_app_drag(ObDockApp *app, XMotionEvent *e)
{ {
DockApp *over = NULL; ObDockApp *over = NULL;
GList *it; GList *it;
int x, y; gint x, y;
gboolean after; gboolean after;
x = e->x_root; x = e->x_root;

View file

@ -11,50 +11,44 @@
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <X11/Xutil.h> #include <X11/Xutil.h>
typedef enum { typedef struct _ObDock ObDock;
DockPos_Floating, typedef struct _ObDockApp ObDockApp;
DockPos_TopLeft,
DockPos_Top,
DockPos_TopRight,
DockPos_Right,
DockPos_BottomRight,
DockPos_Bottom,
DockPos_BottomLeft,
DockPos_Left
} DockPosition;
typedef struct Dock { struct _ObDock
{
ObWindow obwin; ObWindow obwin;
Window frame; Window frame;
RrAppearance *a_frame; RrAppearance *a_frame;
/* actual position (when not auto-hidden) */ /* actual position (when not auto-hidden) */
int x, y; gint x;
int w, h; gint y;
gint w;
gint h;
gboolean hidden; gboolean hidden;
Timer *hide_timer; Timer *hide_timer;
GList *dock_apps; GList *dock_apps;
} Dock; };
typedef struct DockApp { struct _ObDockApp {
ObWindow obwin; ObWindow obwin;
int ignore_unmaps; gint ignore_unmaps;
Window icon_win; Window icon_win;
Window win; Window win;
char *name; gchar *name;
char *class; gchar *class;
int x; gint x;
int y; gint y;
int w; gint w;
int h; gint h;
} DockApp; };
extern Strut dock_strut; extern Strut dock_strut;
@ -67,9 +61,9 @@ void dock_hide(gboolean hide);
void dock_add(Window win, XWMHints *wmhints); void dock_add(Window win, XWMHints *wmhints);
void dock_remove_all(); void dock_remove_all();
void dock_remove(DockApp *app, gboolean reparent); void dock_remove(ObDockApp *app, gboolean reparent);
void dock_app_drag(DockApp *app, XMotionEvent *e); void dock_app_drag(ObDockApp *app, XMotionEvent *e);
void dock_app_configure(DockApp *app, int w, int h); void dock_app_configure(ObDockApp *app, gint w, gint h);
#endif #endif

View file

@ -38,8 +38,8 @@
static void event_process(XEvent *e); static void event_process(XEvent *e);
static void event_handle_root(XEvent *e); static void event_handle_root(XEvent *e);
static void event_handle_dock(Dock *s, XEvent *e); static void event_handle_dock(ObDock *s, XEvent *e);
static void event_handle_dockapp(DockApp *app, XEvent *e); static void event_handle_dockapp(ObDockApp *app, XEvent *e);
static void event_handle_client(ObClient *c, XEvent *e); static void event_handle_client(ObClient *c, XEvent *e);
static void event_handle_menu(ObClient *c, XEvent *e); static void event_handle_menu(ObClient *c, XEvent *e);
static void fd_event_handle(); static void fd_event_handle();
@ -468,8 +468,8 @@ static void event_process(XEvent *e)
{ {
Window window; Window window;
ObClient *client = NULL; ObClient *client = NULL;
Dock *dock = NULL; ObDock *dock = NULL;
DockApp *dockapp = NULL; ObDockApp *dockapp = NULL;
Menu *menu = NULL; Menu *menu = NULL;
ObWindow *obwin = NULL; ObWindow *obwin = NULL;
@ -1145,7 +1145,7 @@ static void fd_event_handle()
g_datalist_foreach(&fd_handler_list, fd_event_handle_foreach, NULL); g_datalist_foreach(&fd_handler_list, fd_event_handle_foreach, NULL);
} }
static void event_handle_dock(Dock *s, XEvent *e) static void event_handle_dock(ObDock *s, XEvent *e)
{ {
switch (e->type) { switch (e->type) {
case ButtonPress: case ButtonPress:
@ -1160,7 +1160,7 @@ static void event_handle_dock(Dock *s, XEvent *e)
} }
} }
static void event_handle_dockapp(DockApp *app, XEvent *e) static void event_handle_dockapp(ObDockApp *app, XEvent *e)
{ {
switch (e->type) { switch (e->type) {
case MotionNotify: case MotionNotify:

View file

@ -23,7 +23,7 @@ Window window_top(ObWindow *self)
case Window_Menu: case Window_Menu:
return ((Menu*)self)->frame; return ((Menu*)self)->frame;
case Window_Dock: case Window_Dock:
return ((Dock*)self)->frame; return ((ObDock*)self)->frame;
case Window_DockApp: case Window_DockApp:
/* not to be used for stacking */ /* not to be used for stacking */
g_assert_not_reached(); g_assert_not_reached();

View file

@ -30,13 +30,13 @@ typedef struct InternalWindow {
#define WINDOW_IS_INTERNAL(win) (((ObWindow*)win)->type == Window_Internal) #define WINDOW_IS_INTERNAL(win) (((ObWindow*)win)->type == Window_Internal)
struct Menu; struct Menu;
struct Dock; struct _ObDock;
struct DockApp; struct _ObDockApp;
struct _ObClient; struct _ObClient;
#define WINDOW_AS_MENU(win) ((struct Menu*)win) #define WINDOW_AS_MENU(win) ((struct Menu*)win)
#define WINDOW_AS_DOCK(win) ((struct Dock*)win) #define WINDOW_AS_DOCK(win) ((struct _ObDock*)win)
#define WINDOW_AS_DOCKAPP(win) ((struct DockApp*)win) #define WINDOW_AS_DOCKAPP(win) ((struct _ObDockApp*)win)
#define WINDOW_AS_CLIENT(win) ((struct _ObClient*)win) #define WINDOW_AS_CLIENT(win) ((struct _ObClient*)win)
#define WINDOW_AS_INTERNAL(win) ((struct InternalWindow*)win) #define WINDOW_AS_INTERNAL(win) ((struct InternalWindow*)win)