diff options
| author | maxim nikonov <maxim.nikonov@hqo.co> | 2026-02-05 15:21:34 +0500 |
|---|---|---|
| committer | maxim nikonov <maxim.nikonov@hqo.co> | 2026-02-05 15:21:34 +0500 |
| commit | db214d1145e46d527a46d1fc2519548d2c4d23f1 (patch) | |
| tree | cf0fd9922e4d54f6beb63888f9b28c8e2a787bdf /libdecor/build/fl_libdecor.c | |
| parent | 75fc94d6c71fe686f6dde5b41ad91cba2f6bdd6f (diff) | |
wip: fork
Diffstat (limited to 'libdecor/build/fl_libdecor.c')
| -rw-r--r-- | libdecor/build/fl_libdecor.c | 145 |
1 files changed, 0 insertions, 145 deletions
diff --git a/libdecor/build/fl_libdecor.c b/libdecor/build/fl_libdecor.c deleted file mode 100644 index c7105bd85..000000000 --- a/libdecor/build/fl_libdecor.c +++ /dev/null @@ -1,145 +0,0 @@ -// -// Interface with the libdecor library for the Fast Light Tool Kit (FLTK). -// -// Copyright 2022-2024 by Bill Spitzak and others. -// -// This library is free software. Distribution and use rights are outlined in -// the file "COPYING" which should have been included with this file. If this -// file is missing or damaged, see the license at: -// -// https://www.fltk.org/COPYING.php -// -// Please see the following page on how to report bugs and issues: -// -// https://www.fltk.org/bugs.php -// - -/* Improvements to libdecor.c without modifying libdecor.c itself */ -#if ! USE_SYSTEM_LIBDECOR - -#include <dlfcn.h> -#include <stdlib.h> -static void *dlopen_corrected(const char *, int); -#define dlopen(A, B) dlopen_corrected(A, B) -#include "fl_libdecor.h" -#undef libdecor_new -#define libdecor_new libdecor_new_orig -#undef libdecor_frame_set_minimized -#define libdecor_frame_set_minimized libdecor_frame_set_minimized_orig -#include "../src/libdecor.c" -#undef dlopen -#undef libdecor_frame_set_minimized -#undef libdecor_new -#define libdecor_new fl_libdecor_new -#define libdecor_frame_set_minimized fl_libdecor_frame_set_minimized - -extern bool fl_libdecor_using_weston(void); -extern const struct libdecor_plugin_description *fl_libdecor_plugin_description; -//#include <stdio.h> - -// we have a built-in plugin so don't need a fallback one -struct libdecor_plugin *libdecor_fallback_plugin_new(struct libdecor *context) { - return NULL; -} - -// see get_libdecor_plugin_description() explaining why this is useful -static void *dlopen_corrected(const char *filename, int flags) { - static int best_priority = -1; - void *retval = dlopen(filename, flags); - if (retval) { - const struct libdecor_plugin_description *description = - (const struct libdecor_plugin_description*)dlsym(retval, "libdecor_plugin_description"); - if (description && description->priorities->priority > best_priority) { - fl_libdecor_plugin_description = description; - best_priority = description->priorities->priority; - } - } - return retval; -} - - -void fl_libdecor_frame_set_minimized(struct libdecor_frame *frame) -{ - static bool done = false; - static bool using_weston = false; - if (!done) { - typedef bool (*ext_f)(void); - volatile ext_f ext = fl_libdecor_using_weston; - done = true; - if (ext) using_weston = fl_libdecor_using_weston(); -//fprintf(stderr, "fl_libdecor_using_weston=%p using_weston=%d\n", fl_libdecor_using_weston, using_weston); - if (using_weston) { // determine the version of the running Weston compositor - FILE *pipe = popen("weston --version", "r"); - if (pipe) { - char line[50], *p; - int version = 0; - p = fgets(line, sizeof(line), pipe); - pclose(pipe); - if (p) p = strchr(line, ' '); - if (p) { - sscanf(p, "%d", &version); - // Weston version 10 has fixed the bug handled here - if (version >= 10) using_weston = false; - } - } - } - } - if (using_weston) libdecor_frame_set_visibility(frame, false); - libdecor_frame_set_minimized_orig(frame); -} - - -/* - By default, FLTK modifies libdecor's libdecor_new() function to determine the plugin as follows : - 1) the directory pointed by environment variable LIBDECOR_PLUGIN_DIR or, in absence of this variable, - by -DLIBDECOR_PLUGIN_DIR=xxx at build time is searched for a libdecor plugin; - 2) if this directory does not exist or contains no plugin, the built-in plugin is used. - * if FLTK was built with package libgtk-3-dev, the GTK plugin is used - * if FLTK was built without package libgtk-3-dev, the Cairo plugin is used - - If FLTK was built with FLTK_USE_SYSTEM_LIBDECOR turned ON, the present modification - isn't compiled, so the plugin-searching algorithm of libdecor_new() in libdecor-0.so is used. - This corresponds to step 1) above and to use no titlebar is no plugin is found. - - N.B.: only the system package is built with a meaningful value of -DLIBDECOR_PLUGIN_DIR= - so a plugin may be loaded that way only if FLTK was built with FLTK_USE_SYSTEM_LIBDECOR turned ON. - - */ -struct libdecor *fl_libdecor_new(struct wl_display *wl_display, const struct libdecor_interface *iface) -{ - struct libdecor *context; - context = zalloc(sizeof *context); - context->ref_count = 1; - context->iface = iface; - context->wl_display = wl_display; - context->wl_registry = wl_display_get_registry(wl_display); - wl_registry_add_listener(context->wl_registry, ®istry_listener, context); - context->init_callback = wl_display_sync(context->wl_display); - wl_callback_add_listener(context->init_callback, &init_wl_display_callback_listener, context); - wl_list_init(&context->frames); - // attempt to dynamically load a libdecor plugin with dlopen() - if (init_plugins(context) != 0) { // attempt to load plugin by dlopen() - // no plug-in was found by dlopen(), use built-in plugin instead - // defined in the source code of the built-in plugin: libdecor-cairo.c or libdecor-gtk.c - extern const struct libdecor_plugin_description libdecor_plugin_description; -#if HAVE_GTK - bool gdk_caution = false; - if (getenv("GDK_BACKEND") && strcmp(getenv("GDK_BACKEND"), "x11") == 0) { - // Environment variable GDK_BACKEND=x11 makes the .constructor below fail - // for the built-in GTK plugin and then FLTK crashes (#1029). - // Temporarily unset GDK_BACKEND to prevent that. - gdk_caution = true; - unsetenv("GDK_BACKEND"); - } -#endif - context->plugin = libdecor_plugin_description.constructor(context); -#if HAVE_GTK - if (gdk_caution) putenv("GDK_BACKEND=x11"); -#endif - } - - wl_display_flush(wl_display); - return context; -} - -#endif //! USE_SYSTEM_LIBDECOR |
