]> Dogcows Code - chaz/openbox/blobdiff - openbox/client.h
add copyright headers, adjust --version output to include copyright, and --help outpu...
[chaz/openbox] / openbox / client.h
index 610c8cd4f93e59a03ee3b68bbf5ae9b7d2a35be7..e1e8d29082057bf52189b83c06c8e439ca53559a 100644 (file)
@@ -1,3 +1,21 @@
+/* -*- indent-tabs-mode: t; 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;
@@ -67,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. */
@@ -83,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
@@ -97,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;
@@ -106,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
@@ -120,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,
@@ -235,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();
@@ -263,6 +295,16 @@ 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)
 
@@ -395,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);
@@ -460,6 +505,9 @@ 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.<br>
          = 0 indicates the client should be placed with other clients.<br>
@@ -469,6 +517,6 @@ void client_set_layer(ObClient *self, int layer);
 
 guint client_monitor(ObClient *self);
 
-gchar* client_get_sm_client_id(ObClient *self);
+void client_update_sm_client_id(ObClient *self);
 
 #endif
This page took 0.025336 seconds and 4 git commands to generate.