Compare commits
53 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
730c3436c1 | ||
|
|
83ecd1a327 | ||
|
|
f2ab261368 | ||
|
|
a6a67c59e7 | ||
|
|
51c75f1280 | ||
|
|
8e75dec9ec | ||
|
|
761745f4b8 | ||
|
|
77599823c8 | ||
|
|
5085fdfc00 | ||
|
|
e8aaed4da1 | ||
|
|
018ee0c7b0 | ||
|
|
afef562619 | ||
|
|
6d224c4c7c | ||
|
|
a8798f4fa0 | ||
|
|
0bd2de7f09 | ||
|
|
7bdaf16739 | ||
|
|
a25f2da55e | ||
|
|
aa1412ae55 | ||
|
|
d5ddf31894 | ||
|
|
9c1ff8bbe0 | ||
|
|
2b3aebac06 | ||
|
|
9807b166b9 | ||
|
|
84bcc20f2a | ||
|
|
c636402b94 | ||
|
|
39eb463a87 | ||
|
|
cd179e286c | ||
|
|
0402e8bfb9 | ||
|
|
dc58fc07e2 | ||
|
|
0792ce0a3e | ||
|
|
00c1a9d72a | ||
|
|
666521e37e | ||
|
|
c987c51512 | ||
|
|
27f1da0ed7 | ||
|
|
fd4cd8b547 | ||
|
|
3fd8daae51 | ||
|
|
3b13ad5992 | ||
|
|
357f41586d | ||
|
|
25f3c231af | ||
|
|
d900528feb | ||
|
|
2590446573 | ||
|
|
a178948725 | ||
|
|
0bd51dbc02 | ||
|
|
5792eb6b3b | ||
|
|
ad129ac3a6 | ||
|
|
cca444fd40 | ||
|
|
d3c61565f5 | ||
|
|
2549f2fe5f | ||
|
|
d20a934463 | ||
|
|
051ad8afe8 | ||
|
|
ce1d5d0184 | ||
|
|
f9888090a2 | ||
|
|
d5053e5d73 | ||
|
|
597aa45a9c |
6 changed files with 262 additions and 358 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
|
@ -1,5 +1 @@
|
|||
cairo-dock-sources-svn1527_trunk.tar.bz2
|
||||
/cairo-dock-fedora-3.4.0.tar.gz
|
||||
/cairo-dock-fedora-3.4.1.tar.gz
|
||||
/cairo-dock-fedora-3.4.1-20201103git0836f5d.tar.gz
|
||||
/cairo-dock-fedora-3.4.1-20210327git6c569e6.tar.gz
|
||||
/cairo-dock-fedora-*.tar.gz
|
||||
|
|
|
|||
|
|
@ -1,327 +0,0 @@
|
|||
From 275fa02a15ebdb75b07c100de9395392f9543300 Mon Sep 17 00:00:00 2001
|
||||
From: Mamoru TASAKA <mtasaka@fedoraproject.org>
|
||||
Date: Mon, 20 Sep 2021 16:22:40 +0900
|
||||
Subject: [PATCH] [LP1943052] wayland-manager: allocate new wl_output
|
||||
information by checking id
|
||||
|
||||
With KDE Plasma Wayland session, after calling wl_output_add_listener()
|
||||
and waiting for wl_output information with wl_display_roundtrip(),
|
||||
wl_output::mode info is returned before wl_output::geometry info.
|
||||
|
||||
Current cairo-dock-wayland-manager logic expects the opposite order, and
|
||||
on KDE session this causes cairo-dock segfault.
|
||||
|
||||
To avoid this, when collecting wl_output information, we should also check
|
||||
"id" member of global registry object associated with that wl_output info,
|
||||
check if the "id" is already the duplicates of the old infos.
|
||||
|
||||
Then if the "id" is new one, then allocate the new buffer to register new
|
||||
wl_output information beforehand, then call wl_display_roundtrip() to gain
|
||||
wl_output::geometry or wl_output::output information.
|
||||
---
|
||||
src/gldit/cairo-dock-desktop-manager.h | 13 +-
|
||||
src/implementations/cairo-dock-X-utilities.c | 20 +--
|
||||
.../cairo-dock-wayland-manager.c | 134 +++++++++++++++---
|
||||
3 files changed, 139 insertions(+), 28 deletions(-)
|
||||
|
||||
diff --git a/src/gldit/cairo-dock-desktop-manager.h b/src/gldit/cairo-dock-desktop-manager.h
|
||||
index b8ecb0d0..2774913b 100644
|
||||
--- a/src/gldit/cairo-dock-desktop-manager.h
|
||||
+++ b/src/gldit/cairo-dock-desktop-manager.h
|
||||
@@ -59,10 +59,21 @@ typedef enum {
|
||||
NB_NOTIFICATIONS_DESKTOP
|
||||
} CairoDesktopNotifications;
|
||||
|
||||
+typedef struct GldiWlOutput {
|
||||
+ struct wl_output *output;
|
||||
+ uint32_t id, ver;
|
||||
+} GldiWlOutput;
|
||||
+
|
||||
+typedef struct GldiScreenInfo {
|
||||
+ int x, y;
|
||||
+ int width, height;
|
||||
+ GldiWlOutput wloutput; // wl_registry object identifier (in wayland session)
|
||||
+} GldiScreenInfo;
|
||||
+
|
||||
// data
|
||||
struct _GldiDesktopGeometry {
|
||||
int iNbScreens;
|
||||
- GtkAllocation *pScreens; // liste of all screen devices.
|
||||
+ GldiScreenInfo *pScreens; // liste of all screen devices.
|
||||
GtkAllocation Xscreen; // logical screen, possibly made of several screen devices.
|
||||
int iNbDesktops;
|
||||
int iNbViewportX, iNbViewportY;
|
||||
diff --git a/src/implementations/cairo-dock-X-utilities.c b/src/implementations/cairo-dock-X-utilities.c
|
||||
index 26217dab..9d39e017 100644
|
||||
--- a/src/implementations/cairo-dock-X-utilities.c
|
||||
+++ b/src/implementations/cairo-dock-X-utilities.c
|
||||
@@ -89,7 +89,7 @@ static Atom s_aUtf8String;
|
||||
static Atom s_aString;
|
||||
static unsigned char error_code = Success;
|
||||
|
||||
-static GtkAllocation *_get_screens_geometry (int *pNbScreens);
|
||||
+static GldiScreenInfo *_get_screens_geometry (int *pNbScreens);
|
||||
|
||||
static gboolean cairo_dock_support_X_extension (void);
|
||||
|
||||
@@ -185,14 +185,14 @@ unsigned char cairo_dock_get_X_error_code (void)
|
||||
return error_code;
|
||||
}
|
||||
|
||||
-static GtkAllocation *_get_screens_geometry (int *pNbScreens)
|
||||
+static GldiScreenInfo *_get_screens_geometry (int *pNbScreens)
|
||||
{
|
||||
- GtkAllocation *pScreens = NULL;
|
||||
- GtkAllocation *pScreen;
|
||||
+ GldiScreenInfo *pScreens = NULL;
|
||||
+ GldiScreenInfo *pScreen;
|
||||
int iNbScreens = 0;
|
||||
/*Unit Tests
|
||||
iNbScreens = 2;
|
||||
- pScreens = g_new0 (GtkAllocation, iNbScreens);
|
||||
+ pScreens = g_new0 (GldiScreenInfo, iNbScreens);
|
||||
pScreens[0].x = 0;
|
||||
pScreens[0].y = 0;
|
||||
pScreens[0].width = 1000;
|
||||
@@ -213,7 +213,7 @@ static GtkAllocation *_get_screens_geometry (int *pNbScreens)
|
||||
{
|
||||
int n = res->ncrtc;
|
||||
cd_debug (" number of screen(s): %d", n);
|
||||
- pScreens = g_new0 (GtkAllocation, n);
|
||||
+ pScreens = g_new0 (GldiScreenInfo, n);
|
||||
int i;
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
@@ -256,7 +256,7 @@ static GtkAllocation *_get_screens_geometry (int *pNbScreens)
|
||||
if (scr != NULL)
|
||||
{
|
||||
cd_debug (" number of screen(s): %d", n);
|
||||
- pScreens = g_new0 (GtkAllocation, n);
|
||||
+ pScreens = g_new0 (GldiScreenInfo, n);
|
||||
int i;
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
@@ -286,7 +286,7 @@ static GtkAllocation *_get_screens_geometry (int *pNbScreens)
|
||||
#endif
|
||||
|
||||
iNbScreens = 1;
|
||||
- pScreens = g_new0 (GtkAllocation, iNbScreens);
|
||||
+ pScreens = g_new0 (GldiScreenInfo, iNbScreens);
|
||||
pScreen = &pScreens[0];
|
||||
pScreen->x = 0;
|
||||
pScreen->y = 0;
|
||||
@@ -335,7 +335,7 @@ gboolean cairo_dock_update_screen_geometry (void)
|
||||
}
|
||||
|
||||
// get the size and position of each screen (they could have changed even though the X screen has not changed, for instance if you swap 2 screens).
|
||||
- GtkAllocation *pScreens = g_desktopGeometry.pScreens;
|
||||
+ GldiScreenInfo *pScreens = g_desktopGeometry.pScreens;
|
||||
int iNbScreens = g_desktopGeometry.iNbScreens;
|
||||
g_desktopGeometry.pScreens = _get_screens_geometry (&g_desktopGeometry.iNbScreens);
|
||||
|
||||
@@ -347,7 +347,7 @@ gboolean cairo_dock_update_screen_geometry (void)
|
||||
int i;
|
||||
for (i = 0; i < MIN (iNbScreens, g_desktopGeometry.iNbScreens); i ++)
|
||||
{
|
||||
- if (memcmp (&pScreens[i], &g_desktopGeometry.pScreens[i], sizeof (GtkAllocation)) != 0)
|
||||
+ if (memcmp (&pScreens[i], &g_desktopGeometry.pScreens[i], sizeof (GldiScreenInfo)) != 0)
|
||||
{
|
||||
bNewSize = TRUE;
|
||||
break;
|
||||
diff --git a/src/implementations/cairo-dock-wayland-manager.c b/src/implementations/cairo-dock-wayland-manager.c
|
||||
index 9ce8d505..f9732133 100644
|
||||
--- a/src/implementations/cairo-dock-wayland-manager.c
|
||||
+++ b/src/implementations/cairo-dock-wayland-manager.c
|
||||
@@ -73,31 +73,97 @@ struct desktop
|
||||
};
|
||||
static gboolean s_bInitializing = TRUE; // each time a callback is called on startup, it will set this to TRUE, and we'll make a roundtrip to the server until no callback is called.
|
||||
|
||||
-static void _output_geometry_cb (G_GNUC_UNUSED void *data, G_GNUC_UNUSED struct wl_output *wl_output,
|
||||
+static int get_position_gldi_screeninfo_by_id (GldiScreenInfo *array_screens, int iNbScreens, uint32_t obj_id)
|
||||
+{
|
||||
+ int i_screen;
|
||||
+ GldiScreenInfo *p_screen = array_screens;
|
||||
+ for (i_screen = 0; i_screen < iNbScreens; i_screen++)
|
||||
+ {
|
||||
+ if (p_screen->wloutput.id == obj_id)
|
||||
+ {
|
||||
+ return i_screen;
|
||||
+ }
|
||||
+ p_screen++;
|
||||
+ }
|
||||
+
|
||||
+ return -1;
|
||||
+}
|
||||
+
|
||||
+static GldiScreenInfo *append_gldi_screeninfo(GldiScreenInfo **ref_array_screens, int *ref_iNbScreens)
|
||||
+{
|
||||
+ int iNbScreens_old = *ref_iNbScreens;
|
||||
+ int iNbScreens_new = iNbScreens_old + 1;
|
||||
+ GldiScreenInfo *p_new_screeninfo;
|
||||
+
|
||||
+ if (!*ref_array_screens)
|
||||
+ *ref_array_screens = g_new(GldiScreenInfo, 1);
|
||||
+ else
|
||||
+ *ref_array_screens = g_realloc(*ref_array_screens, iNbScreens_new * sizeof (**ref_array_screens));
|
||||
+ if (!*ref_array_screens) abort();
|
||||
+
|
||||
+ p_new_screeninfo = *ref_array_screens + (iNbScreens_new - 1);
|
||||
+ *ref_iNbScreens = iNbScreens_new;
|
||||
+
|
||||
+ return p_new_screeninfo;
|
||||
+}
|
||||
+
|
||||
+static void remove_gldi_screeninfo_by_id(GldiScreenInfo **ref_array_screens, int *ref_iNbScreens, uint32_t obj_id)
|
||||
+{
|
||||
+ int iNbScreens_old = *ref_iNbScreens;
|
||||
+ int pos_screen;
|
||||
+ GldiScreenInfo *p_screen;
|
||||
+
|
||||
+ if (iNbScreens_old <= 1) return; // Keep at least one information for now
|
||||
+
|
||||
+ pos_screen = get_position_gldi_screeninfo_by_id(*ref_array_screens, *ref_iNbScreens, obj_id);
|
||||
+ if (pos_screen < 0) return;
|
||||
+
|
||||
+ p_screen = *ref_array_screens + pos_screen;
|
||||
+#ifdef WL_OUTPUT_RELEASE_SINCE_VERSION
|
||||
+ if (p_screen->wloutput.id >= WL_OUTPUT_RELEASE_SINCE_VERSION)
|
||||
+ {
|
||||
+ wl_output_release(p_screen->wloutput.output);
|
||||
+ } else
|
||||
+#endif
|
||||
+ {
|
||||
+ wl_output_destroy(p_screen->wloutput.output);
|
||||
+ }
|
||||
+
|
||||
+ if (iNbScreens_old > pos_screen + 1)
|
||||
+ {
|
||||
+ memmove(
|
||||
+ p_screen, p_screen + 1,
|
||||
+ (iNbScreens_old - pos_screen - 1) * sizeof (**ref_array_screens)
|
||||
+ );
|
||||
+ }
|
||||
+
|
||||
+ (*ref_iNbScreens)--;
|
||||
+}
|
||||
+
|
||||
+static void _output_geometry_cb (void *data, G_GNUC_UNUSED struct wl_output *wl_output,
|
||||
int32_t x, int32_t y,
|
||||
G_GNUC_UNUSED int32_t physical_width, G_GNUC_UNUSED int32_t physical_height,
|
||||
G_GNUC_UNUSED int32_t subpixel, G_GNUC_UNUSED const char *make, G_GNUC_UNUSED const char *model, G_GNUC_UNUSED int32_t output_transform)
|
||||
{
|
||||
+ GldiScreenInfo *p_screeninfo = (GldiScreenInfo *)data;
|
||||
cd_debug ("Geometry: %d;%d", x, y);
|
||||
- g_desktopGeometry.iNbScreens ++;
|
||||
- if (!g_desktopGeometry.pScreens)
|
||||
- g_desktopGeometry.pScreens = g_new0 (GtkAllocation, 1);
|
||||
- else
|
||||
- g_desktopGeometry.pScreens = g_realloc (g_desktopGeometry.pScreens, g_desktopGeometry.iNbScreens * sizeof(GtkAllocation));
|
||||
+ cd_debug ("id: %u", (unsigned int)p_screeninfo->wloutput.id);
|
||||
|
||||
- g_desktopGeometry.pScreens[g_desktopGeometry.iNbScreens-1].x = x;
|
||||
- g_desktopGeometry.pScreens[g_desktopGeometry.iNbScreens-1].y = y;
|
||||
+ p_screeninfo->x = x;
|
||||
+ p_screeninfo->y = y;
|
||||
s_bInitializing = TRUE;
|
||||
}
|
||||
|
||||
-static void _output_mode_cb (G_GNUC_UNUSED void *data, G_GNUC_UNUSED struct wl_output *wl_output,
|
||||
+static void _output_mode_cb (void *data, G_GNUC_UNUSED struct wl_output *wl_output,
|
||||
uint32_t flags, int32_t width, int32_t height, G_GNUC_UNUSED int32_t refresh)
|
||||
{
|
||||
+ GldiScreenInfo *p_screeninfo = (GldiScreenInfo *)data;
|
||||
cd_debug ("Output mode: %dx%d, %d", width, height, flags);
|
||||
+ cd_debug ("id: %u", (unsigned int)p_screeninfo->wloutput.id);
|
||||
if (flags & WL_OUTPUT_MODE_CURRENT) // not the current one -> don't bother
|
||||
{
|
||||
- g_desktopGeometry.pScreens[g_desktopGeometry.iNbScreens-1].width = width;
|
||||
- g_desktopGeometry.pScreens[g_desktopGeometry.iNbScreens-1].height = height;
|
||||
+ p_screeninfo->width = width;
|
||||
+ p_screeninfo->height = height;
|
||||
g_desktopGeometry.Xscreen.width = width;
|
||||
g_desktopGeometry.Xscreen.height = height;
|
||||
}
|
||||
@@ -124,14 +190,29 @@ static void _output_scale_cb (G_GNUC_UNUSED void *data, G_GNUC_UNUSED struct wl_
|
||||
|
||||
static const struct wl_output_listener output_listener = {
|
||||
_output_geometry_cb,
|
||||
- _output_mode_cb,
|
||||
+ _output_mode_cb
|
||||
+#ifdef WL_OUTPUT_SCALE_SINCE_VERSION
|
||||
+ ,
|
||||
_output_done_cb,
|
||||
_output_scale_cb
|
||||
+#endif
|
||||
};
|
||||
|
||||
-static void _registry_global_cb (G_GNUC_UNUSED void *data, struct wl_registry *registry, uint32_t id, const char *interface, G_GNUC_UNUSED uint32_t version)
|
||||
+static void _registry_global_cb (G_GNUC_UNUSED void *data, struct wl_registry *registry, uint32_t id, const char *interface, uint32_t version)
|
||||
{
|
||||
- cd_debug ("got a new global object, instance of %s, id=%d", interface, id);
|
||||
+ cd_debug ("got a new global object, instance of %s, id=%d, version=%u", interface, id, version);
|
||||
+ uint32_t wl_output_version =
|
||||
+#if defined(WL_OUTPUT_RELEASE_SINCE_VERSION)
|
||||
+ WL_OUTPUT_RELEASE_SINCE_VERSION;
|
||||
+#elif defined(WL_OUTPUT_SCALE_SINCE_VERSION)
|
||||
+ WL_OUTPUT_SCALE_SINCE_VERSION;
|
||||
+#else
|
||||
+ 1;
|
||||
+#endif
|
||||
+ // server side may not support newer version, in such case suppress the version to use
|
||||
+ if (wl_output_version > version)
|
||||
+ wl_output_version = version;
|
||||
+
|
||||
if (!strcmp (interface, "wl_shell"))
|
||||
{
|
||||
// this is the global that should give us info and signals about the desktop, but currently it's pretty useless ...
|
||||
@@ -142,10 +223,26 @@ static void _registry_global_cb (G_GNUC_UNUSED void *data, struct wl_registry *r
|
||||
struct wl_output *output = wl_registry_bind (registry,
|
||||
id,
|
||||
&wl_output_interface,
|
||||
- 1);
|
||||
+ wl_output_version);
|
||||
+
|
||||
+ GldiScreenInfo *p_screeninfo = NULL;
|
||||
+ int screen_num = get_position_gldi_screeninfo_by_id(g_desktopGeometry.pScreens, g_desktopGeometry.iNbScreens, id);
|
||||
+ if (screen_num >= 0)
|
||||
+ p_screeninfo = g_desktopGeometry.pScreens + screen_num;
|
||||
+ else
|
||||
+ p_screeninfo = append_gldi_screeninfo(&g_desktopGeometry.pScreens, &g_desktopGeometry.iNbScreens);
|
||||
+
|
||||
+ {
|
||||
+ // register new wl_output
|
||||
+ GldiWlOutput *p_wloutput = &p_screeninfo->wloutput;
|
||||
+ p_wloutput->output = output;
|
||||
+ p_wloutput->id = id;
|
||||
+ p_wloutput->ver = wl_output_version;
|
||||
+ }
|
||||
+
|
||||
wl_output_add_listener (output,
|
||||
&output_listener,
|
||||
- NULL);
|
||||
+ p_screeninfo);
|
||||
}
|
||||
s_bInitializing = TRUE;
|
||||
}
|
||||
@@ -153,7 +250,7 @@ static void _registry_global_cb (G_GNUC_UNUSED void *data, struct wl_registry *r
|
||||
static void _registry_global_remove_cb (G_GNUC_UNUSED void *data, G_GNUC_UNUSED struct wl_registry *registry, uint32_t id)
|
||||
{
|
||||
cd_debug ("got a global object has disappeared: id=%d", id);
|
||||
- /// TODO: find it and destroy it...
|
||||
+ remove_gldi_screeninfo_by_id(&g_desktopGeometry.pScreens, &g_desktopGeometry.iNbScreens, id);
|
||||
|
||||
/// TODO: and if it was a wl_output for instance, update the desktop geometry...
|
||||
|
||||
@@ -171,6 +268,9 @@ static void init (void)
|
||||
s_pDisplay = wl_display_connect (NULL);
|
||||
|
||||
g_desktopGeometry.iNbDesktops = g_desktopGeometry.iNbViewportX = g_desktopGeometry.iNbViewportY = 1;
|
||||
+ // Explicitly initialize below for readability
|
||||
+ g_desktopGeometry.pScreens = NULL;
|
||||
+ g_desktopGeometry.iNbScreens = 0;
|
||||
|
||||
|
||||
struct wl_registry *registry = wl_display_get_registry (s_pDisplay);
|
||||
--
|
||||
2.31.1
|
||||
|
||||
|
|
@ -5,7 +5,7 @@ set -x
|
|||
|
||||
umask 0022
|
||||
|
||||
VERSION=${VERSION:-3.4.0}
|
||||
VERSION=${VERSION:-3.5.0}
|
||||
VERSION_PARENT=${VERSION%.[0-9]}
|
||||
|
||||
|
||||
|
|
@ -29,9 +29,9 @@ if [ "x${USE_GIT}" != "x" ] ; then
|
|||
|
||||
git clone --depth 1 ${GIT_URL}
|
||||
cd ${REPONAME}
|
||||
GITDATE=$(git log | sed -n -e 's|^Date:[ \t]*||p' | sed -e 's| \([+-][0-9][0-9]*\)$| UTC\1|')
|
||||
GITDATE=$(git log -1 | sed -n -e 's|^Date:[ \t]*||p' | sed -e 's| \([+-][0-9][0-9]*\)$| UTC\1|')
|
||||
GITDAME_B="$(date -d "${GITDATE}" '+%Y%m%d')"
|
||||
GITHASH="$(git log | sed -n -e 's|^commit[ \t]||p')"
|
||||
GITHASH="$(git log -1 | sed -n -e 's|^commit[ \t]||p')"
|
||||
SHORTHASH=$(echo ${GITHASH:0:7})
|
||||
cd ..
|
||||
cd ..
|
||||
|
|
@ -59,7 +59,7 @@ set +x
|
|||
echo -n -e "Modifying source \t"
|
||||
|
||||
count=0
|
||||
sed -i -e '\@AVOID_PATENT_CRAP@d' src/gldit/gldi-config.h.in
|
||||
sed -i -e '\@AVOID_PATENT_CRAP@s@^.*$@@' src/gldit/gldi-config.h.in
|
||||
grep -rIl AVOID_PATENT_CRAP src/ | while read f
|
||||
do
|
||||
count=$((count + 1))
|
||||
|
|
@ -69,17 +69,19 @@ do
|
|||
do
|
||||
if ( echo "$line" | grep -q "#ifndef.*AVOID_PATENT_CRAP" ) ; then
|
||||
flag=10
|
||||
continue
|
||||
line=""
|
||||
fi
|
||||
if [[ ( $flag == 10 ) && ( $(echo "$line" | grep -q "#else" ; echo $? ) == 0 ) ]] ; then
|
||||
flag=5
|
||||
continue
|
||||
line=""
|
||||
fi
|
||||
if [[ ( $flag == 5 ) && ( $(echo "$line" | grep -q "#endif" ; echo $? ) == 0 ) ]] ; then
|
||||
flag=1
|
||||
continue
|
||||
line=""
|
||||
fi
|
||||
if [ $flag == 10 ] ; then
|
||||
line=""
|
||||
fi
|
||||
[ $flag == 10 ] && continue
|
||||
echo "$line" >> $f
|
||||
done
|
||||
rm -f $f.orig
|
||||
|
|
|
|||
78
cairo-dock-pr157-disabled-zoom-feature.patch
Normal file
78
cairo-dock-pr157-disabled-zoom-feature.patch
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
From 4d2034db650a64315e9663f5ee89cad84692c693 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Kondor <kondor.dani@gmail.com>
|
||||
Date: Wed, 15 Oct 2025 18:13:22 +0200
|
||||
Subject: [PATCH] gui-factory: add a warning about disabled zoom feature
|
||||
|
||||
If Cairo-Dock is compiled with `-DAVOID_PATENT_CRAP`, the Zoom feature will be disabled. Adjust the settings GUI to disable the relevant settings and display a warning.
|
||||
---
|
||||
src/gldit/cairo-dock-gui-factory.c | 33 ++++++++++++++++++++++++++++--
|
||||
1 file changed, 31 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/gldit/cairo-dock-gui-factory.c b/src/gldit/cairo-dock-gui-factory.c
|
||||
index fcd639bc..7e846e2e 100644
|
||||
--- a/src/gldit/cairo-dock-gui-factory.c
|
||||
+++ b/src/gldit/cairo-dock-gui-factory.c
|
||||
@@ -51,6 +51,7 @@
|
||||
#include "cairo-dock-desktop-manager.h"
|
||||
#include "cairo-dock-separator-manager.h" // GLDI_OBJECT_IS_SEPARATOR_ICON
|
||||
#include "cairo-dock-menu.h" // gldi_menu_item_new_full2
|
||||
+#include "cairo-dock-file-manager.h" // cairo_dock_fm_launch_uri
|
||||
#include "cairo-dock-gui-factory.h"
|
||||
|
||||
#define CAIRO_DOCK_ICON_MARGIN 6
|
||||
@@ -1838,6 +1839,11 @@ const gchar *cairo_dock_parse_key_comment (gchar *cKeyComment, char *iElementTyp
|
||||
return cUsefulComment;
|
||||
}
|
||||
|
||||
+static gboolean _open_btn_url (GtkLinkButton *pURL, G_GNUC_UNUSED gpointer data)
|
||||
+{
|
||||
+ return cairo_dock_fm_launch_uri (gtk_link_button_get_uri (pURL));
|
||||
+}
|
||||
+
|
||||
GtkWidget *cairo_dock_build_group_widget (GKeyFile *pKeyFile, const gchar *cGroupName, const gchar *cGettextDomain, GtkWidget *pMainWindow, GSList **pWidgetList, GPtrArray *pDataGarbage, const gchar *cOriginalConfFilePath)
|
||||
{
|
||||
g_return_val_if_fail (pKeyFile != NULL && cGroupName != NULL, NULL);
|
||||
@@ -3087,9 +3093,15 @@ GtkWidget *cairo_dock_build_group_widget (GKeyFile *pKeyFile, const gchar *cGrou
|
||||
}
|
||||
|
||||
GtkWidget *pExternFrame;
|
||||
+ gboolean bDisabled = FALSE;
|
||||
if (iElementType == CAIRO_DOCK_WIDGET_FRAME)
|
||||
{
|
||||
pExternFrame = gtk_frame_new (NULL);
|
||||
+#ifndef AVOID_PATENT_CRAP
|
||||
+ // do nothing, bDisabled already set to FALSE
|
||||
+#else
|
||||
+ bDisabled = !g_strcmp0 (cValue, "Zoom effect");
|
||||
+#endif
|
||||
gtk_container_set_border_width (GTK_CONTAINER (pExternFrame), CAIRO_DOCK_GUI_MARGIN);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (pExternFrame), GTK_SHADOW_OUT);
|
||||
gtk_frame_set_label_widget (GTK_FRAME (pExternFrame), (pLabelContainer != NULL ? pLabelContainer : pLabel));
|
||||
@@ -3116,8 +3128,25 @@ GtkWidget *cairo_dock_build_group_widget (GKeyFile *pKeyFile, const gchar *cGrou
|
||||
0);
|
||||
|
||||
pFrameVBox = gtk_box_new (GTK_ORIENTATION_VERTICAL, CAIRO_DOCK_GUI_MARGIN);
|
||||
- gtk_container_add (GTK_CONTAINER (pFrame),
|
||||
- pFrameVBox);
|
||||
+ if (bDisabled) {
|
||||
+ gtk_widget_set_sensitive (pFrameVBox, FALSE);
|
||||
+
|
||||
+ GtkWidget *pBoxV = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||
+ GtkWidget *pBoxH = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||
+ GtkWidget *pImg = gtk_image_new_from_icon_name ("dialog-warning", GTK_ICON_SIZE_MENU);
|
||||
+ GtkWidget *pLbl = gtk_label_new (_("Cairo-Dock has been built with the icon zoom effect disabled. See here for more info: "));
|
||||
+ GtkWidget *pURL = gtk_link_button_new ("https://github.com/Cairo-Dock/cairo-dock-core/issues/156");
|
||||
+ // note: we use our own handler to open URLs so that we can use systemd to launch the browser if needed
|
||||
+ g_signal_connect (G_OBJECT (pURL), "activate-link", G_CALLBACK (_open_btn_url), NULL);
|
||||
+
|
||||
+ gtk_box_pack_start (GTK_BOX (pBoxH), pImg, FALSE, FALSE, 20);
|
||||
+ gtk_box_pack_start (GTK_BOX (pBoxH), pLbl, FALSE, FALSE, 0);
|
||||
+ gtk_box_pack_start (GTK_BOX (pBoxH), pURL, FALSE, FALSE, 0);
|
||||
+ gtk_box_pack_start (GTK_BOX (pBoxV), pBoxH, FALSE, FALSE, 5);
|
||||
+ gtk_box_pack_start (GTK_BOX (pBoxV), pFrameVBox, FALSE, FALSE, 0);
|
||||
+ gtk_container_add (GTK_CONTAINER (pFrame), pBoxV);
|
||||
+ }
|
||||
+ else gtk_container_add (GTK_CONTAINER (pFrame), pFrameVBox);
|
||||
|
||||
if (pAuthorizedValuesList[0] == NULL || *pAuthorizedValuesList[0] == '\0')
|
||||
g_free (cValue);
|
||||
189
cairo-dock.spec
189
cairo-dock.spec
|
|
@ -1,16 +1,17 @@
|
|||
%global urlver 3.4
|
||||
%global mainver 3.4.1
|
||||
%global urlver 3.6
|
||||
%global mainver 3.6.2
|
||||
|
||||
%global plugin_least_ver 3.4.1
|
||||
%global plugin_least_ver 3.6.0
|
||||
|
||||
%global use_git 1
|
||||
%global gitdate 20210327
|
||||
%global githash 6c569e67a2a366e7634224a0133ede51755629cb
|
||||
%dnl %global use_git 1
|
||||
%global gitdate 20250922
|
||||
%global githash bbdf30b67241dbf61dea651b636a07da5cc39049
|
||||
%global shorthash %(c=%{githash} ; echo ${c:0:7})
|
||||
|
||||
%global tarballver %{mainver}%{?use_git:-%{gitdate}git%{shorthash}}
|
||||
%global mainrel 18
|
||||
|
||||
%global baserelease 1
|
||||
%dnl %global alphatag .rcb
|
||||
|
||||
%undefine _ld_strict_symbol_defs
|
||||
%undefine __brp_mangle_shebangs
|
||||
|
|
@ -25,11 +26,15 @@
|
|||
##########################################
|
||||
|
||||
Name: cairo-dock
|
||||
Version: 3.4.1
|
||||
Release: %{mainrel}%{?use_git:.D%{gitdate}git%{shorthash}}%{?dist}%{flagrel}.3
|
||||
Version: %{mainver}%{?use_git:^%{gitdate}git%{shorthash}}
|
||||
Release: %{baserelease}%{?alphatag}%{?dist}%{flagrel}
|
||||
Summary: Light eye-candy fully themable animated dock
|
||||
|
||||
License: GPLv3+
|
||||
# Overall: GPL-3.0-or-later
|
||||
# data/scripts/cairo-dock-package-theme.sh GPL-2.0-or-later
|
||||
# src/gldit/gtk3imagemenuitem.c LGPL-3.0-or-later
|
||||
# SPDX confirmed
|
||||
License: GPL-3.0-or-later AND GPL-2.0-or-later AND LGPL-3.0-or-later
|
||||
URL: http://glx-dock.org/
|
||||
# Source0: http://launchpad.net/cairo-dock-core/%%{urlver}/%%{mainver}/+download/cairo-dock-%%{mainver}.tar.gz
|
||||
# Modified due to some may-be-patent-infringement issue
|
||||
|
|
@ -38,14 +43,14 @@ Source0: cairo-dock-fedora-%{tarballver}.tar.gz
|
|||
Source1: cairo-dock-create-fedora-tarball.sh
|
||||
# And some legal explanation
|
||||
Source2: LEGAL.fedora.cairo-dock
|
||||
# wayland-manager: allocate new wl_output information by checking id
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2000812
|
||||
# https://github.com/Cairo-Dock/cairo-dock-core/pull/12
|
||||
Patch1: 0001-LP1943052-wayland-manager-allocate-new-wl_output-inf.patch
|
||||
# https://github.com/Cairo-Dock/cairo-dock-core/pull/157
|
||||
Patch0: cairo-dock-pr157-disabled-zoom-feature.patch
|
||||
|
||||
BuildRequires: gcc
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: cmake
|
||||
BuildRequires: extra-cmake-modules
|
||||
BuildRequires: systemd-rpm-macros
|
||||
%if 0%{?use_gcc_strict_sanitize}
|
||||
BuildRequires: libasan
|
||||
BuildRequires: libubsan
|
||||
|
|
@ -63,10 +68,14 @@ BuildRequires: pkgconfig(gl)
|
|||
BuildRequires: pkgconfig(glib-2.0)
|
||||
BuildRequires: pkgconfig(glu)
|
||||
BuildRequires: pkgconfig(gthread-2.0)
|
||||
BuildRequires: pkgconfig(gtk-layer-shell-0)
|
||||
BuildRequires: pkgconfig(gtk+-3.0)
|
||||
BuildRequires: pkgconfig(json-c)
|
||||
BuildRequires: pkgconfig(libcurl)
|
||||
BuildRequires: pkgconfig(librsvg-2.0)
|
||||
BuildRequires: pkgconfig(libxml-2.0)
|
||||
BuildRequires: pkgconfig(systemd)
|
||||
BuildRequires: pkgconfig(wayland-egl)
|
||||
BuildRequires: pkgconfig(wayland-client)
|
||||
BuildRequires: pkgconfig(x11)
|
||||
BuildRequires: pkgconfig(xcomposite)
|
||||
|
|
@ -119,13 +128,13 @@ The %{name}-devel package contains libraries, build data, and header
|
|||
files for developing applications that use %{name}.
|
||||
|
||||
%prep
|
||||
%autosetup -n %{name}-%{version}%{?use_git:-%{gitdate}git%{shorthash}} -p1
|
||||
%autosetup -n %{name}-%{mainver}%{?use_git:-%{gitdate}git%{shorthash}} -p1
|
||||
|
||||
## permission
|
||||
# %%_fixperms cannot fix permissions completely here
|
||||
for dir in */
|
||||
do
|
||||
find $dir -type f | xargs chmod 0644
|
||||
find $dir -type f | xargs -r chmod 0644
|
||||
done
|
||||
chmod 0644 [A-Z]*
|
||||
chmod 0755 */
|
||||
|
|
@ -139,7 +148,15 @@ sed -i.stat \
|
|||
po/CMakeLists.txt
|
||||
|
||||
# Modify version forcely
|
||||
sed -i CMakeLists.txt -e '\@set (VERSION @s|VERSION.*|VERSION "%{version}")|'
|
||||
%if 0%{?use_git}
|
||||
sed -i CMakeLists.txt -e '\@set (VERSION @s|VERSION.*|VERSION "%{mainver}")|'
|
||||
%endif
|
||||
|
||||
# Don't set rpath
|
||||
sed -i CMakeLists.txt -e '\@APPEND.*CMAKE_INSTALL_RPATH@d'
|
||||
|
||||
# Don't check / try systemd-notify on buildroot
|
||||
sed -i CMakeLists.txt -e '\@SYSTEMD_COMMAND@s|systemd-notify|true|'
|
||||
|
||||
%build
|
||||
%set_build_flags
|
||||
|
|
@ -156,6 +173,9 @@ export CXXFLAGS="$(echo $CXXFLAGS | sed -e 's|-specs=[^ \t][^ \t]*hardened[^ \t]
|
|||
export LDFLAGS="$(echo $LDFLAGS | sed -e 's|-specs=[^ \t][^ \t]*hardened[^ \t][^ \t]*||g')"
|
||||
%endif
|
||||
|
||||
# PATCH157 needs this: remove this when patch is included in tarball
|
||||
export CFLAGS="$CFLAGS -DAVOID_PATENT_CRAP=1"
|
||||
|
||||
rm -f CMakeCache.txt
|
||||
%cmake \
|
||||
-DCMAKE_SKIP_RPATH:BOOL=ON \
|
||||
|
|
@ -240,6 +260,8 @@ popd
|
|||
%{_libdir}/%{name}/libcd-Help.so
|
||||
%{_datadir}/%{name}/plug-ins/Help/
|
||||
|
||||
%{_userunitdir}/%{name}.service
|
||||
|
||||
%{_mandir}/man1/%{name}.1*
|
||||
|
||||
%files devel
|
||||
|
|
@ -248,6 +270,139 @@ popd
|
|||
%{_libdir}/pkgconfig/gldi.pc
|
||||
|
||||
%changelog
|
||||
* Tue Dec 23 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.6.2-1
|
||||
- 3.6.2
|
||||
|
||||
* Tue Nov 04 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.6.1-1
|
||||
- 3.6.1
|
||||
|
||||
* Fri Oct 17 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.6.0-2
|
||||
- Upstream patch for warning for disabling zoom effect
|
||||
|
||||
* Wed Oct 01 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.6.0-1
|
||||
- 3.6.0
|
||||
|
||||
* Wed Sep 24 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20250922gitbbdf30b-1.rcb
|
||||
- Update to the latest git (20250922gitbbdf30b)
|
||||
|
||||
* Mon Sep 08 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20250907git2cd4d36-1.rcb
|
||||
- Update to the latest git (20250907git2cd4d36)
|
||||
|
||||
* Mon Sep 01 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20250901git8460fe2-1.rc9
|
||||
- Update to the latest git (20250901git8460fe2)
|
||||
|
||||
* Sun Aug 24 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20250822gitf3de00e-1.rc9
|
||||
- Update to the latest git (20250822gitf3de00e)
|
||||
|
||||
* Tue Aug 12 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20250812gitba992c4-1.rc8
|
||||
- Update to the latest git (20250812gitba992c4)
|
||||
|
||||
* Tue Jul 29 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20250729gitc86686d-1.rc7
|
||||
- Update to the latest git (20250729gitc86686d)
|
||||
|
||||
* Wed Jul 23 2025 Fedora Release Engineering <releng@fedoraproject.org> - 3.5.99^20250714gite852048-2.rc6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
|
||||
|
||||
* Wed Jul 23 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20250716git033945c-1.rc6
|
||||
- Update to the latest git (20250716git033945c)
|
||||
|
||||
* Mon Jul 14 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20250714gite852048-1.rc6
|
||||
- Update to the latest git (20250714gite852048)
|
||||
|
||||
* Mon Jun 30 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20250623git6b5d476-1.rc3
|
||||
- Update to the latest git (20250623git6b5d476)
|
||||
|
||||
* Thu Jun 19 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20250618git89864a0-1.rc2
|
||||
- Update to the latest git (20250618git89864a0)
|
||||
|
||||
* Thu Mar 13 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20250309gita77d61b-1.rc2
|
||||
- Update to the latest git (20250309gita77d61b)
|
||||
|
||||
* Sun Mar 02 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20250223gite2c28d1-1.rc2
|
||||
- Update to the latest git (20250223gite2c28d1)
|
||||
|
||||
* Tue Feb 18 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20250218git77bc388-1.rc2
|
||||
- Update to the latest git (20250218git77bc388)
|
||||
|
||||
* Fri Feb 14 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20250214gitddcff9e-1.rc2
|
||||
- Update to the latest git (20250214gitddcff9e)
|
||||
|
||||
* Thu Feb 13 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20250211git443d8da-1.rc1
|
||||
- Update to the latest git (20250211git443d8da)
|
||||
|
||||
* Thu Jan 30 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20250120gitd2fd789-1.rc1
|
||||
- Update to the latest git (20250120gitd2fd789)
|
||||
|
||||
* Sun Jan 19 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20250118gitb0f5d5c-1.beta6
|
||||
- Update to the latest git (20250118gitb0f5d5c)
|
||||
|
||||
* Thu Jan 16 2025 Fedora Release Engineering <releng@fedoraproject.org> - 3.5.99^20241218gitf852640-2.beta6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
|
||||
|
||||
* Sun Dec 29 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20241218gitf852640-1.beta6
|
||||
- Update to the latest git (20241218gitf852640)
|
||||
|
||||
* Mon Dec 16 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20241216git4f36d13-1.beta6
|
||||
- Update to the latest git (20241216git4f36d13)
|
||||
|
||||
* Sun Dec 08 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20241207gitea4bd97-1.beta5
|
||||
- Update to the latest git (20241207gitea4bd97)
|
||||
|
||||
* Tue Nov 19 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20241118git575a251-1
|
||||
- Update to the latest git (20241118git575a251)
|
||||
|
||||
* Thu Oct 24 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20241024git9f9421e-1
|
||||
- Update to the latest git (20241024git9f9421e)
|
||||
|
||||
* Sun Oct 20 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20241016gitea5d37e-1
|
||||
- Update to the latest git (20241016gitea5d37e)
|
||||
|
||||
* Mon Oct 14 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20241013git0324720-1
|
||||
- Update to the latest git (20241013git0324720)
|
||||
|
||||
* Sun Oct 06 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20241007.1git2149e52-1
|
||||
- Update to the latest git (20241007git2149e52)
|
||||
|
||||
* Thu Sep 26 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20240926git7b3ac7f-1
|
||||
- Update to the latest git (20240926git7b3ac7f)
|
||||
|
||||
* Wed Sep 18 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20240915git1458bc8-1
|
||||
- Update to the latest git (20240915git1458bc8)
|
||||
|
||||
* Thu Aug 22 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20240822gitb196136-1
|
||||
- Update to the latest git (20240822gitb196136)
|
||||
|
||||
* Wed Aug 07 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20240805git23c0be5-1
|
||||
- Update to the latest git (20240805git23c0be5)
|
||||
|
||||
* Wed Jul 17 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.5.99^20240505git13fb151-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
|
||||
|
||||
* Sun May 05 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20240505git13fb151-1
|
||||
- Update to the latest git (20240505git13fb151)
|
||||
- Enable Wayfire IPC support
|
||||
|
||||
* Sat May 04 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.99^20240501git1f31686-1
|
||||
- Update to latest git (20240501git1f31686)
|
||||
|
||||
* Fri Mar 01 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.0-2
|
||||
- SPDX confirmation
|
||||
|
||||
* Mon Feb 26 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.5.0-1
|
||||
- Update to 3.5.0
|
||||
|
||||
* Tue Jan 23 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.4.1-22.D20210327git6c569e6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.4.1-21.D20210327git6c569e6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.4.1-20.D20210327git6c569e6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
|
||||
|
||||
* Mon May 29 2023 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.4.1-19.D20210327git6c569e6
|
||||
- Pass -r option to xargs because new rpm creates empty directory
|
||||
|
||||
* Wed Jan 18 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.4.1-18.D20210327git6c569e6.3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
|
||||
|
||||
|
|
|
|||
2
sources
2
sources
|
|
@ -1 +1 @@
|
|||
SHA512 (cairo-dock-fedora-3.4.1-20210327git6c569e6.tar.gz) = 605c0c8bcf0ef0725c6ab1458856e70d6148f1aad351aae6d74bcc9d4beba7ae2da1d53cc743d4d2e587c68d14896981e4cbe7281c9fcc75ed2b3777e698df47
|
||||
SHA512 (cairo-dock-fedora-3.6.2.tar.gz) = dd941127605cd771813c1349fcaf8c1ba16673a9e95a6124e3b3e6a30fab97816c14291ac2a76e191b411f025a6f4b03f9b3d9ef356ee580b208a3fa8b6e4f34
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue