<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def call_gui_callback(callback, *args, **kwargs):
 """Wrapper method for GLib.idle_add This method is intended as replacement for idle_add. It wraps the method with a callback option. The advantage is that this way, the call is blocking. The method return, when the callback method has been called and executed. :param callback: The callback method, e.g. on_open_activate :param args: The parameters to be passed to the callback method """

    from future.utils import raise_
    from threading import Condition
    import sys
    from rafcon.utils import log
    global exception_info, result
    from gi.repository import GLib
    condition = Condition()
    exception_info = None

    @log.log_exceptions()
    def fun():
        """Call callback and notify condition variable
        """
        global exception_info, result
        result = None
        try:
            result = callback(*args)
        except:
            # Exception within this asynchronously called function won't reach pytest. This is why we have to store
            # the information about the exception to re-raise it at the end of the synchronous call.
            exception_info = sys.exc_info()
        finally:  # Finally is also executed in the case of exceptions
            condition.acquire()
            condition.notify()
            condition.release()

    if "priority" in kwargs:
        priority = kwargs["priority"]
    else:
        priority = GLib.PRIORITY_LOW

    condition.acquire()
    GLib.idle_add(fun, priority=priority)
    # Wait for the condition to be notified
    # TODO: implement timeout that raises an exception
    condition.wait()
    condition.release()
    if exception_info:
        e_type, e_value, e_traceback = exception_info
        raise_(e_type, e_value, e_traceback)
    return result