From: Dana Jansens Date: Fri, 29 Aug 2003 06:55:02 +0000 (+0000) Subject: remove the placement plugin X-Git-Url: https://git.brokenzipper.com/gitweb?a=commitdiff_plain;h=f85fea3b2d2e1b8498fcfa74dcdde45189fd3eb2;p=chaz%2Fopenbox remove the placement plugin --- diff --git a/plugins/placement/.cvsignore b/plugins/placement/.cvsignore deleted file mode 100644 index 991f13fe..00000000 --- a/plugins/placement/.cvsignore +++ /dev/null @@ -1,6 +0,0 @@ -placement.la -.libs -.deps -.dirstamp -plugins_placement_placement_la-history.lo -plugins_placement_placement_la-placement.lo diff --git a/plugins/placement/Makefile b/plugins/placement/Makefile deleted file mode 100644 index cfc46539..00000000 --- a/plugins/placement/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -all clean install: - $(MAKE) -C ../.. -$(MAKEFLAGS) $@ - -.PHONY: all clean install diff --git a/plugins/placement/history.c b/plugins/placement/history.c deleted file mode 100644 index 7203fe11..00000000 --- a/plugins/placement/history.c +++ /dev/null @@ -1,275 +0,0 @@ -#include "kernel/debug.h" -#include "kernel/openbox.h" -#include "kernel/dispatch.h" -#include "kernel/frame.h" -#include "kernel/client.h" -#include "kernel/screen.h" -#include "parser/parse.h" -#include "history.h" -#include -#include -#ifdef HAVE_STDLIB_H -# include -#endif - -#define PLACED (1 << 0) - -#define HAVE_POSITION (1 << 1) -#define HAVE_SIZE (1 << 2) -#define HAVE_DESKTOP (1 << 3) - -struct HistoryItem { - char *name; - char *class; - char *role; - - int flags; - - int x, y; - int w, h; - guint desk; -}; - -static GSList *history_list = NULL; -static char *history_path = NULL; - -static struct HistoryItem *history_find(const char *name, const char *class, - const char *role) -{ - GSList *it; - struct HistoryItem *hi = NULL; - - /* find the client */ - for (it = history_list; it != NULL; it = it->next) { - hi = it->data; - if (!strcmp(hi->name, name) && - !strcmp(hi->class, class) && - !strcmp(hi->role, role)) - return hi; - } - return NULL; -} - -gboolean place_history(ObClient *c) -{ - struct HistoryItem *hi; - int x, y, w, h; - - hi = history_find(c->name, c->class, c->role); - - if (hi && !(hi->flags & PLACED)) { - hi->flags |= PLACED; - if (ob_state() != OB_STATE_STARTING) { - if (hi->flags & HAVE_POSITION || - hi->flags & HAVE_SIZE) { - if (hi->flags & HAVE_POSITION) { - x = hi->x; - y = hi->y; - /* get where the client should be */ - frame_frame_gravity(c->frame, &x, &y); - } else { - x = c->area.x; - y = c->area.y; - } - if (hi->flags & HAVE_SIZE) { - w = hi->w * c->size_inc.width; - h = hi->h * c->size_inc.height; - } else { - w = c->area.width; - h = c->area.height; - } - client_configure(c, OB_CORNER_TOPLEFT, x, y, w, h, - TRUE, TRUE); - } - if (hi->flags & HAVE_DESKTOP) { - client_set_desktop(c, hi->desk, FALSE); - } - } - return hi->flags & HAVE_POSITION; - } - - return FALSE; -} - -static void set_history(ObClient *c) -{ - struct HistoryItem *hi; - - hi = history_find(c->name, c->class, c->role); - - if (hi == NULL) { - hi = g_new(struct HistoryItem, 1); - history_list = g_slist_append(history_list, hi); - hi->name = g_strdup(c->name); - hi->class = g_strdup(c->class); - hi->role = g_strdup(c->role); - hi->flags = HAVE_POSITION; - } - - if (hi->flags & HAVE_POSITION) { - hi->x = c->frame->area.x; - hi->y = c->frame->area.y; - } - - hi->flags &= ~PLACED; -} - -static void event(ObEvent *e, void *foo) -{ - g_assert(e->type == Event_Client_Destroy); - - set_history(e->data.c.client); -} - -/* - - - 0 - 0 - 300 - 200 - 1 - - -*/ - -static void save_history() -{ - xmlDocPtr doc; - xmlNodePtr root, node; - char *s; - GSList *it; - - doc = xmlNewDoc(NULL); - root = xmlNewNode(NULL, (const xmlChar*) "openbox_history"); - xmlDocSetRootElement(doc, root); - - for (it = history_list; it; it = g_slist_next(it)) { - struct HistoryItem *hi = it->data; - ob_debug("adding %s\n", hi->name); - node = xmlNewChild(root, NULL, (const xmlChar*) "entry", NULL); - xmlNewProp(node, (const xmlChar*) "name", (const xmlChar*) hi->name); - xmlNewProp(node, (const xmlChar*) "class", (const xmlChar*) hi->class); - xmlNewProp(node, (const xmlChar*) "role", (const xmlChar*) hi->role); - if (hi->flags & HAVE_POSITION) { - s = g_strdup_printf("%d", hi->x); - xmlNewTextChild(node, NULL, - (const xmlChar*) "x", (const xmlChar*) s); - g_free(s); - s = g_strdup_printf("%d", hi->y); - xmlNewTextChild(node, NULL, - (const xmlChar*) "y", (const xmlChar*) s); - g_free(s); - } - if (hi->flags & HAVE_SIZE) { - s = g_strdup_printf("%d", hi->w); - xmlNewTextChild(node, NULL, - (const xmlChar*) "width", (const xmlChar*) s); - g_free(s); - s = g_strdup_printf("%d", hi->h); - xmlNewTextChild(node, NULL, - (const xmlChar*) "height", (const xmlChar*) s); - g_free(s); - } - if (hi->flags & HAVE_DESKTOP) { - s = g_strdup_printf("%d", hi->desk < 0 ? hi->desk : hi->desk + 1); - xmlNewTextChild(node, NULL, - (const xmlChar*) "desktop", (const xmlChar*) s); - g_free(s); - } - } - - xmlIndentTreeOutput = 1; - xmlSaveFormatFile(history_path, doc, 1); - - xmlFreeDoc(doc); -} - -static void load_history() -{ - xmlDocPtr doc; - xmlNodePtr node, n; - char *name; - char *class; - char *role; - struct HistoryItem *hi; - - if (!parse_load(history_path, "openbox_history", &doc, &node)) - return; - - node = parse_find_node("entry", node->xmlChildrenNode); - while (node) { - name = class = role = NULL; - if (parse_attr_string("name", node, &name) && - parse_attr_string("class", node, &class) && - parse_attr_string("role", node, &role)) { - - hi = history_find(name, class, role); - if (!hi) { - hi = g_new(struct HistoryItem, 1); - hi->name = g_strdup(name); - hi->class = g_strdup(class); - hi->role = g_strdup(role); - hi->flags = 0; - } - if ((n = parse_find_node("x", node->xmlChildrenNode))) { - hi->x = parse_int(doc, n); - if ((n = parse_find_node("y", node->xmlChildrenNode))) { - hi->y = parse_int(doc, n); - hi->flags |= HAVE_POSITION; - } - } - if ((n = parse_find_node("width", node->xmlChildrenNode))) { - hi->w = parse_int(doc, n); - if ((n = parse_find_node("height", node->xmlChildrenNode))) { - hi->h = parse_int(doc, n); - hi->flags |= HAVE_SIZE; - } - } - if ((n = parse_find_node("desktop", node->xmlChildrenNode))) { - hi->desk = parse_int(doc, n); - if (hi->desk > 0) --hi->desk; - hi->flags |= HAVE_DESKTOP; - } - - history_list = g_slist_append(history_list, hi); - } - g_free(name); g_free(class); g_free(role); - node = parse_find_node("entry", node->next); - } - xmlFreeDoc(doc); -} - -void history_startup() -{ - char *path; - - history_list = NULL; - - path = g_build_filename(g_get_home_dir(), ".openbox", "history", NULL); - history_path = g_strdup_printf("%s.%d", path, ob_screen); - g_free(path); - - /*load_history(); /\* load from the historydb file */ - - dispatch_register(Event_Client_Destroy, (EventHandler)event, NULL); -} - -void history_shutdown() -{ - GSList *it; - - /*save_history(); /\* save to the historydb file */ - for (it = history_list; it != NULL; it = it->next) { - struct HistoryItem *hi = it->data; - g_free(hi->name); - g_free(hi->class); - g_free(hi->role); - g_free(hi); - } - g_slist_free(history_list); - - dispatch_register(0, (EventHandler)event, NULL); - - g_free(history_path); -} diff --git a/plugins/placement/history.h b/plugins/placement/history.h deleted file mode 100644 index cbf9f68e..00000000 --- a/plugins/placement/history.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef __plugin_placement_history_h -#define __plugin_placement_history_h - -#include "kernel/client.h" -#include - -void history_startup(); -void history_shutdown(); - -gboolean place_history(ObClient *c); - -#endif diff --git a/plugins/placement/placement.c b/plugins/placement/placement.c deleted file mode 100644 index 18c9c39b..00000000 --- a/plugins/placement/placement.c +++ /dev/null @@ -1,177 +0,0 @@ -#include "kernel/dispatch.h" -#include "kernel/client.h" -#include "kernel/group.h" -#include "kernel/frame.h" -#include "kernel/screen.h" -#include "kernel/openbox.h" -#include "parser/parse.h" -#include "history.h" -#include - -static gboolean history; - -static void parse_xml(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, void *d) -{ - xmlNodePtr n; - - node = node->xmlChildrenNode; - if ((n = parse_find_node("remember", node))) - history = parse_bool(doc, n); -} - -void plugin_setup_config(ObParseInst *i) -{ - history = TRUE; - - parse_register(i, "placement", parse_xml, NULL); -} - -static Rect* pick_head(ObClient *c) -{ - /* try direct parent first */ - if (c->transient_for && c->transient_for != OB_TRAN_GROUP) { - return screen_area_monitor(c->desktop, - client_monitor(c->transient_for)); - } - - /* more than one guy in his group (more than just him) */ - if (c->group && c->group->members->next) { - GSList *it; - - /* try on the client's desktop */ - for (it = c->group->members; it; it = g_slist_next(it)) { - ObClient *itc = it->data; - if (itc != c && - (itc->desktop == c->desktop || - itc->desktop == DESKTOP_ALL || c->desktop == DESKTOP_ALL)) - return screen_area_monitor(c->desktop, - client_monitor(it->data)); - } - - /* try on all desktops */ - for (it = c->group->members; it; it = g_slist_next(it)) { - ObClient *itc = it->data; - if (itc != c) - return screen_area_monitor(c->desktop, - client_monitor(it->data)); - } - } - - return NULL; -} - -static void place_random(ObClient *c) -{ - int l, r, t, b; - int x, y; - Rect *area; - - if (ob_state() == OB_STATE_STARTING) return; - - area = pick_head(c); - if (!area) - area = screen_area_monitor(c->desktop, - g_random_int_range(0, screen_num_monitors)); - - l = area->x; - t = area->y; - r = area->x + area->width - c->frame->area.width; - b = area->y + area->height - c->frame->area.height; - - if (r > l) x = g_random_int_range(l, r + 1); - else x = 0; - if (b > t) y = g_random_int_range(t, b + 1); - else y = 0; - - frame_frame_gravity(c->frame, &x, &y); /* get where the client should be */ - client_configure(c, OB_CORNER_TOPLEFT, x, y, c->area.width, c->area.height, - TRUE, TRUE); -} - -static void event(ObEvent *e, void *foo) -{ - g_assert(e->type == Event_Client_New); - - /* requested a position */ - if (e->data.c.client->positioned) return; - - if (e->data.c.client->transient_for) { - if (e->data.c.client->transient_for != OB_TRAN_GROUP) { - ObClient *c = e->data.c.client; - ObClient *p = e->data.c.client->transient_for; - int x = (p->frame->area.width - c->frame->area.width) / 2 + - p->frame->area.x; - int y = (p->frame->area.height - c->frame->area.height) / 2 + - p->frame->area.y; - client_configure(c, OB_CORNER_TOPLEFT, x, y, - c->area.width, c->area.height, - TRUE, TRUE); - return; - } else { - GSList *it; - ObClient *c = e->data.c.client; - gboolean first = TRUE; - int l, r, t, b; - for (it = c->group->members; it; it = it->next) { - ObClient *m = it->data; - if (!(m == c || m->transient_for)) { - if (first) { - l = m->frame->area.x; - t = m->frame->area.y; - r = m->frame->area.x + m->frame->area.width - 1; - b = m->frame->area.y + m->frame->area.height - 1; - first = FALSE; - } else { - l = MIN(l, m->frame->area.x); - t = MIN(t, m->frame->area.y); - r = MAX(r, m->frame->area.x +m->frame->area.width - 1); - b = MAX(b, m->frame->area.y +m->frame->area.height -1); - } - } - } - if (!first) { - int x = ((r + 1 - l) - c->frame->area.width) / 2 + l; - int y = ((b + 1 - t) - c->frame->area.height) / 2 + t; - client_configure(c, OB_CORNER_TOPLEFT, x, y, - c->area.width, c->area.height, - TRUE, TRUE); - return; - } - } - } - - /* center parentless dialogs on the screen */ - if (e->data.c.client->type == OB_CLIENT_TYPE_DIALOG) { - Rect *area; - ObClient *c = e->data.c.client; - int x, y; - - area = pick_head(c); - if (!area) - area = screen_area_monitor(c->desktop, 0); - - x = (area->width - c->frame->area.width) / 2 + area->x; - y = (area->height - c->frame->area.height) / 2 + area->y; - client_configure(c, OB_CORNER_TOPLEFT, x, y, - c->area.width, c->area.height, - TRUE, TRUE); - return; - } - - if (!history || !place_history(e->data.c.client)) - place_random(e->data.c.client); -} - -void plugin_startup() -{ - dispatch_register(Event_Client_New, (EventHandler)event, NULL); - - history_startup(); -} - -void plugin_shutdown() -{ - dispatch_register(0, (EventHandler)event, NULL); - - history_shutdown(); -}