X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmoveresize.c;h=63de5c5bb4ccc252e924183392e0a2da63dc52d8;hb=6357583c396382dd6ed8ac42004177f204fabe62;hp=ddaa27621174d399c4fa44bafc70f273a30d85c8;hpb=7c7868f47d42796a236c9a1813bed5fe9f0d4f41;p=chaz%2Fopenbox diff --git a/openbox/moveresize.c b/openbox/moveresize.c index ddaa2762..63de5c5b 100644 --- a/openbox/moveresize.c +++ b/openbox/moveresize.c @@ -6,6 +6,7 @@ #include "dispatch.h" #include "openbox.h" #include "popup.h" +#include "config.h" #include "render/render.h" #include "render/theme.h" @@ -34,9 +35,6 @@ static gboolean first_draw = FALSE; #define POPUP_X (10) #define POPUP_Y (10) -gboolean config_opaque_move = FALSE; -gboolean config_opaque_resize = FALSE; - void moveresize_startup() { XSetWindowAttributes attrib; @@ -51,18 +49,18 @@ void moveresize_startup() popup = popup_new(FALSE); popup_size_to_string(popup, "W: 0000 W: 0000"); - popup_position(popup, NorthWestGravity, POPUP_X, POPUP_Y); attrib.save_under = True; opaque_window.win = XCreateWindow(ob_display, ob_root, 0, 0, 1, 1, 0, - render_depth, InputOutput, render_visual, + RrDepth(ob_rr_inst), InputOutput, + RrVisual(ob_rr_inst), CWSaveUnder, &attrib); - stacking_add(&opaque_window); + 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 = theme_bwidth; + 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, @@ -81,8 +79,12 @@ void moveresize_shutdown() static void popup_coords(char *format, int a, int b) { char *text; + Rect *area; text = g_strdup_printf(format, a, b); + area = screen_physical_area_monitor(0); + popup_position(popup, NorthWestGravity, + POPUP_X + area->x, POPUP_Y + area->y); popup_show(popup, text, NULL); g_free(text); } @@ -90,6 +92,7 @@ static void popup_coords(char *format, int a, int b) void moveresize_start(Client *c, int x, int y, guint b, guint32 cnr) { Cursor cur; + Rect *a; g_assert(!moveresize_in_progress); @@ -148,8 +151,10 @@ void moveresize_start(Client *c, int x, int y, guint b, guint32 cnr) grab_pointer(TRUE, cur); grab_keyboard(TRUE); - XResizeWindow(ob_display, opaque_window.win, screen_physical_size.width, - screen_physical_size.height); + 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) { @@ -203,17 +208,22 @@ static void do_move() client_configure(moveresize_client, Corner_TopLeft, cur_x, cur_y, start_cw, start_ch, TRUE, FALSE); /* draw the new one */ - 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; + 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 */