Webby fork
This commit is contained in:
commit
87e243ccda
51 changed files with 5656 additions and 0 deletions
147
CMakeLists.txt
Normal file
147
CMakeLists.txt
Normal file
|
@ -0,0 +1,147 @@
|
||||||
|
project(Webby)
|
||||||
|
cmake_minimum_required (VERSION 2.8)
|
||||||
|
|
||||||
|
list (APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
|
||||||
|
list (APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/vala)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Base bits
|
||||||
|
#
|
||||||
|
set (CMAKE_C_FLAGS "-ggdb")
|
||||||
|
set (DATADIR "${CMAKE_INSTALL_PREFIX}/share")
|
||||||
|
set (PKGDATADIR "${DATADIR}/webby")
|
||||||
|
set (GETTEXT_PACKAGE "webby")
|
||||||
|
set (RELEASE_NAME "Webby")
|
||||||
|
set (VERSION "1.0")
|
||||||
|
set (VERSION_INFO "Release")
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Niceties
|
||||||
|
#
|
||||||
|
set (ARCHIVE_NAME webby-${VERSION})
|
||||||
|
add_custom_target (dist
|
||||||
|
COMMAND bzr export --root=${ARCHIVE_NAME} ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
add_custom_target (distcheck
|
||||||
|
COMMAND cd ${CMAKE_BINARY_DIR}
|
||||||
|
&& rm -rf ${ARCHIVE_NAME}
|
||||||
|
&& tar xf ${ARCHIVE_NAME}.tar.bz2
|
||||||
|
&& mkdir ${ARCHIVE_NAME}/build
|
||||||
|
&& cd ${ARCHIVE_NAME}/build
|
||||||
|
&& cmake -DCMAKE_INSTALL_PREFIX=../install -DGSETTINGS_LOCALINSTALL=ON .. -DCMAKE_MODULE_PATH=/usr/share/cmake
|
||||||
|
&& make -j8
|
||||||
|
&& make -j8 install
|
||||||
|
&& make check
|
||||||
|
)
|
||||||
|
add_dependencies(distcheck dist)
|
||||||
|
|
||||||
|
add_custom_target (uninstall "${CMAKE_COMMAND}" -P
|
||||||
|
"${CMAKE_SOURCE_DIR}/cmake/uninstall.cmake")
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# config.h
|
||||||
|
#
|
||||||
|
|
||||||
|
configure_file (${CMAKE_SOURCE_DIR}/config.h.cmake ${CMAKE_BINARY_DIR}/config.h)
|
||||||
|
add_definitions(-include config.h)
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Data
|
||||||
|
#
|
||||||
|
|
||||||
|
file (GLOB _datafiles "${CMAKE_CURRENT_SOURCE_DIR}/data/files/*")
|
||||||
|
install (FILES ${_datafiles} DESTINATION ${PKGDATADIR}/files)
|
||||||
|
|
||||||
|
file (GLOB _imagefiles "${CMAKE_CURRENT_SOURCE_DIR}/data/icons/*")
|
||||||
|
install (FILES ${_imagefiles} DESTINATION ${PKGDATADIR})
|
||||||
|
|
||||||
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/data/webby.desktop DESTINATION /usr/share/applications)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Icons
|
||||||
|
#
|
||||||
|
|
||||||
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/data/icons/webby.svg DESTINATION share/icons/hicolor/scalable/apps/)
|
||||||
|
|
||||||
|
option (ICON_UPDATE "Run gtk-update-icon-cache after the install." ON)
|
||||||
|
if (ICON_UPDATE)
|
||||||
|
install (CODE "message(\"-- Updating icon cache...\")")
|
||||||
|
install (CODE "execute_process(COMMAND gtk-update-icon-cache -f -t ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor)")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# i18n
|
||||||
|
#
|
||||||
|
add_subdirectory(vapi)
|
||||||
|
add_subdirectory(po)
|
||||||
|
|
||||||
|
#
|
||||||
|
# SRC
|
||||||
|
#
|
||||||
|
|
||||||
|
find_package(PkgConfig)
|
||||||
|
pkg_check_modules(DEPS REQUIRED gobject-2.0 glib-2.0 gio-2.0 gtk+-3.0>=3.12 gthread-2.0 granite gee-0.8 webkit2gtk-3.0 libsoup-2.4 gdk-pixbuf-2.0)
|
||||||
|
|
||||||
|
add_definitions(${DEPS_CFLAGS})
|
||||||
|
|
||||||
|
link_libraries(${DEPS_LIBRARIES})
|
||||||
|
link_directories(${DEPS_LIBRARY_DIRS})
|
||||||
|
|
||||||
|
find_package(Vala REQUIRED)
|
||||||
|
include(ValaVersion)
|
||||||
|
ensure_vala_version("0.26.0" MINIMUM)
|
||||||
|
|
||||||
|
set(PKG_DEPS gtk+-3.0
|
||||||
|
granite
|
||||||
|
gio-2.0
|
||||||
|
gee-0.8
|
||||||
|
posix
|
||||||
|
webkit2gtk-3.0
|
||||||
|
libsoup-2.4
|
||||||
|
gdk-pixbuf-2.0)
|
||||||
|
|
||||||
|
|
||||||
|
set(SRC_FILES
|
||||||
|
src/Widgets/ApplicationIcon.vala
|
||||||
|
src/Widgets/ApplicationsView.vala
|
||||||
|
src/AppWindow.vala
|
||||||
|
src/Assistant.vala
|
||||||
|
src/DesktopFile.vala
|
||||||
|
src/InfoDialog.vala
|
||||||
|
src/Launcher.vala
|
||||||
|
src/Settings.vala
|
||||||
|
src/UrlEntry.vala
|
||||||
|
src/WebApp.vala
|
||||||
|
src/WebBar.vala
|
||||||
|
src/Webby.vala
|
||||||
|
src/WebAppWindow.vala)
|
||||||
|
|
||||||
|
#
|
||||||
|
# schema
|
||||||
|
#
|
||||||
|
add_subdirectory (schemas)
|
||||||
|
|
||||||
|
|
||||||
|
include(ValaPrecompile)
|
||||||
|
vala_precompile(VALA_C ${SRC_FILES} PACKAGES ${PKG_DEPS}
|
||||||
|
|
||||||
|
CUSTOM_VAPIS
|
||||||
|
vapi/config.vapi
|
||||||
|
OPTIONS
|
||||||
|
--vapidir=${CMAKE_SOURCE_DIR}/vapi
|
||||||
|
--thread
|
||||||
|
-g
|
||||||
|
--debug
|
||||||
|
--target-glib=2.32
|
||||||
|
)
|
||||||
|
|
||||||
|
add_definitions(${CFLAGS}-lm -Wall -Winit-self -Wwrite-strings -Wunreachable-code -Wstrict-prototypes)
|
||||||
|
add_executable(webby ${VALA_C})
|
||||||
|
target_link_libraries(webby ${SQLITE_LIBRARIES} ${CLUTTERGTK_LIBRARIES} -lm)
|
||||||
|
install(TARGETS webby RUNTIME DESTINATION bin)
|
24
INSTALL
Normal file
24
INSTALL
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
OPTIONAL
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
REQUIRED
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
DEPENDENCIES
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
gtk+-3.0, granite, gio-2.0, gee-0.8, clutter-gtk-1.0, clutter-1.0, posix, webkit2gtk-3.0, libsoup-2.4
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
BUILDING
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
bzr branch lp:webby-browser
|
||||||
|
cd webby-browser
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake .. -DCMAKE_INSTALL_PREFIX=/usr
|
||||||
|
make
|
||||||
|
sudo make install
|
42
cmake/GSettings.cmake
Normal file
42
cmake/GSettings.cmake
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
# GSettings.cmake, CMake macros written for Marlin, feel free to re-use them.
|
||||||
|
|
||||||
|
option (GSETTINGS_LOCALINSTALL "Install GSettings Schemas locally instead of to the GLib prefix" ON)
|
||||||
|
|
||||||
|
option (GSETTINGS_COMPILE "Compile GSettings Schemas after installation" ${GSETTINGS_LOCALINSTALL})
|
||||||
|
|
||||||
|
if(GSETTINGS_LOCALINSTALL)
|
||||||
|
message(STATUS "GSettings schemas will be installed locally.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(GSETTINGS_COMPILE)
|
||||||
|
message(STATUS "GSettings shemas will be compiled.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
macro(add_schema SCHEMA_NAME)
|
||||||
|
|
||||||
|
set(PKG_CONFIG_EXECUTABLE pkg-config)
|
||||||
|
# Have an option to not install the schema into where GLib is
|
||||||
|
if (GSETTINGS_LOCALINSTALL)
|
||||||
|
SET (GSETTINGS_DIR "${CMAKE_INSTALL_PREFIX}/share/glib-2.0/schemas/")
|
||||||
|
else (GSETTINGS_LOCALINSTALL)
|
||||||
|
execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} glib-2.0 --variable prefix OUTPUT_VARIABLE _glib_prefix OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
SET (GSETTINGS_DIR "${_glib_prefix}/share/glib-2.0/schemas/")
|
||||||
|
endif (GSETTINGS_LOCALINSTALL)
|
||||||
|
|
||||||
|
# Run the validator and error if it fails
|
||||||
|
execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} gio-2.0 --variable glib_compile_schemas OUTPUT_VARIABLE _glib_comple_schemas OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
execute_process (COMMAND ${_glib_comple_schemas} --dry-run --schema-file=${CMAKE_CURRENT_SOURCE_DIR}/${SCHEMA_NAME} ERROR_VARIABLE _schemas_invalid OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
|
||||||
|
if (_schemas_invalid)
|
||||||
|
message (SEND_ERROR "Schema validation error: ${_schemas_invalid}")
|
||||||
|
endif (_schemas_invalid)
|
||||||
|
|
||||||
|
# Actually install and recomple schemas
|
||||||
|
message (STATUS "GSettings schemas will be installed into ${GSETTINGS_DIR}")
|
||||||
|
install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/${SCHEMA_NAME} DESTINATION ${GSETTINGS_DIR} OPTIONAL)
|
||||||
|
|
||||||
|
if (GSETTINGS_COMPILE)
|
||||||
|
install (CODE "message (STATUS \"Compiling GSettings schemas\")")
|
||||||
|
install (CODE "execute_process (COMMAND ${_glib_comple_schemas} ${GSETTINGS_DIR})")
|
||||||
|
endif ()
|
||||||
|
endmacro()
|
286
cmake/Makefile
Normal file
286
cmake/Makefile
Normal file
|
@ -0,0 +1,286 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 2.8
|
||||||
|
|
||||||
|
# Default target executed when no arguments are given to make.
|
||||||
|
default_target: all
|
||||||
|
.PHONY : default_target
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Special targets provided by cmake.
|
||||||
|
|
||||||
|
# Disable implicit rules so canoncical targets will work.
|
||||||
|
.SUFFIXES:
|
||||||
|
|
||||||
|
# Remove some rules from gmake that .SUFFIXES does not remove.
|
||||||
|
SUFFIXES =
|
||||||
|
|
||||||
|
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||||
|
|
||||||
|
# Suppress display of executed commands.
|
||||||
|
$(VERBOSE).SILENT:
|
||||||
|
|
||||||
|
# A target that is always out of date.
|
||||||
|
cmake_force:
|
||||||
|
.PHONY : cmake_force
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Set environment variables for the build.
|
||||||
|
|
||||||
|
# The shell in which to execute make rules.
|
||||||
|
SHELL = /bin/sh
|
||||||
|
|
||||||
|
# The CMake executable.
|
||||||
|
CMAKE_COMMAND = /usr/bin/cmake
|
||||||
|
|
||||||
|
# The command to remove a file.
|
||||||
|
RM = /usr/bin/cmake -E remove -f
|
||||||
|
|
||||||
|
# The top-level source directory on which CMake was run.
|
||||||
|
CMAKE_SOURCE_DIR = /home/mefrio/Scrivania/cmake
|
||||||
|
|
||||||
|
# The top-level build directory on which CMake was run.
|
||||||
|
CMAKE_BINARY_DIR = /home/mefrio/Scrivania/cmake/cmake
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Targets provided globally by CMake.
|
||||||
|
|
||||||
|
# Special rule for the target edit_cache
|
||||||
|
edit_cache:
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running interactive CMake command-line interface..."
|
||||||
|
/usr/bin/cmake -i .
|
||||||
|
.PHONY : edit_cache
|
||||||
|
|
||||||
|
# Special rule for the target edit_cache
|
||||||
|
edit_cache/fast: edit_cache
|
||||||
|
.PHONY : edit_cache/fast
|
||||||
|
|
||||||
|
# Special rule for the target install
|
||||||
|
install: preinstall
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
|
||||||
|
/usr/bin/cmake -P cmake_install.cmake
|
||||||
|
.PHONY : install
|
||||||
|
|
||||||
|
# Special rule for the target install
|
||||||
|
install/fast: preinstall/fast
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
|
||||||
|
/usr/bin/cmake -P cmake_install.cmake
|
||||||
|
.PHONY : install/fast
|
||||||
|
|
||||||
|
# Special rule for the target install/local
|
||||||
|
install/local: preinstall
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
|
||||||
|
/usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
|
||||||
|
.PHONY : install/local
|
||||||
|
|
||||||
|
# Special rule for the target install/local
|
||||||
|
install/local/fast: install/local
|
||||||
|
.PHONY : install/local/fast
|
||||||
|
|
||||||
|
# Special rule for the target install/strip
|
||||||
|
install/strip: preinstall
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
|
||||||
|
/usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
|
||||||
|
.PHONY : install/strip
|
||||||
|
|
||||||
|
# Special rule for the target install/strip
|
||||||
|
install/strip/fast: install/strip
|
||||||
|
.PHONY : install/strip/fast
|
||||||
|
|
||||||
|
# Special rule for the target list_install_components
|
||||||
|
list_install_components:
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
|
||||||
|
.PHONY : list_install_components
|
||||||
|
|
||||||
|
# Special rule for the target list_install_components
|
||||||
|
list_install_components/fast: list_install_components
|
||||||
|
.PHONY : list_install_components/fast
|
||||||
|
|
||||||
|
# Special rule for the target rebuild_cache
|
||||||
|
rebuild_cache:
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
|
||||||
|
/usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
|
||||||
|
.PHONY : rebuild_cache
|
||||||
|
|
||||||
|
# Special rule for the target rebuild_cache
|
||||||
|
rebuild_cache/fast: rebuild_cache
|
||||||
|
.PHONY : rebuild_cache/fast
|
||||||
|
|
||||||
|
# The main all target
|
||||||
|
all: cmake_check_build_system
|
||||||
|
$(CMAKE_COMMAND) -E cmake_progress_start /home/mefrio/Scrivania/cmake/cmake/CMakeFiles /home/mefrio/Scrivania/cmake/cmake/CMakeFiles/progress.marks
|
||||||
|
$(MAKE) -f CMakeFiles/Makefile2 all
|
||||||
|
$(CMAKE_COMMAND) -E cmake_progress_start /home/mefrio/Scrivania/cmake/cmake/CMakeFiles 0
|
||||||
|
.PHONY : all
|
||||||
|
|
||||||
|
# The main clean target
|
||||||
|
clean:
|
||||||
|
$(MAKE) -f CMakeFiles/Makefile2 clean
|
||||||
|
.PHONY : clean
|
||||||
|
|
||||||
|
# The main clean target
|
||||||
|
clean/fast: clean
|
||||||
|
.PHONY : clean/fast
|
||||||
|
|
||||||
|
# Prepare targets for installation.
|
||||||
|
preinstall: all
|
||||||
|
$(MAKE) -f CMakeFiles/Makefile2 preinstall
|
||||||
|
.PHONY : preinstall
|
||||||
|
|
||||||
|
# Prepare targets for installation.
|
||||||
|
preinstall/fast:
|
||||||
|
$(MAKE) -f CMakeFiles/Makefile2 preinstall
|
||||||
|
.PHONY : preinstall/fast
|
||||||
|
|
||||||
|
# clear depends
|
||||||
|
depend:
|
||||||
|
$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
|
||||||
|
.PHONY : depend
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Target rules for targets named scratch
|
||||||
|
|
||||||
|
# Build rule for target.
|
||||||
|
scratch: cmake_check_build_system
|
||||||
|
$(MAKE) -f CMakeFiles/Makefile2 scratch
|
||||||
|
.PHONY : scratch
|
||||||
|
|
||||||
|
# fast build rule for target.
|
||||||
|
scratch/fast:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/build
|
||||||
|
.PHONY : scratch/fast
|
||||||
|
|
||||||
|
src/entry.o: src/entry.c.o
|
||||||
|
.PHONY : src/entry.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/entry.c.o:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/entry.c.o
|
||||||
|
.PHONY : src/entry.c.o
|
||||||
|
|
||||||
|
src/entry.i: src/entry.c.i
|
||||||
|
.PHONY : src/entry.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/entry.c.i:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/entry.c.i
|
||||||
|
.PHONY : src/entry.c.i
|
||||||
|
|
||||||
|
src/entry.s: src/entry.c.s
|
||||||
|
.PHONY : src/entry.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/entry.c.s:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/entry.c.s
|
||||||
|
.PHONY : src/entry.c.s
|
||||||
|
|
||||||
|
src/main_window.o: src/main_window.c.o
|
||||||
|
.PHONY : src/main_window.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/main_window.c.o:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/main_window.c.o
|
||||||
|
.PHONY : src/main_window.c.o
|
||||||
|
|
||||||
|
src/main_window.i: src/main_window.c.i
|
||||||
|
.PHONY : src/main_window.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/main_window.c.i:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/main_window.c.i
|
||||||
|
.PHONY : src/main_window.c.i
|
||||||
|
|
||||||
|
src/main_window.s: src/main_window.c.s
|
||||||
|
.PHONY : src/main_window.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/main_window.c.s:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/main_window.c.s
|
||||||
|
.PHONY : src/main_window.c.s
|
||||||
|
|
||||||
|
src/menu.o: src/menu.c.o
|
||||||
|
.PHONY : src/menu.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/menu.c.o:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/menu.c.o
|
||||||
|
.PHONY : src/menu.c.o
|
||||||
|
|
||||||
|
src/menu.i: src/menu.c.i
|
||||||
|
.PHONY : src/menu.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/menu.c.i:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/menu.c.i
|
||||||
|
.PHONY : src/menu.c.i
|
||||||
|
|
||||||
|
src/menu.s: src/menu.c.s
|
||||||
|
.PHONY : src/menu.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/menu.c.s:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/menu.c.s
|
||||||
|
.PHONY : src/menu.c.s
|
||||||
|
|
||||||
|
src/notebook.o: src/notebook.c.o
|
||||||
|
.PHONY : src/notebook.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/notebook.c.o:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/notebook.c.o
|
||||||
|
.PHONY : src/notebook.c.o
|
||||||
|
|
||||||
|
src/notebook.i: src/notebook.c.i
|
||||||
|
.PHONY : src/notebook.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/notebook.c.i:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/notebook.c.i
|
||||||
|
.PHONY : src/notebook.c.i
|
||||||
|
|
||||||
|
src/notebook.s: src/notebook.c.s
|
||||||
|
.PHONY : src/notebook.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/notebook.c.s:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/notebook.c.s
|
||||||
|
.PHONY : src/notebook.c.s
|
||||||
|
|
||||||
|
# Help Target
|
||||||
|
help:
|
||||||
|
@echo "The following are some of the valid targets for this Makefile:"
|
||||||
|
@echo "... all (the default if no target is provided)"
|
||||||
|
@echo "... clean"
|
||||||
|
@echo "... depend"
|
||||||
|
@echo "... edit_cache"
|
||||||
|
@echo "... install"
|
||||||
|
@echo "... install/local"
|
||||||
|
@echo "... install/strip"
|
||||||
|
@echo "... list_install_components"
|
||||||
|
@echo "... rebuild_cache"
|
||||||
|
@echo "... scratch"
|
||||||
|
@echo "... src/entry.o"
|
||||||
|
@echo "... src/entry.i"
|
||||||
|
@echo "... src/entry.s"
|
||||||
|
@echo "... src/main_window.o"
|
||||||
|
@echo "... src/main_window.i"
|
||||||
|
@echo "... src/main_window.s"
|
||||||
|
@echo "... src/menu.o"
|
||||||
|
@echo "... src/menu.i"
|
||||||
|
@echo "... src/menu.s"
|
||||||
|
@echo "... src/notebook.o"
|
||||||
|
@echo "... src/notebook.i"
|
||||||
|
@echo "... src/notebook.s"
|
||||||
|
.PHONY : help
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Special targets to cleanup operation of make.
|
||||||
|
|
||||||
|
# Special rule to run CMake to check the build system integrity.
|
||||||
|
# No rule that depends on this can have commands that come from listfiles
|
||||||
|
# because they might be regenerated.
|
||||||
|
cmake_check_build_system:
|
||||||
|
$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
|
||||||
|
.PHONY : cmake_check_build_system
|
||||||
|
|
10
cmake/README
Normal file
10
cmake/README
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
Elementary CMake modules
|
||||||
|
|
||||||
|
This is a set of CMake modules: Translations, GSettings, and Vala modules.
|
||||||
|
|
||||||
|
For all the Vala related modules see README.Vala.rst:
|
||||||
|
- ParseArguments.cmake
|
||||||
|
- ValaPrecompile.cmake
|
||||||
|
- ValaVersion.cmake
|
||||||
|
- FindVala.cmake
|
||||||
|
|
173
cmake/README.Vala.rst
Normal file
173
cmake/README.Vala.rst
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
==========
|
||||||
|
Vala CMake
|
||||||
|
==========
|
||||||
|
:Author:
|
||||||
|
Jakob Westhoff
|
||||||
|
:Version:
|
||||||
|
Draft
|
||||||
|
|
||||||
|
|
||||||
|
Overview
|
||||||
|
========
|
||||||
|
|
||||||
|
Vala CMake is a collection of macros for the CMake_ build system to allow the
|
||||||
|
creation and management of projects developed using the Vala_ programming
|
||||||
|
language or its "Genie" flavor (less tested).
|
||||||
|
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
To use the Vala macros in your own project you need to copy the macro files to
|
||||||
|
an arbitrary folder in your projects directory and reference them in your
|
||||||
|
``CMakeLists.txt`` file.
|
||||||
|
|
||||||
|
Assuming the macros are stored under ``cmake/vala`` in your projects folder you
|
||||||
|
need to add the following information to your base ``CMakeLists.txt``::
|
||||||
|
|
||||||
|
list(APPEND CMAKE_MODULE_PATH
|
||||||
|
${CMAKE_SOURCE_DIR}/cmake/vala
|
||||||
|
)
|
||||||
|
|
||||||
|
After the new module path as been added you can simply include the provided
|
||||||
|
modules or use the provided find routines.
|
||||||
|
|
||||||
|
|
||||||
|
Finding Vala
|
||||||
|
============
|
||||||
|
|
||||||
|
The find module for vala works like any other Find module in CMake.
|
||||||
|
You can use it by simply calling the usual ``find_package`` function. Default
|
||||||
|
parameters like ``REQUIRED`` and ``QUIETLY`` are supported.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
find_package(Vala REQUIRED)
|
||||||
|
|
||||||
|
After a successful call to the find_package function the following variables
|
||||||
|
will be set:
|
||||||
|
|
||||||
|
VALA_FOUND
|
||||||
|
Whether the vala compiler has been found or not
|
||||||
|
|
||||||
|
VALA_EXECUTABLE
|
||||||
|
Full path to the valac executable if it has been found
|
||||||
|
|
||||||
|
VALA_VERSION
|
||||||
|
Version number of the available valac
|
||||||
|
|
||||||
|
|
||||||
|
Precompiling Vala sources
|
||||||
|
=========================
|
||||||
|
|
||||||
|
CMake is mainly supposed to handle c or c++ based projects. Luckily every vala
|
||||||
|
program is translated into plain c code using the vala compiler, followed by
|
||||||
|
normal compilation of the generated c program using gcc.
|
||||||
|
|
||||||
|
The macro ``vala_precompile`` uses that fact to create c files from your .vala
|
||||||
|
sources for further CMake processing.
|
||||||
|
|
||||||
|
The first parameter provided is a variable, which will be filled with a list of
|
||||||
|
c files outputted by the vala compiler. This list can than be used in
|
||||||
|
conjunction with functions like ``add_executable`` or others to create the
|
||||||
|
necessary compile rules with CMake.
|
||||||
|
|
||||||
|
The initial variable is followed by a list of .vala files to be compiled.
|
||||||
|
Please take care to add every vala file belonging to the currently compiled
|
||||||
|
project or library as Vala will otherwise not be able to resolve all
|
||||||
|
dependencies.
|
||||||
|
|
||||||
|
The following sections may be specified afterwards to provide certain options
|
||||||
|
to the vala compiler:
|
||||||
|
|
||||||
|
PACKAGES
|
||||||
|
A list of vala packages/libraries to be used during the compile cycle. The
|
||||||
|
package names are exactly the same, as they would be passed to the valac
|
||||||
|
"--pkg=" option.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
A list of optional options to be passed to the valac executable. This can be
|
||||||
|
used to pass "--thread" for example to enable multi-threading support.
|
||||||
|
|
||||||
|
DIRECTORY
|
||||||
|
Specify the directory where the output source files will be stored. If
|
||||||
|
ommitted, the source files will be stored in CMAKE_CURRENT_BINARY_DIR.
|
||||||
|
|
||||||
|
CUSTOM_VAPIS
|
||||||
|
A list of custom vapi files to be included for compilation. This can be
|
||||||
|
useful to include freshly created vala libraries without having to install
|
||||||
|
them in the system.
|
||||||
|
|
||||||
|
GENERATE_VAPI
|
||||||
|
Pass all the needed flags to the compiler to create an internal vapi for
|
||||||
|
the compiled library. The provided name will be used for this and a
|
||||||
|
<provided_name>.vapi file will be created.
|
||||||
|
|
||||||
|
GENERATE_HEADER
|
||||||
|
Let the compiler generate a header file for the compiled code. There will
|
||||||
|
be a header file as well as an internal header file being generated called
|
||||||
|
<provided_name>.h and <provided_name>_internal.h
|
||||||
|
|
||||||
|
The following call is a simple example to the vala_precompile macro showing an
|
||||||
|
example to every of the optional sections::
|
||||||
|
|
||||||
|
vala_precompile(VALA_C
|
||||||
|
source1.vala
|
||||||
|
source2.vala
|
||||||
|
source3.vala
|
||||||
|
PACKAGES
|
||||||
|
gtk+-2.0
|
||||||
|
gio-1.0
|
||||||
|
posix
|
||||||
|
OPTIONS
|
||||||
|
--thread
|
||||||
|
CUSTOM_VAPIS
|
||||||
|
some_vapi.vapi
|
||||||
|
GENERATE_VAPI
|
||||||
|
myvapi
|
||||||
|
GENERATE_HEADER
|
||||||
|
myheader
|
||||||
|
)
|
||||||
|
|
||||||
|
Most important is the variable VALA_C which will contain all the generated c
|
||||||
|
file names after the call. The easiest way to use this information is to tell
|
||||||
|
CMake to create an executable out of it.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
add_executable(myexecutable ${VALA_C})
|
||||||
|
|
||||||
|
|
||||||
|
Further reading
|
||||||
|
===============
|
||||||
|
|
||||||
|
The `Pdf Presenter Console`__ , which is a vala based project of mine, makes
|
||||||
|
heavy usage of the here described macros. To look at a real world example of
|
||||||
|
these macros the mentioned project is the right place to take a look. The svn
|
||||||
|
trunk of it can be found at::
|
||||||
|
|
||||||
|
svn://pureenergy.cc/pdf_presenter_console/trunk
|
||||||
|
|
||||||
|
|
||||||
|
__ http://westhoffswelt.de/projects/pdf_presenter_console.html
|
||||||
|
|
||||||
|
|
||||||
|
Acknowledgments
|
||||||
|
===============
|
||||||
|
|
||||||
|
Thanks go out to Florian Sowade, a fellow local PHP-Usergroupie, who helped me
|
||||||
|
a lot with the initial version of this macros and always answered my mostly
|
||||||
|
dumb CMake questions.
|
||||||
|
|
||||||
|
.. _CMake: http://cmake.org
|
||||||
|
.. _Vala: http://live.gnome.org/Vala
|
||||||
|
.. _Genie: http://live.gnome.org/Genie
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
..
|
||||||
|
Local Variables:
|
||||||
|
mode: rst
|
||||||
|
fill-column: 79
|
||||||
|
End:
|
||||||
|
vim: et syn=rst tw=79
|
41
cmake/Translations.cmake
Normal file
41
cmake/Translations.cmake
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
# Translations.cmake, CMake macros written for Marlin, feel free to re-use them
|
||||||
|
|
||||||
|
macro(add_translations_directory NLS_PACKAGE)
|
||||||
|
add_custom_target (i18n ALL COMMENT “Building i18n messages.”)
|
||||||
|
find_program (MSGFMT_EXECUTABLE msgfmt)
|
||||||
|
file (GLOB PO_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.po)
|
||||||
|
foreach (PO_INPUT ${PO_FILES})
|
||||||
|
get_filename_component (PO_INPUT_BASE ${PO_INPUT} NAME_WE)
|
||||||
|
set (MO_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PO_INPUT_BASE}.mo)
|
||||||
|
add_custom_command (TARGET i18n COMMAND ${MSGFMT_EXECUTABLE} -o ${MO_OUTPUT} ${PO_INPUT})
|
||||||
|
|
||||||
|
install (FILES ${MO_OUTPUT} DESTINATION
|
||||||
|
share/locale/${PO_INPUT_BASE}/LC_MESSAGES
|
||||||
|
RENAME ${NLS_PACKAGE}.mo)
|
||||||
|
endforeach (PO_INPUT ${PO_FILES})
|
||||||
|
endmacro(add_translations_directory)
|
||||||
|
|
||||||
|
|
||||||
|
macro(add_translations_catalog NLS_PACKAGE)
|
||||||
|
add_custom_target (pot COMMENT “Building translation catalog.”)
|
||||||
|
find_program (XGETTEXT_EXECUTABLE xgettext)
|
||||||
|
|
||||||
|
|
||||||
|
set(C_SOURCE "")
|
||||||
|
|
||||||
|
foreach(FILES_INPUT ${ARGN})
|
||||||
|
file (GLOB SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/${FILES_INPUT}/*.c)
|
||||||
|
foreach(C_FILE ${SOURCE_FILES})
|
||||||
|
set(C_SOURCE ${C_SOURCE} ${C_FILE})
|
||||||
|
endforeach()
|
||||||
|
file (GLOB SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/${FILES_INPUT}/*.vala)
|
||||||
|
foreach(C_FILE ${SOURCE_FILES})
|
||||||
|
set(C_SOURCE ${C_SOURCE} ${C_FILE})
|
||||||
|
endforeach()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
add_custom_command (TARGET pot COMMAND
|
||||||
|
${XGETTEXT_EXECUTABLE} -d ${NLS_PACKAGE} -o ${CMAKE_CURRENT_SOURCE_DIR}/${NLS_PACKAGE}.pot
|
||||||
|
${VALA_SOURCE} ${C_SOURCE} --keyword="_" --from-code=UTF-8
|
||||||
|
)
|
||||||
|
endmacro()
|
21
cmake/uninstall.cmake
Normal file
21
cmake/uninstall.cmake
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
||||||
|
message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
|
||||||
|
string(REGEX REPLACE "\n" ";" files "${files}")
|
||||||
|
foreach(file ${files})
|
||||||
|
message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
|
||||||
|
if(EXISTS "$ENV{DESTDIR}${file}")
|
||||||
|
exec_program(
|
||||||
|
"@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
|
||||||
|
OUTPUT_VARIABLE rm_out
|
||||||
|
RETURN_VALUE rm_retval
|
||||||
|
)
|
||||||
|
if(NOT "${rm_retval}" STREQUAL 0)
|
||||||
|
message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
|
||||||
|
endif()
|
||||||
|
else(EXISTS "$ENV{DESTDIR}${file}")
|
||||||
|
message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
65
cmake/vala/FindVala.cmake
Normal file
65
cmake/vala/FindVala.cmake
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
##
|
||||||
|
# Copyright 2009-2010 Jakob Westhoff. All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
#
|
||||||
|
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer in the documentation
|
||||||
|
# and/or other materials provided with the distribution.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY JAKOB WESTHOFF ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||||
|
# EVENT SHALL JAKOB WESTHOFF OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
#
|
||||||
|
# The views and conclusions contained in the software and documentation are those
|
||||||
|
# of the authors and should not be interpreted as representing official policies,
|
||||||
|
# either expressed or implied, of Jakob Westhoff
|
||||||
|
##
|
||||||
|
|
||||||
|
##
|
||||||
|
# Find module for the Vala compiler (valac)
|
||||||
|
#
|
||||||
|
# This module determines wheter a Vala compiler is installed on the current
|
||||||
|
# system and where its executable is.
|
||||||
|
#
|
||||||
|
# Call the module using "find_package(Vala) from within your CMakeLists.txt.
|
||||||
|
#
|
||||||
|
# The following variables will be set after an invocation:
|
||||||
|
#
|
||||||
|
# VALA_FOUND Whether the vala compiler has been found or not
|
||||||
|
# VALA_EXECUTABLE Full path to the valac executable if it has been found
|
||||||
|
# VALA_VERSION Version number of the available valac
|
||||||
|
##
|
||||||
|
|
||||||
|
|
||||||
|
# Search for the valac executable in the usual system paths.
|
||||||
|
find_program(VALA_EXECUTABLE
|
||||||
|
NAMES valac)
|
||||||
|
|
||||||
|
# Handle the QUIETLY and REQUIRED arguments, which may be given to the find call.
|
||||||
|
# Furthermore set VALA_FOUND to TRUE if Vala has been found (aka.
|
||||||
|
# VALA_EXECUTABLE is set)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(Vala DEFAULT_MSG VALA_EXECUTABLE)
|
||||||
|
|
||||||
|
mark_as_advanced(VALA_EXECUTABLE)
|
||||||
|
|
||||||
|
# Determine the valac version
|
||||||
|
if(VALA_FOUND)
|
||||||
|
execute_process(COMMAND ${VALA_EXECUTABLE} "--version"
|
||||||
|
OUTPUT_VARIABLE "VALA_VERSION")
|
||||||
|
string(REPLACE "Vala" "" "VALA_VERSION" ${VALA_VERSION})
|
||||||
|
string(STRIP ${VALA_VERSION} "VALA_VERSION")
|
||||||
|
endif(VALA_FOUND)
|
36
cmake/vala/ParseArguments.cmake
Normal file
36
cmake/vala/ParseArguments.cmake
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
##
|
||||||
|
# This is a helper Macro to parse optional arguments in Macros/Functions
|
||||||
|
# It has been taken from the public CMake wiki.
|
||||||
|
# See http://www.cmake.org/Wiki/CMakeMacroParseArguments for documentation and
|
||||||
|
# licensing.
|
||||||
|
##
|
||||||
|
macro(parse_arguments prefix arg_names option_names)
|
||||||
|
set(DEFAULT_ARGS)
|
||||||
|
foreach(arg_name ${arg_names})
|
||||||
|
set(${prefix}_${arg_name})
|
||||||
|
endforeach(arg_name)
|
||||||
|
foreach(option ${option_names})
|
||||||
|
set(${prefix}_${option} FALSE)
|
||||||
|
endforeach(option)
|
||||||
|
|
||||||
|
set(current_arg_name DEFAULT_ARGS)
|
||||||
|
set(current_arg_list)
|
||||||
|
foreach(arg ${ARGN})
|
||||||
|
set(larg_names ${arg_names})
|
||||||
|
list(FIND larg_names "${arg}" is_arg_name)
|
||||||
|
if(is_arg_name GREATER -1)
|
||||||
|
set(${prefix}_${current_arg_name} ${current_arg_list})
|
||||||
|
set(current_arg_name ${arg})
|
||||||
|
set(current_arg_list)
|
||||||
|
else(is_arg_name GREATER -1)
|
||||||
|
set(loption_names ${option_names})
|
||||||
|
list(FIND loption_names "${arg}" is_option)
|
||||||
|
if(is_option GREATER -1)
|
||||||
|
set(${prefix}_${arg} TRUE)
|
||||||
|
else(is_option GREATER -1)
|
||||||
|
set(current_arg_list ${current_arg_list} ${arg})
|
||||||
|
endif(is_option GREATER -1)
|
||||||
|
endif(is_arg_name GREATER -1)
|
||||||
|
endforeach(arg)
|
||||||
|
set(${prefix}_${current_arg_name} ${current_arg_list})
|
||||||
|
endmacro(parse_arguments)
|
175
cmake/vala/ValaPrecompile.cmake
Normal file
175
cmake/vala/ValaPrecompile.cmake
Normal file
|
@ -0,0 +1,175 @@
|
||||||
|
##
|
||||||
|
# Copyright 2009-2010 Jakob Westhoff. All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
#
|
||||||
|
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer in the documentation
|
||||||
|
# and/or other materials provided with the distribution.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY JAKOB WESTHOFF ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||||
|
# EVENT SHALL JAKOB WESTHOFF OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
#
|
||||||
|
# The views and conclusions contained in the software and documentation are those
|
||||||
|
# of the authors and should not be interpreted as representing official policies,
|
||||||
|
# either expressed or implied, of Jakob Westhoff
|
||||||
|
##
|
||||||
|
|
||||||
|
include(ParseArguments)
|
||||||
|
find_package(Vala REQUIRED)
|
||||||
|
|
||||||
|
##
|
||||||
|
# Compile vala files to their c equivalents for further processing.
|
||||||
|
#
|
||||||
|
# The "vala_precompile" macro takes care of calling the valac executable on the
|
||||||
|
# given source to produce c files which can then be processed further using
|
||||||
|
# default cmake functions.
|
||||||
|
#
|
||||||
|
# The first parameter provided is a variable, which will be filled with a list
|
||||||
|
# of c files outputted by the vala compiler. This list can than be used in
|
||||||
|
# conjuction with functions like "add_executable" or others to create the
|
||||||
|
# neccessary compile rules with CMake.
|
||||||
|
#
|
||||||
|
# The initial variable is followed by a list of .vala files to be compiled.
|
||||||
|
# Please take care to add every vala file belonging to the currently compiled
|
||||||
|
# project or library as Vala will otherwise not be able to resolve all
|
||||||
|
# dependencies.
|
||||||
|
#
|
||||||
|
# The following sections may be specified afterwards to provide certain options
|
||||||
|
# to the vala compiler:
|
||||||
|
#
|
||||||
|
# PACKAGES
|
||||||
|
# A list of vala packages/libraries to be used during the compile cycle. The
|
||||||
|
# package names are exactly the same, as they would be passed to the valac
|
||||||
|
# "--pkg=" option.
|
||||||
|
#
|
||||||
|
# OPTIONS
|
||||||
|
# A list of optional options to be passed to the valac executable. This can be
|
||||||
|
# used to pass "--thread" for example to enable multi-threading support.
|
||||||
|
#
|
||||||
|
# CUSTOM_VAPIS
|
||||||
|
# A list of custom vapi files to be included for compilation. This can be
|
||||||
|
# useful to include freshly created vala libraries without having to install
|
||||||
|
# them in the system.
|
||||||
|
#
|
||||||
|
# GENERATE_VAPI
|
||||||
|
# Pass all the needed flags to the compiler to create an internal vapi for
|
||||||
|
# the compiled library. The provided name will be used for this and a
|
||||||
|
# <provided_name>.vapi file will be created.
|
||||||
|
#
|
||||||
|
# GENERATE_HEADER
|
||||||
|
# Let the compiler generate a header file for the compiled code. There will
|
||||||
|
# be a header file as well as an internal header file being generated called
|
||||||
|
# <provided_name>.h and <provided_name>_internal.h
|
||||||
|
#
|
||||||
|
# The following call is a simple example to the vala_precompile macro showing
|
||||||
|
# an example to every of the optional sections:
|
||||||
|
#
|
||||||
|
# vala_precompile(VALA_C
|
||||||
|
# source1.vala
|
||||||
|
# source2.vala
|
||||||
|
# source3.vala
|
||||||
|
# PACKAGES
|
||||||
|
# gtk+-2.0
|
||||||
|
# gio-1.0
|
||||||
|
# posix
|
||||||
|
# DIRECTORY
|
||||||
|
# gen
|
||||||
|
# OPTIONS
|
||||||
|
# --thread
|
||||||
|
# CUSTOM_VAPIS
|
||||||
|
# some_vapi.vapi
|
||||||
|
# GENERATE_VAPI
|
||||||
|
# myvapi
|
||||||
|
# GENERATE_HEADER
|
||||||
|
# myheader
|
||||||
|
# )
|
||||||
|
#
|
||||||
|
# Most important is the variable VALA_C which will contain all the generated c
|
||||||
|
# file names after the call.
|
||||||
|
##
|
||||||
|
|
||||||
|
macro(vala_precompile output)
|
||||||
|
parse_arguments(ARGS "PACKAGES;OPTIONS;DIRECTORY;GENERATE_HEADER;GENERATE_VAPI;CUSTOM_VAPIS" "" ${ARGN})
|
||||||
|
if(ARGS_DIRECTORY)
|
||||||
|
set(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${ARGS_DIRECTORY})
|
||||||
|
else(ARGS_DIRECTORY)
|
||||||
|
set(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
endif(ARGS_DIRECTORY)
|
||||||
|
include_directories(${DIRECTORY})
|
||||||
|
set(vala_pkg_opts "")
|
||||||
|
foreach(pkg ${ARGS_PACKAGES})
|
||||||
|
list(APPEND vala_pkg_opts "--pkg=${pkg}")
|
||||||
|
endforeach(pkg ${ARGS_PACKAGES})
|
||||||
|
set(in_files "")
|
||||||
|
set(out_files "")
|
||||||
|
set(${output} "")
|
||||||
|
foreach(src ${ARGS_DEFAULT_ARGS})
|
||||||
|
list(APPEND in_files "${CMAKE_CURRENT_SOURCE_DIR}/${src}")
|
||||||
|
string(REPLACE ".vala" ".c" src ${src})
|
||||||
|
string(REPLACE ".gs" ".c" src ${src})
|
||||||
|
set(out_file "${DIRECTORY}/${src}")
|
||||||
|
list(APPEND out_files "${DIRECTORY}/${src}")
|
||||||
|
list(APPEND ${output} ${out_file})
|
||||||
|
endforeach(src ${ARGS_DEFAULT_ARGS})
|
||||||
|
|
||||||
|
set(custom_vapi_arguments "")
|
||||||
|
if(ARGS_CUSTOM_VAPIS)
|
||||||
|
foreach(vapi ${ARGS_CUSTOM_VAPIS})
|
||||||
|
if(${vapi} MATCHES ${CMAKE_SOURCE_DIR} OR ${vapi} MATCHES ${CMAKE_BINARY_DIR})
|
||||||
|
list(APPEND custom_vapi_arguments ${vapi})
|
||||||
|
else (${vapi} MATCHES ${CMAKE_SOURCE_DIR} OR ${vapi} MATCHES ${CMAKE_BINARY_DIR})
|
||||||
|
list(APPEND custom_vapi_arguments ${CMAKE_CURRENT_SOURCE_DIR}/${vapi})
|
||||||
|
endif(${vapi} MATCHES ${CMAKE_SOURCE_DIR} OR ${vapi} MATCHES ${CMAKE_BINARY_DIR})
|
||||||
|
endforeach(vapi ${ARGS_CUSTOM_VAPIS})
|
||||||
|
endif(ARGS_CUSTOM_VAPIS)
|
||||||
|
|
||||||
|
set(vapi_arguments "")
|
||||||
|
if(ARGS_GENERATE_VAPI)
|
||||||
|
list(APPEND out_files "${DIRECTORY}/${ARGS_GENERATE_VAPI}.vapi")
|
||||||
|
set(vapi_arguments "--internal-vapi=${ARGS_GENERATE_VAPI}.vapi")
|
||||||
|
|
||||||
|
# Header and internal header is needed to generate internal vapi
|
||||||
|
if (NOT ARGS_GENERATE_HEADER)
|
||||||
|
set(ARGS_GENERATE_HEADER ${ARGS_GENERATE_VAPI})
|
||||||
|
endif(NOT ARGS_GENERATE_HEADER)
|
||||||
|
endif(ARGS_GENERATE_VAPI)
|
||||||
|
|
||||||
|
set(header_arguments "")
|
||||||
|
if(ARGS_GENERATE_HEADER)
|
||||||
|
list(APPEND out_files "${DIRECTORY}/${ARGS_GENERATE_HEADER}.h")
|
||||||
|
list(APPEND out_files "${DIRECTORY}/${ARGS_GENERATE_HEADER}_internal.h")
|
||||||
|
list(APPEND header_arguments "--header=${DIRECTORY}/${ARGS_GENERATE_HEADER}.h")
|
||||||
|
list(APPEND header_arguments "--internal-header=${DIRECTORY}/${ARGS_GENERATE_HEADER}_internal.h")
|
||||||
|
endif(ARGS_GENERATE_HEADER)
|
||||||
|
|
||||||
|
add_custom_command(OUTPUT ${out_files}
|
||||||
|
COMMAND
|
||||||
|
${VALA_EXECUTABLE}
|
||||||
|
ARGS
|
||||||
|
"-C"
|
||||||
|
${header_arguments}
|
||||||
|
${vapi_arguments}
|
||||||
|
"-b" ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
"-d" ${DIRECTORY}
|
||||||
|
${vala_pkg_opts}
|
||||||
|
${ARGS_OPTIONS}
|
||||||
|
${in_files}
|
||||||
|
${custom_vapi_arguments}
|
||||||
|
DEPENDS
|
||||||
|
${in_files}
|
||||||
|
${ARGS_CUSTOM_VAPIS}
|
||||||
|
)
|
||||||
|
endmacro(vala_precompile)
|
96
cmake/vala/ValaVersion.cmake
Normal file
96
cmake/vala/ValaVersion.cmake
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
##
|
||||||
|
# Copyright 2009-2010 Jakob Westhoff. All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
#
|
||||||
|
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer in the documentation
|
||||||
|
# and/or other materials provided with the distribution.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY JAKOB WESTHOFF ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||||
|
# EVENT SHALL JAKOB WESTHOFF OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
#
|
||||||
|
# The views and conclusions contained in the software and documentation are those
|
||||||
|
# of the authors and should not be interpreted as representing official policies,
|
||||||
|
# either expressed or implied, of Jakob Westhoff
|
||||||
|
##
|
||||||
|
|
||||||
|
include(ParseArguments)
|
||||||
|
find_package(Vala REQUIRED)
|
||||||
|
|
||||||
|
##
|
||||||
|
# Ensure a certain valac version is available
|
||||||
|
#
|
||||||
|
# The initial argument is the version to check for
|
||||||
|
#
|
||||||
|
# It may be followed by a optional parameter to specifiy a version range. The
|
||||||
|
# following options are valid:
|
||||||
|
#
|
||||||
|
# EXACT
|
||||||
|
# Vala needs to be available in the exact version given
|
||||||
|
#
|
||||||
|
# MINIMUM
|
||||||
|
# The provided version is the minimum version. Therefore Vala needs to be
|
||||||
|
# available in the given version or any higher version
|
||||||
|
#
|
||||||
|
# MAXIMUM
|
||||||
|
# The provided version is the maximum. Therefore Vala needs to be available
|
||||||
|
# in the given version or any version older than this
|
||||||
|
#
|
||||||
|
# If no option is specified the version will be treated as a minimal version.
|
||||||
|
##
|
||||||
|
macro(ensure_vala_version version)
|
||||||
|
parse_arguments(ARGS "" "MINIMUM;MAXIMUM;EXACT" ${ARGN})
|
||||||
|
set(compare_message "")
|
||||||
|
set(error_message "")
|
||||||
|
if(ARGS_MINIMUM)
|
||||||
|
set(compare_message "a minimum ")
|
||||||
|
set(error_message "or greater ")
|
||||||
|
elseif(ARGS_MAXIMUM)
|
||||||
|
set(compare_message "a maximum ")
|
||||||
|
set(error_message "or less ")
|
||||||
|
endif(ARGS_MINIMUM)
|
||||||
|
|
||||||
|
message(STATUS
|
||||||
|
"checking for ${compare_message}Vala version of ${version}"
|
||||||
|
)
|
||||||
|
|
||||||
|
unset(version_accepted)
|
||||||
|
|
||||||
|
# MINIMUM is the default if no option is specified
|
||||||
|
if(ARGS_EXACT)
|
||||||
|
if(${VALA_VERSION} VERSION_EQUAL ${version} )
|
||||||
|
set(version_accepted TRUE)
|
||||||
|
endif(${VALA_VERSION} VERSION_EQUAL ${version})
|
||||||
|
elseif(ARGS_MAXIMUM)
|
||||||
|
if(${VALA_VERSION} VERSION_LESS ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version})
|
||||||
|
set(version_accepted TRUE)
|
||||||
|
endif(${VALA_VERSION} VERSION_LESS ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version})
|
||||||
|
else(ARGS_MAXIMUM)
|
||||||
|
if(${VALA_VERSION} VERSION_GREATER ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version})
|
||||||
|
set(version_accepted TRUE)
|
||||||
|
endif(${VALA_VERSION} VERSION_GREATER ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version})
|
||||||
|
endif(ARGS_EXACT)
|
||||||
|
|
||||||
|
if (NOT version_accepted)
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"Vala version ${version} ${error_message}is required."
|
||||||
|
)
|
||||||
|
endif(NOT version_accepted)
|
||||||
|
|
||||||
|
message(STATUS
|
||||||
|
" found Vala, version ${VALA_VERSION}"
|
||||||
|
)
|
||||||
|
endmacro(ensure_vala_version)
|
11
config.h.cmake
Normal file
11
config.h.cmake
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
|
||||||
|
#cmakedefine DATADIR "@DATADIR@"
|
||||||
|
#cmakedefine PKGDATADIR "@PKGDATADIR@"
|
||||||
|
#cmakedefine GETTEXT_PACKAGE "@GETTEXT_PACKAGE@"
|
||||||
|
#cmakedefine RELEASE_NAME "@RELEASE_NAME@"
|
||||||
|
#cmakedefine VERSION "@VERSION@"
|
||||||
|
#cmakedefine VERSION_INFO "@VERSION_INFO@"
|
||||||
|
|
||||||
|
#endif // CONFIG_H
|
759
data/icons/webby.svg
Normal file
759
data/icons/webby.svg
Normal file
|
@ -0,0 +1,759 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
version="1.1"
|
||||||
|
width="128"
|
||||||
|
height="128"
|
||||||
|
id="svg3049"
|
||||||
|
inkscape:version="0.48.4 r9939"
|
||||||
|
sodipodi:docname="webby.svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1366"
|
||||||
|
inkscape:window-height="713"
|
||||||
|
id="namedview51"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="2.8284271"
|
||||||
|
inkscape:cx="73.655329"
|
||||||
|
inkscape:cy="86.427124"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="30"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg3049">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid3942"
|
||||||
|
empspacing="5"
|
||||||
|
visible="true"
|
||||||
|
enabled="true"
|
||||||
|
snapvisiblegridlinesonly="true" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs3051">
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4040">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#ff7a35;stop-opacity:1"
|
||||||
|
id="stop4042" />
|
||||||
|
<stop
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#f0431a;stop-opacity:1"
|
||||||
|
id="stop4044" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="167.98311"
|
||||||
|
y1="8.50811"
|
||||||
|
x2="167.98311"
|
||||||
|
y2="54.780239"
|
||||||
|
id="linearGradient5228"
|
||||||
|
xlink:href="#linearGradient5803"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.832495,0,0,1.8439152,-232.17581,-55.441403)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient5803">
|
||||||
|
<stop
|
||||||
|
id="stop5805"
|
||||||
|
style="stop-color:#fff5ef;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop5807"
|
||||||
|
style="stop-color:#fef8dd;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="23.99999"
|
||||||
|
y1="4.999989"
|
||||||
|
x2="23.99999"
|
||||||
|
y2="43"
|
||||||
|
id="linearGradient4136"
|
||||||
|
xlink:href="#linearGradient3924"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(2.7297298,0,0,2.7297298,-1.5135175,-62.511681)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3924">
|
||||||
|
<stop
|
||||||
|
id="stop3926"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3928"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0.23529412"
|
||||||
|
offset="0.06316455" />
|
||||||
|
<stop
|
||||||
|
id="stop3930"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0.15686275"
|
||||||
|
offset="0.95056331" />
|
||||||
|
<stop
|
||||||
|
id="stop3932"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0.39215687"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
cx="6.7304144"
|
||||||
|
cy="9.9571075"
|
||||||
|
r="12.671875"
|
||||||
|
fx="6.2001843"
|
||||||
|
fy="9.9571075"
|
||||||
|
id="radialGradient5264-4"
|
||||||
|
xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0,25.083279,-30.794253,0,372.81656,-272.08999)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8">
|
||||||
|
<stop
|
||||||
|
id="stop3750-1-0-7-6-6-1-3-9"
|
||||||
|
style="stop-color:#ffcd7d;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3752-3-7-4-0-32-8-923-0"
|
||||||
|
style="stop-color:#fc8f36;stop-opacity:1"
|
||||||
|
offset="0.26238" />
|
||||||
|
<stop
|
||||||
|
id="stop3754-1-8-5-2-7-6-7-1"
|
||||||
|
style="stop-color:#e23a0e;stop-opacity:1"
|
||||||
|
offset="0.704952" />
|
||||||
|
<stop
|
||||||
|
id="stop3756-1-6-2-6-6-1-96-6"
|
||||||
|
style="stop-color:#ac441f;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
cx="4.9929786"
|
||||||
|
cy="43.5"
|
||||||
|
r="2.5"
|
||||||
|
fx="4.9929786"
|
||||||
|
fy="43.5"
|
||||||
|
id="radialGradient4093"
|
||||||
|
xlink:href="#linearGradient3688-166-749-5"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3688-166-749-5">
|
||||||
|
<stop
|
||||||
|
id="stop2883-0"
|
||||||
|
style="stop-color:#181818;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop2885-5"
|
||||||
|
style="stop-color:#181818;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
cx="4.9929786"
|
||||||
|
cy="43.5"
|
||||||
|
r="2.5"
|
||||||
|
fx="4.9929786"
|
||||||
|
fy="43.5"
|
||||||
|
id="radialGradient4095"
|
||||||
|
xlink:href="#linearGradient3688-464-309-8"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3688-464-309-8">
|
||||||
|
<stop
|
||||||
|
id="stop2889-9"
|
||||||
|
style="stop-color:#181818;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop2891-4"
|
||||||
|
style="stop-color:#181818;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="25.058096"
|
||||||
|
y1="47.027729"
|
||||||
|
x2="25.058096"
|
||||||
|
y2="39.999443"
|
||||||
|
id="linearGradient4097"
|
||||||
|
xlink:href="#linearGradient3702-501-757-0"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3702-501-757-0">
|
||||||
|
<stop
|
||||||
|
id="stop2895-0"
|
||||||
|
style="stop-color:#181818;stop-opacity:0"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop2897-2"
|
||||||
|
style="stop-color:#181818;stop-opacity:1"
|
||||||
|
offset="0.5" />
|
||||||
|
<stop
|
||||||
|
id="stop2899-6"
|
||||||
|
style="stop-color:#181818;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3811">
|
||||||
|
<stop
|
||||||
|
id="stop3813"
|
||||||
|
style="stop-color:#000000;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3815"
|
||||||
|
style="stop-color:#000000;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
cx="-4.0287771"
|
||||||
|
cy="93.467628"
|
||||||
|
r="35.338131"
|
||||||
|
fx="-4.0287771"
|
||||||
|
fy="93.467628"
|
||||||
|
id="radialGradient6276"
|
||||||
|
xlink:href="#linearGradient3811"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.5563924,0,0,0.16978827,70.270355,38.132099)" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3811"
|
||||||
|
id="radialGradient3944"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.5563924,0,0,0.16978827,70.270355,38.132099)"
|
||||||
|
cx="-4.0287771"
|
||||||
|
cy="93.467628"
|
||||||
|
fx="-4.0287771"
|
||||||
|
fy="93.467628"
|
||||||
|
r="35.338131" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3688-166-749-5"
|
||||||
|
id="radialGradient3946"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)"
|
||||||
|
cx="4.9929786"
|
||||||
|
cy="43.5"
|
||||||
|
fx="4.9929786"
|
||||||
|
fy="43.5"
|
||||||
|
r="2.5" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3688-464-309-8"
|
||||||
|
id="radialGradient3948"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)"
|
||||||
|
cx="4.9929786"
|
||||||
|
cy="43.5"
|
||||||
|
fx="4.9929786"
|
||||||
|
fy="43.5"
|
||||||
|
r="2.5" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3702-501-757-0"
|
||||||
|
id="linearGradient3950"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="25.058096"
|
||||||
|
y1="47.027729"
|
||||||
|
x2="25.058096"
|
||||||
|
y2="39.999443" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-8-3-3-6-4-8-8-8"
|
||||||
|
id="radialGradient3952"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0,25.083279,-30.794253,0,372.81656,-272.08999)"
|
||||||
|
cx="6.7304144"
|
||||||
|
cy="9.9571075"
|
||||||
|
fx="6.2001843"
|
||||||
|
fy="9.9571075"
|
||||||
|
r="12.671875" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3924"
|
||||||
|
id="linearGradient3954"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(2.7297298,0,0,2.7297298,-1.5135175,-62.511681)"
|
||||||
|
x1="23.99999"
|
||||||
|
y1="4.999989"
|
||||||
|
x2="23.99999"
|
||||||
|
y2="43" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient5803"
|
||||||
|
id="linearGradient3956"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.832495,0,0,1.8439152,-232.17581,-55.441403)"
|
||||||
|
x1="167.98311"
|
||||||
|
y1="8.50811"
|
||||||
|
x2="167.98311"
|
||||||
|
y2="54.780239" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient5803"
|
||||||
|
id="linearGradient3959"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.832495,0,0,1.8439152,-232.17581,8.558597)"
|
||||||
|
x1="167.98311"
|
||||||
|
y1="8.50811"
|
||||||
|
x2="167.98311"
|
||||||
|
y2="54.780239" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3924"
|
||||||
|
id="linearGradient3965"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(2.7297298,0,0,2.7297298,-1.5135175,1.488319)"
|
||||||
|
x1="23.99999"
|
||||||
|
y1="4.999989"
|
||||||
|
x2="23.99999"
|
||||||
|
y2="43" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4040"
|
||||||
|
id="radialGradient3968"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0,25.083279,-30.794253,0,372.81656,-208.08999)"
|
||||||
|
cx="6.7304144"
|
||||||
|
cy="9.9571075"
|
||||||
|
fx="6.2001843"
|
||||||
|
fy="9.9571075"
|
||||||
|
r="12.671875" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3811"
|
||||||
|
id="radialGradient3976"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.5563924,0,0,0.16978827,70.270355,102.1321)"
|
||||||
|
cx="-4.0287771"
|
||||||
|
cy="93.467628"
|
||||||
|
fx="-4.0287771"
|
||||||
|
fy="93.467628"
|
||||||
|
r="35.338131" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3924-4-8"
|
||||||
|
id="linearGradient3007"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.2972973,0,0,0.2972973,-0.13513027,-0.1351298)"
|
||||||
|
x1="23.99999"
|
||||||
|
y1="4.999989"
|
||||||
|
x2="23.99999"
|
||||||
|
y2="43" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3924-4-8">
|
||||||
|
<stop
|
||||||
|
id="stop3926-0-4"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3928-6-8"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0.23529412"
|
||||||
|
offset="0.06316455" />
|
||||||
|
<stop
|
||||||
|
id="stop3930-2-1"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0.15686275"
|
||||||
|
offset="0.95056331" />
|
||||||
|
<stop
|
||||||
|
id="stop3932-9-0"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0.39215687"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4067-0-2"
|
||||||
|
id="radialGradient3879"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0,3.1658508,-3.8866533,0,45.97684,-27.720323)"
|
||||||
|
cx="6.7304144"
|
||||||
|
cy="9.9571075"
|
||||||
|
fx="6.2001843"
|
||||||
|
fy="9.9571075"
|
||||||
|
r="12.671875" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4067-0-2">
|
||||||
|
<stop
|
||||||
|
id="stop4069-2-9"
|
||||||
|
style="stop-color:#ffe452;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop4071-8-9"
|
||||||
|
style="stop-color:#ffeb41;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4644-104-3-3-6-2-0"
|
||||||
|
id="radialGradient3015"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0,3.1658508,-3.8866533,0,46.97684,-26.720326)"
|
||||||
|
cx="6.7304144"
|
||||||
|
cy="9.9571075"
|
||||||
|
fx="6.2001843"
|
||||||
|
fy="9.9571075"
|
||||||
|
r="12.671875" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4644-104-3-3-6-2-0">
|
||||||
|
<stop
|
||||||
|
id="stop5237-6-5-1-7-8"
|
||||||
|
style="stop-color:#ff7a35;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop5239-4-6-4-8-5"
|
||||||
|
style="stop-color:#f0431a;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
r="12.671875"
|
||||||
|
fy="9.9571075"
|
||||||
|
fx="6.2001843"
|
||||||
|
cy="9.9571075"
|
||||||
|
cx="6.7304144"
|
||||||
|
gradientTransform="matrix(0,3.1658508,-3.8866533,0,45.97684,-27.720323)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="radialGradient3100"
|
||||||
|
xlink:href="#linearGradient4644-104-3-3-6-2-0"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4644-104-3-3-6-2-0"
|
||||||
|
id="radialGradient4034"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0,3.1658508,-3.8866533,0,203.97684,62.279676)"
|
||||||
|
cx="6.7304144"
|
||||||
|
cy="9.9571075"
|
||||||
|
fx="6.2001843"
|
||||||
|
fy="9.9571075"
|
||||||
|
r="12.671875" />
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4067-0-2"
|
||||||
|
id="radialGradient4036"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0,3.1658508,-3.8866533,0,203.97684,62.279676)"
|
||||||
|
cx="6.7304144"
|
||||||
|
cy="9.9571075"
|
||||||
|
fx="6.2001843"
|
||||||
|
fy="9.9571075"
|
||||||
|
r="12.671875" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3924-4-8"
|
||||||
|
id="linearGradient4038"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.2972973,0,0,0.2972973,157.86487,89.864869)"
|
||||||
|
x1="23.99999"
|
||||||
|
y1="4.999989"
|
||||||
|
x2="23.99999"
|
||||||
|
y2="43" />
|
||||||
|
<radialGradient
|
||||||
|
cx="4.9929786"
|
||||||
|
cy="43.5"
|
||||||
|
r="2.5"
|
||||||
|
fx="4.9929786"
|
||||||
|
fy="43.5"
|
||||||
|
id="radialGradient3176"
|
||||||
|
xlink:href="#linearGradient3688-5"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3688-5">
|
||||||
|
<stop
|
||||||
|
id="stop3690-8"
|
||||||
|
style="stop-color:#000000;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3692-6"
|
||||||
|
style="stop-color:#000000;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
cx="4.9929786"
|
||||||
|
cy="43.5"
|
||||||
|
r="2.5"
|
||||||
|
fx="4.9929786"
|
||||||
|
fy="43.5"
|
||||||
|
id="radialGradient3178"
|
||||||
|
xlink:href="#linearGradient3688-5"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3037">
|
||||||
|
<stop
|
||||||
|
id="stop3039"
|
||||||
|
style="stop-color:#000000;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3041"
|
||||||
|
style="stop-color:#000000;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="25.058096"
|
||||||
|
y1="47.027729"
|
||||||
|
x2="25.058096"
|
||||||
|
y2="39.999443"
|
||||||
|
id="linearGradient3180"
|
||||||
|
xlink:href="#linearGradient3702-4-7"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3702-4-7">
|
||||||
|
<stop
|
||||||
|
id="stop3704-7-8"
|
||||||
|
style="stop-color:#000000;stop-opacity:0"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop3710-0-0"
|
||||||
|
style="stop-color:#000000;stop-opacity:1"
|
||||||
|
offset="0.5" />
|
||||||
|
<stop
|
||||||
|
id="stop3706-7-2"
|
||||||
|
style="stop-color:#000000;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
cx="676"
|
||||||
|
cy="-233.5"
|
||||||
|
r="29.5"
|
||||||
|
fx="680.40613"
|
||||||
|
fy="-249.59378"
|
||||||
|
id="radialGradient3169"
|
||||||
|
xlink:href="#linearGradient4747-3"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.81780319,1.9067797e-8,-1.5649504e-8,0.65951858,-536.83494,170.99757)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4747-3">
|
||||||
|
<stop
|
||||||
|
id="stop4749-7"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop9072-8"
|
||||||
|
style="stop-color:#f7f7f7;stop-opacity:1"
|
||||||
|
offset="0.5" />
|
||||||
|
<stop
|
||||||
|
id="stop4751-3"
|
||||||
|
style="stop-color:#dbe0e1;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
cx="680.5658"
|
||||||
|
cy="365.6579"
|
||||||
|
r="12.052631"
|
||||||
|
fx="680.60205"
|
||||||
|
fy="355.25784"
|
||||||
|
id="radialGradient3164"
|
||||||
|
xlink:href="#linearGradient9165-59"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.59927171,0,0,0.59403611,-389.15478,-205.61691)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient9165-59">
|
||||||
|
<stop
|
||||||
|
id="stop9167-6"
|
||||||
|
style="stop-color:#b6c5cc;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop9169-9"
|
||||||
|
style="stop-color:#e5f0f6;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
cx="680.5658"
|
||||||
|
cy="365.6579"
|
||||||
|
r="12.052631"
|
||||||
|
fx="681.32629"
|
||||||
|
fy="354.21619"
|
||||||
|
id="radialGradient3182"
|
||||||
|
xlink:href="#linearGradient9165-5-1"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient9165-5-1">
|
||||||
|
<stop
|
||||||
|
id="stop9167-7-12"
|
||||||
|
style="stop-color:#acb9bf;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop9169-0-4"
|
||||||
|
style="stop-color:#acb9bf;stop-opacity:0"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="20.153708"
|
||||||
|
y1="3.0216999"
|
||||||
|
x2="20.153708"
|
||||||
|
y2="26.666777"
|
||||||
|
id="linearGradient4015"
|
||||||
|
xlink:href="#linearGradient4017"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4017">
|
||||||
|
<stop
|
||||||
|
id="stop4019"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop4021"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0.23529412"
|
||||||
|
offset="0.49550432" />
|
||||||
|
<stop
|
||||||
|
id="stop4023"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0.15686275"
|
||||||
|
offset="0.88038814" />
|
||||||
|
<stop
|
||||||
|
id="stop4025"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0.39215687"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4747-3-8"
|
||||||
|
id="radialGradient3107"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.81780319,1.9067797e-8,-1.5649504e-8,0.65951858,-540.08917,170.72639)"
|
||||||
|
cx="676"
|
||||||
|
cy="-233.5"
|
||||||
|
fx="680.40613"
|
||||||
|
fy="-249.59378"
|
||||||
|
r="29.5" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient4747-3-8">
|
||||||
|
<stop
|
||||||
|
id="stop4749-7-5"
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop9072-8-6"
|
||||||
|
style="stop-color:#f7f7f7;stop-opacity:1"
|
||||||
|
offset="0.5" />
|
||||||
|
<stop
|
||||||
|
id="stop4751-3-4"
|
||||||
|
style="stop-color:#dbe0e1;stop-opacity:1"
|
||||||
|
offset="1" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<metadata
|
||||||
|
id="metadata3054">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<path
|
||||||
|
style="opacity:0.2;color:#000000;fill:url(#radialGradient3976);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
id="path3041"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="m 119,118.00181 a 55,6 0 0 1 -109.9999975,0 55,6 0 1 1 109.9999975,0 z" />
|
||||||
|
<g
|
||||||
|
style="display:inline"
|
||||||
|
id="g2036"
|
||||||
|
transform="matrix(2.6999989,0,0,0.55555607,-0.8000075,94.890689)">
|
||||||
|
<g
|
||||||
|
style="opacity:0.4"
|
||||||
|
id="g3712"
|
||||||
|
transform="matrix(1.052632,0,0,1.285713,-1.263158,-13.42854)">
|
||||||
|
<rect
|
||||||
|
style="fill:url(#radialGradient3946);fill-opacity:1;stroke:none"
|
||||||
|
id="rect2801"
|
||||||
|
y="40"
|
||||||
|
x="38"
|
||||||
|
height="7"
|
||||||
|
width="5" />
|
||||||
|
<rect
|
||||||
|
style="fill:url(#radialGradient3948);fill-opacity:1;stroke:none"
|
||||||
|
id="rect3696"
|
||||||
|
transform="scale(-1,-1)"
|
||||||
|
y="-47"
|
||||||
|
x="-10"
|
||||||
|
height="7"
|
||||||
|
width="5" />
|
||||||
|
<rect
|
||||||
|
style="fill:url(#linearGradient3950);fill-opacity:1;stroke:none"
|
||||||
|
id="rect3700"
|
||||||
|
y="40"
|
||||||
|
x="10"
|
||||||
|
height="7.0000005"
|
||||||
|
width="28" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<rect
|
||||||
|
style="color:#000000;fill:url(#radialGradient3968);fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:0.99999994000000003;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
id="rect5505-21-3"
|
||||||
|
y="15.501808"
|
||||||
|
x="12.499989"
|
||||||
|
ry="6.0545406"
|
||||||
|
rx="6.0545406"
|
||||||
|
height="103"
|
||||||
|
width="103" />
|
||||||
|
<rect
|
||||||
|
style="opacity:0.5;fill:none;stroke:url(#linearGradient3965);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||||
|
id="rect6741-7"
|
||||||
|
y="16.501808"
|
||||||
|
x="13.499989"
|
||||||
|
ry="5"
|
||||||
|
rx="5"
|
||||||
|
height="101"
|
||||||
|
width="101" />
|
||||||
|
<rect
|
||||||
|
width="103"
|
||||||
|
height="103"
|
||||||
|
rx="6.0545406"
|
||||||
|
ry="6.0545406"
|
||||||
|
x="12.499989"
|
||||||
|
y="15.501808"
|
||||||
|
id="rect4046"
|
||||||
|
style="color:#000000;fill:#0000f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994000000003;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;opacity:0.40000000000000002" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;fill:#ffffff;fill-opacity:0.27311829;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
id="rect4519"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="m 71.40068,31.000738 c -9.03158,0 -16.85327,5.255219 -20.730283,12.882677 -2.512849,-1.622352 -5.487481,-2.576487 -8.685195,-2.576487 -8.963115,0 -16.229212,7.382582 -16.229212,16.489769 0,1.44791 0.22545,2.848711 0.570544,4.186761 -6.47349,4.436287 -10.713834,11.983466 -10.713834,20.547748 0,13.703007 10.857345,24.734764 24.343832,24.734764 l 46.659055,0 c 13.486503,0 24.343833,-11.031757 24.343833,-24.734764 0,-10.942388 -6.95249,-20.167863 -16.609645,-23.446375 0.262049,-1.422142 0.380371,-2.880522 0.380371,-4.379949 0,-13.091533 -10.444925,-23.704144 -23.329466,-23.704144 z" />
|
||||||
|
<rect
|
||||||
|
style="opacity:0.40000000000000002;color:#000000;fill:none;stroke:#ba3d12;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
id="rect5505-21-3-1"
|
||||||
|
y="15.501808"
|
||||||
|
x="12.499989"
|
||||||
|
ry="6.0545406"
|
||||||
|
rx="6.0545406"
|
||||||
|
height="103"
|
||||||
|
width="103" />
|
||||||
|
<g
|
||||||
|
id="g3990"
|
||||||
|
transform="matrix(0.9961947,0.08715574,-0.08715574,0.9961947,6.1992275,-5.2617219)">
|
||||||
|
<text
|
||||||
|
transform="scale(1.194324,0.83729373)"
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text3843"
|
||||||
|
y="119.05046"
|
||||||
|
x="22.915268"
|
||||||
|
style="font-size:120.53004456px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#692d56;fill-opacity:1;stroke:none;font-family:Sans"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#692d56;fill-opacity:1;font-family:Ubuntu Mono;-inkscape-font-specification:Ubuntu Mono Bold"
|
||||||
|
y="119.05046"
|
||||||
|
x="22.915268"
|
||||||
|
id="tspan3845"
|
||||||
|
sodipodi:role="line">W</tspan></text>
|
||||||
|
<text
|
||||||
|
transform="scale(1.1857255,0.84336551)"
|
||||||
|
sodipodi:linespacing="125%"
|
||||||
|
id="text3843-8"
|
||||||
|
y="115.6232"
|
||||||
|
x="23.701387"
|
||||||
|
style="font-size:115.83119202px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans"
|
||||||
|
xml:space="preserve"><tspan
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:Ubuntu Mono;-inkscape-font-specification:Ubuntu Mono Bold"
|
||||||
|
y="115.6232"
|
||||||
|
x="23.701387"
|
||||||
|
id="tspan3845-3"
|
||||||
|
sodipodi:role="line">W</tspan></text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 24 KiB |
20
data/webby.desktop
Normal file
20
data/webby.desktop
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Version=1.0
|
||||||
|
Name=Webby
|
||||||
|
GenericName=Webby
|
||||||
|
Comment=Create your apps
|
||||||
|
Keywords=internet;webapp;
|
||||||
|
Exec=webby %u
|
||||||
|
Icon=webby
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
Categories=Network;GNOME;GTK;
|
||||||
|
X-GIO-NoFuse=true
|
||||||
|
X-GNOME-Gettext-Domain=webby
|
||||||
|
X-GNOME-FullName=Webby
|
||||||
|
StartupWMClass=Webby
|
||||||
|
Actions=AboutDialog;
|
||||||
|
|
||||||
|
[Desktop Action AboutDialog]
|
||||||
|
Exec=webby --about
|
||||||
|
Name=About Webby
|
6
po/CMakeLists.txt
Normal file
6
po/CMakeLists.txt
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
include (Translations)
|
||||||
|
add_translations_directory ("webby")
|
||||||
|
add_translations_catalog ("webby"
|
||||||
|
../src
|
||||||
|
../data
|
||||||
|
)
|
75
po/de.po
Normal file
75
po/de.po
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
# German translation for webby-browser
|
||||||
|
# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015
|
||||||
|
# This file is distributed under the same license as the webby-browser package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: webby-browser\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2015-02-26 23:57-0300\n"
|
||||||
|
"PO-Revision-Date: 2015-03-08 14:47+0000\n"
|
||||||
|
"Last-Translator: Tobias Bannert <Unknown>\n"
|
||||||
|
"Language-Team: German <de@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2015-03-24 00:16+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 17413)\n"
|
||||||
|
|
||||||
|
msgid "Remove Application"
|
||||||
|
msgstr "Anwendung entfernen"
|
||||||
|
|
||||||
|
msgid "Accept"
|
||||||
|
msgstr "Bestätigen"
|
||||||
|
|
||||||
|
msgid "Create a new web app with webby"
|
||||||
|
msgstr "Erstelle eine neue Webanwendung mit Webby"
|
||||||
|
|
||||||
|
msgid "Application name"
|
||||||
|
msgstr "Anwendungsname"
|
||||||
|
|
||||||
|
msgid "http://myapp.domain"
|
||||||
|
msgstr "http://myapp.domain"
|
||||||
|
|
||||||
|
msgid "theme icon name"
|
||||||
|
msgstr "Themasymbolname"
|
||||||
|
|
||||||
|
msgid "or"
|
||||||
|
msgstr "oder"
|
||||||
|
|
||||||
|
msgid "Set from file..."
|
||||||
|
msgstr "Datei auswählen …"
|
||||||
|
|
||||||
|
msgid "Save cookies"
|
||||||
|
msgstr "Cookies speichern"
|
||||||
|
|
||||||
|
msgid "Save login information"
|
||||||
|
msgstr "Anmeldeinformation speichern"
|
||||||
|
|
||||||
|
msgid "Create app"
|
||||||
|
msgstr "Anwendung erstellen"
|
||||||
|
|
||||||
|
msgid "url must start with http:// or https://"
|
||||||
|
msgstr "Adresse muss mit http:// oder https:// beginnen"
|
||||||
|
|
||||||
|
msgid "App already exist"
|
||||||
|
msgstr "Anwendung ist bereits vorhanden"
|
||||||
|
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Bilder"
|
||||||
|
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Abbrechen"
|
||||||
|
|
||||||
|
msgid "Open"
|
||||||
|
msgstr "Öffnen"
|
||||||
|
|
||||||
|
msgid "App created"
|
||||||
|
msgstr "Anwendung wurde erstellt"
|
||||||
|
|
||||||
|
msgid "The application shortcut was successfully created"
|
||||||
|
msgstr "Tastenkürzel für die Anwendung wurde erfolgreich erstellt"
|
||||||
|
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr "Anwendungen"
|
75
po/es.po
Normal file
75
po/es.po
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
# Spanish translation for webby-browser
|
||||||
|
# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015
|
||||||
|
# This file is distributed under the same license as the webby-browser package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: webby-browser\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2015-02-26 23:57-0300\n"
|
||||||
|
"PO-Revision-Date: 2015-02-27 03:18+0000\n"
|
||||||
|
"Last-Translator: Erasmo Marín <Unknown>\n"
|
||||||
|
"Language-Team: Spanish <es@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2015-03-24 00:16+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 17413)\n"
|
||||||
|
|
||||||
|
msgid "Remove Application"
|
||||||
|
msgstr "Quitar aplicación"
|
||||||
|
|
||||||
|
msgid "Accept"
|
||||||
|
msgstr "Aceptar"
|
||||||
|
|
||||||
|
msgid "Create a new web app with webby"
|
||||||
|
msgstr "Crear una nueva aplicación web con webby"
|
||||||
|
|
||||||
|
msgid "Application name"
|
||||||
|
msgstr "Nombre de la aplicación"
|
||||||
|
|
||||||
|
msgid "http://myapp.domain"
|
||||||
|
msgstr "http://miapp.dominio"
|
||||||
|
|
||||||
|
msgid "theme icon name"
|
||||||
|
msgstr "nombre de ícono del tema"
|
||||||
|
|
||||||
|
msgid "or"
|
||||||
|
msgstr "o"
|
||||||
|
|
||||||
|
msgid "Set from file..."
|
||||||
|
msgstr "Establecer desde archivo..."
|
||||||
|
|
||||||
|
msgid "Save cookies"
|
||||||
|
msgstr "Guardar cookies"
|
||||||
|
|
||||||
|
msgid "Save login information"
|
||||||
|
msgstr "Guardar información de sesión"
|
||||||
|
|
||||||
|
msgid "Create app"
|
||||||
|
msgstr "Crear aplicación"
|
||||||
|
|
||||||
|
msgid "url must start with http:// or https://"
|
||||||
|
msgstr "La url debe comenzar con http:// o https://"
|
||||||
|
|
||||||
|
msgid "App already exist"
|
||||||
|
msgstr "La aplicación ya existe"
|
||||||
|
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Imágenes"
|
||||||
|
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Cancelar"
|
||||||
|
|
||||||
|
msgid "Open"
|
||||||
|
msgstr "Abrir"
|
||||||
|
|
||||||
|
msgid "App created"
|
||||||
|
msgstr "Aplicación creada"
|
||||||
|
|
||||||
|
msgid "The application shortcut was successfully created"
|
||||||
|
msgstr "El atajo a la aplicación fue creado exitosamente"
|
||||||
|
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr "Aplicaciones"
|
75
po/gl.po
Normal file
75
po/gl.po
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
# Galician translation for webby-browser
|
||||||
|
# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015
|
||||||
|
# This file is distributed under the same license as the webby-browser package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: webby-browser\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2015-02-26 23:57-0300\n"
|
||||||
|
"PO-Revision-Date: 2015-03-11 07:29+0000\n"
|
||||||
|
"Last-Translator: Miguel Anxo Bouzada <mbouzada@gmail.com>\n"
|
||||||
|
"Language-Team: Galician <gl@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2015-03-24 00:16+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 17413)\n"
|
||||||
|
|
||||||
|
msgid "Remove Application"
|
||||||
|
msgstr "Retirar a aplicación"
|
||||||
|
|
||||||
|
msgid "Accept"
|
||||||
|
msgstr "Aceptar"
|
||||||
|
|
||||||
|
msgid "Create a new web app with webby"
|
||||||
|
msgstr "Crear unha nova aplicación web con Webby"
|
||||||
|
|
||||||
|
msgid "Application name"
|
||||||
|
msgstr "Nome da aplicación"
|
||||||
|
|
||||||
|
msgid "http://myapp.domain"
|
||||||
|
msgstr "http://amiñapp.dominio"
|
||||||
|
|
||||||
|
msgid "theme icon name"
|
||||||
|
msgstr "Nome da icona do tema"
|
||||||
|
|
||||||
|
msgid "or"
|
||||||
|
msgstr "ou"
|
||||||
|
|
||||||
|
msgid "Set from file..."
|
||||||
|
msgstr "Estabelecer desde un ficheiro..."
|
||||||
|
|
||||||
|
msgid "Save cookies"
|
||||||
|
msgstr "Gardar as cookies"
|
||||||
|
|
||||||
|
msgid "Save login information"
|
||||||
|
msgstr "Gardar a información da sesión"
|
||||||
|
|
||||||
|
msgid "Create app"
|
||||||
|
msgstr "Crear a aplicación"
|
||||||
|
|
||||||
|
msgid "url must start with http:// or https://"
|
||||||
|
msgstr "O URL debe comezar con http:// ou https://"
|
||||||
|
|
||||||
|
msgid "App already exist"
|
||||||
|
msgstr "Xa existe a aplicación"
|
||||||
|
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Imaxes"
|
||||||
|
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Carcelar"
|
||||||
|
|
||||||
|
msgid "Open"
|
||||||
|
msgstr "Abrir"
|
||||||
|
|
||||||
|
msgid "App created"
|
||||||
|
msgstr "Creouse a aplicación"
|
||||||
|
|
||||||
|
msgid "The application shortcut was successfully created"
|
||||||
|
msgstr "Creouse satisfactoriamente o atallo á aplicación"
|
||||||
|
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr "Aplicacións"
|
75
po/ru.po
Normal file
75
po/ru.po
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
# Russian translation for webby-browser
|
||||||
|
# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015
|
||||||
|
# This file is distributed under the same license as the webby-browser package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: webby-browser\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2015-02-26 23:57-0300\n"
|
||||||
|
"PO-Revision-Date: 2015-02-27 20:39+0000\n"
|
||||||
|
"Last-Translator: Artem Anufrij <Unknown>\n"
|
||||||
|
"Language-Team: Russian <ru@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2015-03-24 00:16+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 17413)\n"
|
||||||
|
|
||||||
|
msgid "Remove Application"
|
||||||
|
msgstr "Удалить приложение"
|
||||||
|
|
||||||
|
msgid "Accept"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Create a new web app with webby"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Application name"
|
||||||
|
msgstr "Имя приложения"
|
||||||
|
|
||||||
|
msgid "http://myapp.domain"
|
||||||
|
msgstr "http://myapp.domain"
|
||||||
|
|
||||||
|
msgid "theme icon name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "or"
|
||||||
|
msgstr "или"
|
||||||
|
|
||||||
|
msgid "Set from file..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Save cookies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Save login information"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Create app"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "url must start with http:// or https://"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "App already exist"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Images"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Отменить"
|
||||||
|
|
||||||
|
msgid "Open"
|
||||||
|
msgstr "Открыть"
|
||||||
|
|
||||||
|
msgid "App created"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "The application shortcut was successfully created"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr "Приложения"
|
75
po/vi.po
Normal file
75
po/vi.po
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
# Vietnamese translation for webby-browser
|
||||||
|
# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015
|
||||||
|
# This file is distributed under the same license as the webby-browser package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: webby-browser\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2015-02-26 23:57-0300\n"
|
||||||
|
"PO-Revision-Date: 2015-03-15 13:06+0000\n"
|
||||||
|
"Last-Translator: Nguyễn Thanh Tài <Unknown>\n"
|
||||||
|
"Language-Team: Vietnamese <vi@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2015-03-24 00:16+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 17413)\n"
|
||||||
|
|
||||||
|
msgid "Remove Application"
|
||||||
|
msgstr "Gỡ ứng dụng"
|
||||||
|
|
||||||
|
msgid "Accept"
|
||||||
|
msgstr "Đồng ý"
|
||||||
|
|
||||||
|
msgid "Create a new web app with webby"
|
||||||
|
msgstr "Tạo ứng dụng web mới với webby"
|
||||||
|
|
||||||
|
msgid "Application name"
|
||||||
|
msgstr "Tên ứng dụng"
|
||||||
|
|
||||||
|
msgid "http://myapp.domain"
|
||||||
|
msgstr "http://ungdung.tenmien"
|
||||||
|
|
||||||
|
msgid "theme icon name"
|
||||||
|
msgstr "tên biểu tượng chủ dụng"
|
||||||
|
|
||||||
|
msgid "or"
|
||||||
|
msgstr "hoặc"
|
||||||
|
|
||||||
|
msgid "Set from file..."
|
||||||
|
msgstr "Đặt từ tập tin..."
|
||||||
|
|
||||||
|
msgid "Save cookies"
|
||||||
|
msgstr "Lưu cookie"
|
||||||
|
|
||||||
|
msgid "Save login information"
|
||||||
|
msgstr "Lưu thông tin đăng nhập"
|
||||||
|
|
||||||
|
msgid "Create app"
|
||||||
|
msgstr "Tạo ứng dụng"
|
||||||
|
|
||||||
|
msgid "url must start with http:// or https://"
|
||||||
|
msgstr "url phải bắt đầu với http:// hoặc https://"
|
||||||
|
|
||||||
|
msgid "App already exist"
|
||||||
|
msgstr "Ứng dụng đã tồn tại"
|
||||||
|
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Hình ảnh"
|
||||||
|
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Huỷ"
|
||||||
|
|
||||||
|
msgid "Open"
|
||||||
|
msgstr "Mở"
|
||||||
|
|
||||||
|
msgid "App created"
|
||||||
|
msgstr "Đã tạo ứng dụng"
|
||||||
|
|
||||||
|
msgid "The application shortcut was successfully created"
|
||||||
|
msgstr "Đã tạo lối tắt ứng dụng thành công"
|
||||||
|
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr "Ứng dụng"
|
102
po/webby.pot
Normal file
102
po/webby.pot
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2015-10-16 23:42+0200\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=CHARSET\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/InfoDialog.vala:16
|
||||||
|
msgid "Accept"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/AppWindow.vala:70
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/AppWindow.vala:76
|
||||||
|
msgid "Add a new Web App"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/AppWindow.vala:79
|
||||||
|
msgid "No Web Apps Availible"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/AppWindow.vala:79
|
||||||
|
msgid "Create a new Webby Web App."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/AppWindow.vala:80
|
||||||
|
msgid "Create App"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/AppWindow.vala:80
|
||||||
|
msgid "Create a new Webby web app."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/Assistant.vala:45
|
||||||
|
msgid "Create a new web app with webby"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/Assistant.vala:53
|
||||||
|
msgid "Application name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/Assistant.vala:56
|
||||||
|
msgid "http://myapp.domain"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/Assistant.vala:66
|
||||||
|
msgid "theme icon name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/Assistant.vala:68
|
||||||
|
msgid "or"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/Assistant.vala:69
|
||||||
|
msgid "Set from file..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/Assistant.vala:85
|
||||||
|
msgid "Save cookies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/Assistant.vala:87
|
||||||
|
msgid "Save login information"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/Assistant.vala:110
|
||||||
|
msgid "Save app"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/Assistant.vala:132
|
||||||
|
msgid "url must start with http:// or https://"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/Assistant.vala:145
|
||||||
|
msgid "App already exist"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/Assistant.vala:198
|
||||||
|
msgid "Images"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/Assistant.vala:210
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/artem/Launchpad/webby-browser/po/../src/Assistant.vala:211
|
||||||
|
msgid "Open"
|
||||||
|
msgstr ""
|
5
schemas/CMakeLists.txt
Normal file
5
schemas/CMakeLists.txt
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#
|
||||||
|
# GSettings Schema
|
||||||
|
#
|
||||||
|
include(GSettings)
|
||||||
|
add_schema(org.pantheon.Webby.gschema.xml)
|
24
schemas/org.pantheon.Webby.gschema.xml
Normal file
24
schemas/org.pantheon.Webby.gschema.xml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<schemalist>
|
||||||
|
<enum id="org.pantheon.webby.SavedState.window-state">
|
||||||
|
<value nick="Normal" value="0" />
|
||||||
|
<value nick="Maximized" value="1" />
|
||||||
|
<value nick="Fullscreen" value="2" />
|
||||||
|
</enum>
|
||||||
|
<schema path="/org/pantheon/webby/saved-state/" id="org.pantheon.webby.SavedState" gettext-domain="webby">
|
||||||
|
<key name="window-width" type="i">
|
||||||
|
<default>800</default>
|
||||||
|
<summary>The saved width of the window.</summary>
|
||||||
|
<description>The saved width of the window.</description>
|
||||||
|
</key>
|
||||||
|
<key name="window-height" type="i">
|
||||||
|
<default>650</default>
|
||||||
|
<summary>The saved height of the window.</summary>
|
||||||
|
<description>The saved height of the window.</description>
|
||||||
|
</key>
|
||||||
|
<key name="window-state" enum="org.pantheon.webby.SavedState.window-state">
|
||||||
|
<default>"Normal"</default>
|
||||||
|
<summary>The saved state of the window.</summary>
|
||||||
|
<description>The saved state of the window.</description>
|
||||||
|
</key>
|
||||||
|
</schema>
|
||||||
|
</schemalist>
|
200
src/AppWindow.vala
Normal file
200
src/AppWindow.vala
Normal file
|
@ -0,0 +1,200 @@
|
||||||
|
public class AppWindow : Granite.Application {
|
||||||
|
|
||||||
|
private Settings settings;
|
||||||
|
|
||||||
|
public Gtk.Window mainwindow;
|
||||||
|
|
||||||
|
private Gtk.Stack stack;
|
||||||
|
private Gtk.HeaderBar headerbar;
|
||||||
|
private Gtk.Button back_button;
|
||||||
|
private Gtk.Button add_button;
|
||||||
|
|
||||||
|
private WebbyAssistant assistant;
|
||||||
|
private ApplicationsView apps_view;
|
||||||
|
|
||||||
|
construct {
|
||||||
|
program_name = "Webby";
|
||||||
|
exec_name = "webby";
|
||||||
|
|
||||||
|
app_years = "2015";
|
||||||
|
app_icon = "webby";
|
||||||
|
app_launcher = "webby.desktop";
|
||||||
|
application_id = "net.launchpad.webby-browser";
|
||||||
|
|
||||||
|
main_url = "https://code.launchpad.net/webby-browser";
|
||||||
|
bug_url = "https://bugs.launchpad.net/webby-browser";
|
||||||
|
help_url = "https://code.launchpad.net/webby-browser";
|
||||||
|
translate_url = "https://translations.launchpad.net/webby-browser";
|
||||||
|
|
||||||
|
about_authors = {"Erasmo Marín <erasmo.marin@gmail.com>",
|
||||||
|
"Artem Anufrij <artem.anufrij@live.de>"};
|
||||||
|
about_documenters = {"Erasmo Marín",
|
||||||
|
"Artem Anufrij <artem.anufrij@live.de>"};
|
||||||
|
about_artists = {"Erasmo Marín <erasmo.marin@gmail.com>",
|
||||||
|
"Artem Anufrij <artem.anufrij@live.de>"};
|
||||||
|
about_comments = "Development release, not all features implemented";
|
||||||
|
about_translators = "";
|
||||||
|
about_license_type = Gtk.License.GPL_3_0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AppWindow _instance = null;
|
||||||
|
|
||||||
|
public static AppWindow instance {
|
||||||
|
get {
|
||||||
|
if (_instance == null)
|
||||||
|
_instance = new AppWindow ();
|
||||||
|
return _instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void activate () {
|
||||||
|
|
||||||
|
if (mainwindow != null) {
|
||||||
|
mainwindow.present (); // present window if app is already running
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
settings = Settings.get_default ();
|
||||||
|
|
||||||
|
mainwindow = new Gtk.Window ();
|
||||||
|
|
||||||
|
mainwindow.set_default_size (700, 500);
|
||||||
|
mainwindow.set_wmclass ("Webby", "Webby");
|
||||||
|
|
||||||
|
//headerbar
|
||||||
|
headerbar = new Gtk.HeaderBar ();
|
||||||
|
headerbar.show_close_button = true;
|
||||||
|
headerbar.title = "Webby";
|
||||||
|
mainwindow.set_titlebar (headerbar);
|
||||||
|
|
||||||
|
back_button = new Gtk.Button.with_label (_("Applications"));
|
||||||
|
back_button.get_style_context ().add_class ("back-button");
|
||||||
|
headerbar.pack_start (back_button);
|
||||||
|
|
||||||
|
add_button = new Gtk.Button ();
|
||||||
|
add_button.image = new Gtk.Image.from_icon_name ("add", Gtk.IconSize.LARGE_TOOLBAR);
|
||||||
|
add_button.tooltip_text = _("Add a new Web App");
|
||||||
|
headerbar.pack_start (add_button);
|
||||||
|
|
||||||
|
var welcome = new Granite.Widgets.Welcome (_("No Web Apps Availible"), _("Create a new Webby Web App."));
|
||||||
|
welcome.append ("add", _("Create App"), _("Create a new Webby web app."));
|
||||||
|
welcome.activated.connect ((index) => {
|
||||||
|
switch (index) {
|
||||||
|
case 0:
|
||||||
|
show_assistant ();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
apps_view = new ApplicationsView();
|
||||||
|
assistant = new WebbyAssistant();
|
||||||
|
stack = new Gtk.Stack ();
|
||||||
|
stack.set_transition_duration (500);
|
||||||
|
|
||||||
|
stack.add_named (welcome, "welcome");
|
||||||
|
stack.add_named (apps_view, "apps_view");
|
||||||
|
stack.add_named (assistant, "assistant");
|
||||||
|
|
||||||
|
mainwindow.add (stack);
|
||||||
|
|
||||||
|
apps_view.add_request.connect (() => {
|
||||||
|
show_assistant ();
|
||||||
|
});
|
||||||
|
|
||||||
|
apps_view.edit_request.connect ((desktop_file) => {
|
||||||
|
show_assistant (desktop_file);
|
||||||
|
});
|
||||||
|
|
||||||
|
apps_view.app_deleted.connect (() => {
|
||||||
|
if (!apps_view.has_items) {
|
||||||
|
show_welcome_view (Gtk.StackTransitionType.NONE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
assistant.application_created.connect ((new_file) => {
|
||||||
|
apps_view.add_button (new_file);
|
||||||
|
apps_view.select_last_item ();
|
||||||
|
show_apps_view ();
|
||||||
|
});
|
||||||
|
|
||||||
|
assistant.application_edited.connect ((edited_file) => {
|
||||||
|
apps_view.update_button (edited_file);
|
||||||
|
show_apps_view ();
|
||||||
|
});
|
||||||
|
|
||||||
|
back_button.clicked.connect (() => {
|
||||||
|
if (apps_view.has_items)
|
||||||
|
show_apps_view ();
|
||||||
|
else
|
||||||
|
show_welcome_view ();
|
||||||
|
});
|
||||||
|
|
||||||
|
add_button.clicked.connect (() => {
|
||||||
|
show_assistant ();
|
||||||
|
});
|
||||||
|
|
||||||
|
mainwindow.delete_event.connect (() => {
|
||||||
|
this.store_settings ();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
mainwindow.destroy.connect (Gtk.main_quit);
|
||||||
|
|
||||||
|
this.restore_settings ();
|
||||||
|
mainwindow.show_all ();
|
||||||
|
|
||||||
|
if (apps_view.has_items)
|
||||||
|
show_apps_view (Gtk.StackTransitionType.NONE);
|
||||||
|
else
|
||||||
|
show_welcome_view (Gtk.StackTransitionType.NONE);
|
||||||
|
|
||||||
|
Gtk.main ();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void show_assistant (DesktopFile? desktop_file = null) {
|
||||||
|
stack.set_transition_type (Gtk.StackTransitionType.SLIDE_LEFT);
|
||||||
|
stack.set_visible_child_name("assistant");
|
||||||
|
back_button.show_all ();
|
||||||
|
add_button.hide ();
|
||||||
|
//fix ugly border at the bottom of headerbar
|
||||||
|
mainwindow.queue_draw ();
|
||||||
|
|
||||||
|
if (desktop_file != null)
|
||||||
|
assistant.edit_desktop_file (desktop_file);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void show_apps_view (Gtk.StackTransitionType slide = Gtk.StackTransitionType.SLIDE_RIGHT) {
|
||||||
|
stack.set_transition_type (slide);
|
||||||
|
stack.set_visible_child_name ("apps_view");
|
||||||
|
back_button.hide ();
|
||||||
|
add_button.show_all ();
|
||||||
|
assistant.reset_fields ();
|
||||||
|
//fix ugly border at the bottom of headerbar
|
||||||
|
mainwindow.queue_draw ();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void show_welcome_view (Gtk.StackTransitionType slide = Gtk.StackTransitionType.SLIDE_RIGHT) {
|
||||||
|
stack.set_transition_type (slide);
|
||||||
|
stack.set_visible_child_name ("welcome");
|
||||||
|
back_button.hide ();
|
||||||
|
add_button.hide ();
|
||||||
|
assistant.reset_fields ();
|
||||||
|
//fix ugly border at the bottom of headerbar
|
||||||
|
mainwindow.queue_draw ();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void restore_settings () {
|
||||||
|
this.mainwindow.set_default_size (settings.window_width, settings.window_height);
|
||||||
|
|
||||||
|
if (settings.window_state == Settings.WindowState.MAXIMIZED)
|
||||||
|
this.mainwindow.maximize ();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void store_settings () {
|
||||||
|
settings.window_state = (this.mainwindow.is_maximized ? Settings.WindowState.MAXIMIZED: Settings.WindowState.NORMAL);
|
||||||
|
if (settings.window_state == Settings.WindowState.NORMAL) {
|
||||||
|
settings.window_height = this.mainwindow.get_allocated_height ();
|
||||||
|
settings.window_width = this.mainwindow.get_allocated_width ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
299
src/Assistant.vala
Normal file
299
src/Assistant.vala
Normal file
|
@ -0,0 +1,299 @@
|
||||||
|
public class WebbyAssistant : Gtk.Box {
|
||||||
|
|
||||||
|
public enum assistant_mode { new_app, edit_app }
|
||||||
|
|
||||||
|
public signal void application_created (GLib.DesktopAppInfo? new_file);
|
||||||
|
public signal void application_edited (GLib.DesktopAppInfo? new_file);
|
||||||
|
|
||||||
|
private Gtk.Label message;
|
||||||
|
private Gtk.Button icon_button;
|
||||||
|
private Gtk.Entry app_name_entry;
|
||||||
|
private Gtk.Entry app_url_entry;
|
||||||
|
private Gtk.Entry icon_name_entry;
|
||||||
|
private Gtk.ComboBox app_category_combo;
|
||||||
|
private Gtk.CheckButton save_cookies_check;
|
||||||
|
private Gtk.CheckButton save_password_check;
|
||||||
|
private Gtk.Popover icon_selector_popover;
|
||||||
|
private Gtk.FileChooserDialog file_chooser;
|
||||||
|
private Gtk.Button accept_button;
|
||||||
|
private GLib.Regex protocol_regex;
|
||||||
|
private Gee.HashMap<string, GLib.AppInfo> apps;
|
||||||
|
|
||||||
|
private string default_app_icon = "application-default-icon";
|
||||||
|
|
||||||
|
private bool app_name_valid = false;
|
||||||
|
private bool app_url_valid = false;
|
||||||
|
private bool app_icon_valid = true;
|
||||||
|
|
||||||
|
private assistant_mode mode { get; set; default = assistant_mode.new_app; }
|
||||||
|
|
||||||
|
public WebbyAssistant () {
|
||||||
|
|
||||||
|
GLib.Object (orientation: Gtk.Orientation.VERTICAL);
|
||||||
|
apps = DesktopFile.get_applications ();
|
||||||
|
|
||||||
|
this.margin = 15;
|
||||||
|
|
||||||
|
try {
|
||||||
|
//http(s)://(words or numbers)(port and numbers)
|
||||||
|
this.protocol_regex = new Regex ("""https?\:\/\/[\w+\d+]((\:\d+)?\/\S*)?""");
|
||||||
|
} catch (RegexError e) {
|
||||||
|
critical ("%s", e.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
//welcome message
|
||||||
|
message = new Gtk.Label (_("Create a new web app with webby"));
|
||||||
|
|
||||||
|
//app information
|
||||||
|
icon_button = new Gtk.Button ();
|
||||||
|
icon_button.set_image (new Gtk.Image.from_icon_name (default_app_icon, Gtk.IconSize.DIALOG) );
|
||||||
|
icon_button.halign = Gtk.Align.END;
|
||||||
|
|
||||||
|
app_name_entry = new Gtk.Entry ();
|
||||||
|
app_name_entry.set_placeholder_text (_("Application name"));
|
||||||
|
|
||||||
|
app_url_entry = new Gtk.Entry ();
|
||||||
|
app_url_entry.set_placeholder_text (_("http://myapp.domain"));
|
||||||
|
|
||||||
|
//icon selector popover
|
||||||
|
icon_selector_popover = new Gtk.Popover (icon_button);
|
||||||
|
icon_selector_popover.modal = true;
|
||||||
|
icon_selector_popover.position = Gtk.PositionType.BOTTOM;
|
||||||
|
|
||||||
|
var popover_box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 5);
|
||||||
|
|
||||||
|
icon_name_entry = new Gtk.Entry ();
|
||||||
|
icon_name_entry.set_placeholder_text (_("theme icon name"));
|
||||||
|
|
||||||
|
var or_label = new Gtk.Label (_("or"));
|
||||||
|
var icon_chooser_button = new Gtk.Button.with_label(_("Set from file..."));
|
||||||
|
icon_chooser_button.get_style_context ().add_class ("suggested-action");
|
||||||
|
|
||||||
|
popover_box.margin = 10;
|
||||||
|
popover_box.pack_start (icon_name_entry, true, false, 0);
|
||||||
|
popover_box.pack_start (or_label, true, false, 0);
|
||||||
|
popover_box.pack_end (icon_chooser_button, true, false, 0);
|
||||||
|
|
||||||
|
icon_chooser_button.grab_focus ();
|
||||||
|
|
||||||
|
icon_selector_popover.add (popover_box);
|
||||||
|
|
||||||
|
//TODO: categories
|
||||||
|
//combobox
|
||||||
|
|
||||||
|
//checkbuttons
|
||||||
|
save_cookies_check = new Gtk.CheckButton.with_label (_("Save cookies"));
|
||||||
|
save_cookies_check.active = true;
|
||||||
|
save_password_check = new Gtk.CheckButton.with_label (_("Save login information"));
|
||||||
|
save_password_check.active = false;
|
||||||
|
|
||||||
|
//app information section
|
||||||
|
var app_input_box = new Gtk.Box (Gtk.Orientation.VERTICAL, 5);
|
||||||
|
app_input_box.halign = Gtk.Align.START;
|
||||||
|
app_input_box.pack_start (app_name_entry, false, false, 0);
|
||||||
|
app_input_box.pack_start (app_url_entry, false, false, 0);
|
||||||
|
//app_input_box.pack_start (app_category_combo, true, false, 0);
|
||||||
|
|
||||||
|
var app_info_box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 5);
|
||||||
|
app_info_box.pack_start (icon_button, false, false, 3);
|
||||||
|
app_info_box.pack_start (app_input_box, false, false, 3);
|
||||||
|
app_info_box.halign = Gtk.Align.CENTER;
|
||||||
|
|
||||||
|
//app options
|
||||||
|
var app_options_box = new Gtk.Box (Gtk.Orientation.VERTICAL, 5);
|
||||||
|
app_options_box.pack_start (save_cookies_check, true, false, 0);
|
||||||
|
app_options_box.pack_start (save_password_check, true, false, 0);
|
||||||
|
app_options_box.halign = Gtk.Align.CENTER;
|
||||||
|
|
||||||
|
|
||||||
|
//create button
|
||||||
|
accept_button = new Gtk.Button.with_label(_("Save app"));
|
||||||
|
accept_button.halign = Gtk.Align.END;
|
||||||
|
accept_button.get_style_context ().add_class ("suggested-action");
|
||||||
|
accept_button.set_sensitive (false);
|
||||||
|
accept_button.activate.connect (on_accept);
|
||||||
|
accept_button.clicked.connect (on_accept);
|
||||||
|
|
||||||
|
//all sections together
|
||||||
|
pack_start (message, true, false, 0);
|
||||||
|
pack_start (app_info_box, true, false, 0);
|
||||||
|
pack_start (app_options_box, true, false, 0);
|
||||||
|
pack_end (accept_button, false, false, 0);
|
||||||
|
|
||||||
|
//signals and handlers
|
||||||
|
icon_button.clicked.connect(() => {
|
||||||
|
icon_selector_popover.show_all();
|
||||||
|
});
|
||||||
|
|
||||||
|
app_url_entry.changed.connect (()=>{
|
||||||
|
if (!this.protocol_regex.match (app_url_entry.get_text())) {
|
||||||
|
app_url_entry.get_style_context ().add_class ("error");
|
||||||
|
app_url_entry.set_icon_from_icon_name (Gtk.EntryIconPosition.SECONDARY, "dialog-information");
|
||||||
|
app_url_entry.set_icon_tooltip_text(Gtk.EntryIconPosition.SECONDARY, _("url must start with http:// or https://"));
|
||||||
|
app_url_valid = false;
|
||||||
|
} else {
|
||||||
|
app_url_entry.get_style_context ().remove_class ("error");
|
||||||
|
app_url_valid = true;
|
||||||
|
}
|
||||||
|
validate ();
|
||||||
|
});
|
||||||
|
|
||||||
|
app_name_entry.changed.connect (()=>{
|
||||||
|
if (mode == assistant_mode.new_app && DesktopFile.get_applications().has_key (app_name_entry.get_text()) ) {
|
||||||
|
app_name_entry.get_style_context ().add_class ("error");
|
||||||
|
app_name_entry.set_icon_from_icon_name (Gtk.EntryIconPosition.SECONDARY, "dialog-information");
|
||||||
|
app_name_entry.set_icon_tooltip_text (Gtk.EntryIconPosition.SECONDARY, _("App already exist"));
|
||||||
|
app_name_valid = false;
|
||||||
|
} else {
|
||||||
|
app_name_entry.get_style_context ().remove_class ("error");
|
||||||
|
app_name_valid = true;
|
||||||
|
}
|
||||||
|
validate ();
|
||||||
|
});
|
||||||
|
|
||||||
|
icon_chooser_button.activate.connect (on_icon_chooser_activate);
|
||||||
|
icon_chooser_button.clicked.connect (on_icon_chooser_activate);
|
||||||
|
|
||||||
|
icon_name_entry.changed.connect (update_app_icon);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void update_app_icon () {
|
||||||
|
string icon = icon_name_entry.get_text ();
|
||||||
|
|
||||||
|
if (icon == "") {
|
||||||
|
app_icon_valid = true;
|
||||||
|
validate ();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//if is a file uri
|
||||||
|
if (icon.contains("/")) {
|
||||||
|
Gdk.Pixbuf pix = null;
|
||||||
|
try {
|
||||||
|
pix = new Gdk.Pixbuf.from_file_at_size (icon, 48, 48);
|
||||||
|
app_icon_valid = true;
|
||||||
|
} catch (GLib.Error error) {
|
||||||
|
app_icon_valid = false;
|
||||||
|
try {
|
||||||
|
Gtk.IconTheme icon_theme = Gtk.IconTheme.get_default ();
|
||||||
|
pix = icon_theme.load_icon ("image-missing", 48, Gtk.IconLookupFlags.FORCE_SIZE);
|
||||||
|
} catch (GLib.Error err) {
|
||||||
|
warning ("Getting selection-checked icon from theme failed");
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (pix != null)
|
||||||
|
icon_button.set_image (new Gtk.Image.from_pixbuf (pix));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
icon_button.set_image (new Gtk.Image.from_icon_name (icon, Gtk.IconSize.DIALOG) );
|
||||||
|
}
|
||||||
|
|
||||||
|
validate ();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void on_icon_chooser_activate () {
|
||||||
|
var filter = new Gtk.FileFilter ();
|
||||||
|
|
||||||
|
filter.set_filter_name (_("Images"));
|
||||||
|
filter.add_pattern ("*.png");
|
||||||
|
filter.add_pattern ("*.svg");
|
||||||
|
filter.add_pattern ("*.jpg");
|
||||||
|
filter.add_pattern ("*.jpeg");
|
||||||
|
filter.add_pattern ("*.PNG");
|
||||||
|
filter.add_pattern ("*.SVG");
|
||||||
|
filter.add_pattern ("*.JPG");
|
||||||
|
filter.add_pattern ("*.JPEG");
|
||||||
|
|
||||||
|
file_chooser = new Gtk.FileChooserDialog ("", null,
|
||||||
|
Gtk.FileChooserAction.OPEN,
|
||||||
|
_("Cancel"), Gtk.ResponseType.CANCEL,
|
||||||
|
_("Open"), Gtk.ResponseType.ACCEPT);
|
||||||
|
file_chooser.set_select_multiple(false);
|
||||||
|
file_chooser.add_filter (filter);
|
||||||
|
|
||||||
|
var preview = new Gtk.Image();
|
||||||
|
preview.valign = Gtk.Align.START;
|
||||||
|
|
||||||
|
file_chooser.update_preview.connect ( ()=> {
|
||||||
|
|
||||||
|
string filename = file_chooser.get_preview_filename();
|
||||||
|
Gdk.Pixbuf pix = null;
|
||||||
|
|
||||||
|
if (filename != null) {
|
||||||
|
try {
|
||||||
|
pix = new Gdk.Pixbuf.from_file_at_size (filename, 128, 128);
|
||||||
|
} catch (GLib.Error error) {
|
||||||
|
warning ("There was a problem loading preview.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pix!=null){
|
||||||
|
preview.set_from_pixbuf (pix);
|
||||||
|
file_chooser.set_preview_widget_active (true);
|
||||||
|
file_chooser.set_preview_widget (preview);
|
||||||
|
} else {
|
||||||
|
file_chooser.set_preview_widget (null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (file_chooser.run () == Gtk.ResponseType.ACCEPT) {
|
||||||
|
|
||||||
|
icon_name_entry.set_text(file_chooser.get_filename ());
|
||||||
|
file_chooser.destroy ();
|
||||||
|
}
|
||||||
|
file_chooser.destroy ();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void validate () {
|
||||||
|
if (app_icon_valid && app_name_valid && app_url_valid) {
|
||||||
|
accept_button.set_sensitive (true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
accept_button.set_sensitive (false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void reset_fields () {
|
||||||
|
icon_name_entry.set_text ("");
|
||||||
|
app_name_entry.set_text ("");
|
||||||
|
app_name_entry.set_sensitive (true);
|
||||||
|
app_url_entry.set_text ("");
|
||||||
|
app_name_entry.get_style_context ().remove_class ("error");
|
||||||
|
app_url_entry.get_style_context ().remove_class ("error");
|
||||||
|
icon_button.set_image (new Gtk.Image.from_icon_name (default_app_icon, Gtk.IconSize.DIALOG) );
|
||||||
|
mode = assistant_mode.new_app;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void on_accept () {
|
||||||
|
|
||||||
|
string icon = icon_name_entry.get_text ();
|
||||||
|
string name = app_name_entry.get_text ();
|
||||||
|
string url = app_url_entry.get_text ();
|
||||||
|
|
||||||
|
if (icon == "")
|
||||||
|
icon = default_app_icon;
|
||||||
|
|
||||||
|
if (app_icon_valid && app_name_valid && app_url_valid) {
|
||||||
|
var desktop_file = new DesktopFile (name, url, icon);
|
||||||
|
switch (mode) {
|
||||||
|
case assistant_mode.new_app:
|
||||||
|
application_created (desktop_file.save_to_file ());
|
||||||
|
break;
|
||||||
|
case assistant_mode.edit_app:
|
||||||
|
application_edited (desktop_file.save_to_file ());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void edit_desktop_file (DesktopFile desktop_file) {
|
||||||
|
mode = assistant_mode.edit_app;
|
||||||
|
app_name_entry.text = desktop_file.name;
|
||||||
|
app_name_entry.set_sensitive (false);
|
||||||
|
app_url_entry.text = desktop_file.url;
|
||||||
|
icon_name_entry.text = desktop_file.icon;
|
||||||
|
update_app_icon ();
|
||||||
|
}
|
||||||
|
}
|
121
src/DesktopFile.vala
Normal file
121
src/DesktopFile.vala
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
public class DesktopFile : GLib.Object {
|
||||||
|
|
||||||
|
private string template = """
|
||||||
|
[Desktop Entry]
|
||||||
|
Version=1.0
|
||||||
|
Name=Webby
|
||||||
|
GenericName=Web app
|
||||||
|
Comment=Webby web app
|
||||||
|
Exec=webby
|
||||||
|
Keywords=webby;webapp;internet;
|
||||||
|
Icon=application-default-icon
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
Categories=Network;
|
||||||
|
X-GNOME-FullName=Webby
|
||||||
|
StartupWMClass=Webby
|
||||||
|
WebbyThemeColor=none""";
|
||||||
|
|
||||||
|
|
||||||
|
private GLib.KeyFile file;
|
||||||
|
|
||||||
|
public string name { get; private set; }
|
||||||
|
public string url { get; private set; }
|
||||||
|
public string icon { get; private set; }
|
||||||
|
|
||||||
|
public DesktopFile (string name, string url, string icon) {
|
||||||
|
this.name = name;
|
||||||
|
this.url = url;
|
||||||
|
this.icon = icon;
|
||||||
|
|
||||||
|
file = new GLib.KeyFile();
|
||||||
|
file.load_from_data (template, -1, GLib.KeyFileFlags.NONE);
|
||||||
|
//TODO: Category
|
||||||
|
file.set_string ("Desktop Entry", "Name", name);
|
||||||
|
file.set_string ("Desktop Entry", "GenericName", name);
|
||||||
|
file.set_string ("Desktop Entry", "X-GNOME-FullName", name);
|
||||||
|
file.set_string ("Desktop Entry", "Exec", "webby " + url);
|
||||||
|
file.set_string ("Desktop Entry", "Icon", icon);
|
||||||
|
file.set_string ("Desktop Entry", "StartupWMClass", url);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DesktopFile.from_desktopappinfo(GLib.DesktopAppInfo info) {
|
||||||
|
file = new GLib.KeyFile();
|
||||||
|
file.load_from_file (info.filename, KeyFileFlags.NONE);
|
||||||
|
this.name = info.get_display_name ();
|
||||||
|
this.icon = info.get_icon ().to_string ();
|
||||||
|
this.url = file.get_string ("Desktop Entry", "Exec").substring (6);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool edit_propertie (string propertie, string val) {
|
||||||
|
string filename = GLib.Environment.get_user_data_dir () + "/applications/" +file.get_string("Desktop Entry", "Name") + "-webby.desktop";
|
||||||
|
file = new GLib.KeyFile();
|
||||||
|
file.load_from_file (filename, KeyFileFlags.NONE);
|
||||||
|
file.set_string ("Desktop Entry", propertie, val);
|
||||||
|
return file.save_to_file (filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GLib.DesktopAppInfo save_to_file () {
|
||||||
|
string filename = GLib.Environment.get_user_data_dir () + "/applications/" +file.get_string("Desktop Entry", "Name") + "-webby.desktop";
|
||||||
|
print("Desktop file created: " + filename);
|
||||||
|
file.save_to_file (filename);
|
||||||
|
return new GLib.DesktopAppInfo.from_filename (filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool delete_file () {
|
||||||
|
string filename = GLib.Environment.get_user_data_dir () + "/applications/" +file.get_string("Desktop Entry", "Name") + "-webby.desktop";
|
||||||
|
File file = File.new_for_path (filename);
|
||||||
|
try {
|
||||||
|
file.delete ();
|
||||||
|
} catch (Error e) {
|
||||||
|
print(e.message + "\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Gee.HashMap<string, GLib.DesktopAppInfo> get_webby_applications () {
|
||||||
|
|
||||||
|
var list = new Gee.HashMap<string, GLib.DesktopAppInfo>();
|
||||||
|
|
||||||
|
foreach (GLib.AppInfo app in GLib.AppInfo.get_all()) {
|
||||||
|
|
||||||
|
var desktop_app = new GLib.DesktopAppInfo(app.get_id ());
|
||||||
|
|
||||||
|
//FIXME: This is not working, vala problem?
|
||||||
|
//var keywords = desktop_app.get_keywords ();
|
||||||
|
|
||||||
|
string keywords = desktop_app.get_string ("Keywords");
|
||||||
|
|
||||||
|
if (keywords != null && keywords.contains ("webby")) {
|
||||||
|
list.set(desktop_app.get_name(), desktop_app);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static GLib.DesktopAppInfo? get_app_by_url (string url) {
|
||||||
|
foreach (GLib.AppInfo app in GLib.AppInfo.get_all()) {
|
||||||
|
|
||||||
|
var desktop_app = new GLib.DesktopAppInfo(app.get_id ());
|
||||||
|
|
||||||
|
var exec = desktop_app.get_string ("Exec");
|
||||||
|
|
||||||
|
if (exec != null && exec.contains (url)) {
|
||||||
|
return desktop_app;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Gee.HashMap<string, GLib.AppInfo> get_applications() {
|
||||||
|
|
||||||
|
var list = new Gee.HashMap<string, GLib.AppInfo>();
|
||||||
|
|
||||||
|
foreach (GLib.AppInfo app in GLib.AppInfo.get_all()) {
|
||||||
|
list.set(app.get_name(), app);
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
18
src/InfoDialog.vala
Normal file
18
src/InfoDialog.vala
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
public class InfoDialog : Gtk.Dialog {
|
||||||
|
|
||||||
|
public InfoDialog (string title, string label, string icon_name) {
|
||||||
|
|
||||||
|
this.title = title;
|
||||||
|
set_default_size (350, 100);
|
||||||
|
|
||||||
|
var box = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 5);
|
||||||
|
box.pack_start (new Gtk.Image.from_icon_name(icon_name, Gtk.IconSize.DIALOG), false, false, 0);
|
||||||
|
box.pack_start (new Gtk.Label (label), true, false, 0);
|
||||||
|
box.margin = 15;
|
||||||
|
|
||||||
|
Gtk.Box content = get_content_area () as Gtk.Box;
|
||||||
|
content.pack_start (box, true, true, 0);
|
||||||
|
|
||||||
|
add_button (_("Accept"), Gtk.ResponseType.ACCEPT);
|
||||||
|
}
|
||||||
|
}
|
0
src/Launcher.vala
Normal file
0
src/Launcher.vala
Normal file
23
src/Settings.vala
Normal file
23
src/Settings.vala
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
public class Settings : Granite.Services.Settings {
|
||||||
|
|
||||||
|
private static Settings settings;
|
||||||
|
public static Settings get_default () {
|
||||||
|
if (settings == null)
|
||||||
|
settings = new Settings ();
|
||||||
|
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
public int window_width { get; set; }
|
||||||
|
public int window_height { get; set; }
|
||||||
|
public WindowState window_state { get; set; }
|
||||||
|
|
||||||
|
private Settings () {
|
||||||
|
base ("org.pantheon.webby.SavedState");
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum WindowState {
|
||||||
|
NORMAL,
|
||||||
|
MAXIMIZED,
|
||||||
|
FULLSCREEN
|
||||||
|
}
|
||||||
|
}
|
15
src/UrlEntry.vala
Normal file
15
src/UrlEntry.vala
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
public class UrlEntry : Gtk.Entry {
|
||||||
|
|
||||||
|
|
||||||
|
public UrlEntry () {
|
||||||
|
editable = false;
|
||||||
|
set_icon_from_icon_name (Gtk.EntryIconPosition.SECONDARY, "view-refresh-symbolic");
|
||||||
|
set_icon_from_icon_name (Gtk.EntryIconPosition.PRIMARY, "text-html-symbolic");
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void get_preferred_width (out int minimum_width, out int natural_width) {
|
||||||
|
minimum_width = -1;
|
||||||
|
natural_width = 3000;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
152
src/WebApp.vala
Normal file
152
src/WebApp.vala
Normal file
|
@ -0,0 +1,152 @@
|
||||||
|
public class WebApp : Gtk.Stack {
|
||||||
|
|
||||||
|
public WebKit.WebView app_view;
|
||||||
|
public WebKit.WebView external_view;
|
||||||
|
public string ui_color = "none";
|
||||||
|
private string app_url;
|
||||||
|
private GLib.DesktopAppInfo info;
|
||||||
|
private DesktopFile file;
|
||||||
|
private WebKit.CookieManager cookie_manager;
|
||||||
|
private Gtk.Box container; //the spinner container
|
||||||
|
|
||||||
|
public signal void external_request ();
|
||||||
|
public signal void theme_color_changed(string color);
|
||||||
|
|
||||||
|
public WebApp (string webapp_name, string app_url) {
|
||||||
|
|
||||||
|
this.app_url = app_url;
|
||||||
|
set_transition_duration (1000);
|
||||||
|
|
||||||
|
//configure cookies settings
|
||||||
|
cookie_manager = WebKit.WebContext.get_default ().get_cookie_manager ();
|
||||||
|
cookie_manager.set_accept_policy (WebKit.CookieAcceptPolicy.ALWAYS);
|
||||||
|
|
||||||
|
string cookie_db = Environment.get_user_cache_dir () + "/webby/cookies/";
|
||||||
|
|
||||||
|
var dir = GLib.File.new_for_path (cookie_db);
|
||||||
|
|
||||||
|
if (!dir.query_exists (null)) {
|
||||||
|
try {
|
||||||
|
dir.make_directory_with_parents (null);
|
||||||
|
GLib.debug ("Directory '%s' created", dir.get_path ());
|
||||||
|
} catch (Error e) {
|
||||||
|
GLib.error ("Could not create caching directory.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cookie_manager.set_persistent_storage (cookie_db + "cookies.db", WebKit.CookiePersistentStorage.SQLITE);
|
||||||
|
|
||||||
|
//load app viewer
|
||||||
|
app_view = new WebKit.WebView.with_context (WebKit.WebContext.get_default ());
|
||||||
|
app_view.load_uri (app_url);
|
||||||
|
|
||||||
|
//create external viewer
|
||||||
|
this.external_view = new WebKit.WebView ();
|
||||||
|
|
||||||
|
//loading view
|
||||||
|
var spinner = new Gtk.Spinner();
|
||||||
|
spinner.active = true;
|
||||||
|
spinner.halign = Gtk.Align.CENTER;
|
||||||
|
spinner.valign = Gtk.Align.CENTER;
|
||||||
|
spinner.set_size_request (24, 24);
|
||||||
|
container = new Gtk.Box(Gtk.Orientation.VERTICAL, 0);
|
||||||
|
container.halign = Gtk.Align.FILL;
|
||||||
|
container.valign = Gtk.Align.FILL;
|
||||||
|
container.pack_start(spinner, true, true, 0);
|
||||||
|
|
||||||
|
//overlay trick to make snapshot work even with the spinner
|
||||||
|
var overlay = new Gtk.Overlay ();
|
||||||
|
overlay.add(app_view);
|
||||||
|
overlay.add_overlay(container);
|
||||||
|
|
||||||
|
add_titled(overlay, "app", "app");
|
||||||
|
add_titled(external_view, "external", "external");
|
||||||
|
set_visible_child_name ("app");
|
||||||
|
|
||||||
|
app_view.create.connect ( () => {
|
||||||
|
print("external request");
|
||||||
|
external_request ();
|
||||||
|
return external_view;
|
||||||
|
});
|
||||||
|
external_view.create.connect ( () => {
|
||||||
|
print("external request");
|
||||||
|
set_visible_child_name ("external");
|
||||||
|
return external_view;
|
||||||
|
});
|
||||||
|
|
||||||
|
info = DesktopFile.get_app_by_url(app_url);
|
||||||
|
file = new DesktopFile.from_desktopappinfo(info);
|
||||||
|
//load theme color saved in desktop file
|
||||||
|
if (info != null && info.has_key("WebbyThemeColor")) {
|
||||||
|
var color = info.get_string("WebbyThemeColor");
|
||||||
|
print("COLOR: " + color+"\n");
|
||||||
|
if(color != "none") {
|
||||||
|
ui_color = color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Gdk.RGBA background = {};
|
||||||
|
if (!background.parse (ui_color)){
|
||||||
|
background = {1,1,1,1};
|
||||||
|
}
|
||||||
|
container.override_background_color (Gtk.StateFlags.NORMAL, background);
|
||||||
|
|
||||||
|
//update theme color if changed
|
||||||
|
app_view.load_changed.connect ( (load_event) => {
|
||||||
|
if (load_event == WebKit.LoadEvent.FINISHED) {
|
||||||
|
print("determine color");
|
||||||
|
determine_theme_color.begin();
|
||||||
|
} else {
|
||||||
|
container.set_visible(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public DesktopFile get_desktop_file () {
|
||||||
|
return this.file;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**Taken from WebView.vala in lp:midori
|
||||||
|
* Check for the theme-color meta tag in the page and if that one can't be
|
||||||
|
* found grabs the color from the current page and uses the first 3 rows
|
||||||
|
* of pixels to get a good representative color of the page
|
||||||
|
*/
|
||||||
|
public async void determine_theme_color () {
|
||||||
|
|
||||||
|
//FIXME: This is useless without JSCore
|
||||||
|
/*string script = "var t = document.getElementsByTagName('meta').filter(function(e){return e.name == 'theme-color';)[0]; t ? t.value : null;";
|
||||||
|
app_view.run_javascript.begin (script, null, (obj, res)=> {
|
||||||
|
|
||||||
|
});*/
|
||||||
|
|
||||||
|
var snap = (Cairo.ImageSurface) yield app_view.get_snapshot (WebKit.SnapshotRegion.VISIBLE,
|
||||||
|
WebKit.SnapshotOptions.NONE, null);
|
||||||
|
|
||||||
|
// data ist in BGRA apparently (according to testing). Docs said ARGB, but that
|
||||||
|
// appears not to be the case
|
||||||
|
unowned uint8[] data = snap.get_data ();
|
||||||
|
uint8 r = data[2];
|
||||||
|
uint8 g = data[1];
|
||||||
|
uint8 b = data[0];
|
||||||
|
|
||||||
|
for (var i = 4; i < snap.get_width () * 3 * 4; i += 4) {
|
||||||
|
r = (r + data[i + 2]) / 2;
|
||||||
|
g = (g + data[i + 1]) / 2;
|
||||||
|
b = (b + data[i + 0]) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
var color = "#%02x%02x%02x".printf (r, g, b);
|
||||||
|
|
||||||
|
if (color != ui_color) {
|
||||||
|
ui_color = color;
|
||||||
|
Gdk.RGBA background = {};
|
||||||
|
background.parse (ui_color);
|
||||||
|
container.override_background_color (Gtk.StateFlags.NORMAL, background);
|
||||||
|
theme_color_changed(ui_color);
|
||||||
|
if (file != null)
|
||||||
|
file.edit_propertie ("WebbyThemeColor", ui_color);
|
||||||
|
}
|
||||||
|
container.set_visible(false);
|
||||||
|
}
|
||||||
|
}
|
142
src/WebAppWindow.vala
Normal file
142
src/WebAppWindow.vala
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
public class WebAppWindow : Gtk.ApplicationWindow {
|
||||||
|
|
||||||
|
private bool is_full_screen = false;
|
||||||
|
|
||||||
|
private string style_str = """@define-color titlebar_color @titlebar_color;""";
|
||||||
|
|
||||||
|
//widgets
|
||||||
|
private WebApp web_app;
|
||||||
|
private WebBar headerbar;
|
||||||
|
|
||||||
|
public WebAppWindow (string webapp_name, string webapp_uri) {
|
||||||
|
|
||||||
|
set_wmclass(webapp_uri, webapp_uri);
|
||||||
|
web_app = new WebApp(webapp_name, webapp_uri);
|
||||||
|
|
||||||
|
headerbar = new WebBar(web_app.external_view);
|
||||||
|
headerbar.show_close_button = true;
|
||||||
|
headerbar.title = webapp_name;
|
||||||
|
headerbar.set_title_mode (WebBar.title_mode.TITLE);
|
||||||
|
|
||||||
|
//style
|
||||||
|
if (web_app.ui_color != "none") {
|
||||||
|
try {
|
||||||
|
print("set color");
|
||||||
|
var style_cp = style_str.replace ("@titlebar_color", web_app.ui_color);
|
||||||
|
var style_provider = new Gtk.CssProvider ();
|
||||||
|
style_provider.load_from_data (style_cp, -1);
|
||||||
|
headerbar.get_style_context ().add_provider (style_provider, -1);
|
||||||
|
Gtk.Settings.get_default ().set ("gtk-application-prefer-dark-theme", should_use_dark_theme (web_app.ui_color));
|
||||||
|
} catch (GLib.Error err) {
|
||||||
|
warning("Loading style failed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
web_app.theme_color_changed.connect( (color)=> {
|
||||||
|
try {
|
||||||
|
print("set color");
|
||||||
|
var style_cp = style_str.replace ("@titlebar_color", color);
|
||||||
|
var style_provider = new Gtk.CssProvider ();
|
||||||
|
style_provider.load_from_data (style_cp, -1);
|
||||||
|
headerbar.get_style_context ().add_provider (style_provider, -1);
|
||||||
|
Gtk.Settings.get_default ().set ("gtk-application-prefer-dark-theme", should_use_dark_theme (color));
|
||||||
|
} catch (GLib.Error err) {
|
||||||
|
warning("Loading style failed");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.set_titlebar (headerbar);
|
||||||
|
|
||||||
|
var info = DesktopFile.get_app_by_url(webapp_uri);
|
||||||
|
var width = info.get_string("WebbyWindowWidth");
|
||||||
|
var height = info.get_string("WebbyWindowHeight");
|
||||||
|
|
||||||
|
if(width !=null && height != null)
|
||||||
|
set_default_size (int.parse(width), int.parse(height));
|
||||||
|
else
|
||||||
|
set_default_size (1000, 600);
|
||||||
|
this.delete_event.connect (() => {
|
||||||
|
update_window_state(this.get_allocated_width (), this.get_allocated_height () );
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
this.destroy.connect(Gtk.main_quit);
|
||||||
|
|
||||||
|
web_app.external_request.connect ( () => {
|
||||||
|
print("Web app external request\n");
|
||||||
|
web_app.set_transition_type (Gtk.StackTransitionType.SLIDE_LEFT);
|
||||||
|
headerbar.set_title_mode (WebBar.title_mode.BROWSER);
|
||||||
|
web_app.set_visible_child_name ("external");
|
||||||
|
});
|
||||||
|
|
||||||
|
headerbar.back_event.connect ( () => {
|
||||||
|
print ("back");
|
||||||
|
headerbar.set_title_mode (WebBar.title_mode.TITLE);
|
||||||
|
web_app.set_transition_type (Gtk.StackTransitionType.SLIDE_RIGHT);
|
||||||
|
web_app.set_visible_child_name ("app");
|
||||||
|
//wait the animation to end before "cleaning" the web view
|
||||||
|
GLib.Timeout.add(web_app.get_transition_duration(), () => {
|
||||||
|
web_app.external_view.load_uri ("about:blank");
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
add(web_app);
|
||||||
|
show_all();
|
||||||
|
}
|
||||||
|
|
||||||
|
public new void fullscreen () {
|
||||||
|
is_full_screen = true;
|
||||||
|
base.fullscreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
public new void unfullscreen () {
|
||||||
|
is_full_screen = false;
|
||||||
|
base.unfullscreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void toggle_fullscreen() {
|
||||||
|
if(is_full_screen)
|
||||||
|
unfullscreen();
|
||||||
|
else
|
||||||
|
fullscreen();
|
||||||
|
is_full_screen = !is_full_screen;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update_window_state (int width, int height) {
|
||||||
|
var file = web_app.get_desktop_file();
|
||||||
|
file.edit_propertie ("WebbyWindowWidth", width.to_string());
|
||||||
|
file.edit_propertie ("WebbyWindowHeight", height.to_string());
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool key_press_event (Gdk.EventKey event) {
|
||||||
|
bool handled = true;
|
||||||
|
switch (event.keyval) {
|
||||||
|
case Gdk.Key.Escape:
|
||||||
|
unfullscreen();
|
||||||
|
break;
|
||||||
|
case Gdk.Key.F11:
|
||||||
|
toggle_fullscreen();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
handled = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (handled)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return (base.key_press_event != null) ? base.key_press_event (event) : true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool should_use_dark_theme (string theme_color) {
|
||||||
|
Gdk.RGBA color = {};
|
||||||
|
color.parse (theme_color);
|
||||||
|
|
||||||
|
double prom = (color.red + color.blue + color.green)/3;
|
||||||
|
|
||||||
|
if (prom < 0.5)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
72
src/WebBar.vala
Normal file
72
src/WebBar.vala
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
public class WebBar : Gtk.HeaderBar {
|
||||||
|
|
||||||
|
|
||||||
|
public enum title_mode {
|
||||||
|
TITLE,
|
||||||
|
BROWSER;
|
||||||
|
}
|
||||||
|
|
||||||
|
UrlEntry url_entry;
|
||||||
|
Gtk.Button share_button;
|
||||||
|
Gtk.Button back_button;
|
||||||
|
WebKit.WebView webview;
|
||||||
|
|
||||||
|
public signal void back_event();
|
||||||
|
|
||||||
|
public WebBar (WebKit.WebView webview) {
|
||||||
|
|
||||||
|
|
||||||
|
this.get_style_context ().remove_class ("header-bar");
|
||||||
|
this.webview = webview;
|
||||||
|
|
||||||
|
url_entry = new UrlEntry();
|
||||||
|
url_entry.show_all();
|
||||||
|
|
||||||
|
share_button = new Gtk.Button.from_icon_name ("application-menu-symbolic", Gtk.IconSize.SMALL_TOOLBAR);
|
||||||
|
share_button.margin_left = 15;
|
||||||
|
share_button.show_all ();
|
||||||
|
|
||||||
|
back_button = new Gtk.Button.from_icon_name ("go-next-symbolic-rtl", Gtk.IconSize.SMALL_TOOLBAR);
|
||||||
|
back_button.margin_right = 15;
|
||||||
|
back_button.show_all ();
|
||||||
|
|
||||||
|
pack_start (back_button);
|
||||||
|
pack_start (url_entry);
|
||||||
|
pack_end (share_button);
|
||||||
|
|
||||||
|
custom_title = new Gtk.Label(null);
|
||||||
|
connect_signals ();
|
||||||
|
show();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void connect_signals () {
|
||||||
|
webview.load_changed.connect ( (event) => {
|
||||||
|
if (event == WebKit.LoadEvent.STARTED)
|
||||||
|
url_entry.set_text (webview.uri);
|
||||||
|
});
|
||||||
|
|
||||||
|
back_button.clicked.connect( () => { back_event(); });
|
||||||
|
back_button.activate.connect( () => { back_event(); });
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void set_title_mode (title_mode mode) {
|
||||||
|
|
||||||
|
if (mode == title_mode.TITLE) {
|
||||||
|
custom_title = null;
|
||||||
|
remove (share_button);
|
||||||
|
remove (back_button);
|
||||||
|
remove (url_entry);
|
||||||
|
this.get_style_context ().remove_class ("header-bar");
|
||||||
|
} else {
|
||||||
|
pack_start (back_button);
|
||||||
|
pack_start (url_entry);
|
||||||
|
pack_end (share_button);
|
||||||
|
custom_title = new Gtk.Label(null);
|
||||||
|
this.get_style_context ().add_class ("header-bar");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
15
src/Webby.vala
Normal file
15
src/Webby.vala
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
static int main (string[] args) {
|
||||||
|
|
||||||
|
Gtk.init (ref args);
|
||||||
|
|
||||||
|
if (args.length < 2 || args[1] == "--about" || args[1] == "-d") {
|
||||||
|
return AppWindow.instance.run (args);
|
||||||
|
} else {
|
||||||
|
var app_info = DesktopFile.get_app_by_url (args[1]);
|
||||||
|
var app = new WebAppWindow(app_info.get_display_name (), args[1]);
|
||||||
|
app.show_all ();
|
||||||
|
}
|
||||||
|
|
||||||
|
Gtk.main ();
|
||||||
|
return 0;
|
||||||
|
}
|
129
src/Widgets/ApplicationIcon.vala
Normal file
129
src/Widgets/ApplicationIcon.vala
Normal file
|
@ -0,0 +1,129 @@
|
||||||
|
public class ApplicationIcon : Gtk.Overlay {
|
||||||
|
|
||||||
|
Gtk.Image image;
|
||||||
|
Gtk.Label label;
|
||||||
|
Gtk.MenuButton conf_btn;
|
||||||
|
Gtk.Box box;
|
||||||
|
Gtk.ActionGroup action_group;
|
||||||
|
|
||||||
|
internal DesktopFile desktop_file { get; private set; }
|
||||||
|
|
||||||
|
public signal void deleted (Gtk.Container? parent);
|
||||||
|
public signal void edit_request (DesktopFile desktop_file);
|
||||||
|
|
||||||
|
public ApplicationIcon (GLib.DesktopAppInfo app) {
|
||||||
|
this.desktop_file = new DesktopFile.from_desktopappinfo (app);
|
||||||
|
|
||||||
|
hexpand = false;
|
||||||
|
vexpand = false;
|
||||||
|
|
||||||
|
label = new Gtk.Label (this.desktop_file.name);
|
||||||
|
|
||||||
|
set_icon (this.desktop_file.icon);
|
||||||
|
|
||||||
|
this.margin = 6;
|
||||||
|
this.margin_start = 20;
|
||||||
|
this.margin_end = 20;
|
||||||
|
|
||||||
|
var menu = new ActionMenu ();
|
||||||
|
menu.halign = Gtk.Align.CENTER;
|
||||||
|
menu.delete_clicked.connect (() => { remove_application (); });
|
||||||
|
menu.edit_clicked.connect (() => { edit_request (desktop_file); });
|
||||||
|
|
||||||
|
box = new Gtk.Box (Gtk.Orientation.VERTICAL, 0);
|
||||||
|
box.pack_start (image, false, false, 0);
|
||||||
|
box.pack_start (label, false, false, 0);
|
||||||
|
box.pack_start (menu, false, false, 0);
|
||||||
|
|
||||||
|
box.hexpand = false;
|
||||||
|
box.vexpand = false;
|
||||||
|
|
||||||
|
var event_box = new Gtk.EventBox ();
|
||||||
|
event_box.add (box);
|
||||||
|
event_box.events |= Gdk.EventMask.ENTER_NOTIFY_MASK|Gdk.EventMask.LEAVE_NOTIFY_MASK;
|
||||||
|
|
||||||
|
event_box.enter_notify_event.connect ((event) => {
|
||||||
|
menu.set_reveal_child (true);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
event_box.leave_notify_event.connect ((event) => {
|
||||||
|
if (event.detail == Gdk.NotifyType.INFERIOR)
|
||||||
|
return false;
|
||||||
|
menu.set_reveal_child (false);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
this.add (event_box);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void set_new_desktopfile (DesktopFile desktop_file) {
|
||||||
|
this.desktop_file = desktop_file;
|
||||||
|
set_icon (this.desktop_file.icon);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void set_icon (string icon) {
|
||||||
|
if (File.new_for_path (icon).query_exists ()) {
|
||||||
|
var pix = new Gdk.Pixbuf.from_file (icon);
|
||||||
|
|
||||||
|
int new_height = 64;
|
||||||
|
int new_width = 64;
|
||||||
|
int margin_vertical = 0;
|
||||||
|
int margin_horizontal = 0;
|
||||||
|
|
||||||
|
if (pix.height > pix.width) {
|
||||||
|
new_width = new_width * pix.width / pix.height;
|
||||||
|
margin_horizontal = (new_height - new_width) / 2;
|
||||||
|
} else if (pix.height < pix.width) {
|
||||||
|
new_height = new_height * pix.height / pix.width;
|
||||||
|
margin_vertical = (new_width - new_height) / 2;
|
||||||
|
}
|
||||||
|
if (image == null)
|
||||||
|
image = new Gtk.Image.from_pixbuf (pix.scale_simple (new_width, new_height, Gdk.InterpType.BILINEAR));
|
||||||
|
else
|
||||||
|
image.set_from_pixbuf (pix.scale_simple (new_width, new_height, Gdk.InterpType.BILINEAR));
|
||||||
|
|
||||||
|
image.margin_top = margin_vertical;
|
||||||
|
image.margin_bottom = margin_vertical;
|
||||||
|
image.margin_right = margin_horizontal;
|
||||||
|
image.margin_left = margin_horizontal;
|
||||||
|
} else {
|
||||||
|
image = new Gtk.Image ();
|
||||||
|
image.icon_name = icon;
|
||||||
|
image.pixel_size = 64;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void remove_application () {
|
||||||
|
desktop_file.delete_file ();
|
||||||
|
deleted (this.get_parent());
|
||||||
|
this.destroy ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ActionMenu : Gtk.Revealer {
|
||||||
|
|
||||||
|
public signal void delete_clicked ();
|
||||||
|
public signal void edit_clicked ();
|
||||||
|
|
||||||
|
public ActionMenu () {
|
||||||
|
var delete_button = new Gtk.Button.from_icon_name ("edit-delete-symbolic", Gtk.IconSize.BUTTON);
|
||||||
|
delete_button.tooltip_text = _("Delete Webapp");
|
||||||
|
delete_button.relief = Gtk.ReliefStyle.NONE;
|
||||||
|
delete_button.clicked.connect (() => { delete_clicked (); });
|
||||||
|
|
||||||
|
var edit_button = new Gtk.Button.from_icon_name ("edit-symbolic", Gtk.IconSize.BUTTON);
|
||||||
|
edit_button.tooltip_text = _("Edit Webapp Properties");
|
||||||
|
edit_button.relief = Gtk.ReliefStyle.NONE;
|
||||||
|
edit_button.clicked.connect (() => { edit_clicked (); });
|
||||||
|
|
||||||
|
var buttons = new Gtk.Grid ();
|
||||||
|
buttons.orientation = Gtk.Orientation.HORIZONTAL;
|
||||||
|
buttons.add (edit_button);
|
||||||
|
buttons.add (delete_button);
|
||||||
|
buttons.opacity = 0.5;
|
||||||
|
|
||||||
|
this.transition_type = Gtk.RevealerTransitionType.CROSSFADE;
|
||||||
|
this.add (buttons);
|
||||||
|
}
|
||||||
|
}
|
86
src/Widgets/ApplicationsView.vala
Normal file
86
src/Widgets/ApplicationsView.vala
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
public class ApplicationsView : Gtk.Box {
|
||||||
|
|
||||||
|
public signal void add_request();
|
||||||
|
public signal void edit_request(DesktopFile desktop_file);
|
||||||
|
public signal void app_deleted ();
|
||||||
|
|
||||||
|
private Gtk.FlowBox icon_view;
|
||||||
|
private Gee.HashMap<string, GLib.DesktopAppInfo> applications;
|
||||||
|
|
||||||
|
public bool has_items { get { return icon_view.get_children ().length () > 0; } }
|
||||||
|
|
||||||
|
public ApplicationsView () {
|
||||||
|
|
||||||
|
GLib.Object (orientation: Gtk.Orientation.VERTICAL);
|
||||||
|
var scrolled = new Gtk.ScrolledWindow (null, null);
|
||||||
|
scrolled.hscrollbar_policy = Gtk.PolicyType.NEVER;
|
||||||
|
|
||||||
|
icon_view = new Gtk.FlowBox();
|
||||||
|
icon_view.valign = Gtk.Align.START;
|
||||||
|
icon_view.vexpand = false;
|
||||||
|
icon_view.homogeneous = true;
|
||||||
|
icon_view.column_spacing = 15;
|
||||||
|
icon_view.row_spacing = 15;
|
||||||
|
icon_view.margin = 15;
|
||||||
|
icon_view.activate_on_single_click = false;
|
||||||
|
icon_view.child_activated.connect ((child) => {
|
||||||
|
if ((child as Gtk.FlowBoxChild).get_child () is ApplicationIcon) {
|
||||||
|
var app_icon = (child as Gtk.FlowBoxChild).get_child () as ApplicationIcon;
|
||||||
|
try {
|
||||||
|
Process.spawn_command_line_async ("webby " + app_icon.desktop_file.url);
|
||||||
|
} catch (SpawnError e) {
|
||||||
|
debug ("Error: %s\n", e.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
load_applications ();
|
||||||
|
|
||||||
|
scrolled.add(icon_view);
|
||||||
|
this.pack_start(scrolled, true, true, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void load_applications () {
|
||||||
|
applications = DesktopFile.get_webby_applications();
|
||||||
|
|
||||||
|
foreach (GLib.DesktopAppInfo app in applications.values) {
|
||||||
|
this.add_button (app);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void add_button (GLib.DesktopAppInfo app) {
|
||||||
|
var image = new ApplicationIcon (app);
|
||||||
|
image.edit_request.connect ((desktop_file) => {
|
||||||
|
edit_request (desktop_file);
|
||||||
|
icon_view.unselect_all ();
|
||||||
|
});
|
||||||
|
image.deleted.connect ((parent) => {
|
||||||
|
this.icon_view.remove (parent);
|
||||||
|
app_deleted ();
|
||||||
|
});
|
||||||
|
icon_view.add (image);
|
||||||
|
icon_view.show_all ();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void select_last_item () {
|
||||||
|
icon_view.select_child (icon_view.get_child_at_index ((int)icon_view.get_children ().length () - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void select_first_item () {
|
||||||
|
icon_view.select_child (icon_view.get_child_at_index (0));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update_button (GLib.DesktopAppInfo app) {
|
||||||
|
foreach (var item in icon_view.get_children ()) {
|
||||||
|
if ((item as Gtk.FlowBoxChild).get_child () is ApplicationIcon) {
|
||||||
|
var app_icon = (item as Gtk.FlowBoxChild).get_child () as ApplicationIcon;
|
||||||
|
|
||||||
|
if (app_icon.desktop_file.name == app.get_display_name ()) {
|
||||||
|
app_icon.set_new_desktopfile (new DesktopFile.from_desktopappinfo (app));
|
||||||
|
icon_view.select_child (item as Gtk.FlowBoxChild);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2
vapi/CMakeLists.txt
Normal file
2
vapi/CMakeLists.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
install(FILES webkit2gtk-3.0.deps webkit2gtk-3.0.vapi DESTINATION share/vala-0.26/vapi)
|
||||||
|
|
42
vapi/cmake/GSettings.cmake
Normal file
42
vapi/cmake/GSettings.cmake
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
# GSettings.cmake, CMake macros written for Marlin, feel free to re-use them.
|
||||||
|
|
||||||
|
option (GSETTINGS_LOCALINSTALL "Install GSettings Schemas locally instead of to the GLib prefix" ON)
|
||||||
|
|
||||||
|
option (GSETTINGS_COMPILE "Compile GSettings Schemas after installation" ${GSETTINGS_LOCALINSTALL})
|
||||||
|
|
||||||
|
if(GSETTINGS_LOCALINSTALL)
|
||||||
|
message(STATUS "GSettings schemas will be installed locally.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(GSETTINGS_COMPILE)
|
||||||
|
message(STATUS "GSettings shemas will be compiled.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
macro(add_schema SCHEMA_NAME)
|
||||||
|
|
||||||
|
set(PKG_CONFIG_EXECUTABLE pkg-config)
|
||||||
|
# Have an option to not install the schema into where GLib is
|
||||||
|
if (GSETTINGS_LOCALINSTALL)
|
||||||
|
SET (GSETTINGS_DIR "${CMAKE_INSTALL_PREFIX}/share/glib-2.0/schemas/")
|
||||||
|
else (GSETTINGS_LOCALINSTALL)
|
||||||
|
execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} glib-2.0 --variable prefix OUTPUT_VARIABLE _glib_prefix OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
SET (GSETTINGS_DIR "${_glib_prefix}/share/glib-2.0/schemas/")
|
||||||
|
endif (GSETTINGS_LOCALINSTALL)
|
||||||
|
|
||||||
|
# Run the validator and error if it fails
|
||||||
|
execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} gio-2.0 --variable glib_compile_schemas OUTPUT_VARIABLE _glib_comple_schemas OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
execute_process (COMMAND ${_glib_comple_schemas} --dry-run --schema-file=${CMAKE_CURRENT_SOURCE_DIR}/${SCHEMA_NAME} ERROR_VARIABLE _schemas_invalid OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
|
||||||
|
if (_schemas_invalid)
|
||||||
|
message (SEND_ERROR "Schema validation error: ${_schemas_invalid}")
|
||||||
|
endif (_schemas_invalid)
|
||||||
|
|
||||||
|
# Actually install and recomple schemas
|
||||||
|
message (STATUS "GSettings schemas will be installed into ${GSETTINGS_DIR}")
|
||||||
|
install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/${SCHEMA_NAME} DESTINATION ${GSETTINGS_DIR} OPTIONAL)
|
||||||
|
|
||||||
|
if (GSETTINGS_COMPILE)
|
||||||
|
install (CODE "message (STATUS \"Compiling GSettings schemas\")")
|
||||||
|
install (CODE "execute_process (COMMAND ${_glib_comple_schemas} ${GSETTINGS_DIR})")
|
||||||
|
endif ()
|
||||||
|
endmacro()
|
286
vapi/cmake/Makefile
Normal file
286
vapi/cmake/Makefile
Normal file
|
@ -0,0 +1,286 @@
|
||||||
|
# CMAKE generated file: DO NOT EDIT!
|
||||||
|
# Generated by "Unix Makefiles" Generator, CMake Version 2.8
|
||||||
|
|
||||||
|
# Default target executed when no arguments are given to make.
|
||||||
|
default_target: all
|
||||||
|
.PHONY : default_target
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Special targets provided by cmake.
|
||||||
|
|
||||||
|
# Disable implicit rules so canoncical targets will work.
|
||||||
|
.SUFFIXES:
|
||||||
|
|
||||||
|
# Remove some rules from gmake that .SUFFIXES does not remove.
|
||||||
|
SUFFIXES =
|
||||||
|
|
||||||
|
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||||
|
|
||||||
|
# Suppress display of executed commands.
|
||||||
|
$(VERBOSE).SILENT:
|
||||||
|
|
||||||
|
# A target that is always out of date.
|
||||||
|
cmake_force:
|
||||||
|
.PHONY : cmake_force
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Set environment variables for the build.
|
||||||
|
|
||||||
|
# The shell in which to execute make rules.
|
||||||
|
SHELL = /bin/sh
|
||||||
|
|
||||||
|
# The CMake executable.
|
||||||
|
CMAKE_COMMAND = /usr/bin/cmake
|
||||||
|
|
||||||
|
# The command to remove a file.
|
||||||
|
RM = /usr/bin/cmake -E remove -f
|
||||||
|
|
||||||
|
# The top-level source directory on which CMake was run.
|
||||||
|
CMAKE_SOURCE_DIR = /home/mefrio/Scrivania/cmake
|
||||||
|
|
||||||
|
# The top-level build directory on which CMake was run.
|
||||||
|
CMAKE_BINARY_DIR = /home/mefrio/Scrivania/cmake/cmake
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Targets provided globally by CMake.
|
||||||
|
|
||||||
|
# Special rule for the target edit_cache
|
||||||
|
edit_cache:
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running interactive CMake command-line interface..."
|
||||||
|
/usr/bin/cmake -i .
|
||||||
|
.PHONY : edit_cache
|
||||||
|
|
||||||
|
# Special rule for the target edit_cache
|
||||||
|
edit_cache/fast: edit_cache
|
||||||
|
.PHONY : edit_cache/fast
|
||||||
|
|
||||||
|
# Special rule for the target install
|
||||||
|
install: preinstall
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
|
||||||
|
/usr/bin/cmake -P cmake_install.cmake
|
||||||
|
.PHONY : install
|
||||||
|
|
||||||
|
# Special rule for the target install
|
||||||
|
install/fast: preinstall/fast
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
|
||||||
|
/usr/bin/cmake -P cmake_install.cmake
|
||||||
|
.PHONY : install/fast
|
||||||
|
|
||||||
|
# Special rule for the target install/local
|
||||||
|
install/local: preinstall
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
|
||||||
|
/usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
|
||||||
|
.PHONY : install/local
|
||||||
|
|
||||||
|
# Special rule for the target install/local
|
||||||
|
install/local/fast: install/local
|
||||||
|
.PHONY : install/local/fast
|
||||||
|
|
||||||
|
# Special rule for the target install/strip
|
||||||
|
install/strip: preinstall
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
|
||||||
|
/usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
|
||||||
|
.PHONY : install/strip
|
||||||
|
|
||||||
|
# Special rule for the target install/strip
|
||||||
|
install/strip/fast: install/strip
|
||||||
|
.PHONY : install/strip/fast
|
||||||
|
|
||||||
|
# Special rule for the target list_install_components
|
||||||
|
list_install_components:
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
|
||||||
|
.PHONY : list_install_components
|
||||||
|
|
||||||
|
# Special rule for the target list_install_components
|
||||||
|
list_install_components/fast: list_install_components
|
||||||
|
.PHONY : list_install_components/fast
|
||||||
|
|
||||||
|
# Special rule for the target rebuild_cache
|
||||||
|
rebuild_cache:
|
||||||
|
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
|
||||||
|
/usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
|
||||||
|
.PHONY : rebuild_cache
|
||||||
|
|
||||||
|
# Special rule for the target rebuild_cache
|
||||||
|
rebuild_cache/fast: rebuild_cache
|
||||||
|
.PHONY : rebuild_cache/fast
|
||||||
|
|
||||||
|
# The main all target
|
||||||
|
all: cmake_check_build_system
|
||||||
|
$(CMAKE_COMMAND) -E cmake_progress_start /home/mefrio/Scrivania/cmake/cmake/CMakeFiles /home/mefrio/Scrivania/cmake/cmake/CMakeFiles/progress.marks
|
||||||
|
$(MAKE) -f CMakeFiles/Makefile2 all
|
||||||
|
$(CMAKE_COMMAND) -E cmake_progress_start /home/mefrio/Scrivania/cmake/cmake/CMakeFiles 0
|
||||||
|
.PHONY : all
|
||||||
|
|
||||||
|
# The main clean target
|
||||||
|
clean:
|
||||||
|
$(MAKE) -f CMakeFiles/Makefile2 clean
|
||||||
|
.PHONY : clean
|
||||||
|
|
||||||
|
# The main clean target
|
||||||
|
clean/fast: clean
|
||||||
|
.PHONY : clean/fast
|
||||||
|
|
||||||
|
# Prepare targets for installation.
|
||||||
|
preinstall: all
|
||||||
|
$(MAKE) -f CMakeFiles/Makefile2 preinstall
|
||||||
|
.PHONY : preinstall
|
||||||
|
|
||||||
|
# Prepare targets for installation.
|
||||||
|
preinstall/fast:
|
||||||
|
$(MAKE) -f CMakeFiles/Makefile2 preinstall
|
||||||
|
.PHONY : preinstall/fast
|
||||||
|
|
||||||
|
# clear depends
|
||||||
|
depend:
|
||||||
|
$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
|
||||||
|
.PHONY : depend
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Target rules for targets named scratch
|
||||||
|
|
||||||
|
# Build rule for target.
|
||||||
|
scratch: cmake_check_build_system
|
||||||
|
$(MAKE) -f CMakeFiles/Makefile2 scratch
|
||||||
|
.PHONY : scratch
|
||||||
|
|
||||||
|
# fast build rule for target.
|
||||||
|
scratch/fast:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/build
|
||||||
|
.PHONY : scratch/fast
|
||||||
|
|
||||||
|
src/entry.o: src/entry.c.o
|
||||||
|
.PHONY : src/entry.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/entry.c.o:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/entry.c.o
|
||||||
|
.PHONY : src/entry.c.o
|
||||||
|
|
||||||
|
src/entry.i: src/entry.c.i
|
||||||
|
.PHONY : src/entry.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/entry.c.i:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/entry.c.i
|
||||||
|
.PHONY : src/entry.c.i
|
||||||
|
|
||||||
|
src/entry.s: src/entry.c.s
|
||||||
|
.PHONY : src/entry.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/entry.c.s:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/entry.c.s
|
||||||
|
.PHONY : src/entry.c.s
|
||||||
|
|
||||||
|
src/main_window.o: src/main_window.c.o
|
||||||
|
.PHONY : src/main_window.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/main_window.c.o:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/main_window.c.o
|
||||||
|
.PHONY : src/main_window.c.o
|
||||||
|
|
||||||
|
src/main_window.i: src/main_window.c.i
|
||||||
|
.PHONY : src/main_window.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/main_window.c.i:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/main_window.c.i
|
||||||
|
.PHONY : src/main_window.c.i
|
||||||
|
|
||||||
|
src/main_window.s: src/main_window.c.s
|
||||||
|
.PHONY : src/main_window.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/main_window.c.s:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/main_window.c.s
|
||||||
|
.PHONY : src/main_window.c.s
|
||||||
|
|
||||||
|
src/menu.o: src/menu.c.o
|
||||||
|
.PHONY : src/menu.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/menu.c.o:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/menu.c.o
|
||||||
|
.PHONY : src/menu.c.o
|
||||||
|
|
||||||
|
src/menu.i: src/menu.c.i
|
||||||
|
.PHONY : src/menu.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/menu.c.i:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/menu.c.i
|
||||||
|
.PHONY : src/menu.c.i
|
||||||
|
|
||||||
|
src/menu.s: src/menu.c.s
|
||||||
|
.PHONY : src/menu.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/menu.c.s:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/menu.c.s
|
||||||
|
.PHONY : src/menu.c.s
|
||||||
|
|
||||||
|
src/notebook.o: src/notebook.c.o
|
||||||
|
.PHONY : src/notebook.o
|
||||||
|
|
||||||
|
# target to build an object file
|
||||||
|
src/notebook.c.o:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/notebook.c.o
|
||||||
|
.PHONY : src/notebook.c.o
|
||||||
|
|
||||||
|
src/notebook.i: src/notebook.c.i
|
||||||
|
.PHONY : src/notebook.i
|
||||||
|
|
||||||
|
# target to preprocess a source file
|
||||||
|
src/notebook.c.i:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/notebook.c.i
|
||||||
|
.PHONY : src/notebook.c.i
|
||||||
|
|
||||||
|
src/notebook.s: src/notebook.c.s
|
||||||
|
.PHONY : src/notebook.s
|
||||||
|
|
||||||
|
# target to generate assembly for a file
|
||||||
|
src/notebook.c.s:
|
||||||
|
$(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/notebook.c.s
|
||||||
|
.PHONY : src/notebook.c.s
|
||||||
|
|
||||||
|
# Help Target
|
||||||
|
help:
|
||||||
|
@echo "The following are some of the valid targets for this Makefile:"
|
||||||
|
@echo "... all (the default if no target is provided)"
|
||||||
|
@echo "... clean"
|
||||||
|
@echo "... depend"
|
||||||
|
@echo "... edit_cache"
|
||||||
|
@echo "... install"
|
||||||
|
@echo "... install/local"
|
||||||
|
@echo "... install/strip"
|
||||||
|
@echo "... list_install_components"
|
||||||
|
@echo "... rebuild_cache"
|
||||||
|
@echo "... scratch"
|
||||||
|
@echo "... src/entry.o"
|
||||||
|
@echo "... src/entry.i"
|
||||||
|
@echo "... src/entry.s"
|
||||||
|
@echo "... src/main_window.o"
|
||||||
|
@echo "... src/main_window.i"
|
||||||
|
@echo "... src/main_window.s"
|
||||||
|
@echo "... src/menu.o"
|
||||||
|
@echo "... src/menu.i"
|
||||||
|
@echo "... src/menu.s"
|
||||||
|
@echo "... src/notebook.o"
|
||||||
|
@echo "... src/notebook.i"
|
||||||
|
@echo "... src/notebook.s"
|
||||||
|
.PHONY : help
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Special targets to cleanup operation of make.
|
||||||
|
|
||||||
|
# Special rule to run CMake to check the build system integrity.
|
||||||
|
# No rule that depends on this can have commands that come from listfiles
|
||||||
|
# because they might be regenerated.
|
||||||
|
cmake_check_build_system:
|
||||||
|
$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
|
||||||
|
.PHONY : cmake_check_build_system
|
||||||
|
|
10
vapi/cmake/README
Normal file
10
vapi/cmake/README
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
Elementary CMake modules
|
||||||
|
|
||||||
|
This is a set of CMake modules: Translations, GSettings, and Vala modules.
|
||||||
|
|
||||||
|
For all the Vala related modules see README.Vala.rst:
|
||||||
|
- ParseArguments.cmake
|
||||||
|
- ValaPrecompile.cmake
|
||||||
|
- ValaVersion.cmake
|
||||||
|
- FindVala.cmake
|
||||||
|
|
173
vapi/cmake/README.Vala.rst
Normal file
173
vapi/cmake/README.Vala.rst
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
==========
|
||||||
|
Vala CMake
|
||||||
|
==========
|
||||||
|
:Author:
|
||||||
|
Jakob Westhoff
|
||||||
|
:Version:
|
||||||
|
Draft
|
||||||
|
|
||||||
|
|
||||||
|
Overview
|
||||||
|
========
|
||||||
|
|
||||||
|
Vala CMake is a collection of macros for the CMake_ build system to allow the
|
||||||
|
creation and management of projects developed using the Vala_ programming
|
||||||
|
language or its "Genie" flavor (less tested).
|
||||||
|
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
To use the Vala macros in your own project you need to copy the macro files to
|
||||||
|
an arbitrary folder in your projects directory and reference them in your
|
||||||
|
``CMakeLists.txt`` file.
|
||||||
|
|
||||||
|
Assuming the macros are stored under ``cmake/vala`` in your projects folder you
|
||||||
|
need to add the following information to your base ``CMakeLists.txt``::
|
||||||
|
|
||||||
|
list(APPEND CMAKE_MODULE_PATH
|
||||||
|
${CMAKE_SOURCE_DIR}/cmake/vala
|
||||||
|
)
|
||||||
|
|
||||||
|
After the new module path as been added you can simply include the provided
|
||||||
|
modules or use the provided find routines.
|
||||||
|
|
||||||
|
|
||||||
|
Finding Vala
|
||||||
|
============
|
||||||
|
|
||||||
|
The find module for vala works like any other Find module in CMake.
|
||||||
|
You can use it by simply calling the usual ``find_package`` function. Default
|
||||||
|
parameters like ``REQUIRED`` and ``QUIETLY`` are supported.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
find_package(Vala REQUIRED)
|
||||||
|
|
||||||
|
After a successful call to the find_package function the following variables
|
||||||
|
will be set:
|
||||||
|
|
||||||
|
VALA_FOUND
|
||||||
|
Whether the vala compiler has been found or not
|
||||||
|
|
||||||
|
VALA_EXECUTABLE
|
||||||
|
Full path to the valac executable if it has been found
|
||||||
|
|
||||||
|
VALA_VERSION
|
||||||
|
Version number of the available valac
|
||||||
|
|
||||||
|
|
||||||
|
Precompiling Vala sources
|
||||||
|
=========================
|
||||||
|
|
||||||
|
CMake is mainly supposed to handle c or c++ based projects. Luckily every vala
|
||||||
|
program is translated into plain c code using the vala compiler, followed by
|
||||||
|
normal compilation of the generated c program using gcc.
|
||||||
|
|
||||||
|
The macro ``vala_precompile`` uses that fact to create c files from your .vala
|
||||||
|
sources for further CMake processing.
|
||||||
|
|
||||||
|
The first parameter provided is a variable, which will be filled with a list of
|
||||||
|
c files outputted by the vala compiler. This list can than be used in
|
||||||
|
conjunction with functions like ``add_executable`` or others to create the
|
||||||
|
necessary compile rules with CMake.
|
||||||
|
|
||||||
|
The initial variable is followed by a list of .vala files to be compiled.
|
||||||
|
Please take care to add every vala file belonging to the currently compiled
|
||||||
|
project or library as Vala will otherwise not be able to resolve all
|
||||||
|
dependencies.
|
||||||
|
|
||||||
|
The following sections may be specified afterwards to provide certain options
|
||||||
|
to the vala compiler:
|
||||||
|
|
||||||
|
PACKAGES
|
||||||
|
A list of vala packages/libraries to be used during the compile cycle. The
|
||||||
|
package names are exactly the same, as they would be passed to the valac
|
||||||
|
"--pkg=" option.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
A list of optional options to be passed to the valac executable. This can be
|
||||||
|
used to pass "--thread" for example to enable multi-threading support.
|
||||||
|
|
||||||
|
DIRECTORY
|
||||||
|
Specify the directory where the output source files will be stored. If
|
||||||
|
ommitted, the source files will be stored in CMAKE_CURRENT_BINARY_DIR.
|
||||||
|
|
||||||
|
CUSTOM_VAPIS
|
||||||
|
A list of custom vapi files to be included for compilation. This can be
|
||||||
|
useful to include freshly created vala libraries without having to install
|
||||||
|
them in the system.
|
||||||
|
|
||||||
|
GENERATE_VAPI
|
||||||
|
Pass all the needed flags to the compiler to create an internal vapi for
|
||||||
|
the compiled library. The provided name will be used for this and a
|
||||||
|
<provided_name>.vapi file will be created.
|
||||||
|
|
||||||
|
GENERATE_HEADER
|
||||||
|
Let the compiler generate a header file for the compiled code. There will
|
||||||
|
be a header file as well as an internal header file being generated called
|
||||||
|
<provided_name>.h and <provided_name>_internal.h
|
||||||
|
|
||||||
|
The following call is a simple example to the vala_precompile macro showing an
|
||||||
|
example to every of the optional sections::
|
||||||
|
|
||||||
|
vala_precompile(VALA_C
|
||||||
|
source1.vala
|
||||||
|
source2.vala
|
||||||
|
source3.vala
|
||||||
|
PACKAGES
|
||||||
|
gtk+-2.0
|
||||||
|
gio-1.0
|
||||||
|
posix
|
||||||
|
OPTIONS
|
||||||
|
--thread
|
||||||
|
CUSTOM_VAPIS
|
||||||
|
some_vapi.vapi
|
||||||
|
GENERATE_VAPI
|
||||||
|
myvapi
|
||||||
|
GENERATE_HEADER
|
||||||
|
myheader
|
||||||
|
)
|
||||||
|
|
||||||
|
Most important is the variable VALA_C which will contain all the generated c
|
||||||
|
file names after the call. The easiest way to use this information is to tell
|
||||||
|
CMake to create an executable out of it.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
add_executable(myexecutable ${VALA_C})
|
||||||
|
|
||||||
|
|
||||||
|
Further reading
|
||||||
|
===============
|
||||||
|
|
||||||
|
The `Pdf Presenter Console`__ , which is a vala based project of mine, makes
|
||||||
|
heavy usage of the here described macros. To look at a real world example of
|
||||||
|
these macros the mentioned project is the right place to take a look. The svn
|
||||||
|
trunk of it can be found at::
|
||||||
|
|
||||||
|
svn://pureenergy.cc/pdf_presenter_console/trunk
|
||||||
|
|
||||||
|
|
||||||
|
__ http://westhoffswelt.de/projects/pdf_presenter_console.html
|
||||||
|
|
||||||
|
|
||||||
|
Acknowledgments
|
||||||
|
===============
|
||||||
|
|
||||||
|
Thanks go out to Florian Sowade, a fellow local PHP-Usergroupie, who helped me
|
||||||
|
a lot with the initial version of this macros and always answered my mostly
|
||||||
|
dumb CMake questions.
|
||||||
|
|
||||||
|
.. _CMake: http://cmake.org
|
||||||
|
.. _Vala: http://live.gnome.org/Vala
|
||||||
|
.. _Genie: http://live.gnome.org/Genie
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
..
|
||||||
|
Local Variables:
|
||||||
|
mode: rst
|
||||||
|
fill-column: 79
|
||||||
|
End:
|
||||||
|
vim: et syn=rst tw=79
|
41
vapi/cmake/Translations.cmake
Normal file
41
vapi/cmake/Translations.cmake
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
# Translations.cmake, CMake macros written for Marlin, feel free to re-use them
|
||||||
|
|
||||||
|
macro(add_translations_directory NLS_PACKAGE)
|
||||||
|
add_custom_target (i18n ALL COMMENT “Building i18n messages.”)
|
||||||
|
find_program (MSGFMT_EXECUTABLE msgfmt)
|
||||||
|
file (GLOB PO_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.po)
|
||||||
|
foreach (PO_INPUT ${PO_FILES})
|
||||||
|
get_filename_component (PO_INPUT_BASE ${PO_INPUT} NAME_WE)
|
||||||
|
set (MO_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PO_INPUT_BASE}.mo)
|
||||||
|
add_custom_command (TARGET i18n COMMAND ${MSGFMT_EXECUTABLE} -o ${MO_OUTPUT} ${PO_INPUT})
|
||||||
|
|
||||||
|
install (FILES ${MO_OUTPUT} DESTINATION
|
||||||
|
share/locale/${PO_INPUT_BASE}/LC_MESSAGES
|
||||||
|
RENAME ${NLS_PACKAGE}.mo)
|
||||||
|
endforeach (PO_INPUT ${PO_FILES})
|
||||||
|
endmacro(add_translations_directory)
|
||||||
|
|
||||||
|
|
||||||
|
macro(add_translations_catalog NLS_PACKAGE)
|
||||||
|
add_custom_target (pot COMMENT “Building translation catalog.”)
|
||||||
|
find_program (XGETTEXT_EXECUTABLE xgettext)
|
||||||
|
|
||||||
|
|
||||||
|
set(C_SOURCE "")
|
||||||
|
|
||||||
|
foreach(FILES_INPUT ${ARGN})
|
||||||
|
file (GLOB SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/${FILES_INPUT}/*.c)
|
||||||
|
foreach(C_FILE ${SOURCE_FILES})
|
||||||
|
set(C_SOURCE ${C_SOURCE} ${C_FILE})
|
||||||
|
endforeach()
|
||||||
|
file (GLOB SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/${FILES_INPUT}/*.vala)
|
||||||
|
foreach(C_FILE ${SOURCE_FILES})
|
||||||
|
set(C_SOURCE ${C_SOURCE} ${C_FILE})
|
||||||
|
endforeach()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
add_custom_command (TARGET pot COMMAND
|
||||||
|
${XGETTEXT_EXECUTABLE} -d ${NLS_PACKAGE} -o ${CMAKE_CURRENT_SOURCE_DIR}/${NLS_PACKAGE}.pot
|
||||||
|
${VALA_SOURCE} ${C_SOURCE} --keyword="_" --from-code=UTF-8
|
||||||
|
)
|
||||||
|
endmacro()
|
21
vapi/cmake/uninstall.cmake
Normal file
21
vapi/cmake/uninstall.cmake
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
||||||
|
message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
|
||||||
|
string(REGEX REPLACE "\n" ";" files "${files}")
|
||||||
|
foreach(file ${files})
|
||||||
|
message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
|
||||||
|
if(EXISTS "$ENV{DESTDIR}${file}")
|
||||||
|
exec_program(
|
||||||
|
"@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
|
||||||
|
OUTPUT_VARIABLE rm_out
|
||||||
|
RETURN_VALUE rm_retval
|
||||||
|
)
|
||||||
|
if(NOT "${rm_retval}" STREQUAL 0)
|
||||||
|
message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
|
||||||
|
endif()
|
||||||
|
else(EXISTS "$ENV{DESTDIR}${file}")
|
||||||
|
message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
65
vapi/cmake/vala/FindVala.cmake
Normal file
65
vapi/cmake/vala/FindVala.cmake
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
##
|
||||||
|
# Copyright 2009-2010 Jakob Westhoff. All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
#
|
||||||
|
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer in the documentation
|
||||||
|
# and/or other materials provided with the distribution.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY JAKOB WESTHOFF ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||||
|
# EVENT SHALL JAKOB WESTHOFF OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
#
|
||||||
|
# The views and conclusions contained in the software and documentation are those
|
||||||
|
# of the authors and should not be interpreted as representing official policies,
|
||||||
|
# either expressed or implied, of Jakob Westhoff
|
||||||
|
##
|
||||||
|
|
||||||
|
##
|
||||||
|
# Find module for the Vala compiler (valac)
|
||||||
|
#
|
||||||
|
# This module determines wheter a Vala compiler is installed on the current
|
||||||
|
# system and where its executable is.
|
||||||
|
#
|
||||||
|
# Call the module using "find_package(Vala) from within your CMakeLists.txt.
|
||||||
|
#
|
||||||
|
# The following variables will be set after an invocation:
|
||||||
|
#
|
||||||
|
# VALA_FOUND Whether the vala compiler has been found or not
|
||||||
|
# VALA_EXECUTABLE Full path to the valac executable if it has been found
|
||||||
|
# VALA_VERSION Version number of the available valac
|
||||||
|
##
|
||||||
|
|
||||||
|
|
||||||
|
# Search for the valac executable in the usual system paths.
|
||||||
|
find_program(VALA_EXECUTABLE
|
||||||
|
NAMES valac)
|
||||||
|
|
||||||
|
# Handle the QUIETLY and REQUIRED arguments, which may be given to the find call.
|
||||||
|
# Furthermore set VALA_FOUND to TRUE if Vala has been found (aka.
|
||||||
|
# VALA_EXECUTABLE is set)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(Vala DEFAULT_MSG VALA_EXECUTABLE)
|
||||||
|
|
||||||
|
mark_as_advanced(VALA_EXECUTABLE)
|
||||||
|
|
||||||
|
# Determine the valac version
|
||||||
|
if(VALA_FOUND)
|
||||||
|
execute_process(COMMAND ${VALA_EXECUTABLE} "--version"
|
||||||
|
OUTPUT_VARIABLE "VALA_VERSION")
|
||||||
|
string(REPLACE "Vala" "" "VALA_VERSION" ${VALA_VERSION})
|
||||||
|
string(STRIP ${VALA_VERSION} "VALA_VERSION")
|
||||||
|
endif(VALA_FOUND)
|
36
vapi/cmake/vala/ParseArguments.cmake
Normal file
36
vapi/cmake/vala/ParseArguments.cmake
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
##
|
||||||
|
# This is a helper Macro to parse optional arguments in Macros/Functions
|
||||||
|
# It has been taken from the public CMake wiki.
|
||||||
|
# See http://www.cmake.org/Wiki/CMakeMacroParseArguments for documentation and
|
||||||
|
# licensing.
|
||||||
|
##
|
||||||
|
macro(parse_arguments prefix arg_names option_names)
|
||||||
|
set(DEFAULT_ARGS)
|
||||||
|
foreach(arg_name ${arg_names})
|
||||||
|
set(${prefix}_${arg_name})
|
||||||
|
endforeach(arg_name)
|
||||||
|
foreach(option ${option_names})
|
||||||
|
set(${prefix}_${option} FALSE)
|
||||||
|
endforeach(option)
|
||||||
|
|
||||||
|
set(current_arg_name DEFAULT_ARGS)
|
||||||
|
set(current_arg_list)
|
||||||
|
foreach(arg ${ARGN})
|
||||||
|
set(larg_names ${arg_names})
|
||||||
|
list(FIND larg_names "${arg}" is_arg_name)
|
||||||
|
if(is_arg_name GREATER -1)
|
||||||
|
set(${prefix}_${current_arg_name} ${current_arg_list})
|
||||||
|
set(current_arg_name ${arg})
|
||||||
|
set(current_arg_list)
|
||||||
|
else(is_arg_name GREATER -1)
|
||||||
|
set(loption_names ${option_names})
|
||||||
|
list(FIND loption_names "${arg}" is_option)
|
||||||
|
if(is_option GREATER -1)
|
||||||
|
set(${prefix}_${arg} TRUE)
|
||||||
|
else(is_option GREATER -1)
|
||||||
|
set(current_arg_list ${current_arg_list} ${arg})
|
||||||
|
endif(is_option GREATER -1)
|
||||||
|
endif(is_arg_name GREATER -1)
|
||||||
|
endforeach(arg)
|
||||||
|
set(${prefix}_${current_arg_name} ${current_arg_list})
|
||||||
|
endmacro(parse_arguments)
|
175
vapi/cmake/vala/ValaPrecompile.cmake
Normal file
175
vapi/cmake/vala/ValaPrecompile.cmake
Normal file
|
@ -0,0 +1,175 @@
|
||||||
|
##
|
||||||
|
# Copyright 2009-2010 Jakob Westhoff. All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
#
|
||||||
|
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer in the documentation
|
||||||
|
# and/or other materials provided with the distribution.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY JAKOB WESTHOFF ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||||
|
# EVENT SHALL JAKOB WESTHOFF OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
#
|
||||||
|
# The views and conclusions contained in the software and documentation are those
|
||||||
|
# of the authors and should not be interpreted as representing official policies,
|
||||||
|
# either expressed or implied, of Jakob Westhoff
|
||||||
|
##
|
||||||
|
|
||||||
|
include(ParseArguments)
|
||||||
|
find_package(Vala REQUIRED)
|
||||||
|
|
||||||
|
##
|
||||||
|
# Compile vala files to their c equivalents for further processing.
|
||||||
|
#
|
||||||
|
# The "vala_precompile" macro takes care of calling the valac executable on the
|
||||||
|
# given source to produce c files which can then be processed further using
|
||||||
|
# default cmake functions.
|
||||||
|
#
|
||||||
|
# The first parameter provided is a variable, which will be filled with a list
|
||||||
|
# of c files outputted by the vala compiler. This list can than be used in
|
||||||
|
# conjuction with functions like "add_executable" or others to create the
|
||||||
|
# neccessary compile rules with CMake.
|
||||||
|
#
|
||||||
|
# The initial variable is followed by a list of .vala files to be compiled.
|
||||||
|
# Please take care to add every vala file belonging to the currently compiled
|
||||||
|
# project or library as Vala will otherwise not be able to resolve all
|
||||||
|
# dependencies.
|
||||||
|
#
|
||||||
|
# The following sections may be specified afterwards to provide certain options
|
||||||
|
# to the vala compiler:
|
||||||
|
#
|
||||||
|
# PACKAGES
|
||||||
|
# A list of vala packages/libraries to be used during the compile cycle. The
|
||||||
|
# package names are exactly the same, as they would be passed to the valac
|
||||||
|
# "--pkg=" option.
|
||||||
|
#
|
||||||
|
# OPTIONS
|
||||||
|
# A list of optional options to be passed to the valac executable. This can be
|
||||||
|
# used to pass "--thread" for example to enable multi-threading support.
|
||||||
|
#
|
||||||
|
# CUSTOM_VAPIS
|
||||||
|
# A list of custom vapi files to be included for compilation. This can be
|
||||||
|
# useful to include freshly created vala libraries without having to install
|
||||||
|
# them in the system.
|
||||||
|
#
|
||||||
|
# GENERATE_VAPI
|
||||||
|
# Pass all the needed flags to the compiler to create an internal vapi for
|
||||||
|
# the compiled library. The provided name will be used for this and a
|
||||||
|
# <provided_name>.vapi file will be created.
|
||||||
|
#
|
||||||
|
# GENERATE_HEADER
|
||||||
|
# Let the compiler generate a header file for the compiled code. There will
|
||||||
|
# be a header file as well as an internal header file being generated called
|
||||||
|
# <provided_name>.h and <provided_name>_internal.h
|
||||||
|
#
|
||||||
|
# The following call is a simple example to the vala_precompile macro showing
|
||||||
|
# an example to every of the optional sections:
|
||||||
|
#
|
||||||
|
# vala_precompile(VALA_C
|
||||||
|
# source1.vala
|
||||||
|
# source2.vala
|
||||||
|
# source3.vala
|
||||||
|
# PACKAGES
|
||||||
|
# gtk+-2.0
|
||||||
|
# gio-1.0
|
||||||
|
# posix
|
||||||
|
# DIRECTORY
|
||||||
|
# gen
|
||||||
|
# OPTIONS
|
||||||
|
# --thread
|
||||||
|
# CUSTOM_VAPIS
|
||||||
|
# some_vapi.vapi
|
||||||
|
# GENERATE_VAPI
|
||||||
|
# myvapi
|
||||||
|
# GENERATE_HEADER
|
||||||
|
# myheader
|
||||||
|
# )
|
||||||
|
#
|
||||||
|
# Most important is the variable VALA_C which will contain all the generated c
|
||||||
|
# file names after the call.
|
||||||
|
##
|
||||||
|
|
||||||
|
macro(vala_precompile output)
|
||||||
|
parse_arguments(ARGS "PACKAGES;OPTIONS;DIRECTORY;GENERATE_HEADER;GENERATE_VAPI;CUSTOM_VAPIS" "" ${ARGN})
|
||||||
|
if(ARGS_DIRECTORY)
|
||||||
|
set(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${ARGS_DIRECTORY})
|
||||||
|
else(ARGS_DIRECTORY)
|
||||||
|
set(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
endif(ARGS_DIRECTORY)
|
||||||
|
include_directories(${DIRECTORY})
|
||||||
|
set(vala_pkg_opts "")
|
||||||
|
foreach(pkg ${ARGS_PACKAGES})
|
||||||
|
list(APPEND vala_pkg_opts "--pkg=${pkg}")
|
||||||
|
endforeach(pkg ${ARGS_PACKAGES})
|
||||||
|
set(in_files "")
|
||||||
|
set(out_files "")
|
||||||
|
set(${output} "")
|
||||||
|
foreach(src ${ARGS_DEFAULT_ARGS})
|
||||||
|
list(APPEND in_files "${CMAKE_CURRENT_SOURCE_DIR}/${src}")
|
||||||
|
string(REPLACE ".vala" ".c" src ${src})
|
||||||
|
string(REPLACE ".gs" ".c" src ${src})
|
||||||
|
set(out_file "${DIRECTORY}/${src}")
|
||||||
|
list(APPEND out_files "${DIRECTORY}/${src}")
|
||||||
|
list(APPEND ${output} ${out_file})
|
||||||
|
endforeach(src ${ARGS_DEFAULT_ARGS})
|
||||||
|
|
||||||
|
set(custom_vapi_arguments "")
|
||||||
|
if(ARGS_CUSTOM_VAPIS)
|
||||||
|
foreach(vapi ${ARGS_CUSTOM_VAPIS})
|
||||||
|
if(${vapi} MATCHES ${CMAKE_SOURCE_DIR} OR ${vapi} MATCHES ${CMAKE_BINARY_DIR})
|
||||||
|
list(APPEND custom_vapi_arguments ${vapi})
|
||||||
|
else (${vapi} MATCHES ${CMAKE_SOURCE_DIR} OR ${vapi} MATCHES ${CMAKE_BINARY_DIR})
|
||||||
|
list(APPEND custom_vapi_arguments ${CMAKE_CURRENT_SOURCE_DIR}/${vapi})
|
||||||
|
endif(${vapi} MATCHES ${CMAKE_SOURCE_DIR} OR ${vapi} MATCHES ${CMAKE_BINARY_DIR})
|
||||||
|
endforeach(vapi ${ARGS_CUSTOM_VAPIS})
|
||||||
|
endif(ARGS_CUSTOM_VAPIS)
|
||||||
|
|
||||||
|
set(vapi_arguments "")
|
||||||
|
if(ARGS_GENERATE_VAPI)
|
||||||
|
list(APPEND out_files "${DIRECTORY}/${ARGS_GENERATE_VAPI}.vapi")
|
||||||
|
set(vapi_arguments "--internal-vapi=${ARGS_GENERATE_VAPI}.vapi")
|
||||||
|
|
||||||
|
# Header and internal header is needed to generate internal vapi
|
||||||
|
if (NOT ARGS_GENERATE_HEADER)
|
||||||
|
set(ARGS_GENERATE_HEADER ${ARGS_GENERATE_VAPI})
|
||||||
|
endif(NOT ARGS_GENERATE_HEADER)
|
||||||
|
endif(ARGS_GENERATE_VAPI)
|
||||||
|
|
||||||
|
set(header_arguments "")
|
||||||
|
if(ARGS_GENERATE_HEADER)
|
||||||
|
list(APPEND out_files "${DIRECTORY}/${ARGS_GENERATE_HEADER}.h")
|
||||||
|
list(APPEND out_files "${DIRECTORY}/${ARGS_GENERATE_HEADER}_internal.h")
|
||||||
|
list(APPEND header_arguments "--header=${DIRECTORY}/${ARGS_GENERATE_HEADER}.h")
|
||||||
|
list(APPEND header_arguments "--internal-header=${DIRECTORY}/${ARGS_GENERATE_HEADER}_internal.h")
|
||||||
|
endif(ARGS_GENERATE_HEADER)
|
||||||
|
|
||||||
|
add_custom_command(OUTPUT ${out_files}
|
||||||
|
COMMAND
|
||||||
|
${VALA_EXECUTABLE}
|
||||||
|
ARGS
|
||||||
|
"-C"
|
||||||
|
${header_arguments}
|
||||||
|
${vapi_arguments}
|
||||||
|
"-b" ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
"-d" ${DIRECTORY}
|
||||||
|
${vala_pkg_opts}
|
||||||
|
${ARGS_OPTIONS}
|
||||||
|
${in_files}
|
||||||
|
${custom_vapi_arguments}
|
||||||
|
DEPENDS
|
||||||
|
${in_files}
|
||||||
|
${ARGS_CUSTOM_VAPIS}
|
||||||
|
)
|
||||||
|
endmacro(vala_precompile)
|
96
vapi/cmake/vala/ValaVersion.cmake
Normal file
96
vapi/cmake/vala/ValaVersion.cmake
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
##
|
||||||
|
# Copyright 2009-2010 Jakob Westhoff. All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer.
|
||||||
|
#
|
||||||
|
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions and the following disclaimer in the documentation
|
||||||
|
# and/or other materials provided with the distribution.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY JAKOB WESTHOFF ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||||
|
# EVENT SHALL JAKOB WESTHOFF OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
#
|
||||||
|
# The views and conclusions contained in the software and documentation are those
|
||||||
|
# of the authors and should not be interpreted as representing official policies,
|
||||||
|
# either expressed or implied, of Jakob Westhoff
|
||||||
|
##
|
||||||
|
|
||||||
|
include(ParseArguments)
|
||||||
|
find_package(Vala REQUIRED)
|
||||||
|
|
||||||
|
##
|
||||||
|
# Ensure a certain valac version is available
|
||||||
|
#
|
||||||
|
# The initial argument is the version to check for
|
||||||
|
#
|
||||||
|
# It may be followed by a optional parameter to specifiy a version range. The
|
||||||
|
# following options are valid:
|
||||||
|
#
|
||||||
|
# EXACT
|
||||||
|
# Vala needs to be available in the exact version given
|
||||||
|
#
|
||||||
|
# MINIMUM
|
||||||
|
# The provided version is the minimum version. Therefore Vala needs to be
|
||||||
|
# available in the given version or any higher version
|
||||||
|
#
|
||||||
|
# MAXIMUM
|
||||||
|
# The provided version is the maximum. Therefore Vala needs to be available
|
||||||
|
# in the given version or any version older than this
|
||||||
|
#
|
||||||
|
# If no option is specified the version will be treated as a minimal version.
|
||||||
|
##
|
||||||
|
macro(ensure_vala_version version)
|
||||||
|
parse_arguments(ARGS "" "MINIMUM;MAXIMUM;EXACT" ${ARGN})
|
||||||
|
set(compare_message "")
|
||||||
|
set(error_message "")
|
||||||
|
if(ARGS_MINIMUM)
|
||||||
|
set(compare_message "a minimum ")
|
||||||
|
set(error_message "or greater ")
|
||||||
|
elseif(ARGS_MAXIMUM)
|
||||||
|
set(compare_message "a maximum ")
|
||||||
|
set(error_message "or less ")
|
||||||
|
endif(ARGS_MINIMUM)
|
||||||
|
|
||||||
|
message(STATUS
|
||||||
|
"checking for ${compare_message}Vala version of ${version}"
|
||||||
|
)
|
||||||
|
|
||||||
|
unset(version_accepted)
|
||||||
|
|
||||||
|
# MINIMUM is the default if no option is specified
|
||||||
|
if(ARGS_EXACT)
|
||||||
|
if(${VALA_VERSION} VERSION_EQUAL ${version} )
|
||||||
|
set(version_accepted TRUE)
|
||||||
|
endif(${VALA_VERSION} VERSION_EQUAL ${version})
|
||||||
|
elseif(ARGS_MAXIMUM)
|
||||||
|
if(${VALA_VERSION} VERSION_LESS ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version})
|
||||||
|
set(version_accepted TRUE)
|
||||||
|
endif(${VALA_VERSION} VERSION_LESS ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version})
|
||||||
|
else(ARGS_MAXIMUM)
|
||||||
|
if(${VALA_VERSION} VERSION_GREATER ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version})
|
||||||
|
set(version_accepted TRUE)
|
||||||
|
endif(${VALA_VERSION} VERSION_GREATER ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version})
|
||||||
|
endif(ARGS_EXACT)
|
||||||
|
|
||||||
|
if (NOT version_accepted)
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"Vala version ${version} ${error_message}is required."
|
||||||
|
)
|
||||||
|
endif(NOT version_accepted)
|
||||||
|
|
||||||
|
message(STATUS
|
||||||
|
" found Vala, version ${VALA_VERSION}"
|
||||||
|
)
|
||||||
|
endmacro(ensure_vala_version)
|
9
vapi/config.vapi
Normal file
9
vapi/config.vapi
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
[CCode (cprefix = "", lower_case_cprefix = "", cheader_filename = "config.h")]
|
||||||
|
namespace Build {
|
||||||
|
public const string DATADIR;
|
||||||
|
public const string PKGDATADIR;
|
||||||
|
public const string GETTEXT_PACKAGE;
|
||||||
|
public const string RELEASE_NAME;
|
||||||
|
public const string VERSION;
|
||||||
|
public const string VERSION_INFO;
|
||||||
|
}
|
7
vapi/webkit2gtk-3.0.deps
Normal file
7
vapi/webkit2gtk-3.0.deps
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
atk
|
||||||
|
gio-2.0
|
||||||
|
cairo
|
||||||
|
pango
|
||||||
|
gdk-pixbuf-2.0
|
||||||
|
libsoup-2.4
|
||||||
|
gtk+-3.0
|
1003
vapi/webkit2gtk-3.0.vapi
Normal file
1003
vapi/webkit2gtk-3.0.vapi
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue