changeset 164:fb5cc45e0be6

dynamic loading for unix-print
author Frank Benoit <benoit@tionex.de>
date Sat, 16 Feb 2008 00:21:07 +0100
parents 20f31a1921ff
children 1b025870f242
files dwt/internal/c/gtk_unix_print_2_0.d dwt/internal/gtk/OS.d
diffstat 2 files changed, 90 insertions(+), 49 deletions(-) [+]
line wrap: on
line diff
--- a/dwt/internal/c/gtk_unix_print_2_0.d	Fri Feb 15 03:27:55 2008 +0100
+++ b/dwt/internal/c/gtk_unix_print_2_0.d	Sat Feb 16 00:21:07 2008 +0100
@@ -4,6 +4,39 @@
 ******************************************************************************/
 module dwt.internal.c.gtk_unix_print_2_0;
 
+version=DYNLINK;
+
+version(DYNLINK){
+    import tango.sys.SharedLib : SharedLib;
+    import tango.util.log.Trace;
+    struct Symbol{
+        char[] name;
+        void** symbol;
+    }
+}
+
+void loadLib(){
+    version(DYNLINK){
+        char[] libname = "libgtk-x11-2.0.so";
+
+        SharedLib lib = SharedLib.load( libname );
+        if( lib is null ){
+            lib = SharedLib.load( libname ~ ".0" );
+        }
+
+        if ( lib !is null ) {
+            foreach( inout s; symbols ){
+                *s.symbol = lib.getSymbol( s.name.ptr );
+                if( s.symbol is null ){
+                    Trace.formatln( "{}: Symbol '{}' not found", libname, s.name );
+                }
+            }
+        } else {
+            Trace.formatln( "Could not load the library {}", libname );
+        }
+    }
+}
+
 extern(C):
 align(4):
 
@@ -246,55 +279,55 @@
 
 
 Symbol[] symbols = [
-    { gtk_print_unix_dialog_set_manual_capabilities,  cast(void**)& gtk_print_unix_dialog_set_manual_capabilities},
-    { gtk_print_unix_dialog_add_custom_tab,  cast(void**)& gtk_print_unix_dialog_add_custom_tab},
-    { gtk_print_unix_dialog_get_selected_printer,  cast(void**)& gtk_print_unix_dialog_get_selected_printer},
-    { gtk_print_unix_dialog_get_settings,  cast(void**)& gtk_print_unix_dialog_get_settings},
-    { gtk_print_unix_dialog_set_settings,  cast(void**)& gtk_print_unix_dialog_set_settings},
-    { gtk_print_unix_dialog_get_current_page,  cast(void**)& gtk_print_unix_dialog_get_current_page},
-    { gtk_print_unix_dialog_set_current_page,  cast(void**)& gtk_print_unix_dialog_set_current_page},
-    { gtk_print_unix_dialog_get_page_setup,  cast(void**)& gtk_print_unix_dialog_get_page_setup},
-    { gtk_print_unix_dialog_set_page_setup,  cast(void**)& gtk_print_unix_dialog_set_page_setup},
-    { gtk_print_unix_dialog_new,  cast(void**)& gtk_print_unix_dialog_new},
-    { gtk_print_unix_dialog_get_type,  cast(void**)& gtk_print_unix_dialog_get_type},
-    { gtk_print_job_send,  cast(void**)& gtk_print_job_send},
-    { gtk_print_job_get_track_print_status,  cast(void**)& gtk_print_job_get_track_print_status},
-    { gtk_print_job_set_track_print_status,  cast(void**)& gtk_print_job_set_track_print_status},
-    { gtk_print_job_get_surface,  cast(void**)& gtk_print_job_get_surface},
-    { gtk_print_job_set_source_file,  cast(void**)& gtk_print_job_set_source_file},
-    { gtk_print_job_get_status,  cast(void**)& gtk_print_job_get_status},
-    { gtk_print_job_get_title,  cast(void**)& gtk_print_job_get_title},
-    { gtk_print_job_get_printer,  cast(void**)& gtk_print_job_get_printer},
-    { gtk_print_job_get_settings,  cast(void**)& gtk_print_job_get_settings},
-    { gtk_print_job_new,  cast(void**)& gtk_print_job_new},
-    { gtk_print_job_get_type,  cast(void**)& gtk_print_job_get_type},
-    { gtk_enumerate_printers,  cast(void**)& gtk_enumerate_printers},
-    { gtk_printer_get_capabilities,  cast(void**)& gtk_printer_get_capabilities},
-    { gtk_printer_request_details,  cast(void**)& gtk_printer_request_details},
-    { gtk_printer_has_details,  cast(void**)& gtk_printer_has_details},
-    { gtk_printer_compare,  cast(void**)& gtk_printer_compare},
-    { gtk_printer_list_papers,  cast(void**)& gtk_printer_list_papers},
-    { gtk_printer_accepts_ps,  cast(void**)& gtk_printer_accepts_ps},
-    { gtk_printer_accepts_pdf,  cast(void**)& gtk_printer_accepts_pdf},
-    { gtk_printer_is_default,  cast(void**)& gtk_printer_is_default},
-    { gtk_printer_is_virtual,  cast(void**)& gtk_printer_is_virtual},
-    { gtk_printer_is_active,  cast(void**)& gtk_printer_is_active},
-    { gtk_printer_get_job_count,  cast(void**)& gtk_printer_get_job_count},
-    { gtk_printer_get_icon_name,  cast(void**)& gtk_printer_get_icon_name},
-    { gtk_printer_get_location,  cast(void**)& gtk_printer_get_location},
-    { gtk_printer_get_description,  cast(void**)& gtk_printer_get_description},
-    { gtk_printer_get_state_message,  cast(void**)& gtk_printer_get_state_message},
-    { gtk_printer_get_name,  cast(void**)& gtk_printer_get_name},
-    { gtk_printer_get_backend,  cast(void**)& gtk_printer_get_backend},
-    { gtk_printer_new,  cast(void**)& gtk_printer_new},
-    { gtk_printer_get_type,  cast(void**)& gtk_printer_get_type},
-    { gtk_print_capabilities_get_type,  cast(void**)& gtk_print_capabilities_get_type},
-    { gtk_page_setup_unix_dialog_get_print_settings,  cast(void**)& gtk_page_setup_unix_dialog_get_print_settings},
-    { gtk_page_setup_unix_dialog_set_print_settings,  cast(void**)& gtk_page_setup_unix_dialog_set_print_settings},
-    { gtk_page_setup_unix_dialog_get_page_setup,  cast(void**)& gtk_page_setup_unix_dialog_get_page_setup},
-    { gtk_page_setup_unix_dialog_set_page_setup,  cast(void**)& gtk_page_setup_unix_dialog_set_page_setup},
-    { gtk_page_setup_unix_dialog_new,  cast(void**)& gtk_page_setup_unix_dialog_new},
-    { gtk_page_setup_unix_dialog_get_type,  cast(void**)& gtk_page_setup_unix_dialog_get_type},
+    { "gtk_print_unix_dialog_set_manual_capabilities",  cast(void**)& gtk_print_unix_dialog_set_manual_capabilities},
+    { "gtk_print_unix_dialog_add_custom_tab",  cast(void**)& gtk_print_unix_dialog_add_custom_tab},
+    { "gtk_print_unix_dialog_get_selected_printer",  cast(void**)& gtk_print_unix_dialog_get_selected_printer},
+    { "gtk_print_unix_dialog_get_settings",  cast(void**)& gtk_print_unix_dialog_get_settings},
+    { "gtk_print_unix_dialog_set_settings",  cast(void**)& gtk_print_unix_dialog_set_settings},
+    { "gtk_print_unix_dialog_get_current_page",  cast(void**)& gtk_print_unix_dialog_get_current_page},
+    { "gtk_print_unix_dialog_set_current_page",  cast(void**)& gtk_print_unix_dialog_set_current_page},
+    { "gtk_print_unix_dialog_get_page_setup",  cast(void**)& gtk_print_unix_dialog_get_page_setup},
+    { "gtk_print_unix_dialog_set_page_setup",  cast(void**)& gtk_print_unix_dialog_set_page_setup},
+    { "gtk_print_unix_dialog_new",  cast(void**)& gtk_print_unix_dialog_new},
+    { "gtk_print_unix_dialog_get_type",  cast(void**)& gtk_print_unix_dialog_get_type},
+    { "gtk_print_job_send",  cast(void**)& gtk_print_job_send},
+    { "gtk_print_job_get_track_print_status",  cast(void**)& gtk_print_job_get_track_print_status},
+    { "gtk_print_job_set_track_print_status",  cast(void**)& gtk_print_job_set_track_print_status},
+    { "gtk_print_job_get_surface",  cast(void**)& gtk_print_job_get_surface},
+    { "gtk_print_job_set_source_file",  cast(void**)& gtk_print_job_set_source_file},
+    { "gtk_print_job_get_status",  cast(void**)& gtk_print_job_get_status},
+    { "gtk_print_job_get_title",  cast(void**)& gtk_print_job_get_title},
+    { "gtk_print_job_get_printer",  cast(void**)& gtk_print_job_get_printer},
+    { "gtk_print_job_get_settings",  cast(void**)& gtk_print_job_get_settings},
+    { "gtk_print_job_new",  cast(void**)& gtk_print_job_new},
+    { "gtk_print_job_get_type",  cast(void**)& gtk_print_job_get_type},
+    { "gtk_enumerate_printers",  cast(void**)& gtk_enumerate_printers},
+    { "gtk_printer_get_capabilities",  cast(void**)& gtk_printer_get_capabilities},
+    { "gtk_printer_request_details",  cast(void**)& gtk_printer_request_details},
+    { "gtk_printer_has_details",  cast(void**)& gtk_printer_has_details},
+    { "gtk_printer_compare",  cast(void**)& gtk_printer_compare},
+    { "gtk_printer_list_papers",  cast(void**)& gtk_printer_list_papers},
+    { "gtk_printer_accepts_ps",  cast(void**)& gtk_printer_accepts_ps},
+    { "gtk_printer_accepts_pdf",  cast(void**)& gtk_printer_accepts_pdf},
+    { "gtk_printer_is_default",  cast(void**)& gtk_printer_is_default},
+    { "gtk_printer_is_virtual",  cast(void**)& gtk_printer_is_virtual},
+    { "gtk_printer_is_active",  cast(void**)& gtk_printer_is_active},
+    { "gtk_printer_get_job_count",  cast(void**)& gtk_printer_get_job_count},
+    { "gtk_printer_get_icon_name",  cast(void**)& gtk_printer_get_icon_name},
+    { "gtk_printer_get_location",  cast(void**)& gtk_printer_get_location},
+    { "gtk_printer_get_description",  cast(void**)& gtk_printer_get_description},
+    { "gtk_printer_get_state_message",  cast(void**)& gtk_printer_get_state_message},
+    { "gtk_printer_get_name",  cast(void**)& gtk_printer_get_name},
+    { "gtk_printer_get_backend",  cast(void**)& gtk_printer_get_backend},
+    { "gtk_printer_new",  cast(void**)& gtk_printer_new},
+    { "gtk_printer_get_type",  cast(void**)& gtk_printer_get_type},
+    { "gtk_print_capabilities_get_type",  cast(void**)& gtk_print_capabilities_get_type},
+    { "gtk_page_setup_unix_dialog_get_print_settings",  cast(void**)& gtk_page_setup_unix_dialog_get_print_settings},
+    { "gtk_page_setup_unix_dialog_set_print_settings",  cast(void**)& gtk_page_setup_unix_dialog_set_print_settings},
+    { "gtk_page_setup_unix_dialog_get_page_setup",  cast(void**)& gtk_page_setup_unix_dialog_get_page_setup},
+    { "gtk_page_setup_unix_dialog_set_page_setup",  cast(void**)& gtk_page_setup_unix_dialog_set_page_setup},
+    { "gtk_page_setup_unix_dialog_new",  cast(void**)& gtk_page_setup_unix_dialog_new},
+    { "gtk_page_setup_unix_dialog_get_type",  cast(void**)& gtk_page_setup_unix_dialog_get_type},
 ];
 
 } else { // version(DYNLINK)
--- a/dwt/internal/gtk/OS.d	Fri Feb 15 03:27:55 2008 +0100
+++ b/dwt/internal/gtk/OS.d	Sat Feb 16 00:21:07 2008 +0100
@@ -630,6 +630,14 @@
 
 public class OS : Platform {
 
+    static this(){
+        if (OS.GTK_VERSION >= OS.buildVERSION (2, 10, 0)){
+            dwt.internal.c.gtk_unix_print_2_0.loadLib();
+        }
+    }
+
+
+
     /** OS Constants */
     public static const bool IsAIX   = false;
     public static const bool IsSunOS = false;