Introduce Settings schema file (gsettings)
parent
85b5672ab4
commit
d2738a223a
|
@ -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})")
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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>
|
Loading…
Reference in New Issue