]> Dogcows Code - chaz/openbox/blobdiff - openbox/moveresize.c
Center the moveresize popup even when shaded.
[chaz/openbox] / openbox / moveresize.c
index 1a8550a9784d496d29fb36227114a022f1698675..333144bc10b818bfc0a44a68cb4be0bd48c82626 100644 (file)
@@ -77,7 +77,7 @@ static void client_dest(ObClient *client, gpointer data)
 
 void moveresize_startup(gboolean reconfig)
 {
-    popup = popup_new(FALSE);
+    popup = popup_new();
     popup_set_text_align(popup, RR_JUSTIFY_CENTER);
 
     if (!reconfig)
@@ -101,17 +101,64 @@ static void popup_coords(ObClient *c, const gchar *format, gint a, gint b)
     gchar *text;
 
     text = g_strdup_printf(format, a, b);
-    if (config_resize_popup_pos == 1) /* == "Top" */
+    if (config_resize_popup_pos == OB_RESIZE_POS_TOP)
         popup_position(popup, SouthGravity,
                        c->frame->area.x
                      + c->frame->area.width/2,
                        c->frame->area.y - ob_rr_theme->fbwidth);
-    else /* == "Center" */
+    else if (config_resize_popup_pos == OB_RESIZE_POS_CENTER)
         popup_position(popup, CenterGravity,
-                       c->frame->area.x + c->frame->size.left +
-                       c->area.width / 2,
-                       c->frame->area.y + c->frame->size.top +
-                       c->area.height / 2);
+                       c->frame->area.x + c->frame->area.width / 2,
+                       c->frame->area.y + c->frame->area.height / 2);
+    else /* Fixed */ {
+        Rect *area = screen_physical_area_active();
+        gint gravity, x, y;
+
+        x = config_resize_popup_fixed.x.pos;
+        if (config_resize_popup_fixed.x.center)
+            x = area->x + area->width/2;
+        else if (config_resize_popup_fixed.x.opposite)
+            x = RECT_RIGHT(*area) - x;
+        else
+            x = area->x + x;
+
+        y = config_resize_popup_fixed.y.pos;
+        if (config_resize_popup_fixed.y.center)
+            y = area->y + area->height/2;
+        else if (config_resize_popup_fixed.y.opposite)
+            y = RECT_RIGHT(*area) - y;
+        else
+            y = area->y + y;
+
+        if (config_resize_popup_fixed.x.center) {
+            if (config_resize_popup_fixed.y.center)
+                gravity = CenterGravity;
+            else if (config_resize_popup_fixed.y.opposite)
+                gravity = SouthGravity;
+            else
+                gravity = NorthGravity;
+        }
+        else if (config_resize_popup_fixed.x.opposite) {
+            if (config_resize_popup_fixed.y.center)
+                gravity = EastGravity;
+            else if (config_resize_popup_fixed.y.opposite)
+                gravity = SouthEastGravity;
+            else
+                gravity = NorthEastGravity;
+        }
+        else {
+            if (config_resize_popup_fixed.y.center)
+                gravity = WestGravity;
+            else if (config_resize_popup_fixed.y.opposite)
+                gravity = SouthWestGravity;
+            else
+                gravity = NorthWestGravity;
+        }
+
+        popup_position(popup, gravity, x, y);
+
+        g_free(area);
+    }
     popup_show(popup, text);
     g_free(text);
 }
@@ -203,7 +250,8 @@ void moveresize_start(ObClient *c, gint x, gint y, guint b, guint32 cnr)
 
 #ifdef SYNC
     if (config_resize_redraw && !moving && extensions_sync &&
-        moveresize_client->sync_request && moveresize_client->sync_counter)
+        moveresize_client->sync_request && moveresize_client->sync_counter &&
+        !moveresize_client->not_responding)
     {
         /* Initialize values for the resize syncing, and create an alarm for
            the client's xsync counter */
@@ -298,8 +346,7 @@ static void do_move(gboolean keyboard, gint keydist)
                      moveresize_client->frame->area.y);
 }
 
-
-static void do_resize()
+static void do_resize(void)
 {
     gint x, y, w, h, lw, lh;
 
@@ -318,7 +365,8 @@ static void do_resize()
 
 #ifdef SYNC
     if (config_resize_redraw && extensions_sync &&
-        moveresize_client->sync_request && moveresize_client->sync_counter)
+        moveresize_client->sync_request && moveresize_client->sync_counter &&
+        !moveresize_client->not_responding)
     {
         XEvent ce;
         XSyncValue val;
@@ -538,7 +586,7 @@ static void do_edge_warp(gint x, gint y)
     }
 }
 
-static void cancel_edge_warp()
+static void cancel_edge_warp(void)
 {
     ob_main_loop_timeout_remove(ob_main_loop, edge_warp_delay_func);
 }
This page took 0.023401 seconds and 4 git commands to generate.