1 // This file is part of Desktop App Toolkit, 2 // a set of libraries for developing nice desktop applications. 3 // 4 // For license and copyright information please follow this link: 5 // https://github.com/desktop-app/legal/blob/master/LEGAL 6 // 7 #pragma once 8 9 #include <gio/gio.h> 10 11 #define GTK_TYPE_CONTAINER (gtk_container_get_type ()) 12 #define GTK_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CONTAINER, GtkContainer)) 13 14 #define GTK_TYPE_WIDGET (gtk_widget_get_type ()) 15 #define GTK_WIDGET(widget) (G_TYPE_CHECK_INSTANCE_CAST ((widget), GTK_TYPE_WIDGET, GtkWidget)) 16 17 #define GTK_TYPE_WINDOW (gtk_window_get_type ()) 18 #define GTK_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_WINDOW, GtkWindow)) 19 20 #define WEBKIT_TYPE_NAVIGATION_POLICY_DECISION (webkit_navigation_policy_decision_get_type()) 21 #define WEBKIT_NAVIGATION_POLICY_DECISION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_NAVIGATION_POLICY_DECISION, WebKitNavigationPolicyDecision)) 22 23 #define WEBKIT_TYPE_WEB_VIEW (webkit_web_view_get_type()) 24 #define WEBKIT_WEB_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_WEB_VIEW, WebKitWebView)) 25 26 typedef struct _GdkWindow GdkWindow; 27 typedef struct _GtkContainer GtkContainer; 28 typedef struct _GtkWidget GtkWidget; 29 typedef struct _GtkWindow GtkWindow; 30 31 typedef struct _JSCValue JSCValue; 32 typedef const struct OpaqueJSContext *JSContextRef; 33 typedef struct OpaqueJSContext *JSGlobalContextRef; 34 typedef struct OpaqueJSString *JSStringRef; 35 typedef const struct OpaqueJSValue* JSValueRef; 36 37 typedef struct _WebKitJavascriptResult WebKitJavascriptResult; 38 typedef struct _WebKitNavigationAction WebKitNavigationAction; 39 typedef struct _WebKitNavigationPolicyDecision WebKitNavigationPolicyDecision; 40 typedef struct _WebKitPolicyDecision WebKitPolicyDecision; 41 typedef struct _WebKitURIRequest WebKitURIRequest; 42 typedef struct _WebKitUserContentManager WebKitUserContentManager; 43 typedef struct _WebKitUserScript WebKitUserScript; 44 typedef struct _WebKitWebView WebKitWebView; 45 typedef struct _WebKitSettings WebKitSettings; 46 47 typedef enum { 48 GTK_WINDOW_TOPLEVEL, 49 GTK_WINDOW_POPUP, 50 } GtkWindowType; 51 52 typedef enum { 53 WEBKIT_LOAD_STARTED, 54 WEBKIT_LOAD_REDIRECTED, 55 WEBKIT_LOAD_COMMITTED, 56 WEBKIT_LOAD_FINISHED, 57 } WebKitLoadEvent; 58 59 typedef enum { 60 WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION, 61 WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION, 62 WEBKIT_POLICY_DECISION_TYPE_RESPONSE, 63 } WebKitPolicyDecisionType; 64 65 typedef enum { 66 WEBKIT_USER_CONTENT_INJECT_ALL_FRAMES, 67 WEBKIT_USER_CONTENT_INJECT_TOP_FRAME, 68 } WebKitUserContentInjectedFrames; 69 70 typedef enum { 71 WEBKIT_USER_SCRIPT_INJECT_AT_DOCUMENT_START, 72 WEBKIT_USER_SCRIPT_INJECT_AT_DOCUMENT_END, 73 } WebKitUserScriptInjectionTime; 74 75 namespace Webview::WebkitGtk { 76 77 inline gboolean (*gtk_init_check)(int *argc, char ***argv); 78 inline void (*gdk_set_allowed_backends)(const gchar *backends); 79 inline GType (*gtk_widget_get_type)(void); 80 inline void (*gtk_widget_grab_focus)(GtkWidget *widget); 81 inline GType (*gtk_container_get_type)(void); 82 inline void (*gtk_container_add)( 83 GtkContainer *container, 84 GtkWidget *widget); 85 inline GdkWindow *(*gtk_widget_get_window)(GtkWidget *widget); 86 inline GtkWidget *(*gtk_window_new)(GtkWindowType type); 87 inline void (*gtk_widget_destroy)(GtkWidget *widget); 88 inline void (*gtk_widget_hide)(GtkWidget *widget); 89 inline void (*gtk_widget_show_all)(GtkWidget *widget); 90 inline GType (*gtk_window_get_type)(void); 91 inline void (*gtk_window_set_decorated)(GtkWindow *window, gboolean setting); 92 93 // returns Window that is a typedef to unsigned long, 94 // but we avoid to include Xlib.h here 95 inline unsigned long (*gdk_x11_window_get_xid)(GdkWindow *window); 96 97 inline char *(*jsc_value_to_string)(JSCValue *value); 98 inline JSStringRef (*JSValueToStringCopy)( 99 JSContextRef ctx, 100 JSValueRef value, 101 JSValueRef* exception); 102 inline size_t (*JSStringGetMaximumUTF8CStringSize)(JSStringRef string); 103 inline size_t (*JSStringGetUTF8CString)( 104 JSStringRef string, 105 char* buffer, 106 size_t bufferSize); 107 inline void (*JSStringRelease)(JSStringRef string); 108 109 inline JSCValue *(*webkit_javascript_result_get_js_value)( 110 WebKitJavascriptResult *js_result); 111 inline JSGlobalContextRef (*webkit_javascript_result_get_global_context)( 112 WebKitJavascriptResult *js_result); 113 inline JSValueRef (*webkit_javascript_result_get_value)( 114 WebKitJavascriptResult *js_result); 115 116 inline GType (*webkit_navigation_policy_decision_get_type)(void); 117 inline WebKitNavigationAction *(*webkit_navigation_policy_decision_get_navigation_action)( 118 WebKitNavigationPolicyDecision *decision); 119 inline WebKitURIRequest *(*webkit_navigation_action_get_request)( 120 WebKitNavigationAction *navigation); 121 inline WebKitURIRequest *(*webkit_navigation_policy_decision_get_request)( 122 WebKitNavigationPolicyDecision *decision); 123 inline const gchar *(*webkit_uri_request_get_uri)(WebKitURIRequest *request); 124 inline void (*webkit_policy_decision_ignore)(WebKitPolicyDecision *decision); 125 126 inline GtkWidget *(*webkit_web_view_new)(void); 127 inline GType (*webkit_web_view_get_type)(void); 128 inline WebKitUserContentManager *(*webkit_web_view_get_user_content_manager)( 129 WebKitWebView *web_view); 130 inline gboolean (*webkit_user_content_manager_register_script_message_handler)( 131 WebKitUserContentManager *manager, 132 const gchar *name); 133 inline WebKitSettings *(*webkit_web_view_get_settings)( 134 WebKitWebView *web_view); 135 inline void (*webkit_settings_set_javascript_can_access_clipboard)( 136 WebKitSettings *settings, 137 gboolean enabled); 138 inline void (*webkit_web_view_load_uri)( 139 WebKitWebView *web_view, 140 const gchar *uri); 141 inline WebKitUserScript *(*webkit_user_script_new)( 142 const gchar *source, 143 WebKitUserContentInjectedFrames injected_frames, 144 WebKitUserScriptInjectionTime injection_time, 145 const gchar* const *whitelist, 146 const gchar* const *blacklist); 147 inline void (*webkit_user_content_manager_add_script)( 148 WebKitUserContentManager *manager, 149 WebKitUserScript *script); 150 inline void (*webkit_web_view_run_javascript)( 151 WebKitWebView *web_view, 152 const gchar *script, 153 GCancellable *cancellable, 154 GAsyncReadyCallback callback, 155 gpointer user_data); 156 157 [[nodiscard]] bool Resolve(); 158 159 } // namespace Webview::WebkitGtk 160