summaryrefslogtreecommitdiff
path: root/src/pop-window-stack.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pop-window-stack.c')
-rw-r--r--src/pop-window-stack.c204
1 files changed, 119 insertions, 85 deletions
diff --git a/src/pop-window-stack.c b/src/pop-window-stack.c
index 65d85bd..258c496 100644
--- a/src/pop-window-stack.c
+++ b/src/pop-window-stack.c
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
+ * 02111-1307, USA.
*/
#include "config.h"
#include "pop-window-stack.h"
@@ -45,24 +45,27 @@ struct _PopWindowStackPrivate
typedef struct
{
PopWindowStack *stack;
- PopWindowStackForeachFunc func;
- gpointer data;
+ PopWindowStackForeachFunc func;
+ gpointer data;
} PopWindowStackForeachClosure;
typedef struct
{
PopWindowStack *stack;
GdkWindow *window;
- PopWindowStackAboveWindowForeachFunc func;
- gpointer data;
+ PopWindowStackAboveWindowForeachFunc func;
+ gpointer data;
} PopWindowStackAboveWindowForeachClosure;
-static void pop_window_stack_finalize (GObject * object);
+static void pop_window_stack_finalize (GObject *object);
+
#if 0
static void pop_window_stack_class_install_signals (PopWindowStackClass *
- stack_class);
+ stack_class);
+
#endif
-static void pop_window_stack_class_install_properties (PopWindowStackClass *stack_class);
+static void pop_window_stack_class_install_properties (
+ PopWindowStackClass *stack_class);
static void pop_window_stack_set_property (GObject *object,
guint prop_id,
@@ -76,7 +79,7 @@ static void pop_window_stack_get_property (GObject *object,
static void pop_window_stack_set_screen (PopWindowStack *stack,
GdkScreen *screen);
static void pop_window_stack_set_ready (PopWindowStack *stack,
- gboolean is_ready);
+ gboolean is_ready);
static void pop_window_stack_clear_window_list (PopWindowStack *stack);
static void pop_window_stack_ask_for_window_list (PopWindowStack *stack);
@@ -101,7 +104,7 @@ static guint pop_window_stack_signals[NUMBER_OF_SIGNALS];
G_DEFINE_TYPE (PopWindowStack, pop_window_stack, G_TYPE_OBJECT);
static void
-pop_window_stack_class_init (PopWindowStackClass * stack_class)
+pop_window_stack_class_init (PopWindowStackClass *stack_class)
{
GObjectClass *object_class;
@@ -119,7 +122,7 @@ pop_window_stack_class_init (PopWindowStackClass * stack_class)
#if 0
static void
-pop_window_stack_class_install_signals (PopWindowStackClass * stack_class)
+pop_window_stack_class_install_signals (PopWindowStackClass *stack_class)
{
GObjectClass *object_class;
@@ -127,15 +130,17 @@ pop_window_stack_class_install_signals (PopWindowStackClass * stack_class)
pop_window_stack_signals[FOO] =
g_signal_new ("foo", G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (PopWindowStackClass, foo),
- NULL, NULL, g_cclosure_marshal_VOID__NONE; G_TYPE_NONE, 0);
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (PopWindowStackClass, foo),
+ NULL, NULL, g_cclosure_marshal_VOID__NONE;
+ G_TYPE_NONE, 0);
stack_class->foo = NULL;
}
+
#endif
static void
-pop_window_stack_class_install_properties (PopWindowStackClass * stack_class)
+pop_window_stack_class_install_properties (PopWindowStackClass *stack_class)
{
GObjectClass *object_class;
GParamSpec *param_spec;
@@ -144,38 +149,39 @@ pop_window_stack_class_install_properties (PopWindowStackClass * stack_class)
object_class->set_property = pop_window_stack_set_property;
object_class->get_property = pop_window_stack_get_property;
- param_spec = g_param_spec_pointer ("screen", _("Screen"),
- _("Which screen to user for tracking window stack"),
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
+ param_spec = g_param_spec_pointer ("screen", _ ("Screen"),
+ _ (
+ "Which screen to user for tracking window stack"),
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
g_object_class_install_property (object_class, PROP_SCREEN, param_spec);
- param_spec = g_param_spec_boolean ("is-ready", _("Is it ready?"),
- _("whether or not the window stack is fully "
- "initialized and can be used"), FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
+ param_spec = g_param_spec_boolean ("is-ready", _ ("Is it ready?"),
+ _ (
+ "whether or not the window stack is fully "
+ "initialized and can be used"), FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
g_object_class_install_property (object_class, PROP_IS_READY, param_spec);
-
}
static void
pop_window_stack_init (PopWindowStack *stack)
{
stack->priv = G_TYPE_INSTANCE_GET_PRIVATE (stack,
- POP_TYPE_WINDOW_STACK,
- PopWindowStackPrivate);
+ POP_TYPE_WINDOW_STACK,
+ PopWindowStackPrivate);
stack->priv->event_listener = pop_event_listener_get_default ();
g_signal_connect_swapped (G_OBJECT (stack->priv->event_listener),
"window-layered-under",
- G_CALLBACK (pop_window_stack_ask_for_window_list),
+ G_CALLBACK (pop_window_stack_ask_for_window_list),
stack);
g_signal_connect_swapped (G_OBJECT (stack->priv->event_listener),
"window-layered-on-top",
- G_CALLBACK (pop_window_stack_ask_for_window_list),
+ G_CALLBACK (pop_window_stack_ask_for_window_list),
stack);
g_signal_connect_swapped (G_OBJECT (stack->priv->event_listener),
"window-layered-on-bottom",
- G_CALLBACK (pop_window_stack_ask_for_window_list),
+ G_CALLBACK (pop_window_stack_ask_for_window_list),
stack);
stack->priv->windows = g_queue_new ();
@@ -184,7 +190,7 @@ pop_window_stack_init (PopWindowStack *stack)
}
static void
-pop_window_stack_finalize (GObject * object)
+pop_window_stack_finalize (GObject *object)
{
PopWindowStack *stack;
GObjectClass *parent_class;
@@ -199,50 +205,54 @@ pop_window_stack_finalize (GObject * object)
g_queue_free (stack->priv->windows);
if (parent_class->finalize != NULL)
- parent_class->finalize (object);
+ {
+ parent_class->finalize (object);
+ }
}
static void
pop_window_stack_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
+ guint prop_id,
+ const GValue *value,
GParamSpec *pspec)
{
PopWindowStack *stack = POP_WINDOW_STACK (object);
switch (prop_id)
{
- case PROP_SCREEN:
- pop_window_stack_set_screen (stack, g_value_get_pointer (value));
- break;
- case PROP_IS_READY:
- pop_window_stack_set_ready (stack, g_value_get_boolean (value));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ case PROP_SCREEN:
+ pop_window_stack_set_screen (stack, g_value_get_pointer (value));
+ break;
+
+ case PROP_IS_READY:
+ pop_window_stack_set_ready (stack, g_value_get_boolean (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
}
static void
-pop_window_stack_get_property (GObject * object,
- guint prop_id,
- GValue * value, GParamSpec * pspec)
+pop_window_stack_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
{
PopWindowStack *stack = POP_WINDOW_STACK (object);
switch (prop_id)
{
- case PROP_SCREEN:
- g_value_set_pointer (value, stack->priv->screen);
- break;
+ case PROP_SCREEN:
+ g_value_set_pointer (value, stack->priv->screen);
+ break;
- case PROP_IS_READY:
- g_value_set_boolean (value, stack->priv->is_ready);
- break;
+ case PROP_IS_READY:
+ g_value_set_boolean (value, stack->priv->is_ready);
+ break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
}
@@ -252,7 +262,9 @@ pop_window_stack_error_quark (void)
static GQuark error_quark = 0;
if (error_quark == 0)
- error_quark = g_quark_from_static_string ("pop-window-stack");
+ {
+ error_quark = g_quark_from_static_string ("pop-window-stack");
+ }
return error_quark;
}
@@ -263,9 +275,11 @@ pop_window_stack_new (GdkScreen *screen)
PopWindowStack *stack;
if (screen == NULL)
- screen = gdk_screen_get_default ();
+ {
+ screen = gdk_screen_get_default ();
+ }
- stack = g_object_new (POP_TYPE_WINDOW_STACK,
+ stack = g_object_new (POP_TYPE_WINDOW_STACK,
"screen", screen, NULL);
return stack;
@@ -278,7 +292,9 @@ pop_window_stack_get_for_screen (GdkScreen *screen)
PopWindowStack *stack;
if (screen == NULL)
- screen = gdk_screen_get_default ();
+ {
+ screen = gdk_screen_get_default ();
+ }
for (tmp = stack_list; tmp != NULL; tmp = tmp->next)
{
@@ -288,7 +304,9 @@ pop_window_stack_get_for_screen (GdkScreen *screen)
if (gdk_screen_get_number (stack->priv->screen) ==
gdk_screen_get_number (screen))
- return g_object_ref (screen);
+ {
+ return g_object_ref (screen);
+ }
}
stack = pop_window_stack_new (screen);
@@ -305,7 +323,7 @@ pop_window_stack_is_ready (PopWindowStack *stack)
return stack->priv->is_ready;
}
-guint
+guint
pop_window_stack_get_length (PopWindowStack *stack)
{
g_return_val_if_fail (POP_IS_WINDOW_STACK (stack), 0);
@@ -314,7 +332,7 @@ pop_window_stack_get_length (PopWindowStack *stack)
}
static void
-pop_window_stack_foreach_func (gpointer data,
+pop_window_stack_foreach_func (gpointer data,
gpointer user_data)
{
GdkWindow *window;
@@ -327,25 +345,26 @@ pop_window_stack_foreach_func (gpointer data,
}
void
-pop_window_stack_foreach (PopWindowStack *stack,
+pop_window_stack_foreach (PopWindowStack *stack,
PopWindowStackForeachFunc func,
gpointer data)
-{
+{
PopWindowStackForeachClosure closure;
g_return_if_fail (POP_IS_WINDOW_STACK (stack));
g_return_if_fail (func != NULL);
g_return_if_fail (pop_window_stack_is_ready (stack));
-
+
closure.stack = stack;
closure.func = func;
closure.data = data;
- g_queue_foreach (stack->priv->windows, pop_window_stack_foreach_func, &closure);
+ g_queue_foreach (stack->priv->windows, pop_window_stack_foreach_func,
+ &closure);
}
static void
-pop_window_stack_above_window_foreach_func (gpointer data,
+pop_window_stack_above_window_foreach_func (gpointer data,
gpointer user_data)
{
GdkWindow *above_window;
@@ -357,11 +376,15 @@ pop_window_stack_above_window_foreach_func (gpointer data,
closure->func (closure->stack, closure->window, above_window, closure->data);
}
-void
-pop_window_stack_above_window_foreach (PopWindowStack *stack,
- GdkWindow *window,
- PopWindowStackAboveWindowForeachFunc func,
- gpointer data)
+void
+pop_window_stack_above_window_foreach (
+ PopWindowStack *stack,
+
+ GdkWindow*window,
+
+ PopWindowStackAboveWindowForeachFunc func,
+
+ gpointer data)
{
PopWindowStackAboveWindowForeachClosure closure;
GList *window_link;
@@ -375,16 +398,18 @@ pop_window_stack_above_window_foreach (PopWindowStack *sta
if (window_link == NULL)
{
- g_warning ("window with id 0x%lx is not in window stack\n",
+ g_warning ("window with id 0x%lx is not in window stack\n",
GDK_WINDOW_XWINDOW (window));
return;
}
closure.stack = stack;
- closure.window = g_object_ref (window); closure.func = func;
+ closure.window = g_object_ref (window);
+ closure.func = func;
closure.data = data;
- g_list_foreach (window_link->next, pop_window_stack_above_window_foreach_func, &closure);
+ g_list_foreach (window_link->next, pop_window_stack_above_window_foreach_func,
+ &closure);
g_object_unref (window);
}
@@ -392,11 +417,12 @@ pop_window_stack_above_window_foreach (PopWindowStack *sta
static void
pop_window_stack_clear_window_list (PopWindowStack *stack)
{
-
pop_window_stack_set_ready (stack, FALSE);
if (g_queue_is_empty (stack->priv->windows))
- return;
+ {
+ return;
+ }
g_queue_foreach (stack->priv->windows, (GFunc) g_object_unref, NULL);
@@ -411,15 +437,17 @@ window_can_output (GdkWindow *window)
gboolean received_attrs;
/* FIXME: this sucks because it requires a server round trip.
- */
+ */
gdk_error_trap_push ();
received_attrs = XGetWindowAttributes (GDK_WINDOW_XDISPLAY (window),
GDK_WINDOW_XWINDOW (window),
&attrs);
- if (gdk_error_trap_pop () || !received_attrs)
- return FALSE;
+ if ((gdk_error_trap_pop ()) || (!received_attrs))
+ {
+ return FALSE;
+ }
return attrs.class == InputOutput;
}
@@ -457,7 +485,7 @@ queried_window_foreach_func (Window x_window_id,
PopWindowStack *stack;
GdkDisplay *display;
GdkWindow *window;
-
+
g_assert (POP_IS_WINDOW_STACK (data));
stack = POP_WINDOW_STACK (data);
@@ -465,7 +493,9 @@ queried_window_foreach_func (Window x_window_id,
window = gdk_window_foreign_new_for_display (display, x_window_id);
if (window == NULL)
- return;
+ {
+ return;
+ }
if (!window_can_output (window))
{
@@ -498,6 +528,7 @@ on_query_tree_reply (GdkDisplay *display,
for (i = 0; i < state->number_of_children; i++)
queried_window_foreach_func (state->children[i], state->data);
+
XFree (state->children);
state->children = NULL;
state->number_of_children = 0;
@@ -523,17 +554,19 @@ pop_window_stack_ask_for_window_list (PopWindowStack *stack)
screen = stack->priv->screen;
if (screen == NULL)
- screen = gdk_screen_get_default ();
+ {
+ screen = gdk_screen_get_default ();
+ }
display = gdk_screen_get_display (screen);
state = g_slice_new0 (PopQueryTreeState);
- state->window = g_object_ref (gdk_screen_get_root_window (screen));
+ state->window = g_object_ref (gdk_screen_get_root_window (screen));
state->data = stack;
- pop_x_reply_watch_add (display,
+ pop_x_reply_watch_add (display,
query_tree_request, state,
- on_query_tree_reply, state);
+ on_query_tree_reply, state);
}
static void
@@ -575,13 +608,14 @@ print_toplevel (PopWindowStack *stack,
}
int
-main (int argc, char **argv)
+main (int argc,
+ char **argv)
{
PopWindowStack *stack;
int exit_code;
g_log_set_always_fatal (G_LOG_LEVEL_ERROR
- | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING);
+ | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING);
g_type_init ();
gtk_init (&argc, &argv);