typedef struct _ObClient ObClient;
typedef struct _ObClientIcon ObClientIcon;
-typedef struct _ObAppSettings ObAppSettings;
/* The value in client.transient_for indicating it is a transient for its
group instead of for a single window */
OB_CLIENT_FUNC_FULLSCREEN = 1 << 5, /*!< Allow to be made fullscreen */
OB_CLIENT_FUNC_CLOSE = 1 << 6, /*!< Allow to be closed */
OB_CLIENT_FUNC_ABOVE = 1 << 7, /*!< Allow to be put in lower layer */
- OB_CLIENT_FUNC_BELOW = 1 << 8 /*!< Allow to be put in higher layer */
+ OB_CLIENT_FUNC_BELOW = 1 << 8, /*!< Allow to be put in higher layer */
+ OB_CLIENT_FUNC_UNDECORATE = 1 << 9 /*!< Allow to be undecorated */
} ObFunctions;
struct _ObClient
{
ObWindow obwin;
-
Window window;
/*! The window's decorations. NULL while the window is being managed! */
/* Returns if the window is focused */
gboolean client_focused(ObClient *self);
-/*! Convery a position/size from a given gravity to the client's true gravity
+/*! When the client is resized but not moved, figure out the new position
+ for it based on its gravity:
+ http://standards.freedesktop.org/wm-spec/wm-spec-1.4.html#id2512541
+*/
+void client_gravity_resize_w(ObClient *self, gint *x, gint oldw, gint neww);
+
+/*! When the client is resized but not moved, figure out the new position
+ for it based on its gravity:
+ http://standards.freedesktop.org/wm-spec/wm-spec-1.4.html#id2512541
+*/
+void client_gravity_resize_h(ObClient *self, gint *y, gint oldh, gint newh);
+
+/*! Convert a position/size from a given gravity to the client's true gravity,
+ when the client is only resizing (the reference point doesn't move)
*/
-void client_convert_gravity(ObClient *self, gint gravity, gint *x, gint *y,
- gint w, gint h);
+void client_convert_gravity_resize(ObClient *self, 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)
+ 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)
-
/*! Figure out where a window will end up and what size it will be if you
told it to move/resize to these coordinates.
@param force_reply Send a ConfigureNotify to the client regardless of if
the position changed.
*/
-void client_configure_full(ObClient *self, gint x, gint y, gint w, gint h,
- gboolean user, gboolean final);
+void client_configure(ObClient *self, gint x, gint y, gint w, gint h,
+ gboolean user, gboolean final);
void client_reconfigure(ObClient *self);
without focusing it or modifying the focus order lists. */
gboolean client_can_focus(ObClient *self);
-/*! Attempt to focus the client window
- If you care if focus actually went to the window or not, pass checkinvalid
- as TRUE.
- */
-gboolean client_focus(ObClient *self, gboolean checkinvalid);
+/*! Attempt to focus the client window */
+gboolean client_focus(ObClient *self);
/*! Activates the client for use, focusing, uniconifying it, etc. To be used
when the user deliberately selects a window for use.