]> Dogcows Code - chaz/openbox/blobdiff - openbox/moveresize.c
xinerama support
[chaz/openbox] / openbox / moveresize.c
index ddaa27621174d399c4fa44bafc70f273a30d85c8..570283c43ab827f969f887e572bdf12b9fd9eeed 100644 (file)
@@ -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_xinerama(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 */
This page took 0.023208 seconds and 4 git commands to generate.