Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package panini for openSUSE:Factory checked 
in at 2026-07-17 01:44:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/panini (Old)
 and      /work/SRC/openSUSE:Factory/.panini.new.24530 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "panini"

Fri Jul 17 01:44:52 2026 rev:5 rq:1366214 version:0.75.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/panini/panini.changes    2023-12-20 
21:03:46.493781610 +0100
+++ /work/SRC/openSUSE:Factory/.panini.new.24530/panini.changes 2026-07-17 
01:45:29.229308138 +0200
@@ -1,0 +2,7 @@
+Thu Jul 16 15:01:25 UTC 2026 - Michael Vetter <[email protected]>
+
+- Update to 0.75.0:
+  * Port to Qt6 (#18)
+  * Easily navigate to the next image in the directory via page up and page 
down keys
+
+-------------------------------------------------------------------

Old:
----
  v0.74.0.tar.gz

New:
----
  0.75.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ panini.spec ++++++
--- /var/tmp/diff_new_pack.pa3OLr/_old  2026-07-17 01:45:29.949332432 +0200
+++ /var/tmp/diff_new_pack.pa3OLr/_new  2026-07-17 01:45:29.953332567 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package panini
 #
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,17 +17,20 @@
 
 
 Name:           panini
-Version:        0.74.0
+Version:        0.75.0
 Release:        0
 Summary:        A tool for creating perspective views from panoramic and wide 
angle images
 License:        GPL-3.0-only
 Group:          Productivity/Graphics/Viewers
 URL:            https://github.com/lazarus-pkgs/panini
-Source:         
https://github.com/lazarus-pkgs/panini/archive/v%{version}.tar.gz
+Source:         
https://github.com/lazarus-pkgs/panini/archive/%{version}.tar.gz
 BuildRequires:  pkgconfig
-BuildRequires:  pkgconfig(Qt5Core)
-BuildRequires:  pkgconfig(Qt5Gui)
-BuildRequires:  pkgconfig(Qt5OpenGL)
+BuildRequires:  qt6-macros
+BuildRequires:  pkgconfig(Qt6Core)
+BuildRequires:  pkgconfig(Qt6Gui)
+BuildRequires:  pkgconfig(Qt6OpenGL)
+BuildRequires:  pkgconfig(Qt6OpenGLWidgets)
+BuildRequires:  pkgconfig(Qt6Widgets)
 BuildRequires:  pkgconfig(glu)
 BuildRequires:  pkgconfig(zlib)
 # Disable on Arm, since build fails
@@ -40,12 +43,11 @@
 %setup -q
 
 %build
-# use qmake macro is present (fedora)
-%{?qmake_qt5}%{?!qmake_qt5:qmake-qt5} PREFIX=%{buildroot}%{_prefix}/
-make %{?_smp_mflags}
+%qmake6 PREFIX=%{_prefix}
+%qmake6_build
 
 %install
-%make_install
+%qmake6_install
 
 %files
 %license LICENSE

++++++ v0.74.0.tar.gz -> 0.75.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panini-0.74.0/.github/FUNDING.yml 
new/panini-0.75.0/.github/FUNDING.yml
--- old/panini-0.74.0/.github/FUNDING.yml       2023-12-20 15:31:47.000000000 
+0100
+++ new/panini-0.75.0/.github/FUNDING.yml       2026-07-16 16:51:16.000000000 
+0200
@@ -1,7 +1,7 @@
 # These are supported funding model platforms
 
 github: jubalh
-patreon: jubalh
+patreon: #jubalh
 open_collective: # Replace with a single Open Collective username
 ko_fi: # Replace with a single Ko-fi username
 tidelift: # Replace with a single Tidelift platform-name/package-name e.g., 
npm/babel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panini-0.74.0/MSVS-project/panini.sln 
new/panini-0.75.0/MSVS-project/panini.sln
--- old/panini-0.74.0/MSVS-project/panini.sln   2023-12-20 15:31:47.000000000 
+0100
+++ new/panini-0.75.0/MSVS-project/panini.sln   1970-01-01 01:00:00.000000000 
+0100
@@ -1,20 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual C++ Express 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pvQt_1", 
"pvQt_1\pvQt_1.vcproj", "{A70594CC-2C31-4F76-AC81-DB3B0475F57E}"
-EndProject
-Global
-       GlobalSection(SolutionConfigurationPlatforms) = preSolution
-               Debug|Win32 = Debug|Win32
-               Release|Win32 = Release|Win32
-       EndGlobalSection
-       GlobalSection(ProjectConfigurationPlatforms) = postSolution
-               {A70594CC-2C31-4F76-AC81-DB3B0475F57E}.Debug|Win32.ActiveCfg = 
Debug|Win32
-               {A70594CC-2C31-4F76-AC81-DB3B0475F57E}.Debug|Win32.Build.0 = 
Debug|Win32
-               {A70594CC-2C31-4F76-AC81-DB3B0475F57E}.Release|Win32.ActiveCfg 
= Release|Win32
-               {A70594CC-2C31-4F76-AC81-DB3B0475F57E}.Release|Win32.Build.0 = 
Release|Win32
-       EndGlobalSection
-       GlobalSection(SolutionProperties) = preSolution
-               HideSolutionNode = FALSE
-       EndGlobalSection
-EndGlobal
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panini-0.74.0/MSVS-project/pvQt_1/pvQt_1.vcproj 
new/panini-0.75.0/MSVS-project/pvQt_1/pvQt_1.vcproj
--- old/panini-0.74.0/MSVS-project/pvQt_1/pvQt_1.vcproj 2023-12-20 
15:31:47.000000000 +0100
+++ new/panini-0.75.0/MSVS-project/pvQt_1/pvQt_1.vcproj 1970-01-01 
01:00:00.000000000 +0100
@@ -1,255 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-       ProjectType="Visual C++"
-       Version="9.00"
-       Name="panini"
-       ProjectGUID="{A70594CC-2C31-4F76-AC81-DB3B0475F57E}"
-       Keyword="MakeFileProj"
-       TargetFrameworkVersion="196613"
-       >
-       <Platforms>
-               <Platform
-                       Name="Win32"
-               />
-       </Platforms>
-       <ToolFiles>
-       </ToolFiles>
-       <Configurations>
-               <Configuration
-                       Name="Debug|Win32"
-                       OutputDirectory="..\bin"
-                       IntermediateDirectory="..\build"
-                       ConfigurationType="0"
-                       >
-                       <Tool
-                               Name="VCNMakeTool"
-                               BuildCommandLine="cd ..\.. &#x0D;&#x0A;make 
debug"
-                               ReBuildCommandLine="cd ..\.. &#x0D;&#x0A;qmake 
panini.pro &#x0D;&#x0A;make clean &#x0D;&#x0A;make debug 
&#x0D;&#x0A;&#x0D;&#x0A;"
-                               CleanCommandLine="cd ..\.. &#x0D;&#x0A;make 
clean"
-                               Output=""
-                               PreprocessorDefinitions="WIN32;_DEBUG"
-                               
IncludeSearchPath="C:\Qt\4.4.1\include;C:\MinGW\include;C:\MinGW\GnuWin32\include"
-                               ForcedIncludes=""
-                               AssemblySearchPath=""
-                               ForcedUsingAssemblies=""
-                               CompileAsManaged=""
-                       />
-               </Configuration>
-               <Configuration
-                       Name="Release|Win32"
-                       OutputDirectory="..\bin"
-                       IntermediateDirectory="..\build"
-                       ConfigurationType="0"
-                       >
-                       <Tool
-                               Name="VCNMakeTool"
-                               BuildCommandLine="cd ..\.. &#x0D;&#x0A;make 
release"
-                               ReBuildCommandLine="cd ..\.. &#x0D;&#x0A;qmake 
panini.pro &#x0D;&#x0A;make clean &#x0D;&#x0A;make release &#x0D;&#x0A;"
-                               CleanCommandLine="cd ..\.. &#x0D;&#x0A;make 
clean"
-                               Output=""
-                               PreprocessorDefinitions="WIN32;NDEBUG"
-                               
IncludeSearchPath="C:\Qt\4.4.1\include;C:\MinGW\include;C:\MinGW\GnuWin32\include"
-                               ForcedIncludes=""
-                               AssemblySearchPath=""
-                               ForcedUsingAssemblies=""
-                               CompileAsManaged=""
-                       />
-               </Configuration>
-       </Configurations>
-       <References>
-       </References>
-       <Files>
-               <Filter
-                       Name="Source Files"
-                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
-                       
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
-                       >
-                       <File
-                               RelativePath="..\..\src\About.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\GLwindow.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\main.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\MainWindow.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\panocylinder.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\panosphere.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\panosurface.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\pictureTypes.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\picTypeDialog.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\pvQt_QTVR.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\pvQtPic.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\pvQtView.cpp"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\TurnDialog.cpp"
-                               >
-                       </File>
-               </Filter>
-               <Filter
-                       Name="Header Files"
-                       Filter="h;hpp;hxx;hm;inl;inc;xsd"
-                       
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
-                       >
-                       <File
-                               RelativePath="..\..\src\About.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\GLwindow.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\MainWindow.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\panocylinder.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\panosphere.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\panosurface.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\picTypeDialog.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\pvQt_QTVR.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\pvQtMouseModes.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\pvQtPic.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\build\PvQtVersion.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\pvQtView.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\SVNnoVersion.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\src\TurnDialog.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\build\ui_About.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\build\ui_mainwindow.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\build\ui_picTypeDialog.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\build\ui_ShowText.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\build\ui_TurnDialog.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\Version0.h"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\Version1.h"
-                               >
-                       </File>
-               </Filter>
-               <Filter
-                       Name="Resource Files"
-                       
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
-                       
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
-                       >
-                       <File
-                               RelativePath="..\..\ui\About.ui"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\ui\mainwindow.ui"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\ui\picTypeDialog.ui"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\ui\ShowText.ui"
-                               >
-                       </File>
-                       <File
-                               RelativePath="..\..\ui\TurnDialog.ui"
-                               >
-                       </File>
-               </Filter>
-               <File
-                       RelativePath="..\..\panini-0.62-release.txt"
-                       >
-               </File>
-               <File
-                       RelativePath="..\..\panini-build.txt"
-                       >
-               </File>
-               <File
-                       RelativePath="..\..\panini-usage.txt"
-                       >
-               </File>
-               <File
-                       RelativePath="..\..\panini.pro"
-                       >
-               </File>
-       </Files>
-       <Globals>
-       </Globals>
-</VisualStudioProject>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panini-0.74.0/NEWS new/panini-0.75.0/NEWS
--- old/panini-0.74.0/NEWS      2023-12-20 15:31:47.000000000 +0100
+++ new/panini-0.75.0/NEWS      2026-07-16 16:51:16.000000000 +0200
@@ -1,3 +1,11 @@
+#    Panini 0.75.0    Release Notes    16 July 2026
+
+This is a Linux only release.
+
+Changes:
+* Port to Qt6
+* Easily navigate to the next image in the directory via page up and page down 
keys
+
 #    Panini 0.74.0    Release Notes    20 December 2023
 
 This is a Linux only release.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panini-0.74.0/README.md new/panini-0.75.0/README.md
--- old/panini-0.74.0/README.md 2023-12-20 15:31:47.000000000 +0100
+++ new/panini-0.75.0/README.md 2026-07-16 16:51:16.000000000 +0200
@@ -4,24 +4,40 @@
 
 ## Installation
 See [INSTALL](INSTALL.md).
+
 ## Dependencies
 
-* Qt5
+* Qt6 (specifically `Core`, `Gui`, `Widgets`, `OpenGL`, and `OpenGLWidgets`)
 * zlib
 
 ## Get source code
 
-```
+```bash
 git clone https://github.com/lazarus-pkgs/panini
 cd panini
 ```
 
 ## Compile
 
-```
-qmake #qmake-qt5 on some systems
+```bash
+qmake6 panini.pro
 make
 ./panini
 ```
 
 Also see: [BUILD](BUILD.md).
+
+## Troubleshooting / Wayland Compatibility
+
+If you are running on a Wayland-based desktop session and encounter dialog 
rendering or window management issues with Qt6, you can force the application 
to run via XWayland (X11 compatibility layer) by setting the `QT_QPA_PLATFORM` 
environment variable:
+
+```bash
+QT_QPA_PLATFORM=xcb ./panini
+```
+
+## Keyboard Shortcuts
+
+Panini supports the following standard keyboard shortcuts for file browsing 
within the same folder:
+
+* **Page Down**: Go to the **next** image file in the current directory.
+* **Page Up**: Go to the **previous** image file in the current directory.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panini-0.74.0/panini.pro new/panini-0.75.0/panini.pro
--- old/panini-0.74.0/panini.pro        2023-12-20 15:31:47.000000000 +0100
+++ new/panini-0.75.0/panini.pro        2026-07-16 16:51:16.000000000 +0200
@@ -1,13 +1,13 @@
 ## qmake project for panini ##
 TEMPLATE = app
-VERSION = 0.73.0
+VERSION = 0.75.0
 TARGET = panini
 CONFIG += debug_and_release
-QT = gui core opengl
+QT = gui core opengl openglwidgets widgets
 LIBS += -lz -lGLU
 
-# We want Qt5 now
-lessThan(QT_MAJOR_VERSION, 5): error("requires Qt 5")
+# We want Qt6 now
+lessThan(QT_MAJOR_VERSION, 6): error("requires Qt 6")
 
 ## Directories ##
 OBJECTS_DIR = build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panini-0.74.0/src/GLwindow.cpp 
new/panini-0.75.0/src/GLwindow.cpp
--- old/panini-0.74.0/src/GLwindow.cpp  2023-12-20 15:31:47.000000000 +0100
+++ new/panini-0.75.0/src/GLwindow.cpp  2026-07-16 16:51:16.000000000 +0200
@@ -30,6 +30,7 @@
 
 #include <QtCore>
 #include <QFileDialog>
+#include <QDir>
 #include "GLwindow.h"
 #include "pvQtView.h"
 #include "pvQt_QTVR.h"
@@ -165,7 +166,7 @@
             if( n > 1 ){
                 ok = loadTypedFiles( "cube", paths );
             } else { // add or replace one cube face
-                QPoint pnt = event->pos();
+                QPoint pnt = event->position().toPoint();
                 pvQtPic::PicFace pf = glview->pickFace( pnt );
                 ok = pvpic->setFaceImage( pf, paths[0] );
                 if( ok ){
@@ -249,7 +250,7 @@
     msg += tr("Video: ") + glview->OpenGLHardware() + QString("\n");
     msg += tr("Limits: ") + glview->OpenGLLimits() + QString("\n");
     aboutbox->setInfo( msg );
-    aboutbox->show();
+    aboutbox->exec();
 }
 
 // relay window resize to the GL widget
@@ -929,3 +930,47 @@
         }
     }
 }
+
+void GLwindow::loadNextPicture() {
+    navigateDirectory(1);
+}
+
+void GLwindow::loadPreviousPicture() {
+    navigateDirectory(-1);
+}
+
+void GLwindow::navigateDirectory(int direction) {
+    if (loaddir.isEmpty() || loadname.isEmpty()) {
+        return;
+    }
+
+    QDir dir(loaddir);
+    QStringList filters;
+    filters << "*.jpg" << "*.jpeg" << "*.png" << "*.tif" << "*.tiff";
+    dir.setNameFilters(filters);
+    dir.setFilter(QDir::Files | QDir::NoSymLinks);
+    dir.setSorting(QDir::Name | QDir::IgnoreCase);
+
+    QStringList files = dir.entryList();
+    if (files.isEmpty()) {
+        return;
+    }
+
+    int index = files.indexOf(loadname);
+    if (index == -1) {
+        // Current file not found in filters (e.g., if it's a .mov)
+        dir.setNameFilters(QStringList());
+        files = dir.entryList();
+        index = files.indexOf(loadname);
+    }
+
+    if (index == -1) {
+        return;
+    }
+
+    int nextIndex = (index + direction + files.count()) % files.count();
+    QString nextFile = files.at(nextIndex);
+    QString absolutePath = dir.absoluteFilePath(nextFile);
+
+    loadPictureFiles(QStringList(absolutePath));
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panini-0.74.0/src/GLwindow.h 
new/panini-0.75.0/src/GLwindow.h
--- old/panini-0.74.0/src/GLwindow.h    2023-12-20 15:31:47.000000000 +0100
+++ new/panini-0.75.0/src/GLwindow.h    2026-07-16 16:51:16.000000000 +0200
@@ -49,6 +49,8 @@
     void set_surface( int surf );
     void turn90( int t );
     void setCubeLimit( int );
+    void loadNextPicture();
+    void loadPreviousPicture();
     // from picType dialog...
     void picTypeChanged( int t );
     void hFovChanged( double h );
@@ -66,6 +68,7 @@
     bool QTVR_file( QString name );
     bool choosePictureFiles( const char * picTypeName = 0 );
     bool loadPictureFiles( QStringList names );
+    void navigateDirectory(int direction);
     const QStringList picTypeDescrs();
     const char * askPicType( QStringList files,
                              const char * ptyp = 0 );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panini-0.74.0/src/MainWindow.cpp 
new/panini-0.75.0/src/MainWindow.cpp
--- old/panini-0.74.0/src/MainWindow.cpp        2023-12-20 15:31:47.000000000 
+0100
+++ new/panini-0.75.0/src/MainWindow.cpp        2026-07-16 16:51:16.000000000 
+0200
@@ -17,7 +17,7 @@
  * 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
-#include <QtGui>
+#include <QtWidgets>
 #include <QErrorMessage>
 #include <QSettings>
 #include <QMessageBox>
@@ -181,13 +181,25 @@
     ev->accept();
 }
 
+void MainWindow::keyPressEvent( QKeyEvent * ev ){
+    if( ev->key() == Qt::Key_PageDown ){
+        glwindow->loadNextPicture();
+        ev->accept();
+        return;
+    } else if( ev->key() == Qt::Key_PageUp ){
+        glwindow->loadPreviousPicture();
+        ev->accept();
+        return;
+    }
+    QMainWindow::keyPressEvent( ev );
+}
+
 void MainWindow::showStatus( QString msg ){
     statusBar()->showMessage(msg);
 }
 
 void MainWindow::verify( int i ){
-    QString s;
-    showStatus( s.sprintf("verify: %d", i) );
+    showStatus( QString::asprintf("verify: %d", i) );
 }
 
 void MainWindow::showTitle( QString msg ){
@@ -316,7 +328,7 @@
 }
 
 void MainWindow::on_actionMouse_modes_triggered(){
-    pmm->show();
+    pmm->exec();
 }
 
 /*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panini-0.74.0/src/MainWindow.h 
new/panini-0.75.0/src/MainWindow.h
--- old/panini-0.74.0/src/MainWindow.h  2023-12-20 15:31:47.000000000 +0100
+++ new/panini-0.75.0/src/MainWindow.h  2026-07-16 16:51:16.000000000 +0200
@@ -83,6 +83,7 @@
 protected:
     virtual void resizeEvent( QResizeEvent * ev );
     virtual void closeEvent( QCloseEvent * ev );
+    virtual void keyPressEvent( QKeyEvent * ev ) override;
     QErrorMessage * errorMsgHandler;
 private:
     GLwindow * glwindow;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panini-0.74.0/src/pvQtPic.h 
new/panini-0.75.0/src/pvQtPic.h
--- old/panini-0.74.0/src/pvQtPic.h     2023-12-20 15:31:47.000000000 +0100
+++ new/panini-0.75.0/src/pvQtPic.h     2026-07-16 16:51:16.000000000 +0200
@@ -74,7 +74,7 @@
 #ifndef __PVQTPIC_H__
 #define __PVQTPIC_H__
 
-#include <QtGui>
+#include <QtWidgets>
 
 #define PVQT_PIC_FACE_FORMAT  QImage::Format_ARGB32
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panini-0.74.0/src/pvQtView.cpp 
new/panini-0.75.0/src/pvQtView.cpp
--- old/panini-0.74.0/src/pvQtView.cpp  2023-12-20 15:31:47.000000000 +0100
+++ new/panini-0.75.0/src/pvQtView.cpp  2026-07-16 16:51:16.000000000 +0200
@@ -20,7 +20,9 @@
 
 #include "pvQtView.h"
 
-#include <QtOpenGL/QtOpenGL>
+#include <QOpenGLContext>
+#include <QSurfaceFormat>
+#include <QOpenGLFramebufferObject>
 #ifdef __APPLE__
 #include "glext.h"
 #include "glu.h"
@@ -28,7 +30,6 @@
 #include <GL/glext.h>
 #include <GL/glu.h>
 #endif
-#include <QGLFramebufferObject>
 
 #include <cmath>
 
@@ -117,9 +118,11 @@
  * proper cube map display when the default format is used.
 */
 pvQtView::pvQtView(QWidget *parent)
-    : QGLWidget( QGLFormat( QGL::AlphaChannel ),
-                 parent)
+    : QOpenGLWidget(parent)
 {
+    QSurfaceFormat format;
+    format.setAlphaBufferSize(8);
+    setFormat(format);
     // set up mouse control timer
     mTimer.setInterval( 50 );
     mTimer.setSingleShot( true );
@@ -185,13 +188,15 @@
 
   The minimum feasible OpenGL version is 1.2
 */
-    unsigned int vf = QGLFormat::openGLVersionFlags();
-    if( vf & QGLFormat::OpenGL_Version_1_2 ){
-        if( vf & QGLFormat::OpenGL_Version_1_3 ){
+    QSurfaceFormat contextFormat = QOpenGLContext::currentContext()->format();
+    int major = contextFormat.majorVersion();
+    int minor = contextFormat.minorVersion();
+    if( major > 1 || (major == 1 && minor >= 2) ){
+        if( major > 1 || minor >= 3 ){
             cubeMap = true;
-            if( vf & QGLFormat::OpenGL_Version_1_5 ){
+            if( major > 1 || minor >= 5 ){
                 vertBuf = true;
-                if( vf & QGLFormat::OpenGL_Version_2_0 ) {
+                if( major >= 2 ) {
                     texPwr2 = false;
                 }
             }
@@ -332,7 +337,7 @@
                 setFOV( normalizeAngle( izoom, 1, minFOV, maxFOV ) );
             }
         }
-    } else if( mb == Qt::LeftButton + Qt::RightButton ){
+    } else if( mb == (Qt::LeftButton | Qt::RightButton) ){
         if( mk & Qt::ShiftModifier ){
             // hFov, vFov
             if( !( mk & Qt::AltModifier ) ) xtexmag -= 0.00225 * dx;
@@ -351,14 +356,14 @@
         }
     }
 
-    updateGL();
+    update();
     showview();
     mTimer.start();
 }
 
 // zoom on scroll wheel
 void pvQtView::wheelEvent(QWheelEvent *event){
-    int d = event->delta();
+    int d = event->angleDelta().y();
     if( d == 0 ){
         event->ignore();
         return;
@@ -436,7 +441,7 @@
         eyex -= 0.01 * dp;
     }
     clipEyePosition();
-    updateGL();
+    update();
     showview();
 }
 
@@ -448,7 +453,7 @@
         eyey -= 0.01 * dp;
     }
     clipEyePosition();
-    updateGL();
+    update();
     showview();
 }
 
@@ -496,7 +501,7 @@
         double a = normalizeAngle( idangl, stp, 0, MAXDANGLE );
         setDist( tan( RAD( a )) );
     }
-    updateGL();
+    update();
     showview();
 }
 
@@ -505,13 +510,13 @@
 **/
 void pvQtView::step_hfov( int dp ){
     framex = KLIP( framex + 10 * fwf * dp, -1, 1 );
-    updateGL();
+    update();
     showview();
 }
 
 void pvQtView::step_vfov( int dp ){
     framey = KLIP( framey + 10 * fhf * dp, -1, 1 );
-    updateGL();
+    update();
     showview();
 }
 
@@ -530,7 +535,7 @@
         curr_ipt = i;
         makeSphere( theScreen );               // set & display proj
         setTexMag( xtexmag, ytexmag ); // display fovs
-        updateGL();
+        update();
     }
 }
 
@@ -540,14 +545,14 @@
     setPicType( picType );
     initView();
     makeSphere( theScreen );
-    updateGL();
+    update();
     showview();
 }
 
 void pvQtView::home_view(){
     panAngle = tiltAngle = spinAngle = 0;
     ipan = itilt = ispin = 0;
-    updateGL();
+    update();
     showview();
 }
 
@@ -555,7 +560,7 @@
     eyex = eyey = 0;
     fcompx = fcompy = 0;
     framex = framey = 0;               // also reset framing shifts
-    updateGL();
+    update();
     showview();
 }
 
@@ -563,7 +568,7 @@
 void pvQtView::super_fish(){   // max angular view
     setDist( 1.07 );
     setZoom( int(16 * maxFOV) );
-    updateGL();
+    update();
     showview();
 }
 
@@ -572,7 +577,7 @@
     if( v == 1 ) d = 1;
     else if( v == 2 ) d = MAXDIST;
     setDist( d );
-    updateGL();
+    update();
     showview();
 }
 
@@ -584,7 +589,7 @@
     turnRoll = ( roll < -45 ? -45 : roll > 45 ? 45 : roll );
     turnPitch = ( pitch < -90 ? -90 : pitch > 90 ? 90 : pitch );
     turnYaw = ( yaw < -180 ? -180 : yaw > 180 ? 180 : yaw );
-    updateGL();
+    update();
     showview();
     emit reportTurn( turn90, turnRoll, turnPitch, turnYaw );
 }
@@ -595,10 +600,10 @@
 void pvQtView::showview(){
     QString s;
     if( recenter ){
-        s.sprintf("Y%.1f P%.1f R%.1f V%.1f eD%.2f eA(%.1f, %.1f) fS(%.2f, 
%.2f)",
+        s = QString::asprintf("Y%.1f P%.1f R%.1f V%.1f eD%.2f eA(%.1f, %.1f) 
fS(%.2f, %.2f)",
                   panAngle, tiltAngle, spinAngle, vFOV, eyeDistance, -hangle, 
-vangle, framex, framey);
     } else {
-        s.sprintf("Y%.1f P%.1f R%.1f V%.1f eD%.2f eS(%.2f, %.2f) fS(%.2f, 
%.2f)",
+        s = QString::asprintf("Y%.1f P%.1f R%.1f V%.1f eD%.2f eS(%.2f, %.2f) 
fS(%.2f, %.2f)",
                   panAngle, tiltAngle, spinAngle, vFOV, eyeDistance, eyex, 
eyey, framex, framey);
     }
     emit reportView( s );
@@ -721,7 +726,7 @@
     panAngle = normalizeAngle(angle, panstep, minpan, maxpan);
     if (angle != ipan) {
         ipan = angle;
-        updateGL();
+        update();
         showview();
     }
 }
@@ -731,7 +736,7 @@
     tiltAngle = normalizeAngle(angle, tiltstep, mintilt, maxtilt);
     if (angle != itilt) {
         itilt = angle;
-        updateGL();
+        update();
         showview();
     }
 }
@@ -741,7 +746,7 @@
     spinAngle = normalizeAngle(angle, spinstep, -180, 180);
     if (angle != ispin) {
         ispin = angle;
-        updateGL();
+        update();
         showview();
     }
 }
@@ -752,7 +757,7 @@
     if (angle != izoom) {
         izoom = angle;
         setFOV(a);
-        updateGL();
+        update();
         showview();
     }
 }
@@ -793,7 +798,7 @@
     // abort if the OpenGL version is insufficient
     if( !OpenGLOK() ) return;
 
-    qglClearColor(Qt::black);
+    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
     glShadeModel(GL_SMOOTH);
     glEnable(GL_CULL_FACE);
 
@@ -817,9 +822,7 @@
     glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
     // 2d maps...
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, 
GL_LINEAR_MIPMAP_LINEAR);
-
-    glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
 
     float anisotropy = 0.0f;
     glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &anisotropy);
@@ -1067,7 +1070,7 @@
     fwf = 2.0 / width; fhf = 2.0 / height;
     portAR = (double)Width / (double)Height;
 
-    updateGL();
+    update();
     showview();  // displays settings
 }
 
@@ -1186,6 +1189,7 @@
         thePic->fitFaceToImage( maxdims, texPwr2 );
 
         makeCurrent();
+        glBindTexture( textgt, texname );
         glPixelStorei(GL_UNPACK_ALIGNMENT, 4);  // QImage row alignment
 
         if( picType == pvQtPic::cub ){
@@ -1289,6 +1293,7 @@
     if( curr_pt != pvQtPic::cub ) return;
 
     makeCurrent();
+    glBindTexture( textgt, texname );
     glPixelStorei(GL_UNPACK_ALIGNMENT, 4);  // QImage row alignment
     QImage * p = thePic->FaceImage( face );
     if( p ){
@@ -1299,7 +1304,7 @@
         delete p;
     }
 
-    updateGL();
+    update();
     showview();
 
 }
@@ -1314,11 +1319,10 @@
 {
     bool done = false;
     int W = size.width(), H = size.height();
-    if( ( W != Width || H != Height )
-            && QGLFramebufferObject::hasOpenGLFramebufferObjects() ){
+    if( ( W != Width || H != Height ) ){
         makeCurrent();
         // create private frame buffer
-        QGLFramebufferObject fbo( W, H );
+        QOpenGLFramebufferObject fbo( W, H );
         bool ok = fbo.isValid();
         // try to render and save
         if( ok && fbo.bind() ){
@@ -1378,7 +1382,7 @@
         }
     }
     povly = ovl;
-    updateGL();
+    update();
     return true;
 }
 
@@ -1390,6 +1394,6 @@
     ivangl = -itilt;
     eyex = eyey = eyez = 0;
     setDist( 0 );
-    updateGL();
+    update();
     showview();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panini-0.74.0/src/pvQtView.h 
new/panini-0.75.0/src/pvQtView.h
--- old/panini-0.74.0/src/pvQtView.h    2023-12-20 15:31:47.000000000 +0100
+++ new/panini-0.75.0/src/pvQtView.h    2026-07-16 16:51:16.000000000 +0200
@@ -30,12 +30,12 @@
 #ifndef PVQTVIEW_H
 #define PVQTVIEW_H
 
-#include <QtOpenGL/QGLWidget>
+#include <QOpenGLWidget>
 #include "pvQtPic.h"
 #include "panosphere.h"
 #include "panocylinder.h"
 
-class pvQtView : public QGLWidget
+class pvQtView : public QOpenGLWidget
 {
     Q_OBJECT
 public:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/panini-0.74.0/ui/About.ui 
new/panini-0.75.0/ui/About.ui
--- old/panini-0.74.0/ui/About.ui       2023-12-20 15:31:47.000000000 +0100
+++ new/panini-0.75.0/ui/About.ui       2026-07-16 16:51:16.000000000 +0200
@@ -34,9 +34,9 @@
    <property name="geometry">
     <rect>
      <x>30</x>
-     <y>150</y>
+     <y>165</y>
      <width>371</width>
-     <height>151</height>
+     <height>135</height>
     </rect>
    </property>
    <property name="font">
@@ -79,7 +79,7 @@
     <rect>
      <x>160</x>
      <y>50</y>
-     <width>191</width>
+     <width>250</width>
      <height>41</height>
     </rect>
    </property>
@@ -131,8 +131,8 @@
     <rect>
      <x>160</x>
      <y>90</y>
-     <width>211</width>
-     <height>41</height>
+     <width>250</width>
+     <height>70</height>
     </rect>
    </property>
    <property name="font">
@@ -144,11 +144,14 @@
     </font>
    </property>
    <property name="text">
-    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;© 2008 - 2009 Thomas 
Sharpless&lt;br/&gt;© 2017 - 2019 Michael 
Vetter&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;© 2008 - 2009 Thomas 
Sharpless&lt;br/&gt;© 2017 - 2026 Michael Vetter&lt;/p&gt;&lt;p&gt;&lt;a 
href=&quot;https://github.com/sponsors/jubalh&quot;&gt;Donate to Panini 
development&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
    </property>
    <property name="textFormat">
     <enum>Qt::RichText</enum>
    </property>
+   <property name="openExternalLinks">
+    <bool>true</bool>
+   </property>
   </widget>
   <widget class="QLabel" name="VersionLabel">
    <property name="geometry">

Reply via email to