--- gigedit/trunk/src/gigedit/gigedit.cpp 2008/02/03 00:19:55 1660 +++ gigedit/trunk/src/gigedit/gigedit.cpp 2012/03/04 09:01:40 2325 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007, 2008 Andreas Persson + * Copyright (C) 2007-2009 Andreas Persson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -19,8 +19,10 @@ #include "gigedit.h" -#include +#include #include +#include + #include "mainwindow.h" #include "global.h" @@ -48,22 +50,26 @@ class Cond { private: bool pred; - Glib::Mutex mutex; - Glib::Cond cond; + Glib::Threads::Mutex mutex; + Glib::Threads::Cond cond; public: Cond() : pred(false) { } void signal() { - Glib::Mutex::Lock lock(mutex); + Glib::Threads::Mutex::Lock lock(mutex); pred = true; cond.signal(); } void wait() { - Glib::Mutex::Lock lock(mutex); + Glib::Threads::Mutex::Lock lock(mutex); while (!pred) cond.wait(mutex); } }; +#ifdef OLD_THREADS static Glib::StaticMutex mutex; +#else + static Glib::Threads::Mutex mutex; +#endif static Glib::Dispatcher* dispatcher; static GigEditState* current; @@ -79,6 +85,10 @@ void close_window(); }; +#ifdef WIN32 +HINSTANCE gigedit_dll_handle = 0; +#endif + void init_app() { static bool process_initialized = false; if (!process_initialized) { @@ -87,14 +97,32 @@ setlocale(LC_ALL, ""); #if HAVE_GETTEXT + +#ifdef WIN32 +#if GLIB_CHECK_VERSION(2, 16, 0) + gchar* root = + g_win32_get_package_installation_directory_of_module(gigedit_dll_handle); +#else + gchar* root = + g_win32_get_package_installation_directory(NULL, NULL); +#endif + gchar* temp = g_build_filename(root, "/share/locale", NULL); + g_free(root); + gchar* localedir = g_win32_locale_filename_from_utf8(temp); + g_free(temp); + bindtextdomain(GETTEXT_PACKAGE, localedir); + g_free(localedir); +#else bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR); +#endif bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); #endif // HAVE_GETTEXT +#ifdef OLD_THREADS // make sure thread_init() is called once and ONLY once per process if (!Glib::thread_supported()) Glib::thread_init(); - +#endif process_initialized = true; } } @@ -127,6 +155,9 @@ mainwindow->signal_dimreg_changed().connect( gigedit->signal_dimreg_changed().make_slot() ); + mainwindow->signal_sample_changed().connect( + gigedit->signal_sample_changed().make_slot() + ); mainwindow->signal_sample_ref_changed().connect( gigedit->signal_sample_ref_changed().make_slot() ); @@ -209,6 +240,10 @@ return dimreg_changed_signal; } +sigc::signal& GigEdit::signal_sample_changed() { + return sample_changed_signal; +} + sigc::signal& GigEdit::signal_sample_ref_changed() { return sample_ref_changed_signal; } @@ -221,7 +256,11 @@ return keyboard_key_released_signal; } +#ifdef OLD_THREADS Glib::StaticMutex GigEditState::mutex = GLIBMM_STATIC_MUTEX_INIT; +#else +Glib::Threads::Mutex GigEditState::mutex; +#endif Glib::Dispatcher* GigEditState::dispatcher = 0; GigEditState* GigEditState::current = 0; @@ -266,7 +305,7 @@ static bool main_loop_started = false; if (!main_loop_started) { Cond initialized; - Glib::Thread::create( + Glib::Threads::Thread::create( sigc::bind(sigc::ptr_fun(&GigEditState::main_loop_run), &initialized), false); @@ -280,3 +319,17 @@ mutex.unlock(); close.wait(); // sleep until window is closed } + +#if defined(WIN32) +extern "C" { + BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved) + { + switch (reason) { + case DLL_PROCESS_ATTACH: + gigedit_dll_handle = instance; + break; + } + return TRUE; + } +} +#endif