<?xml version="1.0" encoding="UTF-8"?>
<!--***********************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 ***********************************************************-->


<oor:component-data oor:name="Jobs" oor:package="org.openoffice.Office" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <node oor:name="Jobs">
        <node oor:name="OOoImprovement.OnLogRotateJob" oor:op="replace">
            <prop oor:name="Service">
                <value>com.sun.star.comp.extensions.oooimprovement.OnLogRotateJob</value>
            </prop>
            <node oor:name="Arguments"/>
        </node>
        <node oor:name="OOoImprovement.InviteJob" oor:op="replace">
            <prop oor:name="Service">
                <value>com.sun.star.comp.extensions.oooimprovement.InviteJob</value>
            </prop>
            <node oor:name="Arguments"/>
        </node>
    </node>
    <node oor:name="Events">
        <node oor:name="onFirstVisibleTask" oor:op="fuse">
            <node oor:name="JobList">
                <node oor:name="OOoImprovement.OnLogRotateJob" oor:op="replace"/>
                <node oor:name="OOoImprovement.InviteJob" oor:op="replace"/>
            </node>
        </node>
    </node>
</oor:component-data>
