00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00029 #include <stdarg.h>
00030
00031 #include "mlview-app-context.h"
00032 #include "mlview-global-settings.h"
00033 #include "mlview-file-descriptor.h"
00034
00035
00039 struct _MlVAppContextPrivate{
00040
00042 GHashTable *context_elements ;
00043
00045 GHashTable *global_settings ;
00046
00053 GHashTable *pixmaps_cache ;
00054
00060 GHashTable *bitmaps_cache ;
00061
00066 gchar *error_msg_buffer ;
00067
00071 gchar *error_dialog_title ;
00072
00077 MlViewFileSelection * file_sel ;
00078
00082 xmlCatalog * xml_catalog ;
00083
00084
00085
00086
00087
00088 gint last_id ;
00089 } ;
00090
00091
00095 #define PRIVATE(mlv_app_context) (mlv_app_context->private)
00096
00097 static void
00098 mlview_app_context_init_class (MlViewAppContextClass *a_klass) ;
00099
00100 static void
00101 mlview_app_context_init(MlViewAppContext *a_ctxt) ;
00102
00103 static void
00104 mlview_app_context_destroy(GtkObject *a_object) ;
00105
00106 static GtkObjectClass *
00107 p_parent_class=NULL ;
00108
00109 static GtkObject *
00110 mlview_app_context_new(void) ;
00111
00112 static void
00113 pixmaps_cache_foreach_func (gchar *a_key, GdkPixmap *a_value, gchar *user_data) ;
00114
00115 static void
00116 bitmaps_cache_foreach_func (gchar *a_key, GdkBitmap *a_value, gchar *user_data) ;
00117
00118
00119
00120
00121
00127 guint
00128 mlview_app_context_get_type (void)
00129 {
00130 static guint mlview_app_context_type=0 ;
00131 if(!mlview_app_context_type){
00132 static const GtkTypeInfo t_info={
00133 "MlViewAppContext",
00134 sizeof (MlViewAppContext),
00135 sizeof (MlViewAppContextClass),
00136 (GtkClassInitFunc)mlview_app_context_init_class,
00137 (GtkObjectInitFunc)mlview_app_context_init,
00138 NULL,NULL,NULL
00139 };
00140 mlview_app_context_type=gtk_type_unique(GTK_TYPE_OBJECT,&t_info) ;
00141 }
00142 return mlview_app_context_type ;
00143 }
00144
00149 static void
00150 mlview_app_context_init_class (MlViewAppContextClass *a_klass)
00151 {
00152 GtkObjectClass *object_class = GTK_OBJECT_CLASS (a_klass) ;
00153 p_parent_class = gtk_type_class (GTK_TYPE_OBJECT) ;
00154
00155 object_class->destroy = mlview_app_context_destroy ;
00156 }
00157
00158
00165 static void
00166 mlview_app_context_init (MlViewAppContext *a_ctxt)
00167 {
00168 g_return_if_fail (a_ctxt != NULL) ;
00169
00170 if (PRIVATE (a_ctxt) == NULL)
00171 PRIVATE(a_ctxt) = g_malloc0(sizeof(MlVAppContextPrivate)) ;
00172
00173 if (PRIVATE (a_ctxt)->global_settings == NULL)
00174 PRIVATE (a_ctxt)->global_settings = g_hash_table_new (g_str_hash, g_str_equal) ;
00175
00176 if (PRIVATE (a_ctxt)->context_elements == NULL)
00177 PRIVATE (a_ctxt)->context_elements = g_hash_table_new (g_str_hash, g_str_equal) ;
00178
00179 if (PRIVATE (a_ctxt)->pixmaps_cache == NULL)
00180 PRIVATE (a_ctxt)->pixmaps_cache = g_hash_table_new (g_str_hash, g_str_equal) ;
00181
00182 if (PRIVATE (a_ctxt)->bitmaps_cache == NULL)
00183 PRIVATE (a_ctxt)->bitmaps_cache = g_hash_table_new (g_str_hash, g_str_equal) ;
00184 }
00185
00186
00192 static GtkObject *
00193 mlview_app_context_new (void)
00194 {
00195 MlViewAppContext * result ;
00196 result = gtk_type_new (MLVIEW_TYPE_APP_CONTEXT) ;
00197 return GTK_OBJECT(result) ;
00198 }
00199
00200
00209 MlViewAppContext *
00210 mlview_app_context_get_instance (void)
00211 {
00212 static MlViewAppContext * app_context = NULL ;
00213
00214 if ( ! app_context ) {
00215 app_context = MLVIEW_APP_CONTEXT(mlview_app_context_new()) ;
00216 }
00217 return app_context ;
00218 }
00219
00220
00232 gint *
00233 mlview_app_context_get_last_id_ptr (MlViewAppContext *a_app_context)
00234 {
00235 g_return_val_if_fail (a_app_context != NULL, NULL) ;
00236 g_return_val_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context), NULL) ;
00237 g_return_val_if_fail (PRIVATE (a_app_context) != NULL, NULL) ;
00238
00239 return & PRIVATE (a_app_context)->last_id ;
00240 }
00241
00242
00250 gint
00251 mlview_app_context_get_last_id (MlViewAppContext *a_app_context)
00252 {
00253 g_return_val_if_fail (a_app_context != NULL, 0) ;
00254 g_return_val_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context), 0) ;
00255 g_return_val_if_fail (PRIVATE (a_app_context) != NULL, 0) ;
00256
00257 return PRIVATE (a_app_context)->last_id ;
00258 }
00259
00260
00268 void
00269 mlview_app_context_set_last_id (MlViewAppContext *a_app_context,
00270 gint a_new_id)
00271 {
00272 g_return_if_fail (a_app_context != NULL) ;
00273 g_return_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context)) ;
00274 g_return_if_fail (PRIVATE (a_app_context) != NULL) ;
00275
00276 PRIVATE (a_app_context)->last_id = a_new_id ;
00277 }
00278
00279
00294 void
00295 mlview_app_context_set_element (MlViewAppContext * a_context,
00296 gchar *a_element_name, gpointer a_context_element)
00297 {
00298 g_return_if_fail (a_context != NULL) ;
00299 g_return_if_fail (MLVIEW_IS_APP_CONTEXT (a_context)) ;
00300 g_return_if_fail (PRIVATE(a_context) != NULL) ;
00301 g_return_if_fail (a_element_name != NULL) ;
00302
00303 if ( PRIVATE (a_context)->context_elements == NULL )
00304 PRIVATE (a_context)->context_elements =
00305 g_hash_table_new (g_str_hash, g_str_equal) ;
00306 g_hash_table_insert (PRIVATE (a_context)->context_elements,
00307 a_element_name, a_context_element) ;
00308 }
00309
00310
00318 gpointer
00319 mlview_app_context_get_element (MlViewAppContext * a_context,
00320 gchar * a_element_name)
00321 {
00322 g_return_val_if_fail (a_context != NULL, NULL) ;
00323 g_return_val_if_fail (MLVIEW_IS_APP_CONTEXT (a_context), NULL) ;
00324 g_return_val_if_fail (PRIVATE(a_context) != NULL, NULL) ;
00325
00326 return g_hash_table_lookup (PRIVATE(a_context)->context_elements,
00327 a_element_name) ;
00328 }
00329
00330
00336 void
00337 mlview_app_context_sbar_push_message ( MlViewAppContext * a_context,
00338 gchar * a_msg_format,...)
00339 {
00340 GnomeAppBar * app_bar ;
00341 GnomeApp * app ;
00342 va_list params ;
00343 gchar * msg = NULL ;
00344
00345
00346 if (a_context && PRIVATE(a_context)) {
00347 app = g_hash_table_lookup (PRIVATE(a_context)->context_elements, "GnomeApp") ;
00348 app_bar = g_hash_table_lookup (PRIVATE(a_context)->context_elements, "GnomeAppBar") ;
00349 }
00350
00351 va_start (params, a_msg_format) ;
00352 msg = g_strdup_vprintf (a_msg_format, params) ;
00353 va_end (params) ;
00354
00355 if ( msg && app && app_bar) {
00356 gnome_appbar_push(app_bar, msg) ;
00357 } else if (msg && app ) {
00358 gnome_app_message (app, msg) ;
00359 } else if (msg ) {
00360 g_printerr (msg) ;
00361 }
00362
00363 if (msg) {
00364 g_free (msg) ;
00365 msg = NULL ;
00366 }
00367 }
00368
00369
00378 void
00379 mlview_app_context_sbar_pop_message ( MlViewAppContext * a_context )
00380 {
00381 GnomeAppBar * app_bar=NULL ;
00382
00383 if (a_context && PRIVATE(a_context)) {
00384 app_bar = g_hash_table_lookup (PRIVATE(a_context)->context_elements, "GnomeAppBar") ;
00385 }
00386
00387 if (app_bar)
00388 gnome_appbar_pop( app_bar ) ;
00389 }
00390
00391
00399 void
00400 mlview_app_context_sbar_set_default_message (MlViewAppContext * a_context,
00401 gchar *a_msg_format,... )
00402 {
00403 GnomeAppBar * app_bar = NULL ;
00404 va_list params ;
00405 gchar * msg = NULL ;
00406
00407 if (a_context && PRIVATE(a_context)) {
00408 app_bar = g_hash_table_lookup (PRIVATE(a_context)->context_elements, "GnomeAppBar") ;
00409 }
00410
00411 va_start (params, a_msg_format) ;
00412 msg = g_strdup_vprintf (a_msg_format, params) ;
00413 va_end (params) ;
00414
00415 if ( app_bar )
00416 gnome_appbar_set_default (app_bar, msg) ;
00417
00418 if (msg) {
00419 g_free (msg) ;
00420 msg = NULL ;
00421 }
00422 }
00423
00424
00432 void
00433 mlview_app_context_message (MlViewAppContext * a_context,
00434 gchar *a_msg_format, ...)
00435 {
00436 GnomeApp * app=NULL ;
00437 va_list params ;
00438 gchar * msg = NULL ;
00439
00440 if (a_context && PRIVATE(a_context))
00441 app = g_hash_table_lookup (PRIVATE(a_context)->context_elements, "GnomeApp") ;
00442
00443 va_start (params, a_msg_format) ;
00444 msg = g_strdup_vprintf (a_msg_format, params) ;
00445 va_end (params) ;
00446
00447 if ( msg && app ) {
00448 gnome_app_message (app, msg) ;
00449 } else if ( msg ) {
00450 g_printerr(msg) ;
00451 return ;
00452 }
00453
00454 if (msg) {
00455 g_free (msg) ;
00456 msg = NULL ;
00457 }
00458 }
00459
00467 void
00468 mlview_app_context_error (MlViewAppContext * a_context,
00469 gchar *a_msg_format, ...)
00470 {
00471 GnomeApp *app = NULL ;
00472 va_list params ;
00473 gchar * err_msg = NULL;
00474
00475 if ( a_context && PRIVATE(a_context))
00476 app = g_hash_table_lookup (PRIVATE(a_context)->context_elements, "GnomeApp") ;
00477
00478 va_start (params, a_msg_format) ;
00479 err_msg = g_strdup_vprintf (a_msg_format, params) ;
00480 va_end (params) ;
00481
00482
00483 if ( err_msg && PRIVATE (a_context)->error_dialog_title ) {
00484 gchar * tmp_str=err_msg ;
00485 err_msg = g_strconcat (PRIVATE (a_context)->error_dialog_title, "\n", tmp_str, NULL) ;
00486 g_free (tmp_str) ;
00487
00488 g_free (PRIVATE (a_context)->error_dialog_title) ;
00489 PRIVATE (a_context)->error_dialog_title = NULL ;
00490 }
00491
00492 if ( app && err_msg ) {
00493 gnome_app_error (app, err_msg) ;
00494 } else if ( err_msg ) {
00495 g_printerr (err_msg) ;
00496 return ;
00497 }
00498 if ( err_msg )
00499 g_free (err_msg) ;
00500 }
00501
00502
00515 void
00516 mlview_app_context_set_error_dialog_title (MlViewAppContext * a_context,
00517 gchar * a_title)
00518 {
00519 if ( !a_context || !PRIVATE (a_context) )
00520 return ;
00521
00522 if ( PRIVATE (a_context)->error_dialog_title ) {
00523 g_free (PRIVATE (a_context)->error_dialog_title) ;
00524 PRIVATE (a_context)->error_dialog_title = NULL ;
00525 }
00526
00527 if ( a_title )
00528 PRIVATE (a_context)->error_dialog_title =
00529 g_strdup ( a_title) ;
00530 else
00531 PRIVATE (a_context)->error_dialog_title = NULL ;
00532 }
00533
00534
00541 gchar *
00542 mlview_app_context_get_error_dialog_title ( MlViewAppContext * a_context )
00543 {
00544 if ( !a_context || !PRIVATE (a_context) )
00545 return NULL ;
00546
00547 return PRIVATE (a_context)->error_dialog_title ;
00548 }
00549
00550
00565 void
00566 mlview_app_context_bufferize_error (MlViewAppContext * a_context,
00567 gchar * a_msg_format,
00568 ...)
00569 {
00570 GnomeApp *app = NULL ;
00571 va_list params ;
00572 gchar * temp_err_msg = NULL ;
00573
00574 if ( a_context && PRIVATE (a_context))
00575 app = g_hash_table_lookup (PRIVATE(a_context)->context_elements, "GnomeApp") ;
00576
00577 va_start (params, a_msg_format) ;
00578 temp_err_msg = g_strdup_vprintf (a_msg_format, params) ;
00579 va_end (params) ;
00580
00581 if ( app && temp_err_msg ) {
00582 if ( !PRIVATE (a_context)->error_msg_buffer )
00583 PRIVATE (a_context)->error_msg_buffer = g_strdup (temp_err_msg) ;
00584 else {
00585 gchar *old_str = PRIVATE (a_context)->error_msg_buffer ;
00586 PRIVATE (a_context)->error_msg_buffer = g_strconcat (PRIVATE (a_context)->error_msg_buffer,
00587 temp_err_msg,
00588 NULL) ;
00589 g_free (old_str) ;
00590 }
00591 } else if ( temp_err_msg) {
00592 g_printerr (temp_err_msg) ;
00593 }
00594 if ( temp_err_msg )
00595 g_free (temp_err_msg) ;
00596 }
00597
00598
00606 void
00607 mlview_app_context_display_buffered_error (MlViewAppContext * a_context)
00608 {
00609
00610 if ( !a_context || !PRIVATE(a_context) || !PRIVATE (a_context)->error_msg_buffer )
00611 return ;
00612
00613 mlview_app_context_error (a_context, PRIVATE (a_context)->error_msg_buffer) ;
00614 g_free (PRIVATE (a_context)->error_msg_buffer) ;
00615 PRIVATE (a_context)->error_msg_buffer = NULL ;
00616 }
00617
00626 gboolean
00627 mlview_app_context_error_buffer_is_empty (MlViewAppContext *a_context)
00628 {
00629 g_return_val_if_fail (a_context != NULL, TRUE) ;
00630 g_return_val_if_fail (MLVIEW_IS_APP_CONTEXT(a_context), TRUE) ;
00631 g_return_val_if_fail (PRIVATE (a_context) != NULL, TRUE) ;
00632
00633 return ( PRIVATE(a_context)->error_msg_buffer == NULL || !strcmp (PRIVATE(a_context)->error_msg_buffer, "")) ;
00634 }
00635
00636
00645 void
00646 mlview_app_context_warning (MlViewAppContext *a_context,
00647 gchar * a_msg_format, ...)
00648 {
00649 GnomeApp *app = NULL ;
00650 va_list params ;
00651 gchar * warning_msg = NULL ;
00652
00653 if ( a_context && PRIVATE (a_context))
00654 app = g_hash_table_lookup (PRIVATE(a_context)->context_elements, "GnomeApp") ;
00655
00656 va_start (params, a_msg_format) ;
00657 warning_msg = g_strdup_vprintf (a_msg_format, params) ;
00658 va_end (params) ;
00659
00660 if ( app && warning_msg ) {
00661 gnome_app_warning (app, warning_msg) ;
00662 } else if ( warning_msg ) {
00663 g_printerr (warning_msg) ;
00664 }
00665
00666 if ( warning_msg )
00667 g_free (warning_msg) ;
00668 }
00669
00670
00683 GHashTable *
00684 mlview_app_context_get_settings_hash_table (MlViewAppContext *a_context)
00685 {
00686 g_return_val_if_fail (a_context != NULL, NULL) ;
00687 g_return_val_if_fail (MLVIEW_IS_APP_CONTEXT (a_context), NULL) ;
00688 g_return_val_if_fail (PRIVATE (a_context) != NULL, NULL) ;
00689
00690 return PRIVATE (a_context)->global_settings ;
00691 }
00692
00707 void
00708 mlview_app_context_set_settings_hash_table (MlViewAppContext *a_context,
00709 GHashTable *a_settings)
00710 {
00711 g_return_if_fail (a_context != NULL) ;
00712 g_return_if_fail (MLVIEW_IS_APP_CONTEXT (a_context)) ;
00713 g_return_if_fail (PRIVATE (a_context) != NULL) ;
00714
00715 PRIVATE (a_context)->global_settings = a_settings ;
00716 }
00717
00718
00725 gboolean
00726 mlview_app_context_settings_exist (MlViewAppContext * a_app_context)
00727 {
00728 g_return_val_if_fail (a_app_context != NULL, FALSE) ;
00729 g_return_val_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context), FALSE) ;
00730 g_return_val_if_fail (PRIVATE (a_app_context) != NULL, FALSE) ;
00731
00732 if (PRIVATE (a_app_context)->global_settings)
00733 return TRUE ;
00734
00735 return FALSE ;
00736 }
00737
00748 gchar *
00749 mlview_app_context_get_settings_value (MlViewAppContext *a_app_context,
00750 const gchar * a_key)
00751 {
00752 g_return_val_if_fail (a_app_context != NULL, NULL) ;
00753 g_return_val_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context), NULL) ;
00754 g_return_val_if_fail (PRIVATE (a_app_context) != NULL, NULL) ;
00755
00756 if (PRIVATE (a_app_context)->global_settings)
00757 return g_hash_table_lookup (PRIVATE (a_app_context)->global_settings, a_key) ;
00758
00759 return NULL ;
00760 }
00761
00772 void
00773 mlview_app_context_set_settings_value (MlViewAppContext * a_app_context,
00774 const gchar * a_key, const gchar *a_value)
00775 {
00776 g_return_if_fail (a_app_context != NULL) ;
00777 g_return_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context)) ;
00778 g_return_if_fail (PRIVATE (a_app_context) != NULL) ;
00779
00780 if (PRIVATE (a_app_context)->global_settings) {
00781 g_hash_table_insert (PRIVATE (a_app_context)->global_settings,
00782 (gpointer) a_key, (gpointer) a_value) ;
00783 }
00784 }
00785
00786
00798 MlViewFileSelection *
00799 mlview_app_context_get_file_selector (MlViewAppContext * a_app_context,
00800 const gchar * a_title) {
00801
00802 g_return_val_if_fail (a_app_context != NULL, NULL) ;
00803 g_return_val_if_fail (PRIVATE (a_app_context) != NULL, NULL) ;
00804
00805 if (!PRIVATE (a_app_context)->file_sel ) {
00806 PRIVATE (a_app_context)->file_sel =
00807 MLVIEW_FILE_SELECTION (mlview_file_selection_new ()) ;
00808
00809 gtk_window_set_wmclass (GTK_WINDOW (PRIVATE (a_app_context)->file_sel), "file-selection-dialog", "MlView") ;
00810 gtk_widget_realize (GTK_WIDGET (PRIVATE (a_app_context)->file_sel)) ;
00811 mlview_app_context_set_window_icon (a_app_context,
00812 GTK_WIDGET (PRIVATE (a_app_context)->file_sel)) ;
00813
00814 }
00815
00816 if ( a_title && strcmp (a_title, ""))
00817 gtk_window_set_title (GTK_WINDOW (PRIVATE (a_app_context)->file_sel), a_title) ;
00818
00819 return PRIVATE (a_app_context)->file_sel ;
00820 }
00821
00822
00832 void
00833 mlview_app_context_set_window_icon (MlViewAppContext *a_app_context,
00834 GtkWidget * a_widget)
00835
00836 {
00837 gchar * icon_path = NULL ;
00838 GdkPixmap * pixmap = NULL ;
00839 GdkBitmap * mask = NULL ;
00840
00841 g_return_if_fail (a_app_context != NULL) ;
00842 g_return_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context)) ;
00843 g_return_if_fail (a_widget != NULL) ;
00844 g_return_if_fail (a_widget->window != NULL) ;
00845
00846
00847
00848 icon_path =
00849 mlview_app_context_get_settings_value (a_app_context,
00850 MLVIEW_STG_K_ICON_PATH) ;
00851
00852 if (icon_path) {
00853 pixmap = gdk_pixmap_create_from_xpm (a_widget->window, &mask,
00854 NULL, icon_path) ;
00855 if (pixmap)
00856 gdk_window_set_icon (a_widget->window,
00857 a_widget->window, pixmap, mask) ;
00858 }
00859 }
00860
00861
00872 gint
00873 mlview_app_context_get_xpm (MlViewAppContext *a_app_context, gchar * a_xpm_name,
00874 GdkPixmap **a_pixmap, GdkBitmap **a_bitmap)
00875 {
00876 enum ReturnStatus {
00877 OK,
00878 BAD_PARAM,
00879 FILE_NOT_READABLE,
00880 COULD_NOT_LOAD_PIXMAP
00881 } ;
00882
00883 gchar *pixmap_dir = NULL ;
00884
00885 gchar *real_xpm_name = NULL ;
00886
00887 gchar * pixmap_file = NULL ;
00888
00889 MlViewFileDescriptor *file_desc=NULL ;
00890
00891 gboolean is_readable = FALSE ;
00892
00893 GtkWidget *app = NULL ;
00894
00895 g_return_val_if_fail (a_app_context != NULL, BAD_PARAM) ;
00896 g_return_val_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context), BAD_PARAM) ;
00897 g_return_val_if_fail (PRIVATE (a_app_context) != NULL, BAD_PARAM) ;
00898 g_return_val_if_fail (PRIVATE (a_app_context)->pixmaps_cache, BAD_PARAM) ;
00899 g_return_val_if_fail (PRIVATE (a_app_context)->bitmaps_cache, BAD_PARAM) ;
00900 g_return_val_if_fail (a_pixmap != NULL, BAD_PARAM) ;
00901 g_return_val_if_fail (a_bitmap != NULL, BAD_PARAM) ;
00902
00903 *a_pixmap = NULL ;
00904 *a_bitmap = NULL ;
00905
00906 real_xpm_name = mlview_app_context_get_settings_value (a_app_context, a_xpm_name) ;
00907
00908 g_return_val_if_fail (real_xpm_name != NULL, BAD_PARAM) ;
00909
00910
00911 *a_pixmap = g_hash_table_lookup (PRIVATE (a_app_context)->pixmaps_cache, real_xpm_name) ;
00912 *a_bitmap = g_hash_table_lookup (PRIVATE (a_app_context)->bitmaps_cache, real_xpm_name) ;
00913
00914 if (*a_pixmap == NULL) {
00915
00916 app = mlview_app_context_get_element (a_app_context, "GnomeApp") ;
00917
00918 g_return_val_if_fail (app != NULL, BAD_PARAM) ;
00919 g_return_val_if_fail (app->window != NULL, BAD_PARAM) ;
00920
00921 pixmap_dir =
00922 mlview_app_context_get_settings_value (a_app_context, MLVIEW_STG_K_PIXMAPS_DIR) ;
00923
00924 pixmap_file = g_strconcat (pixmap_dir,"/", real_xpm_name ,".xpm", NULL) ;
00925
00926 file_desc = mlview_file_descriptor_new (pixmap_file) ;
00927
00928 g_return_val_if_fail (file_desc != NULL, BAD_PARAM) ;
00929
00930 if (!mlview_file_descriptor_is_readable (file_desc, &is_readable) && is_readable == TRUE)
00931 *a_pixmap = gdk_pixmap_create_from_xpm (app->window, a_bitmap, NULL, pixmap_file) ;
00932 else {
00933 mlview_file_descriptor_destroy (file_desc) ;
00934 return FILE_NOT_READABLE ;
00935 }
00936
00937 g_free (pixmap_file) ;
00938 pixmap_file = NULL ;
00939
00940 mlview_file_descriptor_destroy (file_desc) ;
00941 file_desc = NULL ;
00942
00943 if (!*a_pixmap)
00944 return COULD_NOT_LOAD_PIXMAP ;
00945
00946 g_hash_table_insert (PRIVATE (a_app_context)->pixmaps_cache, real_xpm_name, *a_pixmap) ;
00947 g_hash_table_insert (PRIVATE (a_app_context)->bitmaps_cache, real_xpm_name, *a_bitmap) ;
00948 }
00949 return OK ;
00950 }
00951
00952
00960 void
00961 mlview_app_context_set_window_transient_for_app (MlViewAppContext *a_app_context,
00962 GtkWindow *a_window)
00963 {
00964 GnomeApp * app = NULL ;
00965
00966 g_return_if_fail (a_app_context != NULL) ;
00967 g_return_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context)) ;
00968 g_return_if_fail (a_window != NULL) ;
00969 g_return_if_fail (GTK_IS_WINDOW (a_window)) ;
00970
00971 app = mlview_app_context_get_element (a_app_context, "GnomeApp") ;
00972 g_return_if_fail (app != NULL) ;
00973 g_return_if_fail (GNOME_IS_APP (app)) ;
00974
00975 gtk_window_set_transient_for (a_window, GTK_WINDOW (app)) ;
00976 }
00977
00986 void
00987 mlview_app_context_set_xml_catalog (MlViewAppContext *a_app_context,
00988 xmlCatalog * a_xml_catalog)
00989 {
00990 g_return_if_fail (a_app_context != NULL) ;
00991 g_return_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context)) ;
00992 g_return_if_fail (PRIVATE (a_app_context) != NULL) ;
00993
00994 PRIVATE (a_app_context)->xml_catalog = a_xml_catalog ;
00995 }
00996
00997
01006 xmlCatalog *
01007 mlview_app_context_get_xml_catalog (MlViewAppContext *a_app_context)
01008 {
01009 g_return_val_if_fail (a_app_context != NULL, NULL) ;
01010 g_return_val_if_fail (MLVIEW_IS_APP_CONTEXT (a_app_context), NULL) ;
01011 g_return_val_if_fail (PRIVATE (a_app_context) != NULL, NULL) ;
01012
01013 return (PRIVATE (a_app_context)->xml_catalog) ;
01014 }
01015
01016 static void
01017 pixmaps_cache_foreach_func (gchar *a_key, GdkPixmap *a_value, gchar *user_data)
01018 {
01019 gdk_pixmap_unref (a_value) ;
01020 }
01021
01022 static void
01023 bitmaps_cache_foreach_func (gchar *a_key, GdkBitmap *a_value, gchar *user_data)
01024 {
01025 gdk_bitmap_unref (a_value) ;
01026 }
01027
01028
01029
01030
01031
01032
01033
01034
01035 static void
01036 mlview_app_context_destroy (GtkObject *a_object)
01037 {
01038 MlViewAppContext *ctxt ;
01039
01040 g_return_if_fail (a_object) ;
01041
01042 ctxt = MLVIEW_APP_CONTEXT (a_object) ;
01043
01044 g_return_if_fail (PRIVATE(ctxt)) ;
01045
01046 if ( PRIVATE (ctxt)->context_elements ){
01047 g_hash_table_destroy (PRIVATE (ctxt)->context_elements) ;
01048 }
01049
01050 if (PRIVATE (ctxt)->global_settings) {
01051 g_hash_table_destroy (PRIVATE (ctxt)->global_settings) ;
01052 PRIVATE (ctxt)->global_settings = NULL ;
01053 }
01054
01055 if (PRIVATE (ctxt)->pixmaps_cache) {
01056 g_hash_table_foreach (PRIVATE (ctxt)->pixmaps_cache,
01057 (GHFunc)pixmaps_cache_foreach_func, NULL) ;
01058 PRIVATE (ctxt)->pixmaps_cache = NULL ;
01059 }
01060
01061 if (PRIVATE (ctxt)->bitmaps_cache) {
01062 g_hash_table_foreach (PRIVATE (ctxt)->pixmaps_cache,
01063 (GHFunc)bitmaps_cache_foreach_func, NULL) ;
01064 PRIVATE (ctxt)->bitmaps_cache = NULL ;
01065 }
01066
01067 if ( PRIVATE (ctxt) ){
01068 g_free (PRIVATE(ctxt)) ;
01069 }
01070
01071 if ( GTK_OBJECT_CLASS (p_parent_class)->destroy ){
01072 GTK_OBJECT_CLASS (p_parent_class)->destroy (a_object) ;
01073 }
01074 }