Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions com.github.ahrm.sioyek.metainfo.xml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,12 @@
<update_contact>nbenitezl_AT_gmail.com</update_contact>
<content_rating type="oars-1.1"/>
<releases>
<release version="2.0.0.github29032024" date="2024-03-29">
<description>
<p>Flathub Beta release from Sioyek github code at 29-03-2024.</p>
</description>
<url>https://github.com/ahrm/sioyek/commit/35a550e8e8a6d179ed877ca6b0207da009620fb6</url>
</release>
<release version="2.0.0" date="2022-12-12">
<description>
<ul>
Expand Down
6 changes: 4 additions & 2 deletions com.github.ahrm.sioyek.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ modules:
sources:
- type: git
url: https://github.com/ahrm/sioyek.git
tag: 'v2.0.0'
# latest master HEAD at 29/03/2024
commit: 35a550e8e8a6d179ed877ca6b0207da009620fb6
- type: patch
path: patch/sioyek_build_fix.patch
- type: file
Expand All @@ -55,4 +56,5 @@ modules:
path: com.github.ahrm.sioyek.desktop

cleanup:
- /share/man
- /share/man
- /include # Reduces app size considerably (thx Aman9das)
228 changes: 228 additions & 0 deletions patch/qtwayland-decoration-support-backports-from-qt6.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,228 @@
diff --git a/src/client/qwaylandabstractdecoration_p.h b/src/client/qwaylandabstractdecoration_p.h
index 81c8e17..61cbde7 100644
--- a/src/client/qwaylandabstractdecoration_p.h
+++ b/src/client/qwaylandabstractdecoration_p.h
@@ -82,6 +82,12 @@ class Q_WAYLAND_CLIENT_EXPORT QWaylandAbstractDecoration : public QObject
Q_OBJECT
Q_DECLARE_PRIVATE(QWaylandAbstractDecoration)
public:
+ enum MarginsType {
+ Full,
+ ShadowsExcluded,
+ ShadowsOnly
+ };
+
QWaylandAbstractDecoration();
~QWaylandAbstractDecoration() override;

@@ -91,7 +97,8 @@ public:
void update();
bool isDirty() const;

- virtual QMargins margins() const = 0;
+ virtual QMargins margins(MarginsType marginsType = Full) const = 0;
+
QWindow *window() const;
const QImage &contentImage();

diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index ec232cd..54b27f1 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -383,6 +383,16 @@ void QWaylandWindow::setGeometry(const QRect &r)
void QWaylandWindow::resizeFromApplyConfigure(const QSize &sizeWithMargins, const QPoint &offset)
{
QMargins margins = frameMargins();
+
+ // Exclude shadows from margins once they are excluded from window geometry
+ // 1) First resizeFromApplyConfigure() call will have sizeWithMargins equal to surfaceSize()
+ // which has full margins (shadows included).
+ // 2) Following resizeFromApplyConfigure() calls should have sizeWithMargins equal to
+ // windowContentGeometry() which excludes shadows, therefore in this case we have to
+ // exclude them too in order not to accidentally apply smaller size to the window.
+ if (mWindowDecoration && (sizeWithMargins != surfaceSize()))
+ margins = mWindowDecoration->margins(QWaylandAbstractDecoration::ShadowsExcluded);
+
int widthWithoutMargins = qMax(sizeWithMargins.width() - (margins.left() + margins.right()), 1);
int heightWithoutMargins = qMax(sizeWithMargins.height() - (margins.top() + margins.bottom()), 1);
QRect geometry(windowGeometry().topLeft(), QSize(widthWithoutMargins, heightWithoutMargins));
@@ -710,7 +720,12 @@ QSize QWaylandWindow::surfaceSize() const
*/
QRect QWaylandWindow::windowContentGeometry() const
{
- return QRect(QPoint(), surfaceSize());
+ QMargins shadowMargins;
+
+ if (mWindowDecoration)
+ shadowMargins = mWindowDecoration->margins(QWaylandAbstractDecoration::ShadowsOnly);
+
+ return QRect(QPoint(shadowMargins.left(), shadowMargins.top()), surfaceSize().shrunkBy(shadowMargins));
}

/*!
@@ -1111,6 +1126,16 @@ Qt::WindowStates QWaylandWindow::windowStates() const
return mLastReportedWindowStates;
}

+QWaylandWindow::ToplevelWindowTilingStates QWaylandWindow::toplevelWindowTilingStates() const
+{
+ return mLastReportedToplevelWindowTilingStates;
+}
+
+void QWaylandWindow::handleToplevelWindowTilingStatesChanged(ToplevelWindowTilingStates states)
+{
+ mLastReportedToplevelWindowTilingStates = states;
+}
+
void QWaylandWindow::handleWindowStatesChanged(Qt::WindowStates states)
{
createDecoration();
diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
index 1907f10..33a3b83 100644
--- a/src/client/qwaylandwindow_p.h
+++ b/src/client/qwaylandwindow_p.h
@@ -95,6 +95,15 @@ public:
Vulkan
};

+ enum ToplevelWindowTilingState {
+ WindowNoState = 0,
+ WindowTiledLeft = 1,
+ WindowTiledRight = 2,
+ WindowTiledTop = 4,
+ WindowTiledBottom = 8
+ };
+ Q_DECLARE_FLAGS(ToplevelWindowTilingStates, ToplevelWindowTilingState)
+
QWaylandWindow(QWindow *window, QWaylandDisplay *display);
~QWaylandWindow() override;

@@ -148,6 +157,9 @@ public:
void handleContentOrientationChange(Qt::ScreenOrientation orientation) override;
void setOrientationMask(Qt::ScreenOrientations mask);

+ ToplevelWindowTilingStates toplevelWindowTilingStates() const;
+ void handleToplevelWindowTilingStatesChanged(ToplevelWindowTilingStates states);
+
void setWindowState(Qt::WindowStates states) override;
void setWindowFlags(Qt::WindowFlags flags) override;
void handleWindowStatesChanged(Qt::WindowStates states);
@@ -260,6 +272,7 @@ protected:
QRegion mMask;
QRegion mOpaqueArea;
Qt::WindowStates mLastReportedWindowStates = Qt::WindowNoState;
+ ToplevelWindowTilingStates mLastReportedToplevelWindowTilingStates = WindowNoState;

QWaylandShmBackingStore *mBackingStore = nullptr;
QWaylandBuffer *mQueuedBuffer = nullptr;
@@ -296,6 +309,8 @@ private:
friend class QWaylandSubSurface;
};

+Q_DECLARE_OPERATORS_FOR_FLAGS(QWaylandWindow::ToplevelWindowTilingStates)
+
inline QIcon QWaylandWindow::windowIcon() const
{
return mWindowIcon;
diff --git a/src/plugins/decorations/bradient/main.cpp b/src/plugins/decorations/bradient/main.cpp
index e75fda3..72dda67 100644
--- a/src/plugins/decorations/bradient/main.cpp
+++ b/src/plugins/decorations/bradient/main.cpp
@@ -72,7 +72,7 @@ class Q_WAYLAND_CLIENT_EXPORT QWaylandBradientDecoration : public QWaylandAbstra
public:
QWaylandBradientDecoration();
protected:
- QMargins margins() const override;
+ QMargins margins(MarginsType marginsType = Full) const override;
void paint(QPaintDevice *device) override;
bool handleMouse(QWaylandInputDevice *inputDevice, const QPointF &local, const QPointF &global,Qt::MouseButtons b,Qt::KeyboardModifiers mods) override;
bool handleTouch(QWaylandInputDevice *inputDevice, const QPointF &local, const QPointF &global, Qt::TouchPointState state, Qt::KeyboardModifiers mods) override;
@@ -129,8 +129,11 @@ QRectF QWaylandBradientDecoration::minimizeButtonRect() const
(margins().top() - BUTTON_WIDTH) / 2, BUTTON_WIDTH, BUTTON_WIDTH);
}

-QMargins QWaylandBradientDecoration::margins() const
+QMargins QWaylandBradientDecoration::margins(MarginsType marginsType) const
{
+ if (marginsType == ShadowsOnly)
+ return QMargins();
+
return QMargins(3, 30, 3, 3);
}

diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
index 2666df2..8d8ac85 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
@@ -88,6 +88,7 @@ void QWaylandXdgSurface::Toplevel::applyConfigure()
&& !m_xdgSurface->m_window->display()->isKeyboardAvailable())
m_xdgSurface->m_window->display()->handleWindowDeactivated(m_xdgSurface->m_window);

+ m_xdgSurface->m_window->handleToplevelWindowTilingStatesChanged(m_toplevelStates);
m_xdgSurface->m_window->handleWindowStatesChanged(m_pending.states);

if (m_pending.size.isEmpty()) {
@@ -120,6 +121,7 @@ void QWaylandXdgSurface::Toplevel::xdg_toplevel_configure(int32_t width, int32_t
size_t numStates = states->size / sizeof(uint32_t);

m_pending.states = Qt::WindowNoState;
+ m_toplevelStates = QWaylandWindow::WindowNoState;

for (size_t i = 0; i < numStates; i++) {
switch (xdgStates[i]) {
@@ -132,6 +134,18 @@ void QWaylandXdgSurface::Toplevel::xdg_toplevel_configure(int32_t width, int32_t
case XDG_TOPLEVEL_STATE_FULLSCREEN:
m_pending.states |= Qt::WindowFullScreen;
break;
+ case XDG_TOPLEVEL_STATE_TILED_LEFT:
+ m_toplevelStates |= QWaylandWindow::WindowTiledLeft;
+ break;
+ case XDG_TOPLEVEL_STATE_TILED_RIGHT:
+ m_toplevelStates |= QWaylandWindow::WindowTiledRight;
+ break;
+ case XDG_TOPLEVEL_STATE_TILED_TOP:
+ m_toplevelStates |= QWaylandWindow::WindowTiledTop;
+ break;
+ case XDG_TOPLEVEL_STATE_TILED_BOTTOM:
+ m_toplevelStates |= QWaylandWindow::WindowTiledBottom;
+ break;
default:
break;
}
@@ -458,7 +472,7 @@ void QWaylandXdgSurface::xdg_surface_configure(uint32_t serial)
}

QWaylandXdgShell::QWaylandXdgShell(QWaylandDisplay *display, uint32_t id, uint32_t availableVersion)
- : QtWayland::xdg_wm_base(display->wl_registry(), id, qMin(availableVersion, 1u))
+ : QtWayland::xdg_wm_base(display->wl_registry(), id, qMin(availableVersion, 2u))
, m_display(display)
{
display->addRegistryListener(&QWaylandXdgShell::handleRegistryGlobal, this);
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
index 0c98be3..d791213 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
@@ -58,6 +58,7 @@

#include <QtWaylandClient/qtwaylandclientglobal.h>
#include <QtWaylandClient/private/qwaylandshellsurface_p.h>
+#include <QtWaylandClient/private/qwaylandwindow_p.h>

#include <QtCore/QSize>
#include <QtGui/QRegion>
@@ -69,7 +70,6 @@ class QWindow;
namespace QtWaylandClient {

class QWaylandDisplay;
-class QWaylandWindow;
class QWaylandInputDevice;
class QWaylandXdgShell;

@@ -123,6 +123,7 @@ private:
QSize size = {0, 0};
Qt::WindowStates states = Qt::WindowNoState;
} m_pending, m_applied;
+ QWaylandWindow::ToplevelWindowTilingStates m_toplevelStates = QWaylandWindow::WindowNoState;
QSize m_normalSize;

QWaylandXdgSurface *m_xdgSurface = nullptr;
28 changes: 17 additions & 11 deletions patch/sioyek_build_fix.patch
Original file line number Diff line number Diff line change
@@ -1,20 +1,26 @@
--- a/pdf_viewer_build_config.pro 2022-02-18 07:47:57.000000000 -0400
+++ b/pdf_viewer_build_config.pro 2022-03-07 17:50:49.489579924 -0400
@@ -5,9 +5,9 @@
@@ -6,7 +6,7 @@
zlib


-QT += core opengl gui widgets network 3dinput openglextensions
+QT += core opengl gui widgets openglextensions network

-QT += core opengl gui widgets network 3dinput
+QT += core opengl gui widgets network

greaterThan(QT_MAJOR_VERSION, 5){
QT += openglwidgets
@@ -17,7 +17,7 @@
}

CONFIG += c++17
-DEFINES += QT_3DINPUT_LIB QT_OPENGL_LIB QT_OPENGLEXTENSIONS_LIB QT_WIDGETS_LIB
+DEFINES += QT_OPENGL_LIB QT_OPENGLEXTENSIONS_LIB QT_WIDGETS_LIB QT_NETWORK_LIB


+DEFINES += QT_OPENGL_LIB QT_OPENGLEXTENSIONS_LIB QT_WIDGETS_LIB

CONFIG(non_portable){
@@ -72,7 +72,7 @@
DEFINES += NON_PORTABLE
@@ -96,7 +96,7 @@
}

isEmpty(PREFIX){
- PREFIX = /usr
+ PREFIX = /app
Expand Down Expand Up @@ -57,9 +63,9 @@
--- a/pdf_viewer/main_widget.cpp 2022-02-18 07:47:57.000000000 -0400
+++ b/pdf_viewer/main_widget.cpp 2022-03-07 18:09:25.807652975 -0400
@@ -14,7 +14,7 @@
#include <qboxlayout.h>
#include <qdatetime.h>
#include <qdesktopwidget.h>
#endif

-#include <qkeyevent.h>
+#include <QKeyEvent>
#include <qlabel.h>
Expand Down
Loading