-rw-r--r-- | core/launcher/libpreload/config.in | 5 | ||||
-rw-r--r-- | core/launcher/libpreload/libpreload.pro | 14 | ||||
-rw-r--r-- | core/launcher/libpreload/preload.cpp | 91 |
3 files changed, 110 insertions, 0 deletions
diff --git a/core/launcher/libpreload/config.in b/core/launcher/libpreload/config.in new file mode 100644 index 0000000..c3cfd6f --- a/dev/null +++ b/core/launcher/libpreload/config.in | |||
@@ -0,0 +1,5 @@ | |||
1 | config LIBPRELOAD | ||
2 | boolean "Preload library" | ||
3 | default "y" if ! X11 | ||
4 | default "n" if X11 | ||
5 | depends on ! X11 | ||
diff --git a/core/launcher/libpreload/libpreload.pro b/core/launcher/libpreload/libpreload.pro new file mode 100644 index 0000000..210cbdd --- a/dev/null +++ b/core/launcher/libpreload/libpreload.pro | |||
@@ -0,0 +1,14 @@ | |||
1 | TEMPLATE = lib | ||
2 | |||
3 | CONFIG = release warn_on | ||
4 | |||
5 | SOURCES = preload.cpp | ||
6 | |||
7 | HEADERS = | ||
8 | |||
9 | INCLUDEPATH += $(QTDIR)/include | ||
10 | |||
11 | DESTDIR = $(OPIEDIR)/lib | ||
12 | TARGET = preload | ||
13 | |||
14 | VERSION = 1.0.0 | ||
diff --git a/core/launcher/libpreload/preload.cpp b/core/launcher/libpreload/preload.cpp new file mode 100644 index 0000000..a94ec65 --- a/dev/null +++ b/core/launcher/libpreload/preload.cpp | |||
@@ -0,0 +1,91 @@ | |||
1 | |||
2 | #define _GNU_SOURCE | ||
3 | //#define private public | ||
4 | //#define protected public | ||
5 | |||
6 | #include <qwsdecoration_qws.h> | ||
7 | #include <qcommonstyle.h> | ||
8 | //#include <qpe/qpeapplication.h> | ||
9 | |||
10 | class QStyle; | ||
11 | class QApplication; | ||
12 | class QFont; | ||
13 | class QWSDecoration; | ||
14 | |||
15 | #include <dlfcn.h> | ||
16 | #include <unistd.h> | ||
17 | #include <stdio.h> | ||
18 | #include <stdlib.h> | ||
19 | |||
20 | |||
21 | typedef void ( *qapp_setstyle_t ) ( QStyle * ); | ||
22 | typedef void ( *qapp_setdeco_t ) ( QApplication *, QWSDecoration * ); | ||
23 | typedef void ( *qapp_setfont_t ) ( QApplication *, const QFont &, bool, const char * ); | ||
24 | |||
25 | |||
26 | static bool *opie_block_style_p = 0; | ||
27 | |||
28 | extern "C" { | ||
29 | |||
30 | static void *resolve_symbol ( const char *sym ) | ||
31 | { | ||
32 | void *adr = ::dlsym ( RTLD_NEXT, sym ); | ||
33 | |||
34 | if ( !adr ) | ||
35 | ::fprintf ( stderr, "PANIC: Could not resolve symbol \"%s\"\n", sym ); | ||
36 | |||
37 | return adr; | ||
38 | } | ||
39 | |||
40 | extern void setStyle__12QApplicationP6QStyle ( QStyle *style ) | ||
41 | { | ||
42 | static qapp_setstyle_t qsetstyle = 0; | ||
43 | |||
44 | if ( !qsetstyle ) | ||
45 | qsetstyle = (qapp_setstyle_t) resolve_symbol ( "setStyle__12QApplicationP6QStyle" ); | ||
46 | |||
47 | if ( !opie_block_style_p ) | ||
48 | opie_block_style_p = (bool *) resolve_symbol ( "opie_block_style" ); | ||
49 | |||
50 | if ( !qsetstyle || ( opie_block_style_p && *opie_block_style_p )) { | ||
51 | delete style; | ||
52 | return; | ||
53 | } | ||
54 | else | ||
55 | ( *qsetstyle ) ( style ); | ||
56 | } | ||
57 | |||
58 | extern void setFont__12QApplicationRC5QFontbPCc ( QApplication *app, const QFont &fnt, bool informWidgets, const char * className ) | ||
59 | { | ||
60 | static qapp_setfont_t qsetfont = 0; | ||
61 | |||
62 | if ( !qsetfont ) | ||
63 | qsetfont = (qapp_setfont_t) resolve_symbol ( "setFont__12QApplicationRC5QFontbPCc" ); | ||
64 | |||
65 | if ( !opie_block_style_p ) | ||
66 | opie_block_style_p = (bool *) resolve_symbol ( "opie_block_style" ); | ||
67 | |||
68 | if ( qsetfont && !( opie_block_style_p && *opie_block_style_p )) | ||
69 | ( *qsetfont ) ( app, fnt, informWidgets, className ); | ||
70 | } | ||
71 | |||
72 | |||
73 | extern void qwsSetDecoration__12QApplicationP13QWSDecoration ( QApplication *app, QWSDecoration *deco ) | ||
74 | { | ||
75 | static qapp_setdeco_t qsetdeco = 0; | ||
76 | |||
77 | if ( !qsetdeco ) | ||
78 | qsetdeco = (qapp_setdeco_t) resolve_symbol ( "qwsSetDecoration__12QApplicationP13QWSDecoration" ); | ||
79 | |||
80 | if ( !opie_block_style_p ) | ||
81 | opie_block_style_p = (bool *) resolve_symbol ( "opie_block_style" ); | ||
82 | |||
83 | if ( !qsetdeco || ( opie_block_style_p && *opie_block_style_p )) { | ||
84 | delete deco; | ||
85 | return; | ||
86 | } | ||
87 | else | ||
88 | ( *qsetdeco ) ( app, deco ); | ||
89 | } | ||
90 | |||
91 | } | ||