/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
client.h for the Openbox window manager
+ Copyright (c) 2006 Mikael Magnusson
Copyright (c) 2003 Ben Jansens
This program is free software; you can redistribute it and/or modify
struct _ObGroup;
struct _ObSessionState;
-typedef struct _ObClient ObClient;
-typedef struct _ObClientIcon ObClientIcon;
+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 */
/*! True if the client supports the delete_window protocol */
gboolean delete_window;
- /*! Was the window's position requested by the application? if not, we
+ /*! Was the window's position requested by the application or the user?
+ if by the application, we force it completely onscreen, if by the user
+ we only force it if it tries to go completely offscreen, if neither, we
should place the window ourselves when it first appears */
- gboolean positioned;
+ guint positioned;
/*! Can the window receive input focus? */
gboolean can_focus;
guint nicons;
};
+struct _ObAppSettings
+{
+ gchar *class;
+ gchar *name;
+ gchar *role;
+
+ Point position;
+ gboolean center_x;
+ gboolean center_y;
+ gboolean pos_given;
+
+ guint desktop;
+ gint shade;
+ gint decor;
+ gint focus;
+ gint head;
+ gint iconic;
+ gint skip_pager;
+ gint skip_taskbar;
+ gint max_horz;
+ gint max_vert;
+ gint fullscreen;
+
+ gint layer;
+};
+
extern GList *client_list;
void client_startup(gboolean reconfig);
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.
+ @param user If true, then a user action is what requested the activation;
+ otherwise, it means an application requested it on its own
*/
-void client_activate(ObClient *self, gboolean here);
+void client_activate(ObClient *self, gboolean here, gboolean user);
/*! Calculates the stacking layer for the client window */
void client_calc_layer(ObClient *self);
ObClient *client_find_directional(ObClient *c, ObDirection dir);
/*! Return the closest edge in the given direction */
-gint client_directional_edge_search(ObClient *c, ObDirection dir);
+gint client_directional_edge_search(ObClient *c, ObDirection dir, gboolean hang);
/*! Set a client window to be above/below other clients.
@layer < 0 indicates the client should be placed below other clients.<br>