From 26827d875ad1fc1b8738f9456f20296241e0bdee Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 3 Aug 2003 17:47:10 +0000 Subject: [PATCH] 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. --- data/rc3 | 11 +++--- openbox/client.c | 4 +-- openbox/config.c | 16 ++++----- openbox/config.h | 9 ++--- openbox/moveresize.c | 82 -------------------------------------------- 5 files changed, 16 insertions(+), 106 deletions(-) diff --git a/data/rc3 b/data/rc3 index 282236cc..ccfa25e5 100644 --- a/data/rc3 +++ b/data/rc3 @@ -1,7 +1,7 @@ - + @@ -38,10 +38,9 @@ - - yes - yes - + + yes + topleft diff --git a/openbox/client.c b/openbox/client.c index e8b5416c..1f1d8032 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -1888,9 +1888,9 @@ void client_configure_full(ObClient *self, ObCorner anchor, /* 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 */ diff --git a/openbox/config.c b/openbox/config.c index d9c9789e..1ffc155a 100644 --- a/openbox/config.c +++ b/openbox/config.c @@ -14,8 +14,7 @@ gchar *config_title_layout; 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_desktops(xmlDocPtr doc, xmlNodePtr node, void *d) } } -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 @@ void config_startup() 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; diff --git a/openbox/config.h b/openbox/config.h index 0c317dac..d10617d0 100644 --- a/openbox/config.h +++ b/openbox/config.h @@ -18,12 +18,9 @@ extern gboolean config_focus_last_on_desktop; 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; diff --git a/openbox/moveresize.c b/openbox/moveresize.c index 96eac5cf..88c76431 100644 --- a/openbox/moveresize.c +++ b/openbox/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 @@ static gboolean first_draw = FALSE; 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 @@ static void popup_coords(char *format, int a, int b) 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 @@ void moveresize_start(ObClient *c, int x, int y, guint b, guint32 cnr) 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 @@ void moveresize_end(gboolean cancel) 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_move() 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 @@ static void do_resize() 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 */ -- 2.39.2