// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __VMS
-// vms_jackets.h should for proper working be included before anything else
-# include <vms_jackets.h>
-#undef ConnectionNumber
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#include <gpe/init.h>
#endif
-#include "wx/gtk/win_gtk.h"
#include "wx/gtk/private.h"
#include "wx/apptrait.h"
+#if wxUSE_LIBHILDON
+ #include <hildon-widgets/hildon-program.h>
+#endif // wxUSE_LIBHILDON
+
#include <gdk/gdkx.h>
//-----------------------------------------------------------------------------
// global data
//-----------------------------------------------------------------------------
-bool g_mainThreadLocked = false;
-
static GtkWidget *gs_RootWindow = (GtkWidget*) NULL;
//-----------------------------------------------------------------------------
g_source_remove(m_idleSourceId);
m_idleSourceId = 0;
}
+
+ // Pending events can be added asynchronously,
+ // need to keep idle source if any have appeared
+ needMore = needMore || HasPendingEvents();
+
// if more idle processing requested
if (needMore)
{
return false;
}
-#if wxUSE_THREADS
-
-static GPollFunc wxgs_poll_func;
-
-extern "C" {
-static gint wxapp_poll_func( GPollFD *ufds, guint nfds, gint timeout )
-{
- gdk_threads_enter();
-
- wxMutexGuiLeave();
- g_mainThreadLocked = true;
-
- gint res = (*wxgs_poll_func)(ufds, nfds, timeout);
-
- wxMutexGuiEnter();
- g_mainThreadLocked = false;
-
- gdk_threads_leave();
-
- return res;
-}
-}
-
-#endif // wxUSE_THREADS
-
//-----------------------------------------------------------------------------
// Access to the root window global
//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxApp,wxEvtHandler)
-BEGIN_EVENT_TABLE(wxApp, wxEvtHandler)
- EVT_IDLE(wxAppBase::OnIdle)
-END_EVENT_TABLE()
-
wxApp::wxApp()
{
#ifdef __WXDEBUG__
{
}
+bool wxApp::SetNativeTheme(const wxString& theme)
+{
+ wxString path;
+ path = gtk_rc_get_theme_dir();
+ path += "/";
+ path += theme.utf8_str();
+ path += "/gtk-2.0/gtkrc";
+
+ if ( wxFileExists(path.utf8_str()) )
+ gtk_rc_add_default_file(path.utf8_str());
+ else if ( wxFileExists(theme.utf8_str()) )
+ gtk_rc_add_default_file(theme.utf8_str());
+ else
+ {
+ wxLogWarning("Theme \"%s\" not available.", theme);
+
+ return false;
+ }
+
+ gtk_rc_reparse_all_for_settings(gtk_settings_get_default(), TRUE);
+
+ return true;
+}
+
bool wxApp::OnInitGui()
{
if ( !wxAppBase::OnInitGui() )
}
}
+#if wxUSE_LIBHILDON
+ m_hildonProgram = hildon_program_get_instance();
+ if ( !m_hildonProgram )
+ {
+ wxLogError(_("Unable to initialize Hildon program"));
+ return false;
+ }
+#endif // wxUSE_LIBHILDON
+
return true;
}
#if wxUSE_THREADS
if (!g_thread_supported())
+ {
g_thread_init(NULL);
-
- wxgs_poll_func = g_main_context_get_poll_func(NULL);
- g_main_context_set_poll_func(NULL, wxapp_poll_func);
+ gdk_threads_init();
+ }
#endif // wxUSE_THREADS
// We should have the wxUSE_WCHAR_T test on the _outside_
bool init_result;
+ int i;
#if wxUSE_UNICODE
// gtk_init() wants UTF-8, not wchar_t, so convert
- int i;
char **argvGTK = new char *[argc_ + 1];
for ( i = 0; i < argc_; i++ )
{
}
argc_ = argcGTK;
+ argv_[argc_] = NULL;
}
//else: gtk_init() didn't modify our parameters
wxArrayString opt, desc;
m_traits->GetStandardCmdLineOptions(opt, desc);
- for ( int i = 0; i < argc_; i++ )
+ for ( i = 0; i < argc_; i++ )
{
// leave just the names of the options with values
const wxString str = wxString(argv_[i]).BeforeFirst('=');
{
if (m_idleSourceId != 0)
g_source_remove(m_idleSourceId);
-#if wxUSE_THREADS
- delete m_idleMutex;
- m_idleMutex = NULL;
-#endif
+
// release reference acquired by Initialize()
g_type_class_unref(g_type_class_peek(GTK_TYPE_WIDGET));
gdk_threads_leave();
wxAppBase::CleanUp();
+
+ // delete this mutex as late as possible as it's used from WakeUpIdle(), in
+ // particular do it after calling the base class CleanUp() which can result
+ // in it being called
+#if wxUSE_THREADS
+ delete m_idleMutex;
+ m_idleMutex = NULL;
+#endif
}
void wxApp::WakeUpIdle()
}
#endif // __WXDEBUG__
+
+#if wxUSE_THREADS
+void wxGUIAppTraits::MutexGuiEnter()
+{
+ gdk_threads_enter();
+}
+
+void wxGUIAppTraits::MutexGuiLeave()
+{
+ gdk_threads_leave();
+}
+#endif // wxUSE_THREADS