X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Fclient.h;h=e3769ea44f2f906aca3d175d78485549967f942b;hb=c51b5c2e6bd82b36f07584e4c6aeeb23147df460;hp=24cefe309429f6caaf2b12b89cf76aee5c37db3b;hpb=122d55fbadea0409fbc902a1740e1c8ff3aecd88;p=chaz%2Fopenbox
diff --git a/openbox/client.h b/openbox/client.h
index 24cefe30..e3769ea4 100644
--- a/openbox/client.h
+++ b/openbox/client.h
@@ -1,3 +1,21 @@
+/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
+
+ client.h for the Openbox window manager
+ Copyright (c) 2003 Ben Jansens
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ See the COPYING file for a copy of the GNU General Public License.
+*/
+
#ifndef __client_h
#define __client_h
@@ -12,6 +30,7 @@
struct _ObFrame;
struct _ObGroup;
+struct _ObSessionState;
typedef struct _ObClient ObClient;
typedef struct _ObClientIcon ObClientIcon;
@@ -53,21 +72,6 @@ typedef enum
OB_CLIENT_FUNC_CLOSE = 1 << 6 /*!< Allow to be closed */
} ObFunctions;
-/*! The decorations the client window wants to be displayed on it */
-typedef enum {
- Decor_Titlebar = 1 << 0, /*!< Display a titlebar */
- Decor_Handle = 1 << 1, /*!< Display a handle (bottom) */
- Decor_Border = 1 << 2, /*!< Display a border */
- Decor_Icon = 1 << 3, /*!< Display the window's icon */
- Decor_Iconify = 1 << 4, /*!< Display an iconify button */
- Decor_Maximize = 1 << 5, /*!< Display a maximize button */
- /*! Display a button to toggle the window's placement on
- all desktops */
- Decor_AllDesktops = 1 << 6,
- Decor_Shade = 1 << 7, /*!< Displays a shade button */
- Decor_Close = 1 << 8 /*!< Display a close button */
-} Decoration;
-
struct _ObClient
{
ObWindow obwin;
@@ -82,6 +86,10 @@ struct _ObClient
/*! The id of the group the window belongs to */
struct _ObGroup *group;
+
+ /*! Saved session data to apply to this client */
+ struct _ObSessionState *session;
+
/*! Whether or not the client is a transient window. This is guaranteed to
be TRUE if transient_for != NULL, but not guaranteed to be FALSE if
transient_for == NULL. */
@@ -98,6 +106,10 @@ struct _ObClient
desktops) */
guint desktop;
+ /*! The startup id for the startup-notification protocol. This will be
+ NULL if a startup id is not set. */
+ gchar *startup_id;
+
/*! Normal window title */
gchar *title;
/*! The count for the title. When another window with the same title
@@ -112,6 +124,8 @@ struct _ObClient
gchar *class;
/*! The specified role of the window, used for identification */
gchar *role;
+ /*! The session client id for the window. *This can be NULL!* */
+ gchar *sm_client_id;
/*! The type of window (what its function is) */
ObClientType type;
@@ -121,13 +135,13 @@ struct _ObClient
is, rather, the position requested by the client, to which the window's
gravity is applied.
*/
- Rect area;
+ Rect area;
/*! The window's strut
The strut defines areas of the screen that are marked off-bounds for
window placement. In theory, where this window exists.
*/
- Strut strut;
+ StrutPartial strut;
/*! The logical size of the window
The "logical" size of the window is refers to the user's perception of
@@ -135,7 +149,7 @@ struct _ObClient
user. For example, with xterms, this value it the number of characters
being displayed in the terminal, instead of the number of pixels.
*/
- Size logical_size;
+ Size logical_size;
/*! Width of the border on the window.
The window manager will set this to 0 while the window is being managed,
@@ -225,16 +239,16 @@ struct _ObClient
are always below windows in higher layers. */
ObStackingLayer layer;
- /*! A bitmask of values in the Decoration enum
+ /*! A bitmask of values in the ObFrameDecorations enum
The values in the variable are the decorations that the client wants to
be displayed around it.
*/
guint decorations;
- /*! A bitmask of values in the Decoration enum.
- Specifies the decorations that should NOT be displayed on the client.
+ /*! A user option. When this is set to FALSE the client will not ever
+ be decorated.
*/
- guint disabled_decorations;
+ gboolean decorate;
/*! A bitmask of values in the ObFunctions enum
The values in the variable specify the ways in which the user is allowed
@@ -250,8 +264,11 @@ struct _ObClient
extern GList *client_list;
-void client_startup();
-void client_shutdown();
+void client_startup(gboolean reconfig);
+void client_shutdown(gboolean reconfig);
+
+void client_add_destructor(GDestroyNotify func);
+void client_remove_destructor(GDestroyNotify func);
/*! Manages all existing windows */
void client_manage_all();
@@ -278,6 +295,19 @@ gboolean client_normal(ObClient *self);
/* Returns if the window is focused */
gboolean client_focused(ObClient *self);
+#define client_move(self, x, y) \
+ client_configure(self, OB_CORNER_TOPLEFT, x, y, \
+ self->area.width, self->area.height, \
+ TRUE, TRUE)
+#define client_resize(self, w, h) \
+ client_configure(self, OB_CORNER_TOPLEFT, self->area.x, self->area.y, \
+ w, h, TRUE, TRUE)
+#define client_move_resize(self, x, y, w, h) \
+ client_configure(self, OB_CORNER_TOPLEFT, x, y, w, h, TRUE, TRUE)
+
+#define client_configure(self, anchor, x, y, w, h, user, final) \
+ client_configure_full(self, anchor, x, y, w, h, user, final, FALSE)
+
/*! Move and/or resize the window.
This also maintains things like the client's minsize, and size increments.
@param anchor The corner to keep in the same position when resizing.
@@ -292,17 +322,38 @@ gboolean client_focused(ObClient *self);
configuration. e.g. Final should be FALSE if doing an
interactive move/resize, and then be TRUE for the last call
only.
+ @param force_reply Send a ConfigureNotify to the client regardless of if
+ the position changed.
*/
-void client_configure(ObClient *self, ObCorner anchor,
- int x, int y, int w, int h,
- gboolean user, gboolean final);
+void client_configure_full(ObClient *self, ObCorner anchor,
+ int x, int y, int w, int h,
+ gboolean user, gboolean final,
+ gboolean force_reply);
void client_reconfigure(ObClient *self);
+/*! Finds coordinates to keep a client on the screen.
+ @param self The client
+ @param x The x coord of the client, may be changed.
+ @param y The y coord of the client, may be changed.
+ @param w The width of the client.
+ @param w The height of the client.
+ @param rude Be rude about it. If false, it is only moved if it is entirely
+ not visible. If true, then make sure the window is inside the
+ struts if possible.
+ @return true if the client was moved to be on-screen; false if not.
+*/
+gboolean client_find_onscreen(ObClient *self, int *x, int *y, int w, int h,
+ gboolean rude);
+
/*! Moves a client so that it is on screen if it is entirely out of the
viewable screen.
+ @param self The client to move
+ @param rude Be rude about it. If false, it is only moved if it is entirely
+ not visible. If true, then make sure the window is inside the
+ struts if possible.
*/
-void client_move_onscreen(ObClient *self);
+void client_move_onscreen(ObClient *self, gboolean rude);
/*! Fullscreen's or unfullscreen's the client window
@param fs true if the window should be made fullscreen; false if it should
@@ -386,8 +437,11 @@ gboolean client_focus(ObClient *self);
void client_unfocus(ObClient *self);
/*! Activates the client for use, focusing, uniconifying it, etc. To be used
- when the user deliberately selects a window for use. */
-void client_activate(ObClient *self);
+ when the user deliberately selects a window for use.
+ @param here If true, then the client is brought to the current desktop;
+ otherwise, the desktop is changed to where the client lives.
+*/
+void client_activate(ObClient *self, gboolean here);
/*! Calculates the stacking layer for the client window */
void client_calc_layer(ObClient *self);
@@ -446,9 +500,14 @@ ObClient *client_search_modal_child(ObClient *self);
ObClient *client_search_top_transient(ObClient *self);
+ObClient *client_search_transient(ObClient *self, ObClient *search);
+
/*! Return the "closest" client in the given direction */
ObClient *client_find_directional(ObClient *c, ObDirection dir);
+/*! Return the closest edge in the given direction */
+int client_directional_edge_search(ObClient *c, ObDirection dir);
+
/*! Set a client window to be above/below other clients.
@layer < 0 indicates the client should be placed below other clients.
= 0 indicates the client should be placed with other clients.
@@ -458,4 +517,8 @@ void client_set_layer(ObClient *self, int layer);
guint client_monitor(ObClient *self);
+void client_update_sm_client_id(ObClient *self);
+
+ObClient* client_under_pointer();
+
#endif