From 573554b9decf74f3b57ab6d26252700132255525 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Eric=20Janouch?= Date: Fri, 15 Oct 2021 12:08:44 +0200 Subject: [PATCH] sdgtk -> sdgui, improve build, mention in README It's finally not horrible. --- CMakeLists.txt | 24 +++++++++++++++--------- README.adoc | 5 +++++ src/{sdgtk.c => sdgui.c} | 0 src/sdtui.c | 29 +++++++++++++++++++++++++++-- src/utils.c | 28 ---------------------------- src/utils.h | 1 - 6 files changed, 47 insertions(+), 40 deletions(-) rename src/{sdgtk.c => sdgui.c} (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index f661cbc..38b0bf7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -78,6 +78,9 @@ if (WITH_X11) list (APPEND dependencies_LIBRARIES ${xcb_LIBRARIES}) endif () +pkg_check_modules (gtk gtk+-3.0) +option (WITH_GUI "Build a work-in-progress GTK+ UI" ${gtk_FOUND}) + link_directories (${dependencies_LIBRARY_DIRS}) include_directories (${ZLIB_INCLUDE_DIRS} ${icu_INCLUDE_DIRS} ${dependencies_INCLUDE_DIRS} ${Ncursesw_INCLUDE_DIRS} @@ -117,7 +120,7 @@ add_custom_target (docs ALL DEPENDS ${project_MAN_PAGES}) # Project libraries set (project_common_libraries ${ZLIB_LIBRARIES} ${icu_LIBRARIES} - ${dependencies_LIBRARIES} ${Ncursesw_LIBRARIES} termo-static) + ${dependencies_LIBRARIES}) set (project_common_headers ${PROJECT_BINARY_DIR}/config.h @@ -151,17 +154,17 @@ set (project_headers add_definitions (-DGLIB_DISABLE_DEPRECATION_WARNINGS) add_executable (${PROJECT_NAME} ${project_sources} ${project_headers} ${project_common_sources}) -target_link_libraries (${PROJECT_NAME} ${project_common_libraries}) +target_link_libraries (${PROJECT_NAME} ${project_common_libraries} + ${Ncursesw_LIBRARIES} termo-static) -# Experimental GTK+ frontend, we link it with ncurses but we don't care -pkg_check_modules (gtk gtk+-3.0) -if (gtk_FOUND) - add_executable (sdgtk EXCLUDE_FROM_ALL - src/sdgtk.c +# The same for the alternative GTK+ UI +if (WITH_GUI) + add_executable (sdgui + src/sdgui.c src/stardict-view.c ${project_common_sources}) - target_include_directories (sdgtk PUBLIC ${gtk_INCLUDE_DIRS}) - target_link_libraries (sdgtk ${gtk_LIBRARIES} ${project_common_libraries}) + target_include_directories (sdgui PUBLIC ${gtk_INCLUDE_DIRS}) + target_link_libraries (sdgui ${gtk_LIBRARIES} ${project_common_libraries}) endif () # Tools @@ -193,6 +196,9 @@ add_custom_target (dicts DEPENDS ${dicts_targets}) include (GNUInstallDirs) install (TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) install (FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR}) +if (WITH_GUI) + install (TARGETS sdgui DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif () foreach (page ${project_MAN_PAGES}) string (REGEX MATCH "\\.([0-9])$" manpage_suffix "${page}") diff --git a/README.adoc b/README.adoc index 6047f44..727d3a0 100644 --- a/README.adoc +++ b/README.adoc @@ -79,6 +79,11 @@ Linux and/or BSD distributions: Given the entangledness of this codebase, issues with the file format, and general undesirability of terminal UIs, it might be better to start anew. +Graphical UI +------------ +With GTK+ 3 development packages installed, an alternative, work-in-progress +frontend will be built and installed. + Contributing and Support ------------------------ Use https://git.janouch.name/p/sdtui to report any bugs, request features, diff --git a/src/sdgtk.c b/src/sdgui.c similarity index 100% rename from src/sdgtk.c rename to src/sdgui.c diff --git a/src/sdtui.c b/src/sdtui.c index 3be34f4..1158d05 100644 --- a/src/sdtui.c +++ b/src/sdtui.c @@ -36,8 +36,12 @@ #include #include -#include // input -#include // output +#include // input +#include // output +#include +#ifndef TIOCGWINSZ +#include +#endif // ! TIOCGWINSZ #include "config.h" #include "stardict.h" @@ -62,6 +66,27 @@ unichar_width (gunichar ch) return 1 + g_unichar_iswide (ch); } +void +update_curses_terminal_size (void) +{ +#if defined (HAVE_RESIZETERM) && defined (TIOCGWINSZ) + struct winsize size; + if (!ioctl (STDOUT_FILENO, TIOCGWINSZ, (char *) &size)) + { + char *row = getenv ("LINES"); + char *col = getenv ("COLUMNS"); + unsigned long tmp; + resizeterm ( + (row && xstrtoul (&tmp, row, 10)) ? tmp : size.ws_row, + (col && xstrtoul (&tmp, col, 10)) ? tmp : size.ws_col); + } +#else // HAVE_RESIZETERM && TIOCGWINSZ + // The standard endwin/refresh sequence makes the terminal flicker. + endwin (); + refresh (); +#endif // HAVE_RESIZETERM && TIOCGWINSZ +} + static guint add_read_watch (int fd, GIOFunc func, gpointer user_data) { diff --git a/src/utils.c b/src/utils.c index 275e4e1..3bba022 100644 --- a/src/utils.c +++ b/src/utils.c @@ -23,12 +23,6 @@ #include #include -#include -#include -#ifndef TIOCGWINSZ -#include -#endif // ! TIOCGWINSZ - #include "config.h" #include "utils.h" @@ -101,28 +95,6 @@ xstrtoul (unsigned long *out, const char *s, int base) return errno == 0 && !*end && end != s; } -// Didn't want to have this ugly piece of code in the main source file; -// the standard endwin/refresh sequence makes the terminal flicker. -void -update_curses_terminal_size (void) -{ -#if defined (HAVE_RESIZETERM) && defined (TIOCGWINSZ) - struct winsize size; - if (!ioctl (STDOUT_FILENO, TIOCGWINSZ, (char *) &size)) - { - char *row = getenv ("LINES"); - char *col = getenv ("COLUMNS"); - unsigned long tmp; - resizeterm ( - (row && xstrtoul (&tmp, row, 10)) ? tmp : size.ws_row, - (col && xstrtoul (&tmp, col, 10)) ? tmp : size.ws_col); - } -#else // HAVE_RESIZETERM && TIOCGWINSZ - endwin (); - refresh (); -#endif // HAVE_RESIZETERM && TIOCGWINSZ -} - /// Print a fatal error message and terminate the process immediately. void fatal (const gchar *format, ...) diff --git a/src/utils.h b/src/utils.h index 99ad19a..b47daa9 100644 --- a/src/utils.h +++ b/src/utils.h @@ -41,7 +41,6 @@ gchar *xdxf_to_pango_markup_with_reduced_effort (const gchar *xml); gboolean stream_read_all (GByteArray *ba, GInputStream *is, GError **error); gchar *stream_read_string (GDataInputStream *dis, GError **error); gboolean xstrtoul (unsigned long *out, const char *s, int base); -void update_curses_terminal_size (void); void fatal (const gchar *format, ...) G_GNUC_PRINTF (1, 2) G_GNUC_NORETURN; #endif // ! UTILS_H