diff options
Diffstat (limited to 'src/core/group-props.c')
-rw-r--r-- | src/core/group-props.c | 234 |
1 files changed, 0 insertions, 234 deletions
diff --git a/src/core/group-props.c b/src/core/group-props.c deleted file mode 100644 index 05e82900..00000000 --- a/src/core/group-props.c +++ /dev/null @@ -1,234 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ - -/* MetaGroup property handling */ - -/* - * Copyright (C) 2002 Red Hat, Inc. - * - * 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. - * - * 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. - */ - -#include <config.h> -#include "group-props.h" -#include "group-private.h" -#include "xprops.h" -#include <X11/Xatom.h> - -typedef void (* InitValueFunc) (MetaDisplay *display, - Atom property, - MetaPropValue *value); -typedef void (* ReloadValueFunc) (MetaGroup *group, - MetaPropValue *value); - -struct _MetaGroupPropHooks -{ - Atom property; - InitValueFunc init_func; - ReloadValueFunc reload_func; -}; - -static void init_prop_value (MetaDisplay *display, - Atom property, - MetaPropValue *value); -static void reload_prop_value (MetaGroup *group, - MetaPropValue *value); -static MetaGroupPropHooks* find_hooks (MetaDisplay *display, - Atom property); - - - -void -meta_group_reload_property (MetaGroup *group, - Atom property) -{ - meta_group_reload_properties (group, &property, 1); -} - -void -meta_group_reload_properties (MetaGroup *group, - const Atom *properties, - int n_properties) -{ - int i; - MetaPropValue *values; - - g_return_if_fail (properties != NULL); - g_return_if_fail (n_properties > 0); - - values = g_new0 (MetaPropValue, n_properties); - - i = 0; - while (i < n_properties) - { - init_prop_value (group->display, properties[i], &values[i]); - ++i; - } - - meta_prop_get_values (group->display, group->group_leader, - values, n_properties); - - i = 0; - while (i < n_properties) - { - reload_prop_value (group, &values[i]); - - ++i; - } - - meta_prop_free_values (values, n_properties); - - g_free (values); -} - -/* Fill in the MetaPropValue used to get the value of "property" */ -static void -init_prop_value (MetaDisplay *display, - Atom property, - MetaPropValue *value) -{ - MetaGroupPropHooks *hooks; - - value->type = META_PROP_VALUE_INVALID; - value->atom = None; - - hooks = find_hooks (display, property); - if (hooks && hooks->init_func != NULL) - (* hooks->init_func) (display, property, value); -} - -static void -reload_prop_value (MetaGroup *group, - MetaPropValue *value) -{ - MetaGroupPropHooks *hooks; - - hooks = find_hooks (group->display, value->atom); - if (hooks && hooks->reload_func != NULL) - (* hooks->reload_func) (group, value); -} - -static void -init_wm_client_machine (MetaDisplay *display, - Atom property, - MetaPropValue *value) -{ - value->type = META_PROP_VALUE_STRING; - value->atom = display->atom_WM_CLIENT_MACHINE; -} - -static void -reload_wm_client_machine (MetaGroup *group, - MetaPropValue *value) -{ - g_free (group->wm_client_machine); - group->wm_client_machine = NULL; - - if (value->type != META_PROP_VALUE_INVALID) - group->wm_client_machine = g_strdup (value->v.str); - - meta_verbose ("Group has client machine \"%s\"\n", - group->wm_client_machine ? group->wm_client_machine : "unset"); -} - -static void -init_net_startup_id (MetaDisplay *display, - Atom property, - MetaPropValue *value) -{ - value->type = META_PROP_VALUE_UTF8; - value->atom = display->atom__NET_STARTUP_ID; -} - -static void -reload_net_startup_id (MetaGroup *group, - MetaPropValue *value) -{ - g_free (group->startup_id); - group->startup_id = NULL; - - if (value->type != META_PROP_VALUE_INVALID) - group->startup_id = g_strdup (value->v.str); - - meta_verbose ("Group has startup id \"%s\"\n", - group->startup_id ? group->startup_id : "unset"); -} - -#define N_HOOKS 3 - -void -meta_display_init_group_prop_hooks (MetaDisplay *display) -{ - int i; - MetaGroupPropHooks *hooks; - - g_assert (display->group_prop_hooks == NULL); - - display->group_prop_hooks = g_new0 (MetaGroupPropHooks, N_HOOKS); - hooks = display->group_prop_hooks; - - i = 0; - - hooks[i].property = display->atom_WM_CLIENT_MACHINE; - hooks[i].init_func = init_wm_client_machine; - hooks[i].reload_func = reload_wm_client_machine; - ++i; - - hooks[i].property = display->atom__NET_WM_PID; - hooks[i].init_func = NULL; - hooks[i].reload_func = NULL; - ++i; - - hooks[i].property = display->atom__NET_STARTUP_ID; - hooks[i].init_func = init_net_startup_id; - hooks[i].reload_func = reload_net_startup_id; - ++i; - - if (i != N_HOOKS) - { - g_error ("Initialized %d group hooks should have been %d\n", i, N_HOOKS); - } -} - -void -meta_display_free_group_prop_hooks (MetaDisplay *display) -{ - g_assert (display->group_prop_hooks != NULL); - - g_free (display->group_prop_hooks); - display->group_prop_hooks = NULL; -} - -static MetaGroupPropHooks* -find_hooks (MetaDisplay *display, - Atom property) -{ - int i; - - /* FIXME we could sort the array and do binary search or - * something - */ - - i = 0; - while (i < N_HOOKS) - { - if (display->group_prop_hooks[i].property == property) - return &display->group_prop_hooks[i]; - - ++i; - } - - return NULL; -} |