Introduce Settings schema file (gsettings)

master
Melroy van den Berg 2021-03-28 22:56:10 +02:00
parent 85b5672ab4
commit d2738a223a
4 changed files with 105 additions and 13 deletions

View File

@ -18,11 +18,11 @@ set(PROJECT_TARGET libreweb-browser)
set(THREADS_PREFER_PTHREAD_FLAG ON)
# Find required dependencies
find_package(Threads REQUIRED)
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTKMM gtkmm-3.0)
pkg_check_modules(CAIRO cairomm-1.0)
pkg_check_modules(GTKMM REQUIRED gtkmm-3.0)
pkg_check_modules(GLIB REQUIRED glib-2.0)
add_definitions(${GTKMM_CFLAGS_OTHER})
@ -39,8 +39,39 @@ if(NOT json_POPULATED)
add_subdirectory(${json_SOURCE_DIR} ${json_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
# Generate Project version header file
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/project_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/project_config.h)
# Find the GLib path for schema installation
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/" CACHE INTERNAL "")
# Fetch path for schema compiler from pkg-config
execute_process(
COMMAND
${PKG_CONFIG_EXECUTABLE}
gio-2.0
--variable
glib_compile_schemas
OUTPUT_VARIABLE
_glib_compile_schemas
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# Set glib schema compiler command
set(glib_schema_compiler ${_glib_compile_schemas} CACHE INTERNAL "")
set(SCHEMA_FILE ${CMAKE_CURRENT_SOURCE_DIR}/org.libreweb.browser.gschema.xml)
# Source code
set(HEADERS
about.h
file.h
@ -51,7 +82,6 @@ set(HEADERS
draw.h
source-code-dialog.h
)
set(SOURCES
main.cc
about.cc
@ -67,6 +97,21 @@ set(SOURCES
add_executable(${PROJECT_TARGET} ${SOURCES})
# Copy gschema.xml file to build directory
set(SCHEMA_DIR ${CMAKE_CURRENT_BINARY_DIR}/gsettings)
add_custom_command(
TARGET ${PROJECT_TARGET} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${SCHEMA_FILE}
${SCHEMA_DIR}/org.libreweb.browser.gschema.xml
)
add_custom_command(
TARGET ${PROJECT_TARGET} POST_BUILD
COMMAND ${glib_schema_compiler} ${SCHEMA_DIR}
COMMENT "Compiling schemas in folder: ${SCHEMA_DIR}"
)
# Add fallback for std filesystem in older GCC versions
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.4)
@ -88,15 +133,18 @@ target_include_directories(${PROJECT_TARGET} PRIVATE
${CMAKE_BINARY_DIR}
${CMAKE_EXTENSIONS_BINARY_DIR}
${GTKMM_INCLUDE_DIRS}
${CAIRO_INCLUDE_DIRS}
${PROJECT_SOURCE_DIR}/lib/ipfs-http-client/include
)
)
target_link_directories(${PROJECT_TARGET} PRIVATE
${GTKMM_LIBRARY_DIRS}
${CAIRO_LIBRARY_DIRS}
)
target_link_libraries(${PROJECT_TARGET} PRIVATE LibCommonMarker LibCommonMarkerExtensions ipfs-http-client Threads::Threads ${CXX_FILESYSTEM_LIBRARIES} ${GTKMM_LIBRARIES} ${CAIRO_LIBRARIES} nlohmann_json::nlohmann_json)
target_link_libraries(${PROJECT_TARGET} PRIVATE LibCommonMarker LibCommonMarkerExtensions ipfs-http-client Threads::Threads ${CXX_FILESYSTEM_LIBRARIES} ${GTKMM_LIBRARIES} nlohmann_json::nlohmann_json)
# Install browser binary
install(TARGETS ${PROJECT_TARGET} RUNTIME DESTINATION "bin" COMPONENT applications)
# Install & compile GTK schema file
install(FILES ${SCHEMA_FILE} DESTINATION ${GSETTINGS_DIR})
install(CODE "execute_process (COMMAND ${glib_schema_compiler} ${GSETTINGS_DIR})")

View File

@ -10,14 +10,16 @@
#include <glibmm/miscutils.h>
#include <glibmm/main.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <glibmm/miscutils.h>
#include <cmark-gfm.h>
#include <pthread.h>
#include <iostream>
#include <nlohmann/json.hpp>
MainWindow::MainWindow()
: accelGroup(Gtk::AccelGroup::create()),
m_menu(accelGroup),
: m_accelGroup(Gtk::AccelGroup::create()),
m_settings(),
m_menu(m_accelGroup),
m_draw_main(*this),
m_draw_secondary(*this),
m_vbox(Gtk::ORIENTATION_VERTICAL, 0),
@ -41,7 +43,17 @@ MainWindow::MainWindow()
set_title(m_appName);
set_default_size(1000, 800);
set_position(Gtk::WIN_POS_CENTER);
add_accel_group(accelGroup);
add_accel_group(m_accelGroup);
// if(app is not installed/DEBUG?)
Glib::setenv("GSETTINGS_SCHEMA_DIR", "/media/melroy/Data/Projects/browser/build/src/gsettings", true);
m_settings = Gio::Settings::create("org.libreweb.browser");
m_settings->set_int("width", this->get_width());
m_settings->set_int("height", this->get_height());
m_settings->set_boolean("is-maximized", this->is_maximized());
// Fullscreen will be availible with gtkmm-4.0
//m_settings->set_boolean("is-fullscreen", this->is_fullscreen());
m_statusPopover.set_position(Gtk::POS_BOTTOM);
m_statusPopover.set_size_request(200, 80);
@ -53,7 +65,10 @@ MainWindow::MainWindow()
// Timeouts
this->statusTimerHandler = Glib::signal_timeout().connect(sigc::mem_fun(this, &MainWindow::update_connection_status), 3000);
// Connect signals
// Window signals
this->signal_delete_event().connect(sigc::mem_fun(this, &MainWindow::delete_window));
// Menu & toolbar signals
m_menu.new_doc.connect(sigc::mem_fun(this, &MainWindow::new_doc)); /*!< Menu item for new document */
m_menu.open.connect(sigc::mem_fun(this, &MainWindow::open)); /*!< Menu item for opening existing document */
m_menu.save.connect(sigc::mem_fun(this, &MainWindow::save)); /*!< Menu item for save document */
@ -404,6 +419,15 @@ void MainWindow::doRequest(const std::string &path, bool setAddressBar, bool isH
}
}
/**
* \brief Called when Window is closed
*/
bool MainWindow::delete_window(GdkEventAny* any_event)
{
std::cout << "Yes.." << std::endl;
return false;
}
/**
* \brief Timeout slot: Update the IPFS connection status every x seconds
*/

View File

@ -19,6 +19,7 @@
#include <gtkmm/searchbar.h>
#include <gtkmm/searchentry.h>
#include <gtkmm/paned.h>
#include <giomm/settings.h>
#include <thread>
/**
@ -33,6 +34,7 @@ public:
protected:
// Signal handlers
bool delete_window(GdkEventAny* any_event);
bool update_connection_status();
void cut();
void copy();
@ -60,7 +62,8 @@ protected:
void show_source_code_dialog();
void get_heading();
Glib::RefPtr<Gtk::AccelGroup> accelGroup; /*!< Accelerator group, used for keyboard shortcut bindings */
Glib::RefPtr<Gtk::AccelGroup> m_accelGroup; /*!< Accelerator group, used for keyboard shortcut bindings */
Glib::RefPtr<Gio::Settings> m_settings; /*!< Settings to store our preferences, even during restarts */
// Child widgets
Menu m_menu;

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<schemalist>
<schema path="/org/libreweb/browser/" id="org.libreweb.browser">
<key name="width" type="i">
<default>1000</default>
<summary>Window width</summary>
</key>
<key name="height" type="i">
<default>800</default>
<summary>Window height</summary>
</key>
<key name="is-maximized" type="b">
<default>false</default>
<summary>Window maximized</summary>
</key>
</schema>
</schemalist>