/* Config: */
#define PROGRESS_UPDATE_USEC 200000
+/* Although proper GTK+ locking is provided below there are some
+ * bugs with compatibility of GTK+/Gnome-VFS/GConf.
+ * The main thread executes gtk_main()->g_main_loop_run()
+ * while the working thread initializes Gnome-VFS by GConf and
+ * executes also g_main_loop_run() while sharing some poll() fds.
+ */
+/* #define UI_GNOME_THREADS 1 */
static GnomeApp *App;
}
}
+#ifndef UI_GNOME_THREADS
+ while (g_main_context_pending(NULL))
+ g_main_context_iteration(
+ NULL, /* context */
+ FALSE); /* may_block */
+#endif /* UI_GNOME_THREADS */
+
gdk_flush();
gdk_threads_leave();
typedef void (*process_t)(void);
+#ifdef UI_GNOME_THREADS
/* 'GThreadFunc' type. */
gpointer execute_process_func(process_t process /* data */)
{
return NULL;
}
+#endif /* UI_GNOME_THREADS */
/* We are called inside gdk_threads_enter(). */
static void execute_process(process_t process)
{
+#ifdef UI_GNOME_THREADS
GThread *gthread;
+#endif /* UI_GNOME_THREADS */
progress_start();
+#ifdef UI_GNOME_THREADS
gthread=g_thread_create_full(
(GThreadFunc)execute_process_func, /* func */
process, /* data */
* locked if the 'process' func did not finish yet.
*/
g_thread_join(gthread);
+#else /* UI_GNOME_THREADS */
+ (*process)();
+#endif /* UI_GNOME_THREADS */
progress_end();
}
ui_interactive=ui_gnome_interactive;
captivemodid_module_best_priority_notify=ui_gnome_module_best_priority_notify;
+#ifdef UI_GNOME_THREADS
/* gdk_threads_init() must be called before gtk_init()!
* gtk_init() gets called by create_App() here.
*/
g_thread_init(NULL);
if (!gdk_threads_mutex)
gdk_threads_init();
+#endif /* UI_GNOME_THREADS */
/* Graphic widgets will all be hidden yet. */
App_init();