Remove gtk/atk dependency by using fltk instead.

master
Nicky 2021-09-26 20:38:41 +02:00
parent ea32c0fba2
commit cc5f95c229
12 changed files with 245 additions and 101 deletions

View File

@ -3,6 +3,62 @@
<map>
<key>installables</key>
<map>
<key>glib</key>
<map>
<key>copyright</key>
<string>Copyright (C) glib project</string>
<key>license</key>
<string>LGPL</string>
<key>license_file</key>
<string>LICENSES/glib.txt</string>
<key>name</key>
<string>glib</string>
<key>platforms</key>
<map>
<key>linux64</key>
<map>
<key>archive</key>
<map>
<key>hash</key>
<string>9c93ba8b8af97fc8379f77de77e1540a</string>
<key>url</key>
<string>http://3p.firestormviewer.org/glib-2.48.0.202301938-linux64-202301938.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
</map>
</map>
<key>version</key>
<string>2.48.0</string>
</map>
<key>fltk</key>
<map>
<key>copyright</key>
<string>Copyright (C) fltk project</string>
<key>license</key>
<string>LGPL/fltk</string>
<key>license_file</key>
<string>LICENSES/fltk.txt</string>
<key>name</key>
<string>fltk</string>
<key>platforms</key>
<map>
<key>linux64</key>
<map>
<key>archive</key>
<map>
<key>hash</key>
<string>81fe1e927e4fe3c5e5f15ce6219ca883</string>
<key>url</key>
<string>http://3p.firestormviewer.org/fltk-1.3.5.202282121-linux64-202282121.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
</map>
</map>
<key>version</key>
<string>1.3.5</string>
</map>
<key>jemalloc</key>
<map>
<key>copyright</key>
@ -1603,46 +1659,6 @@
<key>version</key>
<string>0.10.6.314267</string>
</map>
<key>gtk-atk-pango-glib</key>
<map>
<key>copyright</key>
<string>Copyright (various, see sources)</string>
<key>license</key>
<string>lgpl</string>
<key>license_file</key>
<string>LICENSES/gtk-atk-pango-glib.txt</string>
<key>name</key>
<string>gtk-atk-pango-glib</string>
<key>platforms</key>
<map>
<key>linux</key>
<map>
<key>archive</key>
<map>
<key>hash</key>
<string>fb047d496c32cc3b9f99793ee6ebb1e3</string>
<key>url</key>
<string>http://3p.firestormviewer.org/gtk_atk_pango_glib-2.1-linux-180871647.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
</map>
<key>linux64</key>
<map>
<key>archive</key>
<map>
<key>hash</key>
<string>d918d894430c1d1d869b9f2e06570c65</string>
<key>url</key>
<string>http://3p.firestormviewer.org/gtk_atk_pango_glib-2.1-linux64-180841902.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
</map>
</map>
<key>version</key>
<string>2.1</string>
</map>
<key>havok-source</key>
<map>
<key>copyright</key>

View File

@ -239,16 +239,9 @@ elseif(LINUX)
# have to deal with
if (NOT USESYSTEMLIBS)
set(release_files
#libapr-1.so.0
#libaprutil-1.so.0
libatk-1.0.so
#libdb-5.1.so
${EXPAT_COPY}
#libfreetype.so.6.6.2
#libfreetype.so.6
#libGLOD.so
libgmodule-2.0.so
libgobject-2.0.so
libhunspell-1.3.so.0.0.0
libopenal.so
#libopenjpeg.so

View File

@ -1,29 +1,32 @@
# -*- cmake -*-
include(Prebuilt)
include(GLIB)
if (USESYSTEMLIBS)
include(FindPkgConfig)
if( GLIB_FOUND )
if (USESYSTEMLIBS)
include(FindPkgConfig)
pkg_check_modules(DBUSGLIB REQUIRED dbus-glib-1)
pkg_check_modules(DBUSGLIB REQUIRED dbus-glib-1)
elseif (LINUX)
use_prebuilt_binary(dbus_glib)
set(DBUSGLIB_FOUND ON FORCE BOOL)
set(DBUSGLIB_INCLUDE_DIRS
${LIBS_PREBUILT_DIR}/include/dbus
)
# We don't need to explicitly link against dbus-glib itself, because
# the viewer probes for the system's copy at runtime.
set(DBUSGLIB_LIBRARIES
gobject-2.0
glib-2.0
)
endif (USESYSTEMLIBS)
elseif (LINUX)
use_prebuilt_binary(dbus_glib)
set(DBUSGLIB_FOUND ON FORCE BOOL)
set(DBUSGLIB_INCLUDE_DIRS
${LIBS_PREBUILT_DIR}/include/dbus
)
# We don't need to explicitly link against dbus-glib itself, because
# the viewer probes for the system's copy at runtime.
set(DBUSGLIB_LIBRARIES
gobject-2.0
glib-2.0
)
endif (USESYSTEMLIBS)
if (DBUSGLIB_FOUND)
set(DBUSGLIB ON CACHE BOOL "Build with dbus-glib message bus support.")
endif (DBUSGLIB_FOUND)
if (DBUSGLIB_FOUND)
set(DBUSGLIB ON CACHE BOOL "Build with dbus-glib message bus support.")
endif (DBUSGLIB_FOUND)
if (DBUSGLIB)
add_definitions(-DLL_DBUS_ENABLED=1)
endif (DBUSGLIB)
if (DBUSGLIB)
add_definitions(-DLL_DBUS_ENABLED=1)
endif (DBUSGLIB)
endif()

11
indra/cmake/GLIB.cmake Normal file
View File

@ -0,0 +1,11 @@
include(Prebuilt)
if( LINUX )
use_prebuilt_binary(glib)
set(GLIB_FOUND ON CACHE BOOL "Build against glib 2")
set(GLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/glib-2.0 ${LIBS_PREBUILT_DIR}/lib/release/glib-2.0/include )
set(GLIB_LIBRARIES libgobject-2.0.a libglib-2.0.a libffi.a libpcre.a)
add_definitions(-DLL_GLIB=1)
endif()

View File

@ -5,23 +5,29 @@ include(FreeType)
if (USESYSTEMLIBS)
include(FindPkgConfig)
if( NOT GTK_VERSION )
set( GTK_VERSION 2.0 )
endif()
if (LINUX)
set(PKGCONFIG_PACKAGES
atk
cairo
gdk-2.0
gdk-${GTK_VERSION}
gdk-pixbuf-2.0
glib-2.0
gmodule-2.0
gtk+-2.0
gtk+-${GTK_VERSION}
gthread-2.0
libpng
pango
pangoft2
pangox
pangoxft
sdl
sdl2
)
if( GTK_VERSION LESS "3.0" )
LIST( APPEND PKGCONFIG_PACKAGES pangoxft )
else()
add_definitions( -DGTK_DISABLE_DEPRECATED)
endif()
endif (LINUX)
foreach(pkg ${PKGCONFIG_PACKAGES})
@ -31,29 +37,16 @@ if (USESYSTEMLIBS)
list(APPEND UI_LIBRARIES ${${pkg}_LIBRARIES})
add_definitions(${${pkg}_CFLAGS_OTHERS})
endforeach(pkg)
list(APPEND UI_LIBRARIES X11)
else (USESYSTEMLIBS)
if (LINUX)
use_prebuilt_binary(gtk-atk-pango-glib)
use_prebuilt_binary(fltk)
endif (LINUX)
if (LINUX)
set(UI_LIB_NAMES
libfltk.a
freetype
atk-1.0
gdk-x11-2.0
gdk_pixbuf-2.0
glib-2.0
gmodule-2.0
gobject-2.0
gthread-2.0
gtk-x11-2.0
pango-1.0
pangoft2-1.0
pangox-1.0
#pangoxft-1.0
gio-2.0
pangocairo-1.0
ffi
)
foreach(libname ${UI_LIB_NAMES})
@ -80,5 +73,5 @@ else (USESYSTEMLIBS)
endif (USESYSTEMLIBS)
if (LINUX)
add_definitions(-DLL_GTK=1 -DLL_X11=1)
add_definitions(-DLL_X11=1 -DLL_FLTK=1)
endif (LINUX)

View File

@ -40,6 +40,7 @@
#if LL_GTK
# include "gtk/gtk.h"
#error "Direct use of GTK is deprecated"
#endif // LL_GTK
#define MAX_LOADSTRING 100

View File

@ -43,6 +43,7 @@
#if LL_GTK
extern "C" {
# include "gtk/gtk.h"
#error "Direct use of GTK is deprecated"
}
#include <locale.h>
#endif // LL_GTK

View File

@ -27,15 +27,17 @@
#ifndef LL_LLAPPVIEWERLINUX_H
#define LL_LLAPPVIEWERLINUX_H
#ifdef LL_GLIB
extern "C" {
# include <glib.h>
}
#if LL_DBUS_ENABLED
extern "C" {
# include <glib-object.h>
# include <dbus/dbus-glib.h>
#endif
}
#endif
#ifndef LL_LLAPPVIEWER_H
@ -70,7 +72,7 @@ protected:
virtual bool sendURLToOtherInstance(const std::string& url);
};
#if LL_DBUS_ENABLED
#if LL_DBUS_ENABLED && LL_GLIB
typedef struct
{
GObject parent;

View File

@ -41,6 +41,11 @@
# include "llfilepicker.h"
#endif
#ifdef LL_FLTK
#include "FL/Fl.H"
#include "FL/Fl_Native_File_Chooser.H"
#endif
//
// Globals
//
@ -193,32 +198,41 @@ LLDirPicker::LLDirPicker() :
mFileName(NULL),
mLocked(false)
{
#ifndef LL_FLTK
mFilePicker = new LLFilePicker();
#endif
reset();
}
LLDirPicker::~LLDirPicker()
{
#ifndef LL_FLTK
delete mFilePicker;
#endif
}
void LLDirPicker::reset()
{
#ifndef LL_FLTK
if (mFilePicker)
mFilePicker->reset();
mFilePicker->reset();
#else
mDir = "";
#endif
}
BOOL LLDirPicker::getDir(std::string* filename, bool blocking)
{
reset();
// if local file browsing is turned off, return without opening dialog
if ( check_local_file_access_enabled() == false )
{
return FALSE;
}
#ifndef LL_FLTK
#if !LL_MESA_HEADLESS
if (mFilePicker)
@ -237,15 +251,38 @@ BOOL LLDirPicker::getDir(std::string* filename, bool blocking)
#endif // !LL_MESA_HEADLESS
return FALSE;
#else
Fl_Native_File_Chooser flDlg;
flDlg.title("Pick a dir");
flDlg.type(Fl_Native_File_Chooser::BROWSE_DIRECTORY );
int res = flDlg.show();
if( res == 0 )
{
char const *pDir = flDlg.filename(0);
if( pDir )
mDir = pDir;
}
else if( res == -1 )
{
LL_WARNS() << "FLTK failed: " << flDlg.errmsg() << LL_ENDL;
}
return !mDir.empty();
#endif
}
std::string LLDirPicker::getDirName()
{
#ifndef LL_FLTK
if (mFilePicker)
{
return mFilePicker->getFirstFile();
}
return "";
#else
return mDir;
#endif
}
#else // not implemented

View File

@ -80,7 +80,7 @@ private:
#if LL_LINUX || LL_DARWIN
// On Linux we just implement LLDirPicker on top of LLFilePicker
LLFilePicker *mFilePicker;
// LLFilePicker *mFilePicker;
#endif

View File

@ -36,10 +36,16 @@
#include "llviewercontrol.h"
#include "llwindow.h" // beforeDialog()
#undef LL_GTK
#if LL_SDL
#include "llwindowsdl.h" // for some X/GTK utils to help with filepickers
#endif // LL_SDL
#ifdef LL_FLTK
#include "FL/Fl.H"
#include "FL/Fl_Native_File_Chooser.H"
#endif
#if LL_LINUX
#include "llhttpconstants.h" // file picker uses some of thes constants on Linux
#endif
@ -1566,12 +1572,79 @@ BOOL LLFilePicker::getMultipleOpenFiles( ELoadFilter filter, bool blocking)
return rtn;
}
#elif LL_FLTK
BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename, bool blocking )
{
return openFileDialog( filter, blocking, eSaveFile );
}
BOOL LLFilePicker::getOpenFile( ELoadFilter filter, bool blocking )
{
return openFileDialog( filter, blocking, eOpenFile );
}
BOOL LLFilePicker::getMultipleOpenFiles( ELoadFilter filter, bool blocking)
{
return openFileDialog( filter, blocking, eOpenMultiple );
}
void setupFilter( Fl_Native_File_Chooser &chooser, LLFilePicker::ESaveFilter filter )
{
}
void setupFilter( Fl_Native_File_Chooser &chooser, LLFilePicker::ELoadFilter filter )
{
}
bool LLFilePicker::openFileDialog( int32_t filter, bool blocking, EType aType )
{
if ( check_local_file_access_enabled() == false )
return false;
reset();
Fl_Native_File_Chooser::Type flType = Fl_Native_File_Chooser::BROWSE_FILE;
if( aType == eOpenMultiple )
flType = Fl_Native_File_Chooser::BROWSE_MULTI_FILE;
else if( aType == eSaveFile )
flType = Fl_Native_File_Chooser::BROWSE_SAVE_FILE;
Fl_Native_File_Chooser flDlg;
flDlg.title("Pick a file");
flDlg.type( flType );
if( aType == eSaveFile )
setupFilter( flDlg, (ESaveFilter) filter );
else
setupFilter( flDlg, (ELoadFilter) filter );
int res = flDlg.show();
if( res == 0 )
{
int32_t count = flDlg.count();
if( count < 0 )
count = 0;
for( int32_t i = 0; i < count; ++i )
{
char const *pFile = flDlg.filename(i);
if( pFile && strlen(pFile) > 0 )
mFiles.push_back( pFile );
}
}
else if( res == -1 )
{
LL_WARNS() << "FLTK failed: " << flDlg.errmsg() << LL_ENDL;
}
return mFiles.empty()?FALSE:TRUE;
}
# else // LL_GTK
// Hacky stubs designed to facilitate fake getSaveFile and getOpenFile with
// static results, when we don't have a real filepicker.
BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename )
BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename, bool blocking )
{
// if local file browsing is turned off, return without opening dialog
// (Even though this is a stub, I think we still should not return anything at all)
@ -1634,7 +1707,7 @@ BOOL LLFilePicker::getMultipleOpenFiles( ELoadFilter filter, bool blocking)
#else // not implemented
BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename )
BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename, bool blockin )
{
reset();
return FALSE;

View File

@ -33,6 +33,12 @@
#ifndef LL_LLFILEPICKER_H
#define LL_LLFILEPICKER_H
#if LL_FLTK
#if LL_GTK
#undef LL_GTK
#endif
#endif
#include "stdtypes.h"
#if LL_DARWIN
@ -58,12 +64,13 @@ extern "C" {
// mostly for Linux, possible on others
#if LL_GTK
# include "gtk/gtk.h"
#error "Direct use of GTK is deprecated"
#endif // LL_GTK
}
class LLFilePicker
{
#ifdef LL_GTK
#if LL_GTK
friend class LLDirPicker;
friend void chooser_responder(GtkWidget *, gint, gpointer);
#endif // LL_GTK
@ -187,7 +194,14 @@ private:
// we also remember the extension of the last added file.
std::string mCurrentExtension;
#endif
#if LL_FLTK
enum EType
{
eSaveFile, eOpenFile, eOpenMultiple
};
bool openFileDialog( int32_t filter, bool blocking, EType aType );
#endif
std::vector<std::string> mFiles;
S32 mCurrentFile;
bool mLocked;