all repos — openbox @ 8ab1e9537e5aebfe48d826cbf266cf8d582d9d65

openbox fork - make it a bit more like ryudo

add resizerelative action
Dana Jansens danakj@orodu.net
commit

8ab1e9537e5aebfe48d826cbf266cf8d582d9d65

parent

4044b942e74b59599e82bb4834a730c32e49820d

M Makefile.amMakefile.am

@@ -184,6 +184,7 @@ openbox/actions/raise.c \

openbox/actions/raiselower.c \ openbox/actions/reconfigure.c \ openbox/actions/resize.c \ + openbox/actions/resizerelative.c \ openbox/actions/restart.c \ openbox/actions/shade.c \ openbox/actions/showdesktop.c \
M openbox/action.copenbox/action.c

@@ -346,16 +346,6 @@ action_unshaderaise,

setup_client_action }, { - "resizerelativevert", - action_resize_relative_vert, - setup_client_action - }, - { - "resizerelative", - action_resize_relative, - setup_client_action - }, - { "sendtodesktop", action_send_to_desktop, setup_action_send_to_desktop

@@ -393,11 +383,6 @@ },

{ "toggledockautohide", action_toggle_dockautohide, - NULL - }, - { - "desktoplast", - action_desktop_last, NULL }, {

@@ -553,24 +538,7 @@ xmlNodePtr n;

if (parse_attr_string("name", node, &actname)) { if ((act = action_from_string(actname, uact))) { - } else if (act->func == action_resize_relative) { - if ((n = parse_find_node("left", node->xmlChildrenNode))) - act->data.relative.deltaxl = parse_int(doc, n); - if ((n = parse_find_node("up", node->xmlChildrenNode))) - act->data.relative.deltayu = parse_int(doc, n); - if ((n = parse_find_node("right", node->xmlChildrenNode))) - act->data.relative.deltax = parse_int(doc, n); - if ((n = parse_find_node("down", node->xmlChildrenNode))) - act->data.relative.deltay = parse_int(doc, n); } else if (act->func == action_desktop) { - if ((n = parse_find_node("desktop", node->xmlChildrenNode))) - act->data.desktop.desk = parse_int(doc, n); - if (act->data.desktop.desk > 0) act->data.desktop.desk--; -/* - if ((n = parse_find_node("dialog", node->xmlChildrenNode))) - act->data.desktop.inter.any.interactive = - parse_bool(doc, n); -*/ } else if (act->func == action_send_to_desktop) { if ((n = parse_find_node("desktop", node->xmlChildrenNode))) act->data.sendto.desk = parse_int(doc, n);

@@ -708,55 +676,8 @@ else

action_shade(data); } -void action_resize_relative_horz(union ActionData *data) -{ - ObClient *c = data->relative.any.c; - client_action_start(data); - client_resize(c, - c->area.width + data->relative.deltax * c->size_inc.width, - c->area.height); - client_action_end(data, FALSE); -} - -void action_resize_relative_vert(union ActionData *data) -{ - ObClient *c = data->relative.any.c; - if (!c->shaded) { - client_action_start(data); - client_resize(c, c->area.width, c->area.height + - data->relative.deltax * c->size_inc.height); - client_action_end(data, FALSE); - } -} - void action_resize_relative(union ActionData *data) { - ObClient *c = data->relative.any.c; - gint x, y, ow, xoff, nw, oh, yoff, nh, lw, lh; - - client_action_start(data); - - x = c->area.x; - y = c->area.y; - ow = c->area.width; - xoff = -data->relative.deltaxl * c->size_inc.width; - nw = ow + data->relative.deltax * c->size_inc.width - + data->relative.deltaxl * c->size_inc.width; - oh = c->area.height; - yoff = -data->relative.deltayu * c->size_inc.height; - nh = oh + data->relative.deltay * c->size_inc.height - + data->relative.deltayu * c->size_inc.height; - - g_print("deltax %d %d x %d ow %d xoff %d nw %d\n", - data->relative.deltax, - data->relative.deltaxl, - x, ow, xoff, nw); - - client_try_configure(c, &x, &y, &nw, &nh, &lw, &lh, TRUE); - xoff = xoff == 0 ? 0 : (xoff < 0 ? MAX(xoff, ow-nw) : MIN(xoff, ow-nw)); - yoff = yoff == 0 ? 0 : (yoff < 0 ? MAX(yoff, oh-nh) : MIN(yoff, oh-nh)); - client_move_resize(c, x + xoff, y + yoff, nw, nh); - client_action_end(data, FALSE); } void action_send_to_desktop(union ActionData *data)

@@ -795,12 +716,6 @@ client_set_desktop(c, d, data->sendtodir.follow, FALSE);

if (data->sendtodir.follow && d != screen_desktop) screen_set_desktop(d, TRUE); } -} - -void action_desktop_last(union ActionData *data) -{ - if (screen_last_desktop < screen_num_desktops) - screen_set_desktop(screen_last_desktop, TRUE); } void action_directional_focus(union ActionData *data)
M openbox/actions/all.copenbox/actions/all.c

@@ -34,4 +34,5 @@ action_resize_startup();

action_decorations_startup(); action_desktop_startup(); action_directionaldesktop_startup(); + action_resizerelative_startup(); }
M openbox/actions/all.hopenbox/actions/all.h

@@ -35,5 +35,6 @@ void action_resize_startup();

void action_decorations_startup(); void action_desktop_startup(); void action_directionaldesktop_startup(); +void action_resizerelative_startup(); #endif
A openbox/actions/resizerelative.c

@@ -0,0 +1,85 @@

+#include "openbox/actions.h" +#include "openbox/client.h" +#include "openbox/screen.h" +#include "openbox/frame.h" +#include <stdlib.h> /* for atoi */ + +typedef struct { + gint left; + gint right; + gint top; + gint bottom; +} Options; + +static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); +static void free_func(gpointer options); +static gboolean run_func(ObActionsData *data, gpointer options); + +void action_resizerelative_startup() +{ + actions_register("ResizeRelative", + setup_func, + free_func, + run_func, + NULL, NULL); +} + +static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +{ + xmlNodePtr n; + Options *o; + + o = g_new0(Options, 1); + + if ((n = parse_find_node("left", node))) + o->left = parse_int(doc, n); + if ((n = parse_find_node("right", node))) + o->right = parse_int(doc, n); + if ((n = parse_find_node("top", node))) + o->top = parse_int(doc, n); + if ((n = parse_find_node("bottom", node))) + o->bottom = parse_int(doc, n); + + return o; +} + +static void free_func(gpointer options) +{ + Options *o = options; + + g_free(o); +} + +/* Always return FALSE because its not interactive */ +static gboolean run_func(ObActionsData *data, gpointer options) +{ + Options *o = options; + + if (data->client) { + ObClient *c = data->client; + gint x, y, ow, xoff, nw, oh, yoff, nh, lw, lh; + + x = c->area.x; + y = c->area.y; + ow = c->area.width; + xoff = -o->left * c->size_inc.width; + nw = ow + o->right * c->size_inc.width + + o->left * c->size_inc.width; + oh = c->area.height; + yoff = -o->top * c->size_inc.height; + nh = oh + o->bottom * c->size_inc.height + + o->top * c->size_inc.height; + + client_try_configure(c, &x, &y, &nw, &nh, &lw, &lh, TRUE); + xoff = xoff == 0 ? 0 : + (xoff < 0 ? MAX(xoff, ow-nw) : MIN(xoff, ow-nw)); + yoff = yoff == 0 ? 0 : + (yoff < 0 ? MAX(yoff, oh-nh) : MIN(yoff, oh-nh)); + + actions_client_move(data, FALSE); + client_move_resize(c, x + xoff, y + yoff, nw, nh); + actions_client_move(data, TRUE); + } + + return FALSE; +}