Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : */
9 :
10 : #include <dlfcn.h>
11 : #include <stdlib.h>
12 :
13 : typedef int Window;
14 : typedef union _GdkEvent GdkEvent;
15 : typedef struct _GdkWindow GdkWindow;
16 : typedef struct _GdkDisplay GdkDisplay;
17 : typedef struct _GdkScreen GdkScreen;
18 :
19 : typedef enum
20 : {
21 : GDK_FULLSCREEN_ON_CURRENT_MONITOR,
22 : GDK_FULLSCREEN_ON_ALL_MONITORS
23 : } GdkFullscreenMode;
24 :
25 0 : int main(int argc, char *argv[])
26 : {
27 : void *handle;
28 : void (*gtk_init)(int*, char***);
29 : GdkWindow* (*gdk_x11_window_foreign_new_for_display)(GdkDisplay*, Window);
30 : GdkDisplay* (*gdk_display_get_default)(void);
31 : GdkEvent* (*gdk_event_get)(void);
32 : void (*gtk_main_do_event)(GdkEvent*);
33 : void (*gdk_event_free)(GdkEvent*);
34 : void (*gdk_window_fullscreen)(GdkWindow *);
35 : void (*gdk_window_set_fullscreen_mode)(GdkWindow *, GdkFullscreenMode);
36 :
37 : GdkEvent *event;
38 : GdkWindow *window;
39 : int windowid;
40 :
41 0 : handle = dlopen("libgtk-3.so.0", RTLD_LAZY);
42 0 : if( NULL == handle )
43 0 : return -1;
44 :
45 0 : gtk_init = (void (*) (int*, char***))
46 0 : dlsym(handle, "gtk_init");
47 0 : gdk_x11_window_foreign_new_for_display = (GdkWindow* (*)(GdkDisplay*, Window))
48 0 : dlsym(handle, "gdk_x11_window_foreign_new_for_display");
49 0 : gdk_display_get_default = (GdkDisplay* (*)(void))
50 0 : dlsym(handle, "gdk_display_get_default");
51 0 : gdk_event_get = (GdkEvent* (*)(void))
52 0 : dlsym(handle, "gdk_event_get");
53 0 : gtk_main_do_event = (void (*)(GdkEvent*))
54 0 : dlsym(handle, "gtk_main_do_event");
55 0 : gdk_event_free = (void (*)(GdkEvent*))
56 0 : dlsym(handle, "gdk_event_free");
57 0 : gdk_window_fullscreen = (void (*)(GdkWindow *))
58 0 : dlsym(handle, "gdk_window_fullscreen");
59 0 : gdk_window_set_fullscreen_mode = (void (*)(GdkWindow *, GdkFullscreenMode))
60 0 : dlsym(handle, "gdk_window_set_fullscreen_mode");
61 :
62 0 : if (!gtk_init ||
63 0 : !gdk_x11_window_foreign_new_for_display ||
64 0 : !gdk_display_get_default ||
65 0 : !gdk_event_get ||
66 0 : !gtk_main_do_event ||
67 0 : !gdk_event_free ||
68 0 : !gdk_window_fullscreen ||
69 : !gdk_window_set_fullscreen_mode)
70 : {
71 0 : dlclose(handle);
72 0 : return -1;
73 : }
74 :
75 0 : gtk_init(&argc, &argv);
76 :
77 0 : windowid = atoi(argv[1]);
78 :
79 0 : window = gdk_x11_window_foreign_new_for_display(gdk_display_get_default(), windowid);
80 0 : if (!window)
81 : {
82 0 : dlclose(handle);
83 0 : return -1;
84 : }
85 :
86 0 : gdk_window_set_fullscreen_mode(window, GDK_FULLSCREEN_ON_ALL_MONITORS);
87 0 : gdk_window_fullscreen(window);
88 :
89 0 : while ((event = gdk_event_get()) != NULL)
90 : {
91 0 : gtk_main_do_event(event);
92 0 : gdk_event_free(event);
93 : }
94 :
95 0 : dlclose(handle);
96 0 : return 0;
97 : }
98 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
99 :
|