static void value_tag_copy_value (const GValue* src_value, GValue* dest_value) { if (src_value->data[0].v_pointer) { dest_value->data[0].v_pointer = tag_ref (src_value->data[0].v_pointer); } else { dest_value->data[0].v_pointer = NULL; } }
static gchar* value_tag_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) { Tag** object_p; object_p = collect_values[0].v_pointer; if (!object_p) { return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value)); } if (!value->data[0].v_pointer) { *object_p = NULL; } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) { *object_p = value->data[0].v_pointer; } else { *object_p = tag_ref (value->data[0].v_pointer); } return NULL; }
static gchar* value_tag_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) { if (collect_values[0].v_pointer) { Tag* object; object = collect_values[0].v_pointer; if (object->parent_instance.g_class == NULL) { return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL); } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) { return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL); } value->data[0].v_pointer = tag_ref (object); } else { value->data[0].v_pointer = NULL; } return NULL; }
void value_set_tag (GValue* value, gpointer v_object) { Tag* old; g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_TAG)); old = value->data[0].v_pointer; if (v_object) { g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_TAG)); g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value))); value->data[0].v_pointer = v_object; tag_ref (value->data[0].v_pointer); } else { value->data[0].v_pointer = NULL; } if (old) { tag_unref (old); } }
/** Tag a client with the tag on top of the stack. * \param c the client to tag */ void tag_client(client_t *c) { tag_t *t = tag_ref(globalconf.L); /* don't tag twice */ if(is_client_tagged(c, t)) return; client_array_append(&t->clients, c); ewmh_client_update_desktop(c); client_need_arrange(c); /* call hook */ if(globalconf.hooks.tagged != LUA_REFNIL) { client_push(globalconf.L, c); tag_push(globalconf.L, t); luaA_dofunction(globalconf.L, globalconf.hooks.tagged, 2, 0); } }
/** Append a tag which on top of the stack to a screen. * \param screen the screen id */ void tag_append_to_screen(screen_t *s) { int phys_screen = screen_virttophys(s->index); tag_t *tag = tag_ref(globalconf.L); tag->screen = s->index; tag_array_append(&s->tags, tag); ewmh_update_net_numbers_of_desktop(phys_screen); ewmh_update_net_desktop_names(phys_screen); ewmh_update_workarea(phys_screen); /* call hook */ if(globalconf.hooks.tags != LUA_REFNIL) { lua_pushnumber(globalconf.L, s->index + 1); tag_push(globalconf.L, tag); lua_pushliteral(globalconf.L, "add"); luaA_dofunction(globalconf.L, globalconf.hooks.tags, 3, 0); } }