]> Dogcows Code - chaz/openbox/blobdiff - openbox/client.h
hover theme elements for window titlebar buttons
[chaz/openbox] / openbox / client.h
index b13cf06c3937de730f166fc546de032a7b78ebab..4421f8fe3e4f4af048076b0699432ddb70f9dbb8 100644 (file)
 #include <glib.h>
 #include <X11/Xlib.h>
 
-struct Frame;
-struct Group;
+struct _ObFrame;
+struct _ObGroup;
 
 typedef struct _ObClient     ObClient;
 typedef struct _ObClientIcon ObClientIcon;
 
 /* The value in client.transient_for indicating it is a transient for its
    group instead of for a single window */
-#define TRAN_GROUP ((void*)~0l)
+#define OB_TRAN_GROUP ((void*)~0l)
 
 /*! Holds an icon in ARGB format */
 struct _ObClientIcon
@@ -29,42 +29,29 @@ struct _ObClientIcon
 };
      
 /*! Possible window types */
-typedef enum {
-    Type_Desktop, /*!< A desktop (bottom-most window) */
-    Type_Dock,    /*!< A dock bar/panel window */
-    Type_Toolbar, /*!< A toolbar window, pulled off an app */
-    Type_Menu,    /*!< An unpinned menu from an app */
-    Type_Utility, /*!< A small utility window such as a palette */
-    Type_Splash,  /*!< A splash screen window */
-    Type_Dialog,  /*!< A dialog window */
-    Type_Normal   /*!< A normal application window */
-} WindowType;
+typedef enum
+{
+    OB_CLIENT_TYPE_DESKTOP, /*!< A desktop (bottom-most window) */
+    OB_CLIENT_TYPE_DOCK,    /*!< A dock bar/panel window */
+    OB_CLIENT_TYPE_TOOLBAR, /*!< A toolbar window, pulled off an app */
+    OB_CLIENT_TYPE_MENU,    /*!< An unpinned menu from an app */
+    OB_CLIENT_TYPE_UTILITY, /*!< A small utility window such as a palette */
+    OB_CLIENT_TYPE_SPLASH,  /*!< A splash screen window */
+    OB_CLIENT_TYPE_DIALOG,  /*!< A dialog window */
+    OB_CLIENT_TYPE_NORMAL   /*!< A normal application window */
+} ObClientType;
 
 /*! The things the user can do to the client window */
-typedef enum {
-    Func_Resize     = 1 << 0, /*!< Allow resizing */
-    Func_Move       = 1 << 1, /*!< Allow moving */
-    Func_Iconify    = 1 << 2, /*!< Allow to be iconified */
-    Func_Maximize   = 1 << 3, /*!< Allow to be maximized */
-    Func_Shade      = 1 << 4, /*!< Allow to be shaded */
-    Func_Fullscreen = 1 << 5, /*!< Allow to be made fullscreen */
-    Func_Close      = 1 << 6  /*!< Allow to be closed */
-} Function;
-
-/*! 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;
+typedef enum
+{
+    OB_CLIENT_FUNC_RESIZE     = 1 << 0, /*!< Allow user resizing */
+    OB_CLIENT_FUNC_MOVE       = 1 << 1, /*!< Allow user moving */
+    OB_CLIENT_FUNC_ICONIFY    = 1 << 2, /*!< Allow to be iconified */
+    OB_CLIENT_FUNC_MAXIMIZE   = 1 << 3, /*!< Allow to be maximized */
+    OB_CLIENT_FUNC_SHADE      = 1 << 4, /*!< Allow to be shaded */
+    OB_CLIENT_FUNC_FULLSCREEN = 1 << 5, /*!< Allow to be made fullscreen */
+    OB_CLIENT_FUNC_CLOSE      = 1 << 6  /*!< Allow to be closed */
+} ObFunctions;
 
 struct _ObClient
 {
@@ -73,20 +60,20 @@ struct _ObClient
     Window  window;
 
     /*! The window's decorations. NULL while the window is being managed! */
-    struct Frame *frame;
+    struct _ObFrame *frame;
 
     /*! The number of unmap events to ignore on the window */
     int ignore_unmaps;
 
     /*! The id of the group the window belongs to */
-    struct Group *group;
+    struct _ObGroup *group;
     /*! 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. */
     gboolean transient;
     /*! The client which this client is a transient (child) for.
       A value of TRAN_GROUP signifies that the window is a transient for all
-      members of its Group, and is not a valid pointer to be followed in this
+      members of its ObGroup, and is not a valid pointer to be followed in this
       case.
      */
     ObClient *transient_for;
@@ -112,7 +99,7 @@ struct _ObClient
     gchar *role;
 
     /*! The type of window (what its function is) */
-    WindowType type;
+    ObClientType type;
 
     /*! Position and size of the window
       This will not always be the actual position of the window on screen, it
@@ -221,29 +208,29 @@ struct _ObClient
 
     /*! The layer in which the window will be stacked, windows in lower layers
       are always below windows in higher layers. */
-    StackLayer layer;
+    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.
     */
-    int decorations;
+    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.
     */
-    int disabled_decorations;
+    gboolean decorate;
 
-    /*! A bitmask of values in the Function enum
+    /*! A bitmask of values in the ObFunctions enum
       The values in the variable specify the ways in which the user is allowed
       to modify this window.
     */
-    int functions;
+    guint functions;
 
     /*! Icons for the client as specified on the client window */
     ObClientIcon *icons;
     /*! The number of icons in icons */
-    int nicons;
+    guint nicons;
 };
 
 extern GList *client_list;
@@ -297,10 +284,28 @@ void client_configure(ObClient *self, ObCorner anchor,
 
 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
@@ -444,6 +449,8 @@ 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);
 
This page took 0.024553 seconds and 4 git commands to generate.