+gboolean client_focused(ObClient *self);
+
+/*! Convery a position/size from a given gravity to the client's true gravity
+ */
+void client_convert_gravity(ObClient *client, gint gravity, gint *x, gint *y,
+ gint w, gint h);
+
+#define client_move(self, x, y) \
+ client_configure(self, x, y, self->area.width, self->area.height, \
+ TRUE, TRUE)
+#define client_resize(self, w, h) \
+ client_configure(self, self->area.x, self->area.y, w, h, TRUE, TRUE)
+#define client_move_resize(self, x, y, w, h) \
+ client_configure(self, x, y, w, h, TRUE, TRUE)
+
+#define client_configure(self, x, y, w, h, user, final) \
+ client_configure_full(self, x, y, w, h, user, final, FALSE)
+
+/*! Figure out where a window will end up and what size it will be if you
+ told it to move/resize to these coordinates.
+
+ These values are what client_configure_full will give the window.
+
+ @param x The x coordiante of the new position for the client.
+ @param y The y coordiante of the new position for the client.
+ @param w The width component of the new size for the client.
+ @param h The height component of the new size for the client.
+ @param logicalw Returns the width component of the new logical width.
+ This value is only returned when the new w or h calculated
+ differ from the ones passed in.
+ @param logicalh Returns the height component of the new logical height.
+ This value is only returned when the new w or h calculated
+ differ from the ones passed in.
+ @param user Specifies whether this is a user-requested change or a
+ program requested change. For program requested changes, the
+ constraints are not checked.
+*/
+void client_try_configure(ObClient *self, gint *x, gint *y, gint *w, gint *h,
+ gint *logicalw, gint *logicalh,
+ gboolean user);