#include "debug.h" #include "match.h" #include "config.h" void e_match_set_props(E_Border *b) { char buf[PATH_MAX]; E_DB_File *db; int ok; D_ENTER; if ((!b->client.name) || (!b->client.class)) D_RETURN; db = e_db_open(e_config_get("match")); sprintf(buf, "match/%s/%s/match", b->client.name, b->client.class); ok = e_db_int_get(db, buf, &(b->client.matched.matched)); if (!ok) { e_db_close(db); D_RETURN; } sprintf(buf, "match/%s/%s/prog_location/ignore", b->client.name, b->client.class); b->client.matched.prog_location.matched = e_db_int_get(db, buf, &(b->client.matched.prog_location.ignore)); sprintf(buf, "match/%s/%s/border/border", b->client.name, b->client.class); b->client.matched.border.style = e_db_str_get(db, buf); b->client.matched.border.matched = (int)b->client.matched.border.style; sprintf(buf, "match/%s/%s/location/x", b->client.name, b->client.class); b->client.matched.location.matched = e_db_int_get(db, buf, &(b->client.matched.location.x)); sprintf(buf, "match/%s/%s/location/y", b->client.name, b->client.class); b->client.matched.location.matched = e_db_int_get(db, buf, &(b->client.matched.location.y)); sprintf(buf, "match/%s/%s/desk_area/x", b->client.name, b->client.class); b->client.matched.desk_area.matched = e_db_int_get(db, buf, &(b->client.matched.desk_area.x)); sprintf(buf, "match/%s/%s/desk_area/y", b->client.name, b->client.class); b->client.matched.desk_area.matched = e_db_int_get(db, buf, &(b->client.matched.desk_area.y)); sprintf(buf, "match/%s/%s/size/w", b->client.name, b->client.class); b->client.matched.size.matched = e_db_int_get(db, buf, &(b->client.matched.size.w)); sprintf(buf, "match/%s/%s/size/h", b->client.name, b->client.class); b->client.matched.size.matched = e_db_int_get(db, buf, &(b->client.matched.size.h)); sprintf(buf, "match/%s/%s/desktop/desk", b->client.name, b->client.class); b->client.matched.desktop.matched = e_db_int_get(db, buf, &(b->client.matched.desktop.desk)); sprintf(buf, "match/%s/%s/sticky/sticky", b->client.name, b->client.class); b->client.matched.sticky.matched = e_db_int_get(db, buf, &(b->client.matched.sticky.sticky)); sprintf(buf, "match/%s/%s/layer/layer", b->client.name, b->client.class); b->client.matched.layer.matched = e_db_int_get(db, buf, &(b->client.matched.layer.layer)); if (b->client.matched.prog_location.matched) { b->client.pos.requested = 0; } if (b->client.matched.border.matched) { IF_FREE(b->border_style); b->border_style = b->client.matched.border.style; } if (b->client.matched.location.matched) { b->client.pos.requested = 1; b->client.pos.gravity = NorthWestGravity; b->client.pos.x = b->client.matched.location.x; b->client.pos.y = b->client.matched.location.y; b->client.no_place = 1; } if (b->client.matched.desk_area.matched) { b->client.pos.x += (b->client.matched.desk_area.x - b->desk->desk.area.x) * b->desk->real.w; b->client.pos.y += (b->client.matched.desk_area.y - b->desk->desk.area.y) * b->desk->real.h; b->client.area.x = b->client.matched.desk_area.x; b->client.area.y = b->client.matched.desk_area.y; } if (b->client.matched.size.matched) { b->current.requested.w = b->client.matched.size.w; b->current.requested.h = b->client.matched.size.h; ecore_window_resize(b->win.client, b->client.matched.size.w, b->client.matched.size.h); } if (b->client.matched.desktop.matched) { b->client.desk = b->client.matched.desktop.desk; e_border_raise(b); if (b->client.desk != b->desk->desk.desk) b->current.requested.visible = 0; b->client.no_place = 1; } if (b->client.matched.sticky.matched) { b->client.sticky = b->client.matched.sticky.sticky; } if (b->client.matched.layer.matched) { b->client.layer = b->client.matched.layer.layer; } e_db_close(db); D_RETURN; } void e_match_save_props(E_Border *b) { char buf[PATH_MAX]; E_DB_File *db; D_ENTER; if ((!b->client.name) || (!b->client.class)) D_RETURN; db = e_db_open(e_config_get("match")); if (!db) D_RETURN; sprintf(buf, "match/%s/%s/match", b->client.name, b->client.class); e_db_int_set(db, buf, b->client.matched.matched); if (b->client.matched.location.matched) { b->client.matched.location.x = b->current.x; b->client.matched.location.y = b->current.y; sprintf(buf, "match/%s/%s/location/x", b->client.name, b->client.class); e_db_int_set(db, buf, b->client.matched.location.x); sprintf(buf, "match/%s/%s/location/y", b->client.name, b->client.class); e_db_int_set(db, buf, b->client.matched.location.y); } else { sprintf(buf, "match/%s/%s/location/x", b->client.name, b->client.class); e_db_data_del(db, buf); sprintf(buf, "match/%s/%s/location/y", b->client.name, b->client.class); e_db_data_del(db, buf); } if (b->client.matched.size.matched) { b->client.matched.size.w = b->client.w; b->client.matched.size.h = b->client.h; sprintf(buf, "match/%s/%s/size/w", b->client.name, b->client.class); e_db_int_set(db, buf, b->client.matched.size.w); sprintf(buf, "match/%s/%s/size/h", b->client.name, b->client.class); e_db_int_set(db, buf, b->client.matched.size.h); } else { sprintf(buf, "match/%s/%s/size/w", b->client.name, b->client.class); e_db_data_del(db, buf); sprintf(buf, "match/%s/%s/size/h", b->client.name, b->client.class); e_db_data_del(db, buf); } if (b->client.matched.desktop.matched) { b->client.matched.desktop.desk = b->client.desk; sprintf(buf, "match/%s/%s/desktop/desk", b->client.name, b->client.class); e_db_int_set(db, buf, b->client.matched.desktop.desk); } else { sprintf(buf, "match/%s/%s/desktop/desk", b->client.name, b->client.class); e_db_data_del(db, buf); } if (b->client.matched.sticky.matched) { b->client.matched.sticky.sticky = b->client.sticky; sprintf(buf, "match/%s/%s/sticky/sticky", b->client.name, b->client.class); e_db_int_set(db, buf, b->client.matched.sticky.sticky); } else { sprintf(buf, "match/%s/%s/sticky/sticky", b->client.name, b->client.class); e_db_data_del(db, buf); } if (b->client.matched.prog_location.matched) { sprintf(buf, "match/%s/%s/prog_location/ignore", b->client.name, b->client.class); e_db_int_set(db, buf, b->client.matched.prog_location.ignore); } else { sprintf(buf, "match/%s/%s/prog_location/ignore", b->client.name, b->client.class); e_db_data_del(db, buf); } e_db_close(db); e_db_flush(); D_RETURN; }