diff options
Diffstat (limited to 'src/pop-window-stack.c')
-rw-r--r-- | src/pop-window-stack.c | 204 |
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); |