#include "dispatch.h"
#include "openbox.h"
#include "popup.h"
+#include "config.h"
#include "render/render.h"
#include "render/theme.h"
#define POPUP_X (10)
#define POPUP_Y (10)
-gboolean config_opaque_move = FALSE;
-gboolean config_opaque_resize = FALSE;
-
void moveresize_startup()
{
XSetWindowAttributes attrib;
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,
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_xinerama(0);
+ popup_position(popup, NorthWestGravity,
+ POPUP_X + area->x, POPUP_Y + area->y);
popup_show(popup, text, NULL);
g_free(text);
}
void moveresize_start(Client *c, int x, int y, guint b, guint32 cnr)
{
Cursor cur;
+ Rect *a;
g_assert(!moveresize_in_progress);
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) {
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 */