move the code for tracking what extensions are available on the display into the...
[dana/openbox.git] / openbox / moveresize.c
index 1a8550a..ed70899 100644 (file)
 #include "frame.h"
 #include "openbox.h"
 #include "resist.h"
-#include "mainloop.h"
 #include "modkeys.h"
 #include "popup.h"
 #include "moveresize.h"
 #include "config.h"
 #include "event.h"
 #include "debug.h"
-#include "extensions.h"
 #include "render/render.h"
 #include "render/theme.h"
+#include "obt/display.h"
 
 #include <X11/Xlib.h>
 #include <glib.h>
@@ -77,7 +76,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 +100,66 @@ 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);
+    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);
 }
@@ -202,7 +250,7 @@ void moveresize_start(ObClient *c, gint x, gint y, guint b, guint32 cnr)
     moveresize_in_progress = TRUE;
 
 #ifdef SYNC
-    if (config_resize_redraw && !moving && extensions_sync &&
+    if (config_resize_redraw && !moving && obt_display_extension_sync &&
         moveresize_client->sync_request && moveresize_client->sync_counter)
     {
         /* Initialize values for the resize syncing, and create an alarm for
@@ -262,7 +310,7 @@ void moveresize_end(gboolean cancel)
             moveresize_alarm = None;
         }
 
-        ob_main_loop_timeout_remove(ob_main_loop, sync_timeout_func);
+        obt_main_loop_timeout_remove(ob_main_loop, sync_timeout_func);
 #endif
 
         client_configure(moveresize_client,
@@ -299,7 +347,7 @@ static void do_move(gboolean keyboard, gint keydist)
 }
 
 
-static void do_resize()
+static void do_resize(void)
 {
     gint x, y, w, h, lw, lh;
 
@@ -317,7 +365,7 @@ static void do_resize()
     }
 
 #ifdef SYNC
-    if (config_resize_redraw && extensions_sync &&
+    if (config_resize_redraw && obt_display_extension_sync &&
         moveresize_client->sync_request && moveresize_client->sync_counter)
     {
         XEvent ce;
@@ -347,10 +395,10 @@ static void do_resize()
 
         waiting_for_sync = TRUE;
 
-        ob_main_loop_timeout_remove(ob_main_loop, sync_timeout_func);
-        ob_main_loop_timeout_add(ob_main_loop, G_USEC_PER_SEC * 2,
-                                 sync_timeout_func,
-                                 NULL, NULL, NULL);
+        obt_main_loop_timeout_remove(ob_main_loop, sync_timeout_func);
+        obt_main_loop_timeout_add(ob_main_loop, G_USEC_PER_SEC * 2,
+                                  sync_timeout_func,
+                                  NULL, NULL, NULL);
     }
 #endif
 
@@ -529,18 +577,18 @@ static void do_edge_warp(gint x, gint y)
         cancel_edge_warp();
         if (dir != (ObDirection)-1) {
             edge_warp_odd = TRUE; /* switch on the first timeout */
-            ob_main_loop_timeout_add(ob_main_loop,
-                                     config_mouse_screenedgetime * 1000,
-                                     edge_warp_delay_func,
-                                     NULL, NULL, NULL);
+            obt_main_loop_timeout_add(ob_main_loop,
+                                      config_mouse_screenedgetime * 1000,
+                                      edge_warp_delay_func,
+                                      NULL, NULL, NULL);
         }
         edge_warp_dir = dir;
     }
 }
 
-static void cancel_edge_warp()
+static void cancel_edge_warp(void)
 {
-    ob_main_loop_timeout_remove(ob_main_loop, edge_warp_delay_func);
+    obt_main_loop_timeout_remove(ob_main_loop, edge_warp_delay_func);
 }
 
 static void move_with_keys(gint keycode, gint state)
@@ -875,7 +923,7 @@ gboolean moveresize_event(XEvent *e)
         }
     }
 #ifdef SYNC
-    else if (e->type == extensions_sync_event_basep + XSyncAlarmNotify)
+    else if (e->type == obt_display_extension_sync_basep + XSyncAlarmNotify)
     {
         waiting_for_sync = FALSE; /* we got our sync... */
         do_resize(); /* ...so try resize if there is more change pending */