all repos — openbox @ 26827d875ad1fc1b8738f9456f20296241e0bdee

openbox fork - make it a bit more like ryudo

kill non-opaque move/resize
add an option for redrawing/resizing the client window while resizing, when disabled the client is not touched until the resize is complete.
Dana Jansens danakj@orodu.net
commit

26827d875ad1fc1b8738f9456f20296241e0bdee

parent

9ba3f7d0fd06cd8c29571a997c4092acfbbb2c98

5 files changed, 16 insertions(+), 106 deletions(-)

jump to
M data/rc3data/rc3

@@ -1,7 +1,7 @@

<?xml version="1.0"?> -<!-- Do not edit this file, it will be overwritten on install. Edit the file - in $HOME/.openbox/ instead. --> +<!-- Do not edit this file, it will be overwritten on install. Copy the file + to $HOME/.openbox/ instead. --> <openbox_config>

@@ -38,10 +38,9 @@ <name>four</name>

</names> </desktops> -<moveresize> - <opaqueMove>yes</opaqueMove> - <opaqueResize>yes</opaqueResize> -</moveresize> +<resize> + <drawContents>yes</drawContents> +</resize> <dock> <position>topleft</position>
M openbox/client.copenbox/client.c

@@ -1888,9 +1888,9 @@ RECT_SET(self->area, x, y, w, h);

/* for app-requested resizes, always resize if 'resized' is true. for user-requested ones, only resize if final is true, or when - resizing in opaque mode */ + resizing in redraw mode */ if ((!user && resized) || - (user && (final || (resized && config_opaque_resize)))) + (user && (final || (resized && config_redraw_resize)))) XResizeWindow(ob_display, self->window, w, h); /* move/resize the frame to match the request */
M openbox/config.copenbox/config.c

@@ -14,8 +14,7 @@

int config_desktops_num; GSList *config_desktops_names; -gboolean config_opaque_move; -gboolean config_opaque_resize; +gboolean config_redraw_resize; ObStackingLayer config_dock_layer; gboolean config_dock_floating;

@@ -86,16 +85,14 @@ }

} } -static void parse_moveresize(xmlDocPtr doc, xmlNodePtr node, void *d) +static void parse_resize(xmlDocPtr doc, xmlNodePtr node, void *d) { xmlNodePtr n; node = node->xmlChildrenNode; - if ((n = parse_find_node("opaqueMove", node))) - config_opaque_move = parse_bool(doc, n); - if ((n = parse_find_node("opaqueResize", node))) - config_opaque_resize = parse_bool(doc, n); + if ((n = parse_find_node("drawContents", node))) + config_redraw_resize = parse_bool(doc, n); } static void parse_dock(xmlDocPtr doc, xmlNodePtr node, void *d)

@@ -179,10 +176,9 @@ config_desktops_names = NULL;

parse_register("desktops", parse_desktops, NULL); - config_opaque_move = TRUE; - config_opaque_resize = TRUE; + config_redraw_resize = TRUE; - parse_register("moveresize", parse_moveresize, NULL); + parse_register("resize", parse_resize, NULL); config_dock_layer = OB_STACKING_LAYER_TOP; config_dock_pos = OB_DIRECTION_NORTHEAST;
M openbox/config.hopenbox/config.h

@@ -18,12 +18,9 @@ /*! Show a popup dialog while cycling focus */

extern gboolean config_focus_popup; /*! The number of slits to create extern int config_slit_number;*/ -/*! When true windows are moved opaquely, when false just an outline is shown - while they are moved */ -extern gboolean config_opaque_move; -/*! When true windows are resize opaquely, when false just an outline is shown - while they are resize */ -extern gboolean config_opaque_resize; +/*! When true windows' contents are refreshed while they are resized; otherwise + they are not updated until the resize is complete */ +extern gboolean config_redraw_resize; /*! The stacking layer the dock will reside in */ extern ObStackingLayer config_dock_layer;
M openbox/moveresize.copenbox/moveresize.c

@@ -26,9 +26,6 @@ static guint32 corner;

static ObCorner lockcorner; static Popup *popup = NULL; -static InternalWindow opaque_window = { { Window_Internal }, None }; -static GC opaque_gc = None; -static gboolean first_draw = FALSE; #define POPUP_X (10) #define POPUP_Y (10)

@@ -36,37 +33,17 @@

void moveresize_startup() { XSetWindowAttributes attrib; - XGCValues gcv; popup = popup_new(FALSE); popup_size_to_string(popup, "W: 0000 W: 0000"); attrib.save_under = True; - opaque_window.win = XCreateWindow(ob_display, - RootWindow(ob_display, ob_screen), - 0, 0, 1, 1, 0, - RrDepth(ob_rr_inst), InputOutput, - RrVisual(ob_rr_inst), - CWSaveUnder, &attrib); - stacking_add(INTERNAL_AS_WINDOW(&opaque_window)); - stacking_raise(INTERNAL_AS_WINDOW(&opaque_window)); - - /* a GC to invert stuff */ - gcv.function = GXxor; - gcv.line_width = ob_rr_theme->bwidth; - gcv.foreground = (WhitePixel(ob_display, ob_screen) ^ - BlackPixel(ob_display, ob_screen)); - opaque_gc = XCreateGC(ob_display, opaque_window.win, - GCFunction | GCForeground | GCLineWidth, &gcv); } void moveresize_shutdown() { popup_free(popup); popup = NULL; - stacking_remove(&opaque_window); - XFreeGC(ob_display, opaque_gc); - XDestroyWindow(ob_display, opaque_window.win); } static void popup_coords(char *format, int a, int b)

@@ -85,7 +62,6 @@

void moveresize_start(ObClient *c, int x, int y, guint b, guint32 cnr) { ObCursor cur; - Rect *a; g_assert(!moveresize_in_progress);

@@ -143,27 +119,10 @@ g_assert_not_reached();

grab_pointer(TRUE, cur); grab_keyboard(TRUE); - - a = screen_physical_area(); - - XMoveResizeWindow(ob_display, opaque_window.win, - a->x, a->y, a->width, a->height); - stacking_raise(INTERNAL_AS_WINDOW(&opaque_window)); - if (corner == prop_atoms.net_wm_moveresize_move || - corner == prop_atoms.net_wm_moveresize_move_keyboard) { - if (!config_opaque_move) - XMapWindow(ob_display, opaque_window.win); - } else { - if (!config_opaque_resize) - XMapWindow(ob_display, opaque_window.win); - } - first_draw = TRUE; } void moveresize_end(gboolean cancel) { - XUnmapWindow(ob_display, opaque_window.win); - grab_keyboard(FALSE); grab_pointer(FALSE, None);

@@ -188,35 +147,12 @@ }

static void do_move() { - int oldx, oldy, oldw, oldh; - dispatch_move(moveresize_client, &cur_x, &cur_y); - oldx = moveresize_client->frame->area.x; - oldy = moveresize_client->frame->area.y; - oldw = moveresize_client->frame->area.width; - oldh = moveresize_client->frame->area.height; /* get where the client should be */ frame_frame_gravity(moveresize_client->frame, &cur_x, &cur_y); client_configure(moveresize_client, OB_CORNER_TOPLEFT, cur_x, cur_y, start_cw, start_ch, TRUE, FALSE); - /* draw the new one */ - if (moveresize_client->frame->area.x != oldx || - moveresize_client->frame->area.y != oldy || - moveresize_client->frame->area.width != oldw || - moveresize_client->frame->area.height != oldh) { - if (!config_opaque_move) - XDrawRectangle(ob_display, opaque_window.win, opaque_gc, - moveresize_client->frame->area.x, - moveresize_client->frame->area.y, - moveresize_client->frame->area.width - 1, - moveresize_client->frame->area.height - 1); - /* erase the old one */ - if (!config_opaque_move && !first_draw) - XDrawRectangle(ob_display, opaque_window.win, opaque_gc, - oldx, oldy, oldw - 1, oldh - 1); - first_draw = FALSE; - } /* this would be better with a fixed width font ... XXX can do it better if there are 2 text boxes */

@@ -226,8 +162,6 @@ }

static void do_resize() { - int oldx, oldy, oldw, oldh; - /* dispatch_resize needs the frame size */ cur_x += moveresize_client->frame->size.left + moveresize_client->frame->size.right;

@@ -241,25 +175,9 @@ moveresize_client->frame->size.right;

cur_y -= moveresize_client->frame->size.top + moveresize_client->frame->size.bottom; - oldx = moveresize_client->frame->area.x; - oldy = moveresize_client->frame->area.y; - oldw = moveresize_client->frame->area.width; - oldh = moveresize_client->frame->area.height; client_configure(moveresize_client, lockcorner, moveresize_client->area.x, moveresize_client->area.y, cur_x, cur_y, TRUE, FALSE); - /* draw the new one */ - if (!config_opaque_resize) - XDrawRectangle(ob_display, opaque_window.win, opaque_gc, - moveresize_client->frame->area.x, - moveresize_client->frame->area.y, - moveresize_client->frame->area.width - 1, - moveresize_client->frame->area.height - 1); - /* erase the old one */ - if (!config_opaque_resize && !first_draw) - XDrawRectangle(ob_display, opaque_window.win, opaque_gc, - oldx, oldy, oldw - 1, oldh - 1); - first_draw = FALSE; /* this would be better with a fixed width font ... XXX can do it better if there are 2 text boxes */