VLC 4.0.0-dev
vlc_xlib.h
Go to the documentation of this file.
1/*****************************************************************************
2 * vlc_xlib.h: initialization of Xlib
3 *****************************************************************************
4 * Copyright (C) 2010 RĂ©mi Denis-Courmont
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU Lesser General Public License as published by
8 * the Free Software Foundation; either version 2.1 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this program; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
19 *****************************************************************************/
20
21#ifndef VLC_XLIB_H
22# define VLC_XLIB_H 1
23
24# include <stdio.h>
25# include <stdlib.h>
26# include <X11/Xlib.h>
27# include <X11/Xlibint.h>
28
29#include <vlc_threads.h>
30
31static inline bool vlc_xlib_init (vlc_object_t *obj)
33 if (!var_InheritBool (obj, "xlib"))
34 return false;
35
36 bool ok = false;
37
38 /* XInitThreads() can be called multiple times,
39 * but it is not reentrant, so we need this global lock. */
41
42 if (_Xglobal_lock == NULL && unlikely(_XErrorFunction != NULL))
43 /* (_Xglobal_lock == NULL) => Xlib threads not initialized */
44 /* (_XErrorFunction != NULL) => Xlib already in use */
45 fprintf (stderr, "%s:%u:%s: Xlib not initialized for threads.\n"
46 "This process is probably using LibVLC incorrectly.\n"
47 "Pass \"--no-xlib\" to libvlc_new() to fix this.\n",
48 __FILE__, __LINE__, __func__);
49 else if (XInitThreads ())
50 ok = true;
51
53
54 if (!ok)
55 msg_Err (obj, "Xlib not initialized for threads");
56 return ok;
57}
58
59#endif
#define unlikely(p)
Predicted false condition.
Definition: vlc_common.h:257
#define msg_Err(p_this,...)
Definition: vlc_messages.h:102
#define vlc_global_lock(n)
Acquires a global mutex.
Definition: vlc_threads.h:1158
#define vlc_global_unlock(n)
Releases a global mutex.
Definition: vlc_threads.h:1163
@ VLC_XLIB_MUTEX
Definition: vlc_threads.h:1138
static bool var_InheritBool(vlc_object_t *obj, const char *name)
Definition: vlc_variables.h:675
VLC object common members.
Definition: vlc_objects.h:45
This file is a collection of common definitions and types.
Thread primitive declarations.
static bool vlc_xlib_init(vlc_object_t *obj)
Definition: vlc_xlib.h:32