X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmoveresize.c;h=564bf7117513cb71ed148192e278586ea248b2a9;hb=853d5f4b70ccc475ae25806a6683406119236b29;hp=97837295d9e6df8a7b7ff99e5fbc9ee61d571afd;hpb=122d55fbadea0409fbc902a1740e1c8ff3aecd88;p=chaz%2Fopenbox diff --git a/openbox/moveresize.c b/openbox/moveresize.c index 97837295..564bf711 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,35 +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, ob_root, 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) @@ -83,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); @@ -141,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); @@ -186,46 +147,25 @@ void moveresize_end(gboolean cancel) static void do_move() { - int oldx, oldy, oldw, oldh; + Rect *a; 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 */ - popup_coords("X: %4d Y: %4d", moveresize_client->frame->area.x, - moveresize_client->frame->area.y); + a = screen_area(screen_desktop); + popup_coords("X: %4d Y: %4d", + moveresize_client->frame->area.x - a->x, + moveresize_client->frame->area.y - a->y); } 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; @@ -239,25 +179,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 */